2021年西北工业大学网络空间安全学院暑期夏令营

  • 一、设计内容与要求:
  • 二、基本思路与实现:
  • 三、设计原理与流程:
    • 3.1 总体流程:
    • 3.2 设计原理:
      • 3.2.1 建立套接字连接:
    • 3.2.2 根据SM2算法实现密钥加密及密钥分发:
    • 3.2.3 根据SM4算法实现数据加密:
  • 四、实验过程与运行结果:
    • 4.1 socket网络传输连接的建立
    • 4.2 SM2算法
      • 4.2.1 获取公私密钥对并传输
      • 4.2.2 利用SM2公钥进行密钥加密并分发密钥
      • 4.2.3 SM2私钥解密
    • 4.3 SM4算法
      • 4.3.1 SM4加密对8组消息进行加密并传输
      • 4.3.2 SM4解密
  • 五、参考文献:
    • 代码:

    由于疫情今年大多数高校的夏令营还是线上进行的,我有幸参加西工大网安院的夏令营,并顺利拿到了优秀营员。下面对西工大夏令营情况做一下存档。
    今年同去年差不多,两个题目二选一,我选择的是第一个做密钥分发和传输的一个小项目,因为去年就只给的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 总体流程:

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

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

  1. 实现两个主机之间的密钥分发和安全传输

    实现两个主机之间的密钥分发和安全传输 一.设计要求 编写一段程序,实现两个主机之间的密钥分发和安全传输. 要求: 用 RSA 算法实现两个主机之间的密钥分发,分发的密钥为 0x 01 23 45 67 ...

  2. 基于国密算法SM2SSL证书的https加密,如何实现?

    为什么80%的码农都做不了架构师?>>>    如果要在客户端/网关系统和服务端之间进行SSL加密通信,当客户端应用(浏览器等)发起登录认证.加密.签名等请求时,服务端如何实现基于国 ...

  3. 使用Go基于国密算法实现双向认证

    国内做2B(to Biz)或2G(to Gov)产品和解决方案的企业都绕不过国密算法,越来越多的国内甲方在采购需求中包含了基于国密算法的认证.签名.加密等需求.对于国内的车联网平台来说,支持基于国密的 ...

  4. EMQ X 基于国密算法的物联网安全接入解决方案

    方案背景 在 5G 万物互联时代,将物理世界的数据进行数字化采集.传输和分析,最终通过丰富的物联网应用实现智慧化,是未来发展的大势所趋 .随着物联网在各行各业快速和深入的发展应用,各种终端设备联网的需 ...

  5. 国密算法 SM2 SM3 SM4 及密钥生成

    国密算法 SM2 SM3 SM4 方式一:SM2密钥在线生成 SM2密钥在线生成工具 如果你没线下生成工具,可用下面2种线上生成方式之一: 1. sm2密钥在线生成(const.net.cn) 2.  ...

  6. Java实现基于国密SM2、SM4生成证书密钥进行字串的加解密

    目录 流程说明: DTO层 生成证书密钥所需参数封装类 最终密文封装类 controller层 service层 serviceImp层 加密工具类 测试 发送生成证书请求 发送生成密文请求 发送解读 ...

  7. 主流CA吊销俄罗斯数字证书启示:升级国密算法SSL证书,助力我国网络安全自主可控

    随着国际和民间黑客组织的加入,俄乌的战争快速蔓延成一场全球化的网络信息战.国际上主流CA机构不再为俄罗斯提供数字证书服务,甚至吊销俄罗斯相关的一些国家基础设施网站的证书.这让俄罗斯不得不开始建立国家C ...

  8. 嵌入式设备中支持国密算法的方法(三)——移植Openssl库的步骤说明

    本篇文章是介绍国密算法在嵌入式设备中应用方法系列文章的第三篇,介绍移植openssl库到嵌入式设备中的具体方法,当然最终的目的还是使我们的设备能支持国密算法.同上一篇文章中介绍的miracl密码库相比 ...

  9. 服务器加密芯片市场空间,2020国密算法芯片行业发展趋势及市场规模分析

    安全芯片是一个可独立进行密钥生成.加解密的装置,内部拥有独立的处理器和存储单元,可存储密钥和特征数据,提供加密和安全认证服务的一种新型芯片.目前国内市场上安全芯片的下游产品主要有:USBKEY.安全存 ...

最新文章

  1. 初级Java程序员所面临的4大挑战
  2. Couchbase 集群小实践
  3. 9、使用GROUP BY分组查询
  4. 使用id_rsa进行ssh连接minikube
  5. SAP云平台CloudFoundry环境试用帐号过期了怎么办
  6. cpta 好像有漏洞
  7. VB数据库经典实例总结(二)
  8. 毕业论文排版之Word 中公式居中,编号靠右该怎么设置(针对左右不对称页边距)
  9. java 蓝桥杯算法训练 sign函数
  10. Autocad 2015如何激活成功
  11. 同步异步-阻塞非阻塞
  12. License Server Version 11.9 Installation on Windows Server 2003 Hangs
  13. iOS锁屏代码注意使用新接口
  14. Graph2Vec运行
  15. 光立方体c语言程序,444光立方程序怎么写 光立方原理图、源代码及制作教程
  16. java图片二值化_实现图像的二值化(java+opencv)
  17. python语言turtle库画图代码示例_5分钟轻松搞定,Python开发之turtle库的基本操作...
  18. 自己组装nas服务器万兆,万兆网络、装M.2 SSD的NAS服务器
  19. 微博上一些有用的话(六)
  20. 码云上不错的几个支付相关的项目

热门文章

  1. 鉴源论坛 · 观辙丨基于规则的车载网络入侵检测技术
  2. C++-生日-星座-性格查询
  3. C++ tuple的介绍及使用
  4. win7远程计算机设置路由器,win7路由器设置图解 win7路由器怎么设置
  5. 3D游戏人物角色建模入门第一步:了解人体的构造
  6. 智慧农业:自动气象站
  7. 深入解析:如何修复SSL / TLS握手失败错误(上)
  8. 【C→C++】打开C++世界的大门
  9. linux14.04网卡驱动,ubuntu14.04手动安装博通官方无线网卡驱动时报错,
  10. python在概率论与数理统计中的作用