Как выполнить поиск по шаблону в зашифрованном тексте?

У нас есть веб-сайт с множеством пользователей, и из-за проблем с соответствием PCI нам приходится хранить их имена в зашифрованном виде (мы используем иглобрюх). Теперь нам нужна функция поиска подстановочных знаков по их именам в панели администратора, которую мы не можем расшифровать способом «в запросе».

Какие общие решения существуют для решения этой проблемы?


person inteloid    schedule 15.12.2011    source источник


Ответы (3)


Я могу придумать два возможных подхода.

Первый работает там, где сами имена не секретны, а связанные с ними данные. Вы можете настроить отдельный поисковый индекс:

Name                 Record Number
----                 -------------
John Q. Public       12345
Hector H. Suarez     54321
Katherine T. Carson  98712

Выполните поиск по индексу, чтобы найти соответствующий номер записи. Найдите и расшифруйте эту конкретную запись.

Второй — для случаев, когда сами имена являются секретными. По сути, относитесь к именам как к паролю: хешируйте каждое имя криптографически безопасным хешем, например SHA-256. Вы не сможете использовать соль в этом случае, потому что она для поиска. Вам также может понадобиться предварительно обработать поисковые запросы, поскольку «John Q. Public» и «John Q Public» (без точки) будут иметь очень разные значения. Этот поисковый индекс выглядит так:

Hashed Name          Record Number
-----------          -------------
1A2BFF68C ... CAF4   12345
5820BAA5F ... 67FA   54321
2039F288A ... 9BC2   98712

Для каждого поиска вы хэшируете имя и ищете этот хэш. Снова извлеките и расшифруйте соответствующую запись. Вы не можете выполнять поиск по частичному имени, например, «получить всех Смитов», если вы не готовы настроить ряд подобных индексов для всех основных возможностей поиска.

person rossum    schedule 15.12.2011
comment
Спасибо за ваш ответ. Второй подход не сработает, потому что он не извлечет всех Смитов, и что касается первого, я тоже думал об этом, теперь я жду ответа, чтобы посмотреть, все ли в порядке для материала PCI, буду держать в курсе. Спасибо еще раз. - person inteloid; 16.12.2011
comment
Вы можете получить всех Смитов, если предварительно подготовите хэш-индекс только по фамилии. Поиск будет ограничен теми полями, для которых вы уже подготовили индексы. Поиск в произвольной форме/подстановочных знаках будет невозможен. - person rossum; 16.12.2011

вы используете систему индексации, такую ​​как Lucene, индексируете каждый документ (расшифрованный) и выполняете поиск по этому индексу.

person belgther    schedule 15.12.2011
comment
Это противоречит требованиям PCI, потому что все они расшифрованы в Lucene. - person inteloid; 15.12.2011
comment
зашифровать базу данных lucene с помощью того же ключа, а расшифровать только при необходимости? - person Maarten Bodewes; 15.12.2011

Внимательно прочитайте раздел PCI-DSS под названием «Информация о применении PCI DSS» в PCI DSS версии 2.0.

Прочитав это, вы должны понять, что «требования PCI DSS 3.3 и 3.4 применяются только к PAN». Это может быть вашим обходным путем, если вам не нужно шифровать данные, кроме PAN, что означает, что имена могут храниться в виде простого текста.

Это не обязательно лучшая практика, но ее следует учитывать, если вам абсолютно необходимо иметь возможность поиска по шаблону по тексту.

person dfbpdave    schedule 30.01.2012