基于国密算法实现主机之间的密钥分发和安全传输-2021西北工业大学网络空间安全学院暑期夏令营

    由于疫情今年大多数高校的夏令营还是线上进行的,我有幸参加西工大网安院的夏令营,并顺利拿到了优秀营员。下面对西工大夏令营情况做一下存档。
    今年同去年差不多,两个题目二选一,我选择的是第一个做密钥分发和传输的一个小项目,因为去年就只给的RSAAES完成,所以我今年就选择使用SM2SM4完成。仅用了两三天左右的时间,所以完成的也是很一般,这篇文档主要留作纪念,仅供参考。

一、设计内容与要求:

编写一段程序,实现两个主机之间的密钥分发和安全传输。
要求:
(1)用 RSA 算法实现两个主机之间的密钥分发,分发的密钥为0x 01 23 45 670x 01 23 45 67 89 AB CD EF
(2)用分发的密钥和 AES 加密算法,实现两个主机之间的加密数据传输,测试数据是“NPU-SCS”和其他自己构造的 7 条消息;
(3)以上2 个步骤在程序中自动执行完,无手动参与;程序可以在 同一台主机上完成,但数据必须经过网络传输(可以本地发送,本地接收);
(4)密码算法必须是源码编译得到,不能直接用编译过的库文件; RSAAES 算法的源码可以来自于网络或其他任意渠道;
(5)以上算法选择国密算法实现更佳;


二、基本思路与实现:

1、选择使用国密算法SM2SM4替代RSAAES进行加密。
2、因为分组算法SM4的密钥长度为16个字节的16进制,所以选择分发的密钥为:0x 01 23 45 67 89 AB CD EF 01 23 45 67 89 AB CD EF
3、测试的数据信息为(共8条):
  NPU-SCS
  1.Today is July 7th,2021.
  2.My name is Joimy DiCaprio.
  3.Be about to graduate from Hebei University.
  4.Major in Information Security.
  5.Be Participating in the summer camp of nwpu.
  6.Have a great yearning for Cyberspace Security Institute.
  7.Hope to get the “excellent camper” strongly.

4、使用Python语言编写两台主机( PC1PC2 )程序,利用socket 实现数据在网络中的传输,实现密钥分发和数据加密。
5、密钥的分发基于SM2算法实现,PC1 依据SM2算法生成公私密钥对,并将公钥(Px , Py)传输给PC2PC2 利用PC1的公钥对分组密码SM4的密钥进行加密,并将加密后的密钥传输给PC1
   数据加密基于SM4算法实现,PC2利用SM4算法对8组数据进行加密并实时传输给PC1PC1先利用自己的SM2的私钥将前面获得的加密后的SM4密钥进行解密,再对PC2传输过来的数据进行解密。最终PC1端得到了最终的8条数据。


三、设计原理与流程:

3.1 总体流程:

图1  总体流程

3.2 设计原理:
3.2.1 建立套接字连接:

(1)、套接字连接原理:
PC1,创建 Socket对象,绑定地址(host, port)到套接字,开始TCP 监听,最大连接数量为6,等待连接,利用 recv()send() 函数来接和发送数据;PC2,创建Socket对象,建立与PC1的连接。利用 recv()send() 函数来接收和发送数据。客户机/服务器模式 在 TCP/IP 网络中两个进程间的相互作用的主机模式是客户机/服务器模式(Client/Server model)。该模式的建立基于以下两点:1、非对等作用;2、通信完全是异步的。客户机/服务器模式在操作过程中采取的是主动请示方式。

(2)、套接字连接流程图:
在这里插入图片描述

3.2.2 根据SM2算法实现密钥加密及密钥分发:

(1)、SM2算法原理:
RSA算法的危机在于其存在亚指数算法,对ECCElliptic Curve Cryptosystem) 算法而言一般没有亚指数攻击算法 SM2椭圆曲线公钥密码算法:我国自主知识产权的商用密码算法,是ECC算法的一种,基于椭圆曲线离散对数问题,计算复杂度是指数级,求解难度较大,同等安全程度要求下,椭圆曲线密码较其他公钥算法所需密钥长度小很多。

(2)、SM2加密流程:
在这里插入图片描述
(3)、SM2解密流程:
在这里插入图片描述

3.2.3 根据SM4算法实现数据加密:

(1)、SM4算法原理:
国密SM4(无线局域网SMS4)算法, 一个分组算法, 分组长度为128bit, 密钥长度为128bit。加密算法与密钥扩展算法均采用32轮非线性迭代结构,以字(32位)为单位进行加密运算,每一次迭代运算均为一轮变换函数FSM4算法加/解密算法的结构相同,只是使用轮密钥相反,其中解密轮密钥是加密轮密钥的逆序。

