08 | 该怎么选择初始化向量?
分组算法怎么计算?
- 深入了解
- 翻译
- 解释
- 总结
本文深入讨论了在选择初始化向量时对算法安全性的重要性。初始化向量与第一个数据块的计算密切相关,若存在相同的初始化向量和相同的第一个明文数据分组,将导致相同的输出,从而暴露数据的保密性。因此,在对称密钥的生命周期中,初始化向量不能重复使用。为避免此问题,开发者可选择使用安全强度足够的随机数或序列数作为初始化向量。然而,这两种选择都存在各自的问题,如随机数获取的效率和同步问题,以及序列数状态的保持和同步问题。因此,选择初始化向量充满了复杂性,需要根据具体的使用场景来制定适当的选择方案。此要求往往容易被忽略。文章通过深入讨论了初始化向量的选择对算法安全性的重要性,为读者提供了对该主题的全面了解。文章还提到了密钥使用次数的限制,这是一个不太引人注意的安全陷阱,也是近年来才受到广泛关注的算法安全问题。密钥使用次数限制需要被重视,并且要有检查密钥使用次数限制的习惯。接下来的讨论将涉及其他限制条件,并列出不同算法的使用限制。最后,文章提出了思考题,鼓励读者在其项目中或关注的开放源代码项目中搜索初始化向量的使用情况,并讨论潜在的安全风险和建议。
《实用密码学》,新⼈⾸单¥59
全部留言(12)
- 最新
- 精选
- 彩色的沙漠前段时间把项目中对称加密的链接模式由ECB改为了CBC模式。但是向量是固定的前后端约定好的。如果使用不重复的初始化向量又存在发送给后端的保密性问题
作者回复: 由于初始化向量不需要保密,可以使用明文传输的初始化向量。每一次加密,都附上初始化向量。传输的数据是:初始化向量 + 密文。以前的TLS就是这么做的。 不过,现在CBC也要快退役了,建议换到Chacha20/Poly1305或者AES-GCM。这两个模式我们稍后会讲到的。
2020-12-115 - 麋鹿在泛舟使用第二种方案即序列数做为初始化向量,文中提到会遇到分布式序列同步问题, 和攻击者知道序列数的风险。 可以详细解释下吗, 我理解: 1. 分布式系统下的全局ID应该都有自己成熟的方案,或者是使用数据库自增 或者 redis生成,应该不存在同步问题了吧 2. 初始化向量本身就是非敏感信息,攻击者知道这些序列值 也不会引入什么风险吧?
作者回复: #1 就是解决同步问题的办法之一。但是,无论是数据库还是redis,都降低了效率。 #2,这是一个好问题。我写的时候,也想过,这一句是不是会引来讨论。讨论真的就来了。我们后面会讲对加密算法的攻击。重复的初始化向量,一般来说是没有问题的;但是如果没有注意到这些攻击,重复的和已知的初始化向量,会让攻击变得更容易得手。
2020-12-1222 - Reol老师,对于初始化向量IV使用序列数的方法,文中说:使用序列数的一个问题是攻击者能较容易知道每一个IV。 1)除了序列数,就算采取随机数的方法生成IV,也是明文发送IV+密文数据,攻击者也能知道每个IV吧。IV可公开的情况下,被攻击者知道了全部IV又有什么风险呢?这两个方法应该只是为了让密文不重复? 2)如果同一个密钥下,采用相同的IV生成了相同密文。攻击者是只能对比猜测明文,而不能直接破解出明文吗?
作者回复: 1)是的,这两种方法是为了让密码不重复。一般来说,攻击者知道IV并不应该有密码学上的风险。文中的这句话,我表达的有失误。 2)如果能直接破解出明文,那就意味着加密算法本身是可以逆运算的。一般情况下,我们都假设加密算法本身的强度是足够的。
2021-08-181 - 麋鹿在泛舟项目中加密使用安全随机数函数生成初始化向量,解密处有点不一样,为了兼容历史版本(历史版本使用了固定初始化向量),走了两套分支,即如果是老版本加密的,则使用固定向量解密,否则则使用和密文一起存储的随机初始化向量解密。
作者回复: 嗯,有的时候为了兼容性,要牺牲很多。如果只是本地存储,可能问题还不大;如果要走网络传递,可能会有安全问题。这个还是进一步要分析数据流的场景,才能确定是不是真的有问题。
2020-12-121 - Geek_d68bf9我们项目就是向量固定的,如果动态向量的话,怎么做双向传输加密?
作者回复: 大概率这个项目的安全性是没有保证的。看看“初始化向量怎么选?”这一小节对你们有没有帮助,或者看看安全协议的设计,比如TLS。
2022-06-28 - Geek_828b39老师,没有明白密钥还有使用次数限制的问题。
作者回复: 有没有明白初始化向量不能重复的问题?
2021-08-302 - 三叶虫tlb我做的项目,初始化向量就是重复的。。。当初不明白这个有什么用、有什么安全隐患。 另外怎样安全把初始化向量发送给对方也是个问题。
作者回复: 大部分场景下的初始化向量不需要保密。
2021-04-16 - Litt1eQ感觉使用重复的iv会对安全性产生影响 但是我不太清楚具体影响的程度 一般来说iv会跟着加密之后灯内容一块发送 以我目前所能掌握的知识只能了解到这些 我记得分组密码存在一个ecb模式 这个模式没有iv 希望老师可以普吉一下更多的知识 对于密钥长度的限制是我之前所不了解的 感谢老师
作者回复: 重复的iv,相同的明文就有相同的密文,文章里有讲的,这是一般的加密不允许的。下一节我们讲ECB模式。
2020-12-092 - 天天有吃的问题2:密钥使用次数 < 初始化向量次数,可以防止第一个数据分组输出相同的加密后内容,密钥还有什么别的限制呢,按道理密钥没有重复性的要求应该比初始化向量要求更低呀?
作者回复: 你问题提的都很好!密钥的限制问题,我们后面专门会讲的。
2020-12-09 - 天天有吃的小白打卡中... 问题1:初始化向量除了不能重复,这里的位数(文中128位)是怎么确定的?怎么保证尽可能的不重复?除了不重复还有没有什么限制?
作者回复: 位数是由数据块的大小确定的。使用随机数或者序列数,是两个解决重复问题的措施,文中有讲的。其他的限制就要看具体的链接模式了,有的还有,有的就没有了,或者我还不知道有没有。
2020-12-09