Я могу придумать два возможных подхода.
Первый работает там, где сами имена не секретны, а связанные с ними данные. Вы можете настроить отдельный поисковый индекс:
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