加密:使用初始化向量与密钥?

2022-08-30 21:08:17

我正在使用PHP的库和(rijndael)算法,它需要一个键+初始化向量来运行。mcryptAES-256

我的逻辑大脑并没有真正同意这一点。难道一把钥匙还不够吗?

理论场景:
如果我加密了存储在数据库中的敏感数据,只有所有者才能解密,那么使用用户散列密码作为密钥或初始化向量到他或她的数据是否合适?

应该将密钥视为比初始化向量更私密,还是相反?


答案 1

不,事实上,IV在大多数实现中都是至关重要的。IV也被认为是安全的公众使用,例如IV以纯文本形式为WEP和WPA1 / WPA2传输。当使用相同的 key+iv 来加密相同的纯文本时,就会出现问题。密码文本将完全相同,除非您使用 IV。如果攻击者可以使用此密钥加密任意纯文本,然后查看密文。这是一种暴力破解攻击者已获得的其他密码文本的更快方法。

不仅如此,IV必须是随机的,否则您将违反CWE-329。这是一个问题的原因有点微妙,我一开始不明白。你没有提到这一点,但我希望你正在使用CBC或CMAC模式

在密码上使用哈希函数几乎与使用 String2Key 函数相同。只要攻击者不能使用 SQL 注入来获取密钥,这就是一个可靠的设计。


答案 2

初始化向量(IV)根本不是密钥,也不是秘密。事实上,它经常被公开(例如,在加密数据之前)。它被用作加密算法的附加随机输入,以便每次使用不同的IV时,加密相同清晰数据的结果都不同。这样,就无法对加密数据收集统计信息。它本身并不能“提高”加密强度。

您可以在此处查看显示IV使用方式和原因的精美图表。


推荐