Идеальный шифр для сообщений длиной n битов - это перестановка 2 n последовательностей n битов, выбран случайным образом в 2 n ! таких перестановок. «Ключ» - это описание того, какая перестановка была выбрана.
Предполагается, что защищенный блочный шифр неотличим от идеального шифра, а n - размер блока. Для AES n = 128 (то есть 16 байтов). AES должен быть безопасным блочным шифром.
Если все ваши секреты имеют длину ровно 16 байтов (или менее 16 байтов, с некоторыми соглашениями о заполнении, чтобы однозначно расширить их до 16 байтов), тогда вам нужен идеальный шифр, и AES «как сам по себе» должен подойти. , В обычных реализациях AES, в которых требуется применять заполнение и обрабатывать произвольно длинные потоки, вы можете получить одноблочное шифрование, запросив режим ECB или режим CBC с нулевым IV.
Все проблемы, связанные с IV, и то, почему режимы цепочки, такие как CBC, были необходимы в первую очередь, связаны с многоблочными сообщениями. AES шифрует 16-байтовые сообщения (не больше, не меньше): режимы цепочки предназначены для эмуляции идеального шифра для более длинных сообщений. Если в вашем приложении все сообщения имеют длину ровно 16 байтов (или они короче, но вы добавляете заполнение), то вам просто нужен «сырой» AES; и фиксированный IV - достаточно близкая эмуляция необработанного AES.
Обратите внимание на следующее:
Если вы храните зашифрованные элементы в базе данных и вам требуется уникальность на протяжении всего срока службы вашего приложения, то ваш секретный ключ является долгоживущим. Сохранение секретного ключа в течение длительного времени может быть сложной проблемой. Например, долгоживущим секретным ключам нужно какое-то хранилище (которое сопротивляется перезагрузкам). Как вы управляете мертвыми жесткими дисками? Вы уничтожаете их в заполненном кислотой котле?
Шифрование обеспечивает конфиденциальность , а не целостность . В большинстве моделей безопасности злоумышленники могут быть активными (т. Е. Если злоумышленник может прочитать базу данных, он, вероятно, может записать в нее). Активные атаки открывают целый ряд проблем: например, что может произойти, если злоумышленник обменяет некоторые ваши секреты в базе данных? Или изменяет некоторые случайно? Шифрование, как всегда, легкая часть (не то, что она действительно «легкая», но она намного проще, чем остальная часть работы).