type
status
date
summary
password
category
slug
icon
校赛题看麻了,好难好难,mxx307大师傅出的题我果然不会写呢🥹🥹🥹🥹🥹🥹,涉及到国密SM2,这里浅浅学习一下啦!(另外mxx307yyds!!ooo小师傅hwb yyds!!!)
✨SM2
SM2 国密算法是一种非对称加密算法,基于 ECC(椭圆加密算法). SM2 算法由于基于 ECC,签名速度与秘钥速度都快于 RSA。另外 SM2 采用 ECC 256 位,安全强度比 RSA 2048 位更高,且运算速度同样也高于 ESA。熟悉 RSA 算法同学应该知道,非对称加密算法,会有一对公私钥。
- 私钥可以用于加签,公钥可以用于验签。
- 公钥可以用于加密,私钥可以用于解密
同样 SM2 算法也有一对公私钥,它们的长度远远小于 RSA 公私钥。SM2 私钥,一个大于等于 1 且小于 n-1的整数(n 为 sm2 算法的阶),长度为 256 位,即 32 个字节,通常会用 16 进制表示。
🗝️密钥对生成
SM2密钥生成是指生成SM2算法的密钥对的过程,该密钥对包括私钥和与之对应的公钥。
k:SM2PrivateKey,SM2私钥
Q:SM2PublicKey,SM2公钥
用随机数发生器产生整数 ;
G为基点,计算点。
则私钥是d,公钥为P(椭圆曲线上的一点)。
👐基础参数
SM2曲线方程,其中六个参量都是固定的。根据国密局给出的规范定义如下:
方程为:
私钥长度:32字节,256位
公钥长度:SM2非压缩公钥格式字节串长度为65字节,压缩格式长度为33字节,若公钥y坐标最后一位为0,则首字节为
0x02
,否则为0x03
。非压缩格式公钥首字节为0x04
。签名长度:64字节。
SM2的签名结果是由两个数字拼接构成,SM2签名的长度为128位(R+S = 64+64 = 128)有时候我们看到的不止128位,多半是因为做了ASN1格式转换。
📑签名过程
说明:第5步若r=0或r+k=n则返回第3步;第6步若s=0则返回第3步。
🫣代码实现
📑验证签名
代码实现
📎 参考文章
感觉学会了~( ̄▽ ̄)~*!但我会了小师傅肯定不信🥲🥲🥲