有没有办法在没有 iv 的情况下在 openssl 中运行 aes-128-cbc 加密?
Posted
技术标签:
【中文标题】有没有办法在没有 iv 的情况下在 openssl 中运行 aes-128-cbc 加密?【英文标题】:Is there any way to run aes-128-cbc encryption in openssl without iv? 【发布时间】:2018-03-25 16:45:53 【问题描述】:我正在尝试使用 openssl
使用 aes-128-cbc
加密来加密文本文件,我想知道是否有一种方法可以只使用密钥而不是 iv 来加密它?
每次我尝试跑步时:
openssl enc -aes-128-cbc -e -in dummy_file.txt -out dummy.aes-128-cbc.bin -K 00112233445566778889aabbccddeeff
我收到错误消息iv undefined
,它生成的加密文件是空的,甚至不是二进制文件。
【问题讨论】:
我很确定您必须付出一些努力才能在众多 Stack Exchange 网站上找不到问题和答案。 Precisely how does CBC mode use the initialization vector?、Is CBC mode with a fixed IV secure、AES/CBC fixed Initial vector use-case、Initialization Vector (IV) in CBC mode for AES、Good AES Initialization Vector practice等 AES CBC 加密谜题... 【参考方案1】:不,这是不可能的,CBC 需要静脉注射。但是,您可以将 IV 设置为全零。由于 IV 在加密之前与第一个明文块进行了异或运算,因此这归结为根本没有 IV:您将直接使用分组密码对第一个明文块进行加密。
请注意,使用相同的密钥和 IV 创建多个密文不会产生安全密码。对于 CBC,它需要有一个随机的(或至少不可预测的)IV。否则,攻击者至少可以看到哪个明文以相同的数据块开头。
对于 AES,IV 始终由 16 个字节组成,归结为 32 个十六进制零,当然对于 openssl
的 -iv
命令行参数。
【讨论】:
谢谢 Maarten,这正是我想要的。我完全忘记了 IV 被异或,所以我可以只留下 0。 再问一个问题 Maarten,密钥是否可能是一个单词而不是十六进制数字? AES 的密钥可以是 16、24 或 32 个随机字节 - 不多也不少。但是,您可以使用密码哈希(带有盐和迭代计数)来生成 AES 密钥。这实际上是openssl
没有 -K
选项的标准行为,尽管它只使用 8 字节盐,更糟糕的是,迭代计数设置为 1 的弱密码散列方案。只要你的密码 very ,非常强。它会为您的文件添加魔法和盐前缀,并且 - 专门为您 - 它会从盐和密码生成密钥 和 随机 IV。
对于学校项目,密钥可能由密钥的 ASCII 编码组成,后跟零值字节,最多 16 个字节。无论哪种方式,老师都应该很好地回答这个问题。
仅供参考:openssl v1.1.1 支持更强大的密钥派生功能,其中密钥是使用 pbkdf2 和随机生成的盐以及 sha256 散列的多次迭代(默认为 10,000)从密码中派生的。请参阅***.com/questions/16056135/… 了解更多信息。以上是关于有没有办法在没有 iv 的情况下在 openssl 中运行 aes-128-cbc 加密?的主要内容,如果未能解决你的问题,请参考以下文章
有没有办法在没有 Internet 连接的情况下在 webview 中加载网站?
有没有办法在没有应用程序回收的情况下在 IIS 上发布网站?