通過openssl生成sm2的公私鑰的方法
阿新 • • 發佈:2019-02-14
在openssl中,支援sm2的公私鑰的生成方法,不過其名稱並不是sm2的字面意思,而是ec,
到openssl的apps資料夾下,輸入命令如下所示:
./openssl ecparam -genkey -name SM2 -out priv.key
其中SM2是一個曲線的名稱,符合國密演算法要求,通過-list_curves可以看到全部的名稱,這裡並不深入其中的含義,輸出如下:
-----BEGIN EC PARAMETERS----- BgUrgQQAHg== -----END EC PARAMETERS----- -----BEGIN EC PRIVATE KEY----- MFECAQEEFQBTKF92ysyn15Ip7NERfNsUgJAg5qAHBgUrgQQAHqEsAyoABKFexp90 7EBONi2jD9P5d9UtOFWBd6sZ2SA07lGlYul+IeEAWEa2cdc= -----END EC PRIVATE KEY-----
這裡可見模型的引數,和私鑰,那麼公鑰如何產生呢,
標準的方法是:
./openssl ec -in priv.key -pubout -out pub.key
如果需要生成完成的公私鑰,可以新增一行程式碼實現.
在ecparam.c中,429行,在PEM_write_bio_ECPrivateKey後面,新增PEM_write_bio_EC_PUBKEY,就可以了.
如下所示
if (outformat == FORMAT_ASN1) i = i2d_ECPrivateKey_bio(out, eckey); else { i = PEM_write_bio_ECPrivateKey(out, eckey, NULL, NULL, 0, NULL, NULL); i = PEM_write_bio_EC_PUBKEY(out, eckey); }
然後再make一下,再次執行
./openssl ecparam -genkey -name SM2 -out all.key
可見輸出如下:
-----BEGIN EC PARAMETERS----- BgUrgQQAHg== -----END EC PARAMETERS----- -----BEGIN EC PRIVATE KEY----- MFECAQEEFQDjs+Ro3y+LQ/r6gbpq1VDh46WDjqAHBgUrgQQAHqEsAyoABIbbRyxs HexWLM7rvX5qysdPL7o3nGUVNzBlj8tKpCCwHrXhmsJG/s8= -----END EC PRIVATE KEY----- -----BEGIN PUBLIC KEY----- MD4wEAYHKoZIzj0CAQYFK4EEAB4DKgAEhttHLGwd7FYszuu9fmrKx08vujecZRU3 MGWPy0qkILAeteGawkb+zw== -----END PUBLIC KEY-----
在private key後面,可見產生了成對的public key.可用於sm2的加解密和簽名驗簽了.