课设第二周理论
一、OpenSSL 是一个开源项目,其组成主要包括一下三个组件:
openssl:多用途的命令行工具
libcrypto:加密算法库
libssl:加密模块应用库,实现了ssl及tls
openssl可以实现:秘钥证书管理、对称加密和非对称加密。
1、对称加密
- 对称加密需要使用的标准命令为 enc ,用法如下:
openssl enc -ciphername [-in filename] [-out filename] [-pass arg] [-e] [-d] [-a/-base64]
[-A] [-k password] [-kfile filename] [-K key] [-iv IV] [-S salt] [-salt] [-nosalt] [-z] [-md]
[-p] [-P] [-bufsize number] [-nopad] [-debug] [-none] [-engine id] - 常用选项有:
-in filename:指定要加密的文件存放路径
-out filename:指定加密后的文件存放路径
-salt:自动插入一个随机数作为文件内容加密,默认选项
-e:可以指明一种加密算法,若不指的话将使用默认加密算法
-d:解密,解密时也可以指定算法,若不指定则使用默认算法,但一定要与加密时的算法一致
-a/-base64:使用-base64位编码格式
2、单向加密
- 单向加密需要使用的标准命令为 dgst ,用法如下:
openssl dgst [-md5|-md4|-md2|-sha1|-sha|-mdc2|-ripemd160|-dss1] [-c] [-d] [-hex] [-binary]
[-out filename] [-sign filename] [-keyform arg] [-passin arg] [-verify filename] [-prverify
filename] [-signature filename] [-hmac key] [file...] - 常用选项有:
[-md5|-md4|-md2|-sha1|-sha|-mdc2|-ripemd160|-dss1] :指定一种加密算法
-out filename:将加密的内容保存到指定文件中
3、生成密码
- 生成密码需要使用的标准命令为 passwd ,用法如下:
openssl passwd [-crypt] [-1] [-apr1] [-salt string] [-in file] [-stdin] [-noverify] [-quiet] [-table] {password} - 常用选项有:
-1:使用md5加密算法
-salt string:加入随机数,最多8位随机数
-in file:对输入的文件内容进行加密
-stdion:对标准输入的内容进行加密
4、生成随机数
- 生成随机数需要用到的标准命令为 rand ,用法如下:
openssl rand [-out file] [-rand file(s)] [-base64] [-hex] num - 常用选项有:
-out file:将生成的随机数保存至指定文件中
-base64:使用base64 编码格式
-hex:使用16进制编码格式
5、生成密钥对
- 首先需要先使用 genrsa 标准命令生成私钥,然后再使用 rsa 标准命令从私钥中提取公钥。
- ①genrsa 的用法如下:
openssl genrsa [-out filename] [-passout arg] [-des] [-des3] [-idea] [-f4] [-3] [-rand file(s)] [-engine id] [numbits]- 常用选项有:
-out filename:将生成的私钥保存至指定的文件中
-des|-des3|-idea:不同的加密算法
numbits:指定生成私钥的大小,默认是2048
一般情况下秘钥文件的权限一定要控制好,只能自己读写,因此可以使用 umask 命令设置生成的私钥权限
- 常用选项有:
- ②ras 的用法如下:
openssl rsa [-inform PEM|NET|DER] [-outform PEM|NET|DER] [-in filename] [-passin arg] [-out filename] [-passout arg]
[-sgckey] [-des] [-des3] [-idea] [-text] [-noout] [-modulus] [-check] [-pubin] [-pubout] [-engine id]- 常用选项:
-in filename:指明私钥文件
-out filename:指明将提取出的公钥保存至指定文件中
-pubout:根据私钥提取出公钥
- 常用选项:
6、创建CA和申请证书
使用openssl工具创建CA证书和申请证书时,需要先查看配置文件,因为配置文件中对证书的名称和存放位置等相关信息都做了定义,具体可参考 /etc/pki/tls/openssl.cnf 文件。
二、GMSSL
1、定义
- GmSSL是一个开源的密码工具箱,可以替代应用中的OpenSSL组件,并使应用自动具备基于国密的安全能力
- 支持SM2/SM3/SM4/SM9/ZUC等国密(国家商用密码)算法、SM2国密数字证书及基于SM2证书的SSL/TLS安全通信协议、支持国密硬件密码设备,提供符合国密规范的编程接口与命令行工具
- 构建PKI/CA、安全通信、数据加密等符合国密标准的安全应用
2、gmssl组成
- 加密
- 主要指的是sm2 sm3 sm4加密算法,以及相关的加密组件
- 通信
- 指的是gmtls
- 按照一个 GM/T 0024-2014规范实现的,采用双证书,签名证书+加密证书
3、生成证书
- 生成密钥对
gmssl genpkey -algorithm EC -pkeyopt ec_paramgen_curve:sm2p256v1 -pkeyopt ec_param_enc:named_curve -out skey.pem
- 生成CA证书
gmssl req -new -x509 -key skey.pem -out cacert.pem
- 生成用户证书请求
gmssl req -new -key skey.pem -out serverreq.pem
- 用CA证书签名生成用户证书
gmssl ca -in serverreq.pem -out servercert.pem
4、双证书
- gmssl对双证书和双密钥的设置
- 直接设置两个sm2证书和密钥就可以,没有新增接口,都是代码里自己适配:
keyusagedigitalSignature类型的证书是签名证书,否则是加密证书,密钥呢,加密证书存在的时候是加密密钥,否则是签名密钥- 这个其实是有漏洞的,必须先设置签名证书。。然后才是加密证书
tassl是有的,增加了一个设置加密密钥的接口SSL_use_enc_PrivateKey,设置证书的接口也是代码里适配的,证书类型需要keyusage(keyAgreementkeyEnciphermentdataEncipherment)
三、实现SM2,ECC,RSA加密算法
1、 SM2算法
-
公私钥
- 私钥:BN_大整数
- 公钥:EC-Point椭圆曲线上的点
- 整体结构

