有没有办法在没有 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 上发布网站?

有没有办法在没有 VBA 的情况下在 Excel 中连接两个数组? [复制]

有没有办法在没有投影的情况下在春季数据休息中返回带有 id 的关联对象