初识国密
国内搞产业区块链,国密是几乎绕不开的一个坎儿,于是就皮毛了解了一下。
0x01 什么是国密
国密是国家商用密码的简称,是国家密码局认定的国产密码算法。通常用 GM/SM 来表示,GM 就是国密的拼音首字母,SM 就是商密两个字的拼音首字母。
说起来商用密码的应用领域十分广泛,主要用于对不涉及国家秘密内容但又具有敏感性的内部信息、行政事务信息、经济信息等进行加密保护。比如:商用密码可用于企业门禁管理、企业内部的各类敏感信息的传输加密、存储加密,防止非法第三方获取信息内容;也可用于各种安全认证、网上银行、数字签名等。
但事实上也就国内有国家标准要求的地方用用了。
因为国密标准是由国家密码局认定和发布的,很自然的就想去官方网站去看看。国家密码局的官网是 http://www.oscca.gov.cn/sca/index.shtml,和其它政府网站一样,望着满屏的信息,就是找不到我所想要的,比如国密算法标准和规范文档,网站上只有发布文档的公告,但找不到获取方法。
后来发现还有个“密码行业标准化技术委员会”,国密相关的文档可以在 http://www.gmbz.org.cn/main/bzlb.html 找到。
万能的 github 上也已经有人收集规整了一套相关标准和规范文档:https://github.com/guanzhi/GM-Standards
0x02 常用国密
常用的国密有 SM2/SM3/SM4/SM9
SM2为基于椭圆曲线密码的公钥密码算法标准,包含数字签名、密钥交换和公钥加密,用于替换RSA/Diffie-Hellman/ECDSA/ECDH等国际算法。
SM3为密码哈希算法,用于替代MD5/SHA-1/SHA-256等国际算法。
SM4为分组密码,用于替代DES/AES等国际算法。
SM9为基于身份的密码算法,可以替代基于数字证书的PKI/CA体系。
0x03 相关代码库
GmSSL 应该是对国密实现最为完全的开源代码库了,C 语言实现
https://github.com/guanzhi/GmSSL/
下面是苏州同济区块链研究院有限公司的一个开源实现,只是实现了 SM2/SM3/SM4 等少数标准,用的 Go 语言
https://github.com/tjfoc/gmsm
看到一个项目用到了这个库,就在这里列一下,Go 语言实现
https://github.com/ZZMarquis/gm
Java 语言实现版本
https://github.com/PopezLotado/SM2Java