-
数字签名
-
签名(User A)

说明:第5步若r=0或r+k=n则返回第3步;第6步若s=0则返回第3步。 -
验签(User B)

-
原理
-
计算流程
(x′1; y′1)
= [s′]G + [t]PA
= [s′]G + [s′] PA + [r′] PA
= [s′]G +[s′][dA] G +[r′·dA] G
= [(1+ dA)×s′] G+[r′·dA] G
= [k − r · dA) ] G+[r′·dA] G
= [k] G
= ( x1, y1 )
-
密钥交换协议
-
秘钥交换(User A & User B)

-
原理:参与KDF运算的所有输入数据均相等,所以得到的协商密钥自然相同。
-
-
密钥封装和加解密
-
加密(User A)

说明:第3步计算S=[h]PB略,因h=1 -
解密(User B)

-
原理:关键在于说明加密流程第4步计算的 [k]PB= (x2, y2) 与解密流程第2步计算的 [dB]C1 = (x2, y2) 相等。解密流程第2步计算,流程如下:
-
(x2, y2)
= [dB]C1
=[dB][k]G
=[k] [dB] G
=[ k] PB
[k]PB是加密流程第4步计算值。所以加密流程第4步计算的[k]PB = (x2,y2) 与解密流程第2步计算的[dB]C1 = (x2, y2) 相等。
2、RSA
-
RSA算法是一种非对称密码算法,所谓非对称,就是指该算法需要一对密钥,使用其中一个加密,则需要用另一个才能解密。
-
RSA的算法涉及三个参数,n、e1、e2。
其中,n是两个大质数p、q的积,n的二进制表示时所占用的位数,就是所谓的密钥长度。
e1和e2是一对相关的值,e1可以任意取,但要求e1与(p-1)*(q-1)互质;再选择e2,要求(e2*e1)mod((p-1)*(q-1))=1。
(n,e1),(n,e2)就是密钥对。其中(n,e1)为公钥,(n,e2)为私钥。
-
RSA加解密的算法完全相同,设A为明文,B为密文,则:A=B^e2 mod n;B=A^e1 mod n;(公钥加密体制中,一般用公钥加密,私钥解密)
-
e1和e2可以互换使用,即:
A=B^e1 mod n;B=A^e2 mod n;
3、SM2算法VS RSA算法
- SM2性能更优更安全:密码复杂度高、处理速度快、机器性能消耗更小 [2] 。
SM2 RSA
算法结构 基本椭圆曲线(ECC) 基于特殊的可逆模幂运算
计算复杂度 完全指数级 亚指数级
存储空间 192-256bit 2048-4096bit
秘钥生成速度 较RSA算法快百倍以上 慢
解密加密速度 较快 一般
浙公网安备 33010602011771号