gmsm

module
v0.27.3-beta.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 10, 2024 License: MIT

README

Go语言商用密码软件

Github CI arm64-qemu sm3-sm4-ni-qemu codecov Go Report Card Documentation GitHub go.mod Go version (branch) Release

English | 简体中文

Go语言商用密码软件,简称GMSM,一个安全、高性能、易于使用的Go语言商用密码软件库,涵盖商用密码公开算法SM2/SM3/SM4/SM9/ZUC。

用户文档

包结构

  • SM2 - SM2椭圆曲线公钥密码算法,曲线的具体实现位于internal/sm2ec package中。SM2曲线实现性能和Golang SDK中的NIST P256椭圆曲线原生实现(非BoringCrypto)类似,也对amd64arm64架构做了专门汇编优化实现,您也可以参考SM2实现细节及相关Wiki和代码,以获得更多实现细节。SM2包实现了SM2椭圆曲线公钥密码算法的数字签名算法、公钥加密算法、密钥交换算法,以及《GB/T 35276-2017信息安全技术 SM2密码算法使用规范》中的密钥对保护数据格式。

  • SM3 - SM3密码杂凑算法实现。amd64下分别针对AVX2+BMI2、AVX、SSE2+SSSE3做了消息扩展部分的SIMD实现; arm64下使用NEON指令做了消息扩展部分的SIMD实现,同时也提供了基于A64扩展密码指令的汇编实现。您也可以参考SM3性能优化及相关Wiki和代码,以获得更多实现细节。

  • SM4 - SM4分组密码算法实现。amd64下使用AES指令加上AVX2、AVX、SSE2+SSSE3实现了比较好的性能。arm64下使用AES指令加上NEON指令实现了比较好的性能,同时也提供了基于A64扩展密码指令的汇编实现。针对ECB/CBC/GCM/XTS加密模式,做了和SM4分组密码算法的融合汇编优化实现。您也可以参考SM4性能优化及相关Wiki和代码,以获得更多实现细节。

  • SM9 - SM9标识密码算法实现。基础的素域、扩域、椭圆曲线运算以及双线性对运算位于bn256包中,分别对amd64arm64架构做了优化实现。您也可以参考SM9实现及优化及相关讨论和代码,以获得更多实现细节。SM9包实现了SM9标识密码算法的密钥生成、数字签名算法、密钥封装机制和公钥加密算法、密钥交换协议。

  • ZUC - 祖冲之序列密码算法实现。使用SIMD、AES指令以及无进位乘法指令,分别对amd64arm64架构做了优化实现, 您也可以参考ZUC实现及优化和相关代码,以获得更多实现细节。ZUC包实现了基于祖冲之序列密码算法的机密性算法、128/256位完整性算法。

  • CFCA - CFCA(中金)特定实现,目前实现的是SM2私钥、证书封装处理,对应SADK中的PKCS12_SM2

  • CIPHER - ECB/CCM/XTS/HCTR/BC/OFBNLF加密模式实现。XTS模式同时支持NIST规范和国标 GB/T 17964-2021。当前的XTS模式由于实现了BlockMode,其结构包含一个tweak数组,所以其不支持并发使用分组链接(BC)模式带非线性函数的输出反馈(OFBNLF)模式为分组密码算法的工作模式标准GB/T 17964的遗留模式,带泛杂凑函数的计数器(HCTR)模式GB/T 17964-2021中的新增模式。分组链接(BC)模式和CBC模式类似;而带非线性函数的输出反馈(OFBNLF)模式的话,从软件实现的角度来看,基本没有性能优化的空间。

  • SMX509 - Go语言X509包的分支,加入了商用密码支持。

  • PADDING - 一些填充方法实现(非常量时间运行):pkcs7,这是当前主要使用的填充方式,对应GB/T 17964-2021的附录C.2 填充方法 1;iso9797m2,对应GB/T 17964-2021的附录C.3 填充方法 2;ansix923,对应ANSI X9.23标准。GB/T 17964-2021的附录C.4 填充方法 3,目前没有实现,它对应ISO/IEC_9797-1 padding method 3,如有使用需求,可以考虑实现。

  • PKCS7 - mozilla-services/pkcs7 项目的分支,加入了商用密码支持。

  • PKCS8 - youmark/pkcs8项目的分支,加入了商用密码支持。

  • ECDH - 一个类似Go语言中ECDH包的实现,支持SM2椭圆曲线密码算法的ECDH & SM2MQV协议,该实现没有使用 big.Int,也是一个SM2包中密钥交换协议实现的替换实现(推荐使用)。

  • DRBG - 《GM/T 0105-2021软件随机数发生器设计指南》实现。本实现同时支持NIST Special Publication 800-90A(部分) 和 GM/T 0105-2021,NIST相关实现使用了NIST提供的测试数据进行测试。本实现不支持并发使用

