课设第二周理论

一、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算法快百倍以上 慢
    解密加密速度 较快 一般
posted on 2019-05-19 23:32  musea  阅读(374)  评论(0)    收藏  举报