当前位置:   article > 正文

国密(2)-- SM2签名和加密算法介绍_sm2加密

sm2加密

下面通过国密 GMTLS的密钥协商过程来介绍SM2签名和加密算法:

1 客户端发送client hello消息,携带client random,random(Unix time+random bytes = 总 32字节)

2 服务端响应Serverhello消息,携带Server random,random(Unix time+random bytes = 总 32字节)

3 服务端响应 Certifcation 证书,国密目前采用双证书,第一个证书是签名证书,里面携带公钥;第二个证书是加密证书,里面携带公钥。

4 服务端响应Server Key exchange,携带内容为签名后的数据,真正有用内容为64字节(512bit),采用SM2的签名算法。

签名后数据(signed data 64bytes,黄色部分,其他为ASN.1  DER编码的部分)的格式;

0c000048

0046

3044

0220   

167df66d32adea948746f0794c383d2460a99e31d5f0c13faa28e4bdec98bdb9

0220

64e6294caf543717f73eda8d7a6b05cc6c570233fa7b381d20aab114ad9ea43b

签名之前的原始数据有四部分组成:

client random(32字节)+Server random(32字节)+ 加密证书的长度(3字节)+加密证书内容

对以上四个部分串联起来运行SM2签名算法就可以得到签名后的数据。下面是签名前的数据:

B20653C9B35996333D8079CF401FE28791704502700584C4C6A0F04894597DE1 client random(32字节
D76E6BC156B1BA2A5CEA6C251B6C2038E00CBD8194132BC33452E22E0F324F2D Server random(32字节
000204  加密证书的长度(3字节)
30820200308201A3A00302010202060172A83ECF43300C06082A811CCF550183750500304B310B300906035504061302434E310E300C060355040A1305474D53534C3110300E060355040B1307504B492F534D32311A3018060355040313114D6964646C65434120666F7220546573743022180F32303135313233313136303030305A180F32303335313233303136303030305A3048310B300906035504061302434E310E300C060355040A1305474D53534C3110300E060355040B1307504B492F534D32311730150603550403130E64656D6F312E676D73736C2E636E3059301306072A8648CE3D020106082A811CCF5501822D03420004DE8AC0D2D5916E178C9CEF0292944090572FF44EA19421FB50199881071419C10D7B5C0510448CD6CAADC67344182D14992F96701FE1C232B84B2C5065884464A370306E301B0603551D23041430128010F97F55B427943362A656CA6FCC5D1AFF30190603551D1104123010820E64656D6F312E676D73736C2E636E30190603551D0E041204101FE8221B5C7A4594CEF4B288722A10E330090603551D1304023000300E0603551D0F0101FF040403020038300C06082A811CCF5501837505000349003046022100B5EE4B3756F901C9F4849104171DD551F17601A6A88C14803DF2C2EA7FEDFE380221008A69ED842C6C424D8D5AFCB8CDC47E8E803160AF7BA70348394EB1D54372A0FB  (加密证书内容)

以上数据可以使用下面在线SM2工具验证,输入(公钥+签名后数据+待签名数据)数据,点击公钥验签即可。这个工具做的非常棒,记得给这个工具的作者点赞

 SM2加解密

5 客户端收到server key exchange后,验证签名后的数据是OK的话,可以发送client key exchange给服务端;client key exchange里面携带了premaster key的信息,此信息采用SM2的加密算法,因此client key exchange携带的是SM2加密后的数据;

SM2加密后数据的格式如下:

SM2加密后的预主密钥premaster key
0220
2cdd8654bd7ee4bb0bc88c31cd4e782757e24cb84871f4c3967a728f43deb69c    X1    C1
022100
95dfac5ccc9e335b7afae3ca82e8deecd4887583bb1d4d4a924cad94ce1ef592     Y1    C1
0420
3f8343b12e3e4f23e72c5248a51e5e018ccbea99a7621cfd6771641bd60f3381    Hash   C3

0430
19728b03239b4f22872fa9ebf90ee7954c0a257b60fb7060f5910abe56d04ba71a5ef33e8afd409392f6fcdebc3582e9   Random(48字节)  C2

可以采用SM2的解密工具算出加密前的premaster key:

在下面的工具内输入加密证书对应的私钥,再输入上面加密后的数据内容(绿色部分),点击私钥解密即可。

SM2加解密

上面解密出的Pre-master key的内容如下,共48字节:

0101 2个字节,代表国密版本号:0101

E582AAC5064CF164DCAC7A14BFEC7BF30AF646558DC7DC63CBC77265EDE6E7721D2161FA098EF3EC41FECBFEF107 46字节pre-master key

Master Key的计算公式如下:

master_secret = PRF(pre_master_secret, "master secret", ClientHello.random + ServerHello.random)[0..47];

就不详细展开介绍了。

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号