首页 > 其他 > 详细

《信息安全工程技术应用》课程设计个人报告

时间:2019-05-26 22:58:33      阅读:535      评论:0      收藏:0      [点我收藏+]

题目:基于Python的GMSSL实现

20165327 杨靖涛

任务内容

最终的目的:用Python语句调用gmssl以实现sm2,然后和组员合作实现用gmssl加密通信的功能

具体实践过程

第一周:

一、本周计划完成的任务:

①熟悉需要的语言知识
②并且弄明白SM2算法的原理

二、 本周实际完成情况(代码,文档,程序运行截图...),未完成计划的原因?如何改进?

①Python程序编了一些算是练手吧:
命令行和集成环境都有用到:
技术分享图片
有的程序一个里面改了很多看结果所以总量看起并不是很多。。。
②对于SM2算法
SM2算法:SM2椭圆曲线公钥密码算法是我国自主设计的公钥密码算法,包括SM2-1椭圆曲线数字签名算法,SM2-2椭圆曲线密钥交换协议,SM2-3椭圆曲线公钥加密算法,分别用于实现数字签名密钥协商和数据加密等功能。SM2算法与RSA算法不同的是,SM2算法是基于椭圆曲线上点群离散对数难题,相对于RSA算法,256位的SM2密码强度已经比2048位的RSA密码强度要高。
ECC算法描述:

  1、用户A选定一条适合加密的椭圆曲线Ep(a,b)(如:y2=x3+ax+b),并取椭圆曲线上一点,作为基点G。
  2、用户A选择一个私有密钥k,并生成公开密钥(公钥PB)K=kG。
  3、用户A将Ep(a,b)和点(公钥)K,G传给用户B。
  4、用户B接到信息后 ,将待传输的明文(M)编码到Ep(a,b)上一点M,并产生一个随机整数r(r<n)。加密开始
  5、用户B计算点C1=M+rK;C2=rG。
  6、用户B将C1、C2传给用户A。
  7、用户A接到信息后,计算C1-kC2,结果就是点M。因为C1-kC2=M+rK-k(rG)=M+rK-r(kG)=M
  再对点M进行解码就可以得到明文。

  密码学中,描述一条Fp上的椭圆曲线,常用到六个参量:
  T=(p,a,b,G,n,h)。
  (p 、a 、b 用来确定一条椭圆曲线,G为基点,n为点G的阶,h 是椭圆曲线上所有点的个数m与n相除的整数部分)

  这几个参量取值的选择,直接影响了加密的安全性。参量值一般要求满足以下几个条件:

  1、p 当然越大越安全,但越大,计算速度会变慢,200位左右可以满足一般安全要求;
  2、p≠n×h;
  3、pt≠1 (mod n),1≤t<20;
  4、4a3+27b2≠0 (mod p);
  5、n 为素数;
  6、h≤4。

第二周:

完成内容:

快速上手指南介绍GmSSL的编译、安装和gmssl命令行工具的基本指令。
下载源代码(zip),解压缩至当前工作目录
$ unzip GmSSL-master.zip
技术分享图片
编译与安装
Linux平台 (其他平台的安装过程见编译与安装)
$ ./config no-saf no-sdf no-skf no-sof no-zuc
$ make
$ sudo make install
安装之后可以执行gmssl命令行工具检查是否成功
$ gmssl version
GmSSL 2.0 - OpenSSL 1.1.0d
SM4加密文件
$ gmssl sms4 -e -in -out .sms4
enter sms4-cbc encryption password:
Verifying - enter sms4-cbc encryption password:
解密
$ gmssl sms4 -d -in .sms4
enter sms4-cbc decryption password:
生成SM3摘要
$ gmssl sm3
SM3(yourfile)= 66c7f0f462eeedd9d1f2d46bdc10e4e24167c4875cf2f7a2297da02b8f4ba8e0
生成SM2密钥并签名
$ gmssl genpkey -algorithm EC -pkeyopt ec_paramgen_curve:sm2p256v1 -out signkey.pem
$ gmssl pkeyutl -sign -pkeyopt ec_scheme:sm2 -inkey signkey.pem -in -out .sig
可以将公钥从signkey.pem中导出并发发布给验证签名的一方
$ gmssl pkey -pubout -in signkey.pem -out vrfykey.pem
$ gmssl pkeyutl -verify -pkeyopt ec_scheme:sm2 -pubin -inkey vrfykey.pem -in -sigfile .sig
生成SM2私钥及证书请求
$ gmssl ecparam -genkey -name sm2p256v1 -text -out user.key
$ gmssl req -new -key user.key -out user.req
查看证书请求内容:
$ gmssl req -in user.req -noout -text -subject

关于代码:加解密的代码已有,正在根据原理理解调试中。

第三周

情况似乎有点变化。。周一在给老师汇报进度以后,发现我们之前的理解有点问题。要做的应该是用Python程序调用gmssl的工具,所以说sm2的具体实现在工具箱里面是已经有了的。原来给的链接是用命令行调用的,而我们需要做的是通过写Python程序进行调用。
所以做的方向和之前相比应该做出相应的调整。
参考pyOpenSSL的来实现gmssl。
我实现的sm2的加解密以及签名验签:
技术分享图片
完成的任务:
1、在Windows环境下重新装了pip和gmssl
技术分享图片
2、完成调用代码的编写(代码已上传到码云
3、调试成功运行调用代码
(中途因为版本问题3.4版本问题出现了)
技术分享图片
更换到最新版本问题得以解决
技术分享图片

课程设计总结

1、一开始通过MOOC课程学习了Python基本语法,也调试了书上的一些编程例子;
2、根据自己做的版块,一开始是实现sm2算法,中途和老师交流以后发现自己一开始对题目理解有偏差,应该做的是用Python语句调用gmssl以实现相应的功能;
3、参考Python实现OpenSSL中rsa跑通实现sm2的
4、关安全通信:只实现了OpenSSL的。
5、总的来说每周都做了相应的工作,从学习基本语言到深入理解算法再到最终实现自己负责的板块,收获很大,同时也要感谢老师和队友整个工程的帮助!

参考资料

1、国密工具箱
2、pyOpenssl简介

《信息安全工程技术应用》课程设计个人报告

原文:https://www.cnblogs.com/yjtblog/p/10928054.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!