國密算法(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
- 安裝
- 設定環境變量
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的公私鑰進行加解密的驗證