天天看点

国密算法(SM2)生成秘钥一、国密算法介绍二、SM2算法和RSA算法比较三、生成SM2秘钥参考

国密算法(SM2)生成秘钥

  • 一、国密算法介绍
  • 二、SM2算法和RSA算法比较
  • 三、生成SM2秘钥
    • 1、openssl生成SM2秘钥
      • 1.1、安装openssl
      • 1.2、生成SM2私钥
      • 1.3、生成SM2公钥
    • 2、nodejs:使用sm-crypto包生成SM2秘钥
    • 3、c++生成秘钥
  • 参考

一、国密算法介绍

国密即国家密码局认定的国产密码算法。主要有SM1,SM2,SM3,SM4。密钥长度和分组长度均为128位。

  • SM1 为对称加密。其加密强度与AES相当。该算法不公开,调用该算法时,需要通过加密芯片的接口进行调用。
  • SM2为非对称加密,基于ECC。该算法已公开。由于该算法基于ECC,故其签名速度与秘钥生成速度都快于RSA。ECC 256位(SM2采用的就是ECC 256位的一种)安全强度比RSA 2048位高,但运算速度快于RSA。
  • SM3 消息摘要。可以用MD5作为对比理解。该算法已公开。校验结果为256位。
  • SM4 无线局域网标准的分组数据算法。对称加密,密钥长度和分组长度均为128位。

二、SM2算法和RSA算法比较

SM2性能更优更安全:密码复杂度高、处理速度快、机器性能消耗更小

算法名称 SM2 RSA
算法结构 基本椭圆曲线(ECC) 基于特殊的可逆模幂运算
计算复杂度 完全指数级 亚指数级
存储空间 192-256bit 2048-4096bit
秘钥生成速度 较RSA算法快百倍以上
解密加密速度 较快 一般

三、生成SM2秘钥

1、openssl生成SM2秘钥

1.1、安装openssl

  • 下载安装包

    下载地址:http://slproweb.com/products/Win32OpenSSL.html

  • 安装
  • 设置环境变量
    国密算法(SM2)生成秘钥一、国密算法介绍二、SM2算法和RSA算法比较三、生成SM2秘钥参考

1.2、生成SM2私钥

openssl ecparam -genkey -name SM2 -out priv.key

1.3、生成SM2公钥

./openssl ec -in priv.key -pubout -out pub.key

2、nodejs:使用sm-crypto包生成SM2秘钥

const sm2 = require('sm-crypto').sm2
let keypair = sm2.generateKeyPairHex()
let publicKey = keypair.publicKey // 公钥
let privateKey = keypair.privateKey // 私钥
           

nodejs使用SM2加密、解密,参考sm-crypto

3、c++生成秘钥

/* ecc_make_key() function.
	Create a public/private key pair.

	You must use a new nonpredictable random number to generate each new key pair.

	Outputs:
		p_publicKey  - Will be filled in with the point representing the public key.
		p_privateKey - Will be filled in with the private key.

	Inputs:
		p_random - The random number to use to generate the key pair.

	Returns 1 if the key pair was generated successfully, 0 if an error occurred. If 0 is returned,
	try again with a different random number.
	*/
	int ecc_make_key(EccPoint *p_publicKey, uint8_t p_privateKey[NUM_ECC_DIGITS], uint8_t p_random[NUM_ECC_DIGITS]);
           

C++SM2参见:c++国密算法SM2加密解密

参考

1.国密算法SM2介绍

2.sm-crypto

3.国密SM1、SM2、SM3、SM4算法资料大全

4.windows安装OpenSSL

5.openssl SM2签名密钥生成

6.在openssl中对SM2的公私钥进行加解密的验证

继续阅读