(2)、SM4算法流程:
①、参数产生
字节由82进制数表示,字由322进制数表示;S盒为固定的8bit 输入和输出置换;加密密钥长度为128bit,表示为,其中MKi (i=0,1,2,3)为字。轮密钥表示为rkii=0,1,2…,31)为字。FK=(FK0,FK1,FK2,FK3)为系统参数,CK=(CK0,CK1 ,…,CK31)为固定参数,都为字。
②、轮函数整体的加密函数为:
其中T 为一个合成置换,由非线性变换和线性变换复合而成。非线性变换由4个平行的S盒构成,S盒的数据均采用16进制。线性变换公式如下,其中B为非线性变换得到的字。
③、密钥扩展
已知加密密钥MK = (MK0,MK1,MK2,MK3),系统参数FK=(FK0,FK1,FK2,FK3),固定参数CK=(CK0,CK1,…,CK31)。rki为轮密钥,轮密钥由加密密钥生成。
④、加密/解密过程
加密最后一轮变换时,输出为:(Y0,Y1,Y2,Y3) = R(X32,X33,X34,X35) = (X35,X34,X33, X32)


四、实验过程与运行结果:

4.1 socket网络传输连接的建立

通过socket套接字建立客户端与服务器之间的网络传输连接。当开启windowssocket后定义一系列参数,然后通过 connect() 函数建立与服务器之间的数据连接。建立连接后的运行结果如下:
在这里插入图片描述
当客户端与服务器建立socket套接字连接后,便可以相互发送消息,且IP地址都为环回地址127.0.0.1

4.2 SM2算法
4.2.1 获取公私密钥对并传输

PC1端根据SM2算法获取公私密钥对,并将公钥(Px , Py)传输给PC2
在这里插入图片描述

4.2.2 利用SM2公钥进行密钥加密并分发密钥

PC2端,根据PC1端发送来的SM2的公钥对已有的SM4_Key = “0123456789ABCDEF0123456789ABCDEF”进行加密。并将加密后的SM4_Key传输给PC1端。实现密钥加密及分发。因为SM2是非对称加密算法,因此即使攻击者截取到了加密的数据和公钥,也会因为没有私钥而无法解密,保证了密钥的安全传输。
在这里插入图片描述

4.2.3 SM2私钥解密

PC1端接收到PC2发送来的加密后的密钥后,利用SM2的私钥对其进行解密,得到原始SM4_Key
在这里插入图片描述

4.3 SM4算法
4.3.1 SM4加密对8组消息进行加密并传输

PC2利用SM_Key以及SM4加密算法对8组消息进行加密,根据SM4加密特点,先得到加密密文分组,将分组传输给PC1端。
在这里插入图片描述

4.3.2 SM4解密

本程序设置为PC2端每加密一条消息就像PC1端发送一条,PC1端每接收到一条消息,就利用SM4对其进行解密。根据SM4解密特点,首先,先得到解密密文分组,进而得到原始数据。
在这里插入图片描述
至此,本程序基本结束了。


五、参考文献:

[1].duanhongyi.GMSSL[DB/OL].https://github.com/duanhongyi/gmssl/blob/master.
[2].yang3yen.SM4算法的实现[DB/OL].https://github.com/yang3yen/pysm4.
[3].yang3yen.SM2算法的实现[DB/OL].https://github.com/yang3yen/pysm2.
[4].huangbaoliu.SM2_SM3_SM4算法[DB/OL].https://github.com/huangbaoliu/sm2_sm3_sm4_tools/blob/master/sm_tools.py.

代码:

代码已在Github上公布:
https://github.com/JoimyDiCaprio/socket_sm2_sm4

  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 16
    评论
本系统的研发具有重大的意义,在安全性方面,用户使用浏览器访问网站时,采用注册和密码等相关的保护措施,提高系统的可靠性,维护用户的个人信息和财产的安全。在方便性方面,促进了校园失物招领网站的信息化建设,极大的方便了相关的工作人员对校园失物招领网站信息进行管理。 本系统主要通过使用Java语言编码设计系统功能,MySQL数据库管理数据,AJAX技术设计简洁的、友好的网址页面,然后在IDEA开发平台中,编写相关的Java代码文件,接着通过连接语言完成与数据库的搭建工作,再通过平台提供的Tomcat插件完成信息的交互,最后在浏览器中打开系统网址便可使用本系统。本系统的使用角色可以被分为用户和管理员,用户具有注册、查看信息、留言信息等功能,管理员具有修改用户信息,发布寻物启事等功能。 管理员可以选择任一浏览器打开网址,输入信息无误后,以管理员的身份行使相关的管理权限。管理员可以通过选择失物招领管理,管理相关的失物招领信息记录,比如进行查看失物招领信息标题,修改失物招领信息来源等操作。管理员可以通过选择公告管理,管理相关的公告信息记录,比如进行查看公告详情,删除错误的公告信息,发布公告等操作。管理员可以通过选择公告类型管理,管理相关的公告类型信息,比如查看所有公告类型,删除无用公告类型,修改公告类型,添加公告类型等操作。寻物启事管理页面,此页面提供给管理员的功能有:新增寻物启事,修改寻物启事,删除寻物启事。物品类型管理页面,此页面提供给管理员的功能有:新增物品类型,修改物品类型,删除物品类型。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值