我需要使用AES-128-ECB加密数据块,并希望使用libsodium和Ruby。我使用OpenSSL API在Ruby中构建了一个解决方案原型,如下所示:
aes = OpenSSL::Cipher::Cipher.new("AES-128-ECB")
aes.encrypt
aes.key = key
aes.update(data) + aes.final
这很有用,但是我需要libsodium的其他功能,所以我想用它来摆脱我对OpenSSL的依赖。不幸的是,我没有看到任何用于ECB模式的API。我也使用ruby包装器RbNaCl,但我甚至没有看到任何使用基本libsodium API的方法。我确实看到AES-128-CTR的那些。
是否可以使用libsodium加密AES-128-ECB?
答案 0 :(得分:5)
libsodium故意不支持ECB模式。
在此模式下,加密两次的同一块产生两次相同的密文。
从安全角度来看,为什么这是可怕的经典例证是the ECB penguin。
libsodium不是提供许多基元,模式和参数供选择,而且许多组合实际上都是不安全的,它提供了一套精心挑选的安全结构。
AES-ECB不是其中之一,并且绝不会出于上述原因。
你真的应该改用不同的结构。