相关项目

  • Trisia/TLCP - 一个《GB/T 38636-2020 信息安全技术 传输层密码协议》Go语言实现项目。
  • Trisia/Randomness - 一个Go语言随机性检测规范实现。
  • PKCS12 - SSLMate/go-pkcs12项目的一个分支,加入了商用密码支持,由于PKCS12标准比较老,安全性不高,所以以独立项目进行维护。
  • MKSMCERT - 一个用于生成SM2私钥和证书的工具,主要用于开发测试,它是FiloSottile/mkcert项目的一个分支,加入了商用密码支持。

软件许可

本软件使用MIT许可证,详情请参考软件许可。如果不熟悉MIT许可证条款,请参考MIT许可证。请知晓和遵守被许可人义务

致谢

本项目的基础架构、设计和部分代码源自golang crypto.

SM4分组密码算法amd64 SIMD AES-NI实现(SSE部分)的算法源自mjosaarinen/sm4ni

SM9/BN256最初版本的代码复制自cloudflare/bn256项目,后期对基础的素域、扩域、椭圆曲线运算等进行了重写。

祖冲之序列密码算法实现amd64 SIMD AES-NI, CLMUL实现算法源自Intel(R) Multi-Buffer Crypto for IPsec Library项目。

PKCS7包代码是mozilla-services/pkcs7项目的一个分支,加入了商用密码扩展。

PKCS8包代码是youmark/pkcs8项目的一个分支,加入了商用密码扩展。

免责声明

使用本项目前,请务必仔细阅读GMSM软件免责声明

Directories

Path Synopsis
Package cfca handles cfca issued key and certificate
Package cfca handles cfca issued key and certificate
Block Chaining operation mode (BC mode) in Chinese national standard GB/T 17964-2021.
Block Chaining operation mode (BC mode) in Chinese national standard GB/T 17964-2021.
Package drbg implements Random Number Generation Using Deterministic Random Bit Generators.
Package drbg implements Random Number Generation Using Deterministic Random Bit Generators.
Package ecdh implements Elliptic Curve Diffie-Hellman / SM2-MQV over SM2 curve.
Package ecdh implements Elliptic Curve Diffie-Hellman / SM2-MQV over SM2 curve.
internal
godebug
Package godebug parses the GODEBUG environment variable.
Package godebug parses the GODEBUG environment variable.
randutil
Package randutil contains internal randomness utilities for various crypto packages.
Package randutil contains internal randomness utilities for various crypto packages.
sm2ec
Package sm2ec implements the SM2 Prime elliptic curves.
Package sm2ec implements the SM2 Prime elliptic curves.
Package kdf implements ShangMi(SM) used Key Derivation Function, compliances with GB/T 32918.4-2016 5.4.3.
Package kdf implements ShangMi(SM) used Key Derivation Function, compliances with GB/T 32918.4-2016 5.4.3.
Package padding implements some padding schemes for padding octets at the trailing end.
Package padding implements some padding schemes for padding octets at the trailing end.
Package pkcs implements ciphers used by PKCS#7 & PKCS#8.
Package pkcs implements ciphers used by PKCS#7 & PKCS#8.
Package pkcs7 implements parsing and generation of some PKCS#7 structures.
Package pkcs7 implements parsing and generation of some PKCS#7 structures.
Package pkcs8 implements functions to parse and convert private keys in PKCS#8 format with ShangMi(SM) support, as defined in RFC5208 and RFC5958.
Package pkcs8 implements functions to parse and convert private keys in PKCS#8 format with ShangMi(SM) support, as defined in RFC5208 and RFC5958.
sm2
Package sm2 implements ShangMi(SM) sm2 digital signature, public key encryption and key exchange algorithms.
Package sm2 implements ShangMi(SM) sm2 digital signature, public key encryption and key exchange algorithms.
sm2ec
Package sm2ec defines/implements SM2 curve structure.
Package sm2ec defines/implements SM2 curve structure.
Package sm3 implements ShangMi(SM) sm3 hash algorithm.
Package sm3 implements ShangMi(SM) sm3 hash algorithm.
Package sm4 implements ShangMi(SM) sm4 symmetric encryption algorithm.
Package sm4 implements ShangMi(SM) sm4 symmetric encryption algorithm.
sm9
Package sm9 implements ShangMi(SM) sm9 digital signature, encryption and key exchange algorithms.
Package sm9 implements ShangMi(SM) sm9 digital signature, encryption and key exchange algorithms.
bn256
Package bn256 defines/implements ShangMi(SM) sm9's curves and pairing.
Package bn256 defines/implements ShangMi(SM) sm9's curves and pairing.
Package smx509 parses X.509-encoded keys and certificates include SM2/SM3 support.
Package smx509 parses X.509-encoded keys and certificates include SM2/SM3 support.
Package zuc implements ShangMi(SM) zuc stream cipher and integrity algorithm.
Package zuc implements ShangMi(SM) zuc stream cipher and integrity algorithm.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL