mcrypt_generic_init:iv参数的含义
我正在审查使用 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
这是初始化向量:
http://en.wikipedia.org/wiki/Initialization_vector
It's the initialization vector:
http://en.wikipedia.org/wiki/Initialization_vector