我正在使用 PHPmcrypt
图书馆和AES-256
(rijndael) 算法,需要密钥 + 初始化向量才能运行。
我的逻辑头脑并不真正同意这一点。难道只有一把钥匙就够了吗?
理论场景:
如果我将加密的敏感数据存储在数据库中,只有所有者才能解密,那么使用用户散列密码作为其数据的密钥或初始化向量是否合适?
密钥是否应该被认为比初始化向量更私密,还是相反?
不,事实上 IV 在大多数实现中都至关重要。 IV 也被认为对于公众使用是安全的,例如,对于 WEP 和 WPA1/WPA2,IV 以纯文本形式传输。当使用相同的密钥+iv 来加密相同的纯文本时,就会出现问题。除非您使用 IV,否则密文将是相同的。如果攻击者可以用这个密钥加密任意明文,然后查看密文。这是暴力破解攻击者获得的其他密文的一种更快的方法。
不仅如此,IV 必须是随机的,否则就会违反CWE-329 http://cwe.mitre.org/data/definitions/329.html。这个问题的原因有点微妙,一开始我没明白 https://stackoverflow.com/questions/3008139/why-is-using-a-non-random-iv-with-cbc-mode-a-vulnerability。你没有提到这一点,但我希望你正在使用CBC 或 CMAC 模式 http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Electronic_codebook_(ECB)
对密码使用哈希函数与使用 String2Key 函数几乎相同。只要攻击者无法使用 SQL 注入来获取密钥,这就是一个可靠的设计。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)