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