目录
1 国密算法简介
国密算法是国家商用密码算法的简称。自2012年以来,国家密码管理局以《中华人民共和国密码行业标准》的方式,陆续公布了SM2/SM3/SM4等密码算法标准及其应用规范。其中“SM”代表“商密”,即用于商用的、不涉及国家秘密的密码技术。其中SM2为基于椭圆曲线密码的公钥密码算法标准,包含数字签名、密钥交换和公钥加密,用于替换RSA/Diffie-Hellman/ECDSA/ECDH等国际算法;SM3为密码哈希算法,用于替代MD5/SHA-1/SHA-256等国际算法;SM4为分组密码,用于替代DES/AES等国际算法;SM9为基于身份的密码算法,可以替代基于数字证书的PKI/CA体系。通过部署国密算法,可以降低由弱密码和错误实现带来的安全风险和部署PKI/CA带来的开销。
序号 | 算法类型 | 国密算法 | 应用范围及描述 | 对应的国际算法 | 补充 |
1 | 非对称加密 | SM2 | 身份认证,数据签名,密码交换,256位椭圆曲线 | RSA、RSA4096 | |
2 | 对称加密 | SM1 | 128位数据加密,算法不公开,仅以IP核的形式存在于芯片中。智能IC卡、智能密码钥匙、加密卡、加密机。 | DES、3DES、AES(128)、AES192、AES256 | AES是取代DES的算法 |
SM4 | 128位数据加密,相当于AES(128) | ||||
3 | 完整性运算 | SM3 | 256位数据摘要计算,相当于SHA256 | SHA1、SHA-256、SHA-384、SHA-512 |
2 SM4的代码实现
SM4.0(原名SMS4.0)是中华人民共和国政府采用的一种分组密码标准,由国家密码管理局于2012年3月21日发布。相关标准为“GM/T 0002-2012《SM4分组密码算法》(原SMS4分组密码算法)”。 在商用密码体系中,SM4主要用于数据加密,其算法公开,分组长度与密钥长度均为128bit,加密算法与密钥扩展算法都采用32轮非线性迭代结构,S盒为固定的8比特输入8比特输出。 SM4.0中的指令长度被提升到大于64K(即64×1024)的水平,这是SM 3.0规格(渲染指令长度允许大于512)的128倍。
/************************************************************************************
功 能:SM4模式key生成
参 数:key - [out] SM4模式key
raw_key - [in] 秘钥,16字节
返 回:void
************************************************************************************/
void sm4_set_encrypt_key(SM4_KEY *key, const uint8_t raw_key[SM4_KEY_SIZE]);
/************************************************************************************
功 能:SM4-ECB-noPadding 加密
参 数:key - [in] SM4模式key
in - [in] 待加密数据,16字节
out - [out] 加密后数据,16字节
返 回:void
************************************************************************************/
void sm4_encrypt(const SM4_KEY *key, const uint8_t in[SM4_BLOCK_SIZE], uint8_t out[SM4_BLOCK_SIZE]);
/************************************************************************************
功 能:SM4-CBC-noPadding 加密
参 数:key - [in] SM4模式key
iv - [in] iv向量,16字节
in - [in] 待加密数据,16字节的整数倍
nblocks - [in] 待加密数据块个数,每块16字节
out - [out] 加密后数据,16字节的整数倍
返 回:void
************************************************************************************/
void sm4_cbc_encrypt(const SM4_KEY *key, const uint8_t iv[SM4_BLOCK_SIZE],
const uint8_t *in, size_t nblocks, uint8_t *out);
3 演示Demo
3.1 开发环境
-
GmSSL3.1.1
-
Visual Studio 2015
-
Windows 10 Pro x64
3.2 功能介绍
演示程序主界面如下图所示,包括SM4加密和SM4解密等功能。
支持String(文本)、Hex(十六进制)、Base64等多种数据格式。
3.3 下载地址
开发环境:
-
Windows 10 pro x64
-
Visual Studio 2015
-
GmSSL3.1.1