天天看點

國密算法(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的公私鑰進行加解密的驗證

繼續閱讀