LXR | KVM | PM | Time | Interrupt | Systems Performance | Bootup Optimization

SM2/3/4:gmssl命令行、gmssl-python、openssl等验证

GmSSL是一套实现国密算法的开源库,支持C、Python等语言。

更多参考《GitHub - guanzhi/GmSSL: 支持国密SM2/SM3/SM4/SM9/SSL的密码工具箱》。

1 GmSSL介绍

GmSSL支持SM2/SM3/SM4/SM9/ZUC等国密算法。SM2国密数字证书及基于SM2证书的SSL/TLS安全通信协议。

主要特性

  • 超轻量:GmSSL 3 大幅度降低了内存需求和二进制代码体积,不依赖动态内存,可以用于无操作系统的低功耗嵌入式环境(MCU、SOC等),开发者也可以更容易地将国密算法和SSL协议嵌入到现有的项目中。
  • 更合规:GmSSL 3 可以配置为仅包含国密算法和国密协议(TLCP协议),依赖GmSSL 的密码应用更容易满足密码产品型号检测的要求,避免由于混杂非国密算法、不安全算法等导致的安全问题和合规问题。
  • 更安全:TLS 1.3在安全性和通信延迟上相对之前的TLS协议有巨大的提升,GmSSL 3 支持TLS 1.3协议和RFC 8998的国密套件。GmSSL 3 默认支持密钥的加密保护,提升了密码算法的抗侧信道攻击能力。
  • 跨平台:GmSSL 3 更容易跨平台,构建系统不再依赖Perl,默认的CMake构建系统可以容易地和Visual Studio、Android NDK等默认编译工具配合使用,开发者也可以手工编写Makefile在特殊环境中编译、剪裁。

密码算法

  • 分组密码:SM4 (CBC/CTR/GCM/ECB/CFB/OFB/CCM/XTS), AES (CBC/CTR/GCM)
  • 序列密码:ZUC/ZUC-256, ChaCha20
  • 哈希函数: SM3, SHA-1, SHA-224/256/384/512
  • 公钥密码:SM2加密/签名, SM9加密/签名
  • MAC算法:HMAC, GHASH, CBC-MAC
  • 密钥导出函数:PBKDF2、HKDF
  • 随机数生成器:Intel RDRAND, HASH_DRBG (NIST.SP.800-90A)

