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\)


二)密钥协商

密钥协商协议步骤
已有$Cert_A、Cert_B$和公私钥$Pub_A、Pri_A、Pub_B、Pri_B$

步骤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$,
计算并发送$(g,E_{Pub_A}(K_1),Cert_B,Sign_B(g))$给$A$
$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^*$,
计算并发送$E_{Pub_B}(g^{R_A}(mod\:p))$给$B$
$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$和$B$计算$K=sm3(K_1,K_2=g^{R_AR_B}(mod\:p),Cert_A,Cert_B)$
$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通信的各种异常现象和分析(下)

三、下周计划

1.细化网络通信部分

2.参照协商步骤,做一个demo

posted @ 2022-01-18 19:53  20181324  阅读(84)  评论(0编辑  收藏  举报