2017-2018-2 20179204《网络攻防实践》第十三周学习总结 python实现国密算法

国密商用算法是指国密SM系列算法,包括基于椭圆曲线的非对称公钥密码SM2算法、密码杂凑SM3算法、分组密码SM4算法,还有只以IP核形式提供的非公开算法流程的对称密码SM1算法等。

第1节 SM2非对称密码算法原理

国密SM2算法是商用的ECC椭圆曲线公钥密码算法,其具有公钥加密、密钥交换以及数字签名的功能。椭圆曲线参数并没有给出推荐的曲线,曲线参数的产生需要利用一定的算法产生。但在实际使用中,国密局推荐使用素数域256 位椭圆曲线,其曲线方程为y^2= x^3+ax+b。参数如下:

其中p是大于3的一个大素数,n是基点G的阶,Gx、Gy 分别是基点G的x与y值,a、b是随圆曲线方程y^2= x^3+ax+b的系数。

第2节 SM3密码杂凑算法原理

杂凑密码算法又称为哈希密码算法或散列密码算法,其可以将任意长度的字符串作为算法输入,并输出固定长度的字符串。当算法的结构设计足够精妙复杂时,基本上可以做到对于任意输入都有唯一确定的输出与之对应,相反该输出也可以唯一标识该输入。

一般可以从两个角度对杂凑算法安全性能进行评估:

  1.计算不可逆性:即给定一输入消息A的杂凑值H(A),要得到原消息A在计算上是不可行的;
  2.抗碰撞性:即给定一消息B,找到消息B?使H(B)=H(B‘)在计算上是困难的。

网络安全领域中,较为常用的杂凑算法主要有MD5、SHA-1以及SHA-256等,都具有良好的计算不可逆性以及抗碰撞性。但在2004年,由王小云教授提出的杂凑碰撞算法,极大地降低了对MD5以及SHA-1算法实施碰撞攻击的时间复杂度。

经过多年的研究,由王小云教授主导设计的SM3杂凑密码算法正式推出,该算法可以用于各类密码应用中的数字签名和验证、消息认证码的生成与验证以及随机数的生成,可满足多种密码应用的安全需求。

国密SM3商用密码杂凑算法应用于数字签名和验证、消息认证码的生成与验证以及随机数的生成,可满足多种密码应用的安全需求。对于长度为l(l<264)比特的信息,SM3杂凑算法经过填充和迭代压缩,生成杂凑值,其杂凑值长度为256比特(32字节),其安全性与SHA256相当。

第3节 SM4分组密码算法原理

国密SM4算法是一个对称分组密码算法,该算法的分组长度为16字节,密钥长度也为16字节。加密算法与密钥扩展算法都采用32轮非线性迭代过程,解密算法与加密算法的过程相同,只是轮密钥的使用顺序相反,解密轮密钥是加密轮密钥的逆序。SM4算法支持的四种加密模式如下表所示:

SM4 分组算法4种模式及安全MAC的算法标识如下表所示:

第4节 PYTHON实现

python实现代码已上传码云。

4.1 SM2测试截图

python3实现的国密SM2+SM3,SM3包括KDF功能,可配合SM2加解密(SM2调用了SM3模块)。SM2实现了各种素域下的签名、验签和加解密功能。

截图体现了SM2对“你好”的加解密过程。

4.2 SM3测试截图

python编写的SM3密码杂凑算法代码。

对字符串abc、 abcd*16进行测试,结果如图:

4.3 SM4测试截图

python实现的国产加密sm4算法。

测试了ecb和cbc两种模式:

第5节 遇到的问题与解决过程

5.1 问题一

python中出现Non-ASCII character ‘\xe7‘ in file sm2.py on line 6, but no encoding declare的错误。

可按照错误建议网址查看http://www.python.org/peps/pep-0263.html,发现是因为Python在默认状态下不支持源文件中的编码所致。解决方案有如下三种:

  1)在文件头部添加如下注释码:
  # coding=<encoding name>
  例如,可添加# coding=utf-8
  2)在文件头部添加如下两行注释码:
  #!/usr/bin/python
  # -*- coding: <encoding name> -*-       例如,可添加# -*- coding: utf-8 -*-
  3)在文件头部添加如下两行注释码:
  #!/usr/bin/python
  # vim: set fileencoding=<encoding name> :
  例如,可添加# vim: set fileencoding=utf-8 :

参考博客:cnblogs csdn

5.2 问题二

UnicodeDecodeError: ‘ascii‘ codec can‘t decode byte 0xe9 in position 0: ordinal not in range(128) 产生原因:

因为默认情况下,Python采用的是ascii编码方式,而Python在进行编码方式之间的转换时,会将unicode 作为“中间编码”,但unicode最大只有128那么长,所以这里当尝试将ascii编码字符串转换成"中间编码" unicode时由于超出了其范围,就报出了如上错误。

有的解决办法参见cnblogscsdn。但具体我是换了python3.7版本直接运行通过的。

5.3 问题三

python模块以及导入出现ImportError: No module named ‘xxx‘问题。

具体参见mamicode

python中,每个py文件被称之为模块,每个具有_init_.py文件的目录被称为包。只要模块或者包所在的目录在sys.path中,就可以使用import 模块或import包来使用。

如果你要使用的模块(py文件)和当前模块在同一目录,只要import相应的文件名就好,比如在a.py中使用b.py:

  import b

原文地址:https://www.cnblogs.com/20179204gege/p/9111064.html

时间: 2024-10-14 03:52:25