证书和数字信封

  • 数字证书:X.509证书, CRL证书注销列表, CSR (PKCS #10) 证书签名请求
  • 私钥加密:基于SM4/SM3口令加密的PEM格式私钥 (PKCS #8)
  • 数字信封:SM2密码消息 (GM/T 0010-2012)

SSL协议

  • TLCP 1.1,支持密码套TLS_ECC_SM4_CBC_SM3 {0xE0,0x13} (GB/T 38636-2020、GM/T 0024-2014)
  • TLS 1.2,支持密码套件TLS_ECDHE_SM4_CBC_SM3 {0xE0,0x11} (GB/T 38636-2020、GM/T 0024-2014)
  • TLS 1.3,支持密码套件TLS_SM4_GCM_SM3 {0x00,0xC6} (RFC 8998)

2 GmSSL编译

下载代码https://github.com/guanzhi/GmSSL.git,编译:

git checkout v3.1.1--切换到Tag v3.1.1。

make build && cd build cmake .. make

3 GmSSL主要功能解析

3.1 SM2

使用固定的SM2秘钥进行签名和验签:

3.1.1 gmssl命令行测试

./demo_sm2_sign

数据:44F0061E69FA6FDFC290C494654A05DC0C053DA7E5C52B84EF93A9D67D3FFF88

私钥:BC69045CA71674F5005C0B9D33E9AD5141369DE98F4986AFBA8999268939C595

公钥:F3 33 E0 06 7A 22 40 AB 7B CC 2B 61 D8 62 F5 62 54 F5 28 07 8A AB 0E 3C 3B 6E 71 08 89 72 1E 95 DA 9A 7A 14 D6 97 34 60 E7 BB E3 5C 07 D4 8B 6C 23 E0 50 C8 C4 66 84 42 CD D5 7A 26 6A 2E 2B EA

签名-R(动态变化):15 85 D8 A3 88 A6 8A 71 6F E9 CF 8A 41 B3 E5 10 EF 3D 25 BA 74 DC D3 97 5F D2 17 F2 62 CA 50 5D

签名-S(动态变化):BA 6C A7 BE 7A 97 7E 23 DB 12 89 71 4B B4 91 6A FA 39 7E F6 1E B3 9B 7B 87 E0 90 11 6E C3 78 02 

结果如下:

3.1.2 网站验证

通过如下网站验证:SM2 在线签名生成工具 SM2 Sign With SM3SM2 在线验签工具 SM2 Verify Sign With SM3

3.1.3 代码流程

sm3_digest
format_bytes
sm2_key_generate
format_bytes
sm2_sign
sm2_verify

3.2 SM3

3.2.1 gmssl命令行测试

echo -n "helloworld" | ./demo_sm3

 结果如下:

3.2.2 openssl测试

echo -n "helloworld" | openssl dgst -sm3
结果:
SM3(stdin)= c70c5f73da4e8b8b73478af54241469566f6497e16c053a03a0170fa00078283

3.2.3 网站测试 

验证网址:《Hash在线计算工具 Hash online tool》。

 3.3 SM4

3.3.1 gmssl命令行测试

修改SM4 CBC测试:

 测试结果如下:

./demo_sm4_cbc

3.3.2 openssl测试

echo -n "AAAAAAAABBBBBBBBCCCCCCCCDDDDDDDDEEEEEEEEFFFFFFFFAAAAAAAABBBBBBBBAAAAAAAABBBBBBBBCCCCCCCCDDDDDDDDEEEEEEEEFFFFFFFFAAAAAAAABBBBBBBB" | xxd -r -p > input.data
openssl enc -in input.data -out encrypted.data -e -sm4-cbc -K 0123456789ABCDEFFEDCBA9876543210 -iv 000102030405060708090A0B0C0D0E0F
openssl enc -in encrypted.dat -out replaintext.data -d -sm4-cbc -K 0123456789ABCDEFFEDCBA9876543210 -iv 000102030405060708090A0B0C0D0E0F

执行hexdump input.data encrypted.data replaintext.data,结果如下:

3.3.3 网站测试

 验证网址:《SM4 CBC 在线加密工具》和《SM4 CBC 在线解密工具》。

3.3.4 代码流程

rand_bytes
sm4_set_encrypt_key--根据输入的密钥,进行32轮异或运算。
sm4_cbc_encrypt--使用异或后的密钥,进行加密操作。
  gmssl_memxor
  sm4_encrypt
sm4_set_decrypt_key
sm4_cbc_decrypt
  sm4_encrypt
  memxor

 3.4 gmssl证书

使用gmssl命令:生成密钥、生成证书、验证证书。

gmssl sm2keygen -pass P@ssw0rd -out rootcakey.pem
gmssl certgen -C CN -ST Beijing -L Haidian -O PKU -OU CS -CN ROOTCA -days 3650 \
    -key rootcakey.pem -pass P@ssw0rd \
    -ca -path_len_constraint 6 \
    -key_usage keyCertSign -key_usage cRLSign \
    -crl_http_uri http://pku.edu.cn/ca.crl \
    -ca_issuers_uri http://pku.edu.cn/ca.crt -ocsp_uri http://ocsp.pku.edu.cn \
    -out rootcacert.pem

./gmssl certparse -in rootcacert.pem

./gmssl certverify -in rootcacert.pem  -cacert rootcacert.pem

4 gmssl-python

gmssl-python基于GmSSL提供Python接口API。

安装gmssl-python:pip install gmssl-python,参考《GitHub - GmSSL/GmSSL-Python: Python binding to the GmSSL library》。

posted on 2024-11-02 21:52  ArnoldLu  阅读(484)  评论(0编辑  收藏  举报

导航