• 彩色的沙漠
    2020-12-11
    前段时间把项目中对称加密的链接模式由ECB改为了CBC模式。但是向量是固定的前后端约定好的。如果使用不重复的初始化向量又存在发送给后端的保密性问题

    作者回复: 由于初始化向量不需要保密,可以使用明文传输的初始化向量。每一次加密,都附上初始化向量。传输的数据是:初始化向量 + 密文。以前的TLS就是这么做的。 不过,现在CBC也要快退役了,建议换到Chacha20/Poly1305或者AES-GCM。这两个模式我们稍后会讲到的。

    
    5
  • 麋鹿在泛舟
    2020-12-12
    使用第二种方案即序列数做为初始化向量,文中提到会遇到分布式序列同步问题, 和攻击者知道序列数的风险。 可以详细解释下吗, 我理解: 1. 分布式系统下的全局ID应该都有自己成熟的方案,或者是使用数据库自增 或者 redis生成,应该不存在同步问题了吧 2. 初始化向量本身就是非敏感信息,攻击者知道这些序列值 也不会引入什么风险吧?

    作者回复: #1 就是解决同步问题的办法之一。但是,无论是数据库还是redis,都降低了效率。 #2,这是一个好问题。我写的时候,也想过,这一句是不是会引来讨论。讨论真的就来了。我们后面会讲对加密算法的攻击。重复的初始化向量,一般来说是没有问题的;但是如果没有注意到这些攻击,重复的和已知的初始化向量,会让攻击变得更容易得手。

    共 2 条评论
    2
  • Reol
    2021-08-18
    老师,对于初始化向量IV使用序列数的方法,文中说:使用序列数的一个问题是攻击者能较容易知道每一个IV。 1)除了序列数,就算采取随机数的方法生成IV,也是明文发送IV+密文数据,攻击者也能知道每个IV吧。IV可公开的情况下,被攻击者知道了全部IV又有什么风险呢?这两个方法应该只是为了让密文不重复? 2)如果同一个密钥下,采用相同的IV生成了相同密文。攻击者是只能对比猜测明文,而不能直接破解出明文吗?

    作者回复: 1)是的,这两种方法是为了让密码不重复。一般来说,攻击者知道IV并不应该有密码学上的风险。文中的这句话,我表达的有失误。 2)如果能直接破解出明文,那就意味着加密算法本身是可以逆运算的。一般情况下,我们都假设加密算法本身的强度是足够的。

    
    1
  • 麋鹿在泛舟
    2020-12-12
    项目中加密使用安全随机数函数生成初始化向量,解密处有点不一样,为了兼容历史版本(历史版本使用了固定初始化向量),走了两套分支,即如果是老版本加密的,则使用固定向量解密,否则则使用和密文一起存储的随机初始化向量解密。

    作者回复: 嗯,有的时候为了兼容性,要牺牲很多。如果只是本地存储,可能问题还不大;如果要走网络传递,可能会有安全问题。这个还是进一步要分析数据流的场景,才能确定是不是真的有问题。

    
    1
  • Geek_d68bf9
    2022-06-28
    我们项目就是向量固定的,如果动态向量的话,怎么做双向传输加密?

    作者回复: 大概率这个项目的安全性是没有保证的。看看“初始化向量怎么选?”这一小节对你们有没有帮助,或者看看安全协议的设计,比如TLS。

    
    
  • Geek_828b39
    2021-08-30
    老师,没有明白密钥还有使用次数限制的问题。

    作者回复: 有没有明白初始化向量不能重复的问题?

    共 2 条评论
    
  • 三叶虫tlb
    2021-04-16
    我做的项目,初始化向量就是重复的。。。当初不明白这个有什么用、有什么安全隐患。 另外怎样安全把初始化向量发送给对方也是个问题。

    作者回复: 大部分场景下的初始化向量不需要保密。

    
    
  • Litt1eQ
    2020-12-09
    感觉使用重复的iv会对安全性产生影响 但是我不太清楚具体影响的程度 一般来说iv会跟着加密之后灯内容一块发送 以我目前所能掌握的知识只能了解到这些 我记得分组密码存在一个ecb模式 这个模式没有iv 希望老师可以普吉一下更多的知识 对于密钥长度的限制是我之前所不了解的 感谢老师

    作者回复: 重复的iv,相同的明文就有相同的密文,文章里有讲的,这是一般的加密不允许的。下一节我们讲ECB模式。

    共 2 条评论
    
  • 天天有吃的
    2020-12-09
    问题2:密钥使用次数 < 初始化向量次数,可以防止第一个数据分组输出相同的加密后内容,密钥还有什么别的限制呢,按道理密钥没有重复性的要求应该比初始化向量要求更低呀?

    作者回复: 你问题提的都很好!密钥的限制问题,我们后面专门会讲的。

    
    
  • 天天有吃的
    2020-12-09
    小白打卡中... 问题1:初始化向量除了不能重复,这里的位数(文中128位)是怎么确定的?怎么保证尽可能的不重复?除了不重复还有没有什么限制?

    作者回复: 位数是由数据块的大小确定的。使用随机数或者序列数,是两个解决重复问题的措施,文中有讲的。其他的限制就要看具体的链接模式了,有的还有,有的就没有了,或者我还不知道有没有。

    
    