从零设计通信协议(一)

写在前面

当你看到这个网页时你会知道 HTTPS 协议正在工作,你还知道这个协议能够抵御许多的网络攻击,保证通信安全。不过,我们知道的可能没有更多了。

作为一个充满好奇心的沙雕,我希望自己搞一个玩具性质的应用层通信协议。所以本系列将会把我的设计过程记录在这里,本系列每次更新都会进行增强协议功能或修复安全性问题,你或许可以学习到一些知识,或许也可能找出我的一些错误。

协议功能

为通信双方提供一个可靠的、有序的、安全的通信协议。要求通信双方预先共享足够强的密钥,并保证密钥不泄露。

我们假装 TLS 不存在。

有序和可靠

既然是应用层协议,那么应用层以下的协议自然是随便选的。TCP 协议就可以保证数据传输的有序和可靠,所以本协议使用 TCP 作为底层传输协议。

安全

什么是安全呢?我们就暂时定义为通信内容不被泄露和篡改吧。

第一版协议

目前我们的协议很简单,再加上已经预先共享了密钥,所以就先不加上握手机制了。所以现在要做的就是选择加密算法,随便从网上找找,就用 AES-128-ECB 吧。

AES-128-ECB:AES 表示高级加密标准(Advanced Encryption Standard);128 表示密钥长度为 128 bit;ECB 表示加密模式为电子密码本(Electronic CodeBook)。

选择好了加密算法,那么我们就开始设计我们数据包格式吧。

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

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

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

这样只要任何一方将上面的数据包正确解密就可以获取通信的内容,也可以按照此格式给对方发送信息。

写在最后

协议十分简陋,但是已经算是一个雏形了,本系列将会持续完善这一协议。

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

发送评论 编辑评论


上一篇
下一篇