С уникальной IV, вы должны расшифровать каждую запись, чтобы соответствовать по зашифрованному содержимому, поскольку, как вы знаете, вы получаете другое значение каждый раз, когда вы шифруете один и тот же.
Предполагая, что это неприемлемо (это было бы хорошо на крошечной таблице, но не на чем-либо с приличным количеством записей), одним из вариантов было бы хэш-значение и сохранение хеша в базе данных, в отдельном колонка. Вы будете искать хеш, и вы расшифруете только подходящую запись (ы), чтобы подтвердить, что это действительно соответствие.
Проблема с хэшированием того, что вы шифруете, также заключается в том, что большинство вещей, которые стоит зашифровать (кредитные карты, номера счетов и т. Д.), Имеют только фиксированное количество возможных входов. Даже с уникальной солью, прикрепленной к хэшу, хеширование плохо на кредитных карточках, например, потому что есть только Х миллиард или триллион или любые возможные номера карт, поэтому, если у вас есть соль, хэш и приличный процессор, вы можете заново обработать номер карты за достаточно короткое время.
Если вы работаете с чем-то с большим количеством возможных входов, это решение может работать.
Другой альтернативой является то, что если есть зашифрованные данные, которые являются разумно уникальными, но не обязательно секретными (последний-4 для номера кредитной карты, например), вы можете сохранить эту часть в открытом тексте и использовать чтобы отфильтровать ваш большой набор данных в очень небольшой набор результатов, а затем расшифровать каждую запись в этом наборе результатов, чтобы сравнить ее с вашими критериями поиска.
Хорошее боковое мышление. Таким образом, решение хэширования может хорошо работать для адресов электронной почты. Но разве общий IV для этого столбца не был бы столь же безопасным по той же причине? – GuyB
Я не специалист по этому вопросу, просто узнал из того, что я читал за эти годы. Но мое понимание - основная причина, связанная со статикой IV, заключается в том, что если злоумышленник дважды видит одно и то же зашифрованное сообщение, они будут знать, что это тот же самый открытый текст (что, конечно, верно и для хэша). Но я не видел ничего, что говорит, что статический IV предоставляет злоумышленнику средства для дешифрования других сообщений. Так что, если это так, то я бы сказал, что вы правы, что статический IV не отличается от динамического IV + хеша. –