mcrypt_generic_init:iv参数的含义

发布于 2024-11-04 14:50:03 字数 887 浏览 6 评论 0原文

我正在审查使用 php mcrypt 库使用 Blowfish 密码加密一些二进制数据的代码的一部分。基本上,它在 MCRYPT_MODE_CBC 模式下创建一个河豚描述符,然后调用 mcrypt_generic_init 函数,其中 iv 参数始终等于“12345678”。

简化的代码提取:

$cipher = mcrypt_module_open(MCRYPT_BLOWFISH, '', MCRYPT_MODE_CBC, '');
mcrypt_generic_init($cipher, $key, '12345678');

mcrypt-generic-init 函数的文档说如下:

IV 通常应具有算法块大小的大小,但您必须通过调用 mcrypt_enc_get_iv_size() 获取该大小。 ECB 忽略了 IV。 IV 必须存在于 CFB、CBC、STREAM、nOFB 和 OFB 模式中。 它必须是随机且唯一的(但不是秘密的)。必须使用相同的 IV 进行加密/解密。 如果您不想使用它,则应将其设置为零,但不建议这样做。

我的问题是:

这个参数有什么用?使用这样的 iv 参数值是一个弱点吗?我不确定,因为据说它不必是秘密的,因此攻击者可以以某种方式获取它。如果这不是一个弱点并且这个参数的值完全可以,那么为什么不建议将其设置为零呢?硬编码一些伪随机字符串而不是“12345678”会明显更好吗?

I am reviewing a part of code using php mcrypt library to encrypt some binary data using the Blowfish cipher. Basically it creates a blowfish descriptor in the MCRYPT_MODE_CBC mode and then calls the mcrypt_generic_init function with the iv parameter always equal to '12345678'.

Simplified code extraction:

$cipher = mcrypt_module_open(MCRYPT_BLOWFISH, '', MCRYPT_MODE_CBC, '');
mcrypt_generic_init($cipher, $key, '12345678');

Documentation for the mcrypt-generic-init function says following:

The IV should normally have the size of the algorithms block size, but you must obtain the size by calling mcrypt_enc_get_iv_size(). IV is ignored in ECB. IV MUST exist in CFB, CBC, STREAM, nOFB and OFB modes. It needs to be random and unique (but not secret). The same IV must be used for encryption/decryption. If you do not want to use it you should set it to zeros, but this is not recommended.

My questions are:

What is this parameter used for? Is using of such value of the iv parameter a weakness? I am not sure, because it is said that it doesn't have to be secret, so an attacker can obtain it somehow. If it's not a weakness and such value of this parameter is perfectly ok, then why setting it to zeros is not recommended? Would it be significantly better to hardcode some pseudo random string instead of '12345678'?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文