Как зашифровать Astring в nodeJs, которые должны использоваться в качестве индекса

Я разрабатываю микросервисную архитектуру с использованием nodeJs и mongoDb. У меня есть сценарий сохранения номера водительского удостоверения, который также используется для проверки пользователя. Теперь, поскольку номер DL равен PII, я не хочу сохранять строку как есть, я хочу зашифровать ее перед сохранением. Я могу использовать логику шифрования для генерации общей зашифрованной строки каждый раз, поэтому я могу зашифровать номер DL и выполнить поиск в БД. Но я беспокоюсь о том, что хакеры могут расшифровать и получить все номера DL, если они знают логику шифрования для одного. Может кто-нибудь предложить мне лучший подход для такого случая использования?

1 ответ

На мгновение игнорируя индекс, кажется, что лучший подход - это хэшировать номер лицензии с использованием ключевого хэша и сохранять хэш. Это похоже на симметричное шифрование в том, что вам нужно держать в секрете ключ. Тем не менее, это односторонний путь, поэтому злоумышленникам, которые получают секрет, все равно придется перебирать каждую запись, чтобы получить номер.

Если ключ скомпрометирован, в зависимости от схемы номеров лицензий, перебор каждого номера по сложности будет варьироваться от простого к тривиальному. Но это лучше, чем открытый текст.

Однако, если вам действительно нужно это как индекс, у вас есть то, что кажется конфликтующим приоритетами. Я передам кому-то еще, я не знаю много об индексации БД.

Если бы это был я, и у меня было бы свободное время, я бы настроил одну таблицу с хэшами и одну таблицу с открытым текстом лицензии в качестве индекса. Добавьте 10 миллионов строк (или некоторый потолок, который вам подходит) тестовых данных и профилируйте несколько тысяч случайных поисков каждого из них.

Другие вопросы по тегам