Могу ли я использовать шифрование AES-128-ECB с помощью Libsodium?

Мне нужно зашифровать блок данных с помощью AES-128-ECB, и я хотел бы сделать это с помощью libsodium и Ruby. Я создал прототип решения на Ruby с использованием API OpenSSL, как показано ниже:

aes = OpenSSL::Cipher::Cipher.new("AES-128-ECB")
aes.encrypt
aes.key = key
aes.update(data) + aes.final 

Это работает, но мне нужны другие функции libsodium, поэтому я хотел бы использовать их вместо этого и избавиться от зависимости от OpenSSL. К сожалению, я не вижу API для режима ECB. Я также использую рубиновую оболочку RbNaCl, но я даже не вижу способа сделать это с помощью базовых API-интерфейсов libsodium. Я вижу такие для AES-128-CTR.

Можно ли зашифровать AES-128-ECB с помощью libsodium?


person davidgyoung    schedule 01.09.2015    source источник
comment
Я не думаю, что вы можете, потому что libsodium, кажется, выставляет только AES-128-CTR как примитив. Если бы он напрямую раскрывал AES, его было бы легко реализовать самостоятельно.   -  person Artjom B.    schedule 01.09.2015


Ответы (1)


libsodium намеренно не поддерживает режим ECB.

В этом режиме один и тот же блок, зашифрованный дважды, создает один и тот же зашифрованный текст дважды.

Классической иллюстрацией того, почему это ужасно с точки зрения безопасности, является пингвин ЕЦБ.

Вместо того, чтобы предоставлять множество примитивов, режимов и параметров на выбор, причем многие комбинации на самом деле небезопасны, libsodium предоставляет тщательно подобранный набор безопасных конструкций.

AES-ECB не входит в их число и никогда не будет им по указанным выше причинам.

Вам действительно следует перейти на другую конструкцию.

person Frank Denis    schedule 02.09.2015
comment
Спасибо за ответ! Поскольку ваше имя указано на странице лицензии libsodium, я предполагаю, что вы знаю, о чем ты говоришь. Я, конечно, не буду оспаривать достоинства AES-ECB, так как это не мой выбор. - person davidgyoung; 02.09.2015