2017-2018-2 20179204《网络攻防实践》第十三周学习总结 python实现国密算法的相关文章

2017-2018-2 20179204《网络攻防实践》第一周学习总结

第1节 对师生关系的理解 原先我对师生关系的理解是"教学相长".本周通过阅读 优秀的教学方法---做教练与做中学 ,理解了相关的理论和老师的具体应用过程,我又对师生关系又有了更多元的了解--理想的师生关系是健身教练和健身学员之间的关系. 从trainee的比喻来看,大学.研究生阶段更需要的是我们进行自主学习,首先要意识到自己学习的重要性和必要性,只有自己需要学习,才能驱除惰性,有更多的动力:作为trainee还需要有不怕吃苦.坚持不懈的精神,这是学生所必备的品质. 从trainer的比

2017-2018-2 20179204《网络攻防实践》第一周学习总结之linux基础

我在实验楼中学习了Linux基础入门课程,这里做一个学习小结. 第一节 linux系统简介 本节主要介绍了linux是什么.发展历史.重要人物.linux与window的区别以及如何学习linux. 1.什么是linux Linux是一个操作系统,就像Windows(xp,7,8)和 Mac OS.Linux 主要是系统调用和内核那两层.直观地看,操作系统还包含一些在其上运行的应用程序,比如文本编辑器.浏览器.电子邮件等. 2.linux与windows的区别 linux免费或收取少许费用: l

2017-2018-2 20179213《网络攻防实践》第九周学习

教材学习 第九章 恶意代码安全攻防 恶意代码定义 ?? 恶意代码是指使计算机按照攻击者的意图执行以达到恶意目标的指令集. 类型包括:计算机病毒.蠕虫.恶意移动代码.后门.特洛伊木马.僵尸程序.内核套件.融合型恶意代码. 计算机病毒 基本特性:感染性.潜伏性.可触发性.破坏性.衍生性 感染及引导机制:可执行文件.引导扇区.支持宏指令的数据文件. 传播机制:移动存储.电子邮件.下载.共享目录. 网络蠕虫 基本特性:通过网络自主传播 组成结构:弹头.传播引擎.目标选择算法.扫描引擎.有效载荷 后门与木

2017-2018-1 20179206《网络攻防实践》第一周作业

a.你对师生关系的理解,希望是哪种关系? 我认为师生关系是一种相互平等交流的关系. 为什么这样说,因为这是由网络攻防实践这门可得特殊性来决定的,网络攻防是门实践课,需要大量的联练习和摸索,同时大部分学生对这一领域不熟悉,需要学习Linux在内的很多新东西,在中间会产生大量的新问题,这些问题需要向老师请教,如果能够尽可能的成为一种相互平等的关系,同学会更乐于去发现问题和请教问题,从而能爱上实践,爱上这门课. b.如何提问? l 提问的内容要先自我独立解决: 作为一门计算机实践课,首先放在第一位的就

网络攻防实践 第十周作业

网络攻防实践作业 html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,tabl

2017-2018-2 20179215《网络攻防实践》第一周作业

<网络攻防开发与实践> 第一周作业 一.对师生关系的理解 ?对于研究生和导师的关系就不像中学或大学,仅仅是以传授知识为主,研究生阶段,导师起到引路的作用,给学生指点以及方向,而不仅仅是教学,传授的更应该是方法,因为此时研究生阶段学生有了自己的思想,对事物能进行更深刻的思考,想法往往更加新颖,所以导师引领方向,学生开拓创新. 二.如何提问 顺应:从对方观点中延展出你的问题,不要另起炉灶: 提升:把对方所讲的内容,归纳.升华.拔高,成为更具有概括性,更深刻的大问题,再从这个大问题出发提出你自己具体

《网络攻防》第七周学习总结

Kali教材学习 本周主要学习了<网络攻防---技术与实践>第7章的内容,主要学习了 Windows操作系统安全攻防         Windows操作系统基本框架 如上图所示,Windows操作系统分为运行于处理器特权模式(ring 0)的操作系统内核,以及运行在处理器非特权模式(ring 3)的用户空间代码.采用宏内核(monolithic)模式进行架构.内核基本模块分为:Windows执行体 .Windows内核体 .设备驱动程序 .硬件抽象层 .Windows窗口与图形界面内核实现代码

《网络攻防》第五周学习总结

教材内容学习 web应用程序体系结构及其安全威胁 web应用体系结构 浏览器 web服务器 web应用程序 数据库 传输协议http/https web应用安全威胁 针对浏览器和终端用户的web浏览安全威胁 针对传输网络的网络协议安全威胁 系统层安全威胁 web服务器软件安全威胁 web应用程序安全威胁 web数据安全威胁 web应用安全攻防技术概述 web应用的信息收集 对目标web应用服务进行发现与剖析,标识出它的基本轮廓,具体包括服务器域名,IP地址和虚拟IP地址,web服务器端口与其他开

《网络攻防》第六周学习总结

教材学习 第五章--TCP/IP网络协议攻击 TCP/IP网络协议栈攻击概述 网络安全属性与攻击模式 网络安全属性:机密性,完整性,可用性,真实性,不可抵赖性 网络攻击基本模式: 截获 篡改 中断 伪造 TCP/IP网络协议栈安全缺陷与攻击技术 网络接口层,互联层,传输层,应用层(P141表格5-1) 原始报文伪造技术及工具 Netwox:强大且易用的开源工具包,可以创建任意的TCP/UDP/IP数据报文 Netwag:GUI界面,发送伪造的欺骗数据包. 网络层协议攻击 IP源地址欺骗 IP源地