【问题标题】:Is there any way to run aes-128-cbc encryption in openssl without iv?有没有办法在没有 iv 的情况下在 openssl 中运行 aes-128-cbc 加密?
【发布时间】: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,它生成的加密文件是空的,甚至不是二进制文件。

【问题讨论】:

标签: encryption cryptography cbc-mode initialization-vector


【解决方案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)从密码中派生的。请参阅stackoverflow.com/questions/16056135/… 了解更多信息。
猜你喜欢
  • 2021-02-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-17
  • 2020-04-15
  • 1970-01-01
  • 2022-12-16
  • 2016-12-05
相关资源
最近更新 更多