2022_1_21_周汇报
目录
一、进度
(一)形式化定义
实体构成
可信第三方\(T\):负责签发证书,生成系统参数。
通信方\(A\):发起通信的一方。
通信方\(B\):参与通信方。
一)初始化阶段
1、\(T\)随机生成公钥\(Pub_T\)、私钥\(Pri_T\)。生成自签名\(CA\)证书\(Cert_T\)。
2、参与方\(A\)随机生成公钥\(Pub_A\)、私钥\(Pri_A\)。将身份信息和公钥\(Pub_A\)提交给\(T\)。
3、\(T\)根据\(A\)的身份和公钥,生成签名证书\(Cert_A\)并发送给\(A\)。
4、通信方\(B\)重复3-4步,获得自身证书\(Cert_B\)。
5、确定系统安全参数\(l\)。
二)密钥协商
密钥协商协议步骤
|
|||
---|---|---|---|
步骤1 |
$A$选择长度为$l$的素数$p$,发送$(p,Sign_A(p),Cert_A)$给$B$ |
||
$A$选择长度为$l$的素数$p$,计算$Sign_A(p)$,将$(p,Sign_A(p),Cert_A)$打包 | $B$接受包 | ||
步骤2 |
$B$收到后,首先使用$CA$证书$Cert_T$验证$Cert_A$有效性,然后使用$A$的公钥验证$Verify_A(Sign_A(p))$。若验证失败,则中止通信。若验证通过,则选择随机数$g \leftarrow Z_p^*$,选择随机串$K_1$,
|
||
$A$接受包 | $B$验证$Cert_A$有效性, 计算验证$Verify_A(Sign_A(p))$。 若验证失败,则中止通信。 若验证通过,则选择随机数$g \leftarrow Z_p^*$, 选择随机串$K_1$,计算$E_{Pub_A}(K_1)$, 计算$Sign_B(g)$, 将$(g,E_{Pub_A}(K_1),Cert_B,Sign_B(g))$打包 |
||
步骤3 |
$A$验证$Cert_B$的有效性,并验证$Verify_B(Sign_B(g))$。若验证失败,则中止通信。若验证通过,则解密$D_{Pri_A}(E_{Pub_A}(K_1))$得到$K_1$,并随机选择$R_A \leftarrow Z_p^*$,
|
||
$A$验证$Cert_B$的有效性, 计算验证$Verify_B(Sign_B(g))$。 若验证失败,则中止通信。 若验证通过,则计算$D_{Pri_A}(E_{Pub_A}(K_1))$解密得到$K_1$,随机选择$R_A \leftarrow Z_p^*$, 计算$g^{R_A}(mod\:p)$, 计算$E_{Pub_B}(g^{R_A}(mod\:p))$,将$E_{Pub_B}(g^{R_A}(mod\:p))$打包 |
$B$接受包 | ||
步骤4 |
$B$随机选择$R_B \leftarrow Z_p^*$,计算并发送$E_{Pub_A}(g^{R_B}(mod\:p))$给$A$;
|
||
$A$接受包后 计算$D_{Pri_A}(E_{Pub_A}(g^{R_B}(mod\:p)))$ 解密得到$g^{R_B}(mod\:p)$, 计算$K_2=g^{R_AR_B}(mod\:p)$, 继而计算$K=sm3(K_1,K_2,Cert_A,Cert_B)$ |
$B$随机选择$R_B \leftarrow Z_p^*$, 计算$E_{Pub_A}(g^{R_B}(mod\:p))$,将$E_{Pub_A}(g^{R_B}(mod\:p))$打包发送。 计算$D_{Pri_B}(E_{Pub_B}(g^{R_A}(mod\:p)))$解密得到$g^{R_A}(mod\:p)$, 计算$K_2=g^{R_AR_B}(mod\:p)$,继而计算 $K=sm3(K_1,K_2,Cert_A,Cert_B)$ |
(二)通信设计
1.包格式
2.包格式解释
- uid
通信标识,32位 - sender sequence
数据包发送序号,32位 - responder sequence
数据包应答序号,32位 - stage
步骤标识序号,4位,加密秘钥协商4步、通信、结束2步 - header length
头部长度,4位,以4字节为单位 - shared flag
是否分段标识,1位 - next flag
当前分段是否继续标识,1位 - packet count
累计包数,6位,单位为:一个包数据长度,现为1440字节 - checked num
校验和,16位 - window size
窗口大小,8位 - timestamp
时间戳,24位 - reserved
拓展+保留位,12字节 - 共32字节
3.通信流程
1.协商部分
按照协商步骤计算后发送,设置stage为0x1、0x2、0x3、0x4
2.通信部分
所有通信包设置stage为0x5
、
加密通信部分($A$发起通信) |
|||
---|---|---|---|
步骤1 |
$A$将信息用加密秘钥加密 |
||
$A$计算$E_k^{sm3}(message)$,将$E_k^{sm3}(message)$打包 | B接受包 | ||
步骤2 |
$B$解密获取信息 |
||
$A$(无) | $B$解密获取信息 |
3.结束
一方提出结束请求,另一方发送结束请求确认(必须要签名数据,签名包含头部),提出请求方还需要确认签名
设置stage为0x6、0x7、0x8
4.意外处理
- 验证证书失败
中止协议,并发送验证证书失败信息+\(sm3 Hash\),设置stage为0xA - 验证签名失败
中止协议,并发送验证签名失败信息+\(sm3 Hash\),设置stage为0xB - 超时
重传,stage不变,将发送序号+1 - 收到重发的包
舍弃 - 加解密失败
发送加解密失败信息+签名,设置stage为0xC - 机器断电或重启或断网
- 内存占用过多,进程崩溃
- 进程被结束掉
- 建立连接时,服务器应用被阻塞
- 端口不存在或未开放
二、遇到的问题及解决
1.Markdown里的公式编辑LaTex
在博客园使用LaTeX数学公式
在博客中使用LaTeX插入数学公式
Markdown数学公式语法
[转] Markdown 中的常用 LaTex 数学公式
编辑你的数学公式——markdown中latex的使用
2.draw.io画图没有竖直文本框
参考:【drawio笔记】更改文字书写的方向,调整后只是把框方向调整了,将框大小调小了
3.通信异常处理
参考:
TCP协议(TCP异常情况 | TCP协议总结)
tcp返回结果错误_从TCP协议到TCP通信的各种异常现象和分析(上)
单片机tcp异常处理_从TCP协议到TCP通信的各种异常现象和分析(下)