国密算法即国家密码局认定的国产密码算法。
- 国密算法是商用密码,仅能用于商业用途。
- 国密算法是一套标准,由国家密码局制定的规范,凡是符合的,都可以称之为国密算法。
- 国密算法暂无官方的代码实现,企业可以自己编码实现,并申请国家密码局认证,通过后即被认可。
- SM系列密码算法是国密算法的一种,SM是商密的缩写,SM后的序号分别表示了不同种类的密码(应用场景不同)。
- 国密算法对标国际算法,国际算法由美国的安全局发布,是现今最通用的商用算法,也是在各种密码学教材中重点介绍的。
SM系列国密算法
SM系列算法主要有SM1,SM2,SM3,SM4,SM7和SM9。SM1和SM7算法没有公开,主要用于芯片集成(采用硬件实现,直接嵌入),如智能IC卡、加密机、身份证和一卡通等。目前应用较多的是SM2、SM3和SM4算法,采用软件实现,这三者用法不一。
- SM2属于非对称加密算法,使用公钥加密,私钥解密,在安全性和运算速度方面要优于RSA算法。
- SM3属于不可逆加密算法,类似于md5,常用于签名。
- SM4属于对称加密算法,可用于替代DES/AES等国际算法,SM4算法与AES算法具有相同的密钥长度和分组长度,都是128位。
国密算法标准
由国家密码管理局管理和发布,国家密码管理局的官方网站是:
https://www.oscca.gov.cn/sca/index.shtml
国密算法标准文档查询:
https://www.oscca.gov.cn/app-zxfw/zxfw/bzgfcx.jsp
可以提供电子认证服务的机构名单:
https://www.oscca.gov.cn/app-zxfw/xzspsx/dzzwdzrzfuwujigouml.jsp?channel_code=c100144
国密算法的开源实现
目前比较有名的是北京大学的关志研究员在 GitHub 上的开源项目,毕竟涉及安全,背书还是很重要的。
全套的国密算法标准文档:
GitHub - guanzhi/GM-Standards: 中华人民共和国密码行业标准(GM/T)文本
GMSSL,一个类似 OpenSSL 的商密算法工具。
https://www.gmssl.cn/gmssl/index.jsp
GmSSL项目也是由北京大学关志研究员的密码学研究组开发维护,项目源码托管于GitHub:
GitHub - guanzhi/GmSSL: 支持国密SM2/SM3/SM4/SM9/SSL的密码工具箱
GmSSL是由北京大学自主开发的国产商用密码开源库,实现了对国密算法、标准和安全通信协议的全面功能覆盖,支持包括移动端在内的主流操作系统和处理器,支持密码钥匙、密码卡等典型国产密码硬件,提供功能丰富的命令行工具及多种编译语言编程接口。
GmSSL是从鼎鼎大名的开源安全库 OpenSSL fork而来,研究其源码可以看出它是基于OpenSSL 1.1.0d开发。GmSSL与OpenSSL保持接口兼容,理论上使用OpenSSL库的产品,可以直接使用GmSSL替换。GmSSL项目采用对商业应用友好的类BSD开源许可证,无论是在开源项目,还是闭源的商业应用中,都可以放心使用,不必担心授权问题。
其他实现
java 代码参考链接 https://github.com/hou-xx/encryption-and-decryption 的 SmDemo.java
和 SmDemoForJs.java
前端代码(h5+js)参考链接 https://github.com/hou-xx/SM2-front
java bcprov 国密 依赖 jar包 版本 升级 降级 教程_bcprov-jdk16_九二战歌的博客-CSDN博客
在线加解密工具
在线生成sm2公钥私钥:
SM2 密钥在线生成工具
在线加密链接:
DES在线解密 DES在线加密 des hex - The X 在线工具
参考文章
了解国密算法的分类(SM1-9和祖冲之密码的介绍):国密算法分类 - 知乎
国密算法与国际算法的对比:国密算法学习整理_海洋中的一滴的博客-CSDN博客
国密算法GMSSL介绍:初识国密算法_国密算法收费吗_云水木石的博客-CSDN博客
基于java的前后端实现国密:国密算法纯软件实现(java+javascript ) - 简书