不安全,某些情况请千万不要这么做。你的理解大致是正确的,但是尽可能不要固定 IV 。
赞同 @
liuidetmks AES 归 AES ,但是你的加密模式是什么?楼主没有说。
比如,在上面说的 OFB 和 CTR 模式等等情况下,IV 重用并且密码重用的情况下基本就完蛋了。
比如 CTR ,你只需要知道你的明文去和密文 XOR 一下你就知道密码流了。未来的加密形同虚设。
在 CBC 模式虽然不会被直接破解,但是密文相同,破坏了语义安全。有些场景可以接受。
我简单介绍一下一些概念吧,完美安全和语义安全。
完美安全性就是密文本身不会透露任何明文信息。这个太难了。根据信息论,你需要随机密钥+密钥长度至少有明文那么长才能做到。这个时候你的熵就高的足以用来混淆任何一个明文 bit 。
所以楼上 @
Citrus 其实说的不完全正确。因为你密码长度只要小了就是不行。不是说会暴力破解,单纯就是熵不够。
你说的严格一次一密,你是指每个 block 都一密码还是完全参照已有的 AES 模式呢?如果你能做到前者,恭喜你,但是直接换成 XOR 玩 OTP 可能更好。做到后者,比如 CBC 模式中,密码随机 IV 固定依旧做不到语义安全。
做到这个太难了。密钥生成,传输,都是问题。
于是人们退而求其次,密文可能会暴露明文信息,但无法被有效利用。这个就是语义安全了。
保存和更新密码的成本太高了。默认密码就会重用。设计的时候也是这么设计的。
这个时候引入 IV 你的确可以理解为增加信息熵,增加密文随机性。某种意义上来说 IV 解决了密码重用的问题(密码学角度的问题)