从零设计通信协议(二)

写在前面

上一版协议

首先回顾的以下上一版的协议。

1 字节X 字节
数据长度数据
数据包格式

整个数据包使用 AES-128-ECB 加密。

  • 数据长度:表示「数据」的长度,单位为字节。
  • 数据:表示具体的通信数据。

我们可以通过数据包的前一个字节获取数据长度,之后向后读取 X 字节即可获取全部的数据,整个数据包使用 AES-128-ECB 加密,看起来很安全。其实使用 AES-128-ECB 加密容易受到「唯密文攻击」。

唯密文攻击:指在仅知道密文的情况加进行攻击,攻击成功轻则获得部分或全部明文,重则获取密钥。

唯密文攻击_百度百科

ECB 模式的缺陷

ECB 模式的缺陷就是相同的明文会产生相同的密文,这会让攻击者有机会猜出密文的含义,难以抵抗统计分析。

例如我和 Alice 对话,每次我发送的第一个信息是「你好」,假设使用 ECB 模式加密后的密文为「#¥%#¥」,那么如果 Eve 中间截获我的数据包,发现我和 Alice 每次通信我都会先发一个「#¥%#¥」给 Alice。根据日常的对话习惯,Eve 猜测这可能是在打招呼,进而怀疑「#¥%#¥」解密后是「你好」、「有空么」之类的话,这已经十分接近我们的明文信息了。

上面的例子可能并不特别可怕,但是如果进行统计分析的话就难说了。

CBC 模式

CBC 即密码分组链接(Cipher-Block Chaining),我们无需关心原理,只需要知道该模式通过一个随机的初始化向量 IV 保证了每条消息的唯一性,即相同的明文可以对应许多个密文。

第二版协议

下面我们使用 AES-128-CBC 算法来加密我们的通讯信息,使用 CBC 模式加密不仅需要密钥,也需要一个随机的初始化向量 IV,所以我们需要将 IV 传递给对方。

16 字节1 字节X 字节
IV数据长度数据
数据包格式

数据包从第 17 个字节开始的所有数据要使用 AES-128-CBC 加密。

  • IV:AES-128-CBC 加密时所用的初始化向量。
  • 数据长度:表示「数据」的长度,单位为字节。
  • 数据:表示具体的通信数据。

初始化向量 IV 可以公开,但要保证不可预测。

写在最后

本次我们升级了协议,使得协议可以抵御「唯密文攻击」,本系列将会持续完善这一协议。

本文作者:ADD-SP
本文链接https://www.addesp.com/archives/4528
版权声明:本博客所有文章除特别声明外,均默认采用 CC-BY-NC-SA 4.0 许可协议。

评论

  1. 小白吃
    3年前
    2021-6-16 21:51:09

    呜呜呜 只到了二

    • 博主
      小白吃
      3年前
      2021-6-16 21:58:13

      还没弃坑呢~

  2. 2年前
    2022-4-20 14:10:54

    期待三啊。。。

发送评论 编辑评论


上一篇
下一篇