Snooper中的sm9使用说明
本手册中涉及的Snooper版本为0.0.6.2。
下载链接
https://download.csdn.net/download/jennyvenus/19568440
目 录
1.1打开snooper.exe,选择“Calculate”
国密SM9算法说明
一、简介:
SM9是我国采用的,基于标识(IBC)的密码系统,IBC(Identity-Based Cryptograph),由传统的PKI基础上发展而来,主要简化在具体安全应用在大量数字证书的交换问题,使安全应用更加易于部署和使用。由国家密码管理局2016年3月28日发布,相关标准为“GM/T 0044-2016 SM9标识密码算法”。
sm9中有一个概念叫主密钥,处于标识密码密钥分层结构最顶层的密钥,包括主私钥和主公钥,其中主公钥公开,主私钥由KGC秘密保存。KGC用主私钥和用户的标识生成用户的私钥。在标识密码中,主私钥一般由KGC通过随机数发生器产生,主公钥由主私钥结合系统参数产生。
密钥生成中心key generation center;KGC
其中主私钥需要严格保密,在下面的内容中,主私钥是一个随机数。
SM9功能包括签名、验签,加密、解密、密钥封装、密钥交换等4个主要功能。
Snooper 0.0.6.2版本中也加入了sm9全套的功能,下面对如何使用进行简单介绍。
二、辅助计算
1.如何打开此功能?
1.1打开snooper.exe,选择“Calculate”
1.2 以签名为例,打开签名窗口。
在签名窗口中,我们会看到几个输入、输出窗口,还有几个按钮,每个按钮都使用数字指明了哪个功能需要什么输入,产生几个输出。
先以生成密钥为例,随机生成一个主私钥(输出到1),再由主私钥生成主公钥(输出到2),再按3、4的内容计算签名私钥(输出到5)
在3、4中输入适当的参数,点击生成密钥按钮,效果如下
如果主私钥是指定的,则将其填入1中,点击计算密钥按钮
下面我们以规范中的标准数据为例。
签名主密钥和用户签名密钥产生过程中的相关值: 签名主私钥 ks:0130E7 8459D785 45CB54C5 87E02CF4 80CE0B66 340F319F 348A1D5B 1F2DC5F4 签名主公钥 Ppub-s = [ks]P2 = (xPpub-s , yPpub-s): 坐标 xPpub-s:(9F64080B 3084F733 E48AFF4B 41B56501 1CE0711C 5E392CFB 0AB1B679 1B94C408, 29DBA116 152D1F78 6CE843ED 24A3B573 414D2177 386A92DD 8F14D656 96EA5E32) 坐标 yPpub-s:(69850938 ABEA0112 B57329F4 47E3A0CB AD3E2FDB 1A77F335 E89E1408 D0EF1C25, 41E00A53DDA532DA 1A7CE027 B7A46F74 1006E85F 5CDFF073 0E75C05F B4E3216D) 签名私钥生成函数识别符 hid:0x01 实体 A 的标识 IDA:Alice
|
签名私钥
dsA = [t2]P1 = (xdsA, ydsA): 坐标 xdsA:A5702F05 CF131530 5E2D6EB6 4B0DEB92 3DB1A0BC F0CAFF90 523AC875 4AA69820
坐标 ydsA:78559A84 4411F982 5C109F5E E3F52D72 0DD01785 392A727B B1556952 B2B013D3
|
2.其他界面
2.1加密解密界面
2.2密钥封装
2.3密钥交换
由于密钥交换使用比较复杂,所以下面演示一下流程
2.3.1填入数据
此时生成了主私钥、主公钥,解密私钥A,由于A,B需要拥有同样的主公钥,主私钥,所以B需要点击计算密钥。
2.3.2计算B的密钥
2.3.3生成双方临时密钥
2.3.4密钥交换
最后点击交换初始化,或交换响应
三、脚本计算
Snooper最大的优势在于脚本,拥有大量可靠的、实用的函数,下面以加密、解密为例,介绍一下Snooper脚本。
打开脚本
将下面的脚本填入新打开的窗口中
x = new_sm9_gen_encrypt_master_key() pri = mid( $x, 0, 32 ) pub = mid( $x, 32 )
enc_pri = new_sm9_gen_encrypt_pri_key( ansi_string( "Bob" ), 03, $pri )
// 加密主私钥ke:01EDEE 3778F441 F8DEA3D9 FA0ACC4E 07EE36C9 3F9A0861 8AF4AD85 CEDE1C22 // 加密主公钥Ppub-e = [ke]P1= (xPpub-e , yPpub-e): // 坐标xPpub-e:787ED7B8 A51F3AB8 4E0A6600 3F32DA5C 720B17EC A7137D39 ABC66E3C 80A892FF // 坐标yPpub-e:769DE617 91E5ADC4 B9FF85A3 1354900B 20287127 9A8C49DC 3F220F64 4C57A7B1 // 加密私钥生成函数识别符hid:0x03 // 实体B 的标识IDB: Bob // IDB 的16 进制表示:426F62
pri = 0001EDEE 3778F441 F8DEA3D9 FA0ACC4E 07EE36C9 3F9A0861 8AF4AD85 CEDE1C22 pub = new_sm9_get_encrypt_master_key( $pri ) if $pub != 787ED7B8A51F3AB84E0A66003F32DA5C720B17ECA7137D39ABC66E3C80A892FF769DE61791E5ADC4B9FF85A31354900B202871279A8C49DC3F220F644C57A7B1 ? pause endif
idb = ansi_string( "Bob" ) hid = 03
// 计算deB=[t2]P2=(xdeB, ydeB): // 21 // 坐标xdeB:(94736ACD 2C8C8796 CC4785E9 38301A13 9A059D35 37B64141 40B2D31E ECF41683, // 115BAE85 F5D8BC6C 3DBD9E53 42979ACC CF3C2F4F 28420B1C B4F8C0B5 9A19B158) // 坐标ydeB:(7AA5E475 70DA7600 CD760A0C F7BEAF71 C447F384 4753FE74 FA7BA92C A7D3B55F, // 27538A62 E7F7BFB5 1DCE0870 4796D94C 9D56734F 119EA447 32B50E31 CDEB75C1)
deb = new_sm9_gen_encrypt_pri_key( $idb, $hid, $pri ) if $deb !=94736ACD2C8C8796CC4785E938301A139A059D3537B6414140B2D31EECF41683115BAE85F5D8BC6C3DBD9E5342979ACCCF3C2F4F28420B1CB4F8C0B59A19B1587AA5E47570DA7600CD760A0CF7BEAF71C447F3844753FE74FA7BA92CA7D3B55F27538A62E7F7BFB51DCE08704796D94C9D56734F119EA44732B50E31CDEB75C1 ? pause endif
m = ansi_string( "Chinese IBE standard" )
cipher = new_sm9_encrypt_block( $m, $idb, $hid, $pub ) plain = new_sm9_decrypt_block( $cipher, $idb, $hid, $deb )
if $plain != $m ? pause endif
cipher = new_sm9_encrypt_stream( $m, $idb, $hid, $pub ) plain = new_sm9_decrypt_stream( $cipher, $idb, $hid, $deb )
if $plain != $m ? pause endif
? "success"
|
按F10逐行执行
或按F5执行到结束
本次执行的结果如下
//x = 796C5FD971F5095D42A65F8C7EBE0A1B1EB3252355F1036D76B40A6261400FEC3E67A62E9E1203B067548A392BBF7639E4C0F1CE8DA5EA8569D2DA214BAF1A8240CF77D19A17EC88C5FAF3F662AC991474D399E45D0B58B6076D6E66E9EDD254
//pri = 796C5FD971F5095D42A65F8C7EBE0A1B1EB3252355F1036D76B40A6261400FEC
//pub = 3E67A62E9E1203B067548A392BBF7639E4C0F1CE8DA5EA8569D2DA214BAF1A8240CF77D19A17EC88C5FAF3F662AC991474D399E45D0B58B6076D6E66E9EDD254
//enc_pri = 638DD29796D8015BDEB09A8171C55DFBC2F514116C4CD985CD40BBDDCDEE4F6F0484F7A794E6F936B79FDE09718B14A0AA0A28AA4120BBB934A70315469A164317D3011DA4A43881ED5DEE85CEFAB9CA0424B2D114ED1F7600450E4B68C536B98255C3E6A7702DF19E027DD69699BA06F6B018B33B364063EBD299A88C87BCE0
//pri = 0001EDEE3778F441F8DEA3D9FA0ACC4E07EE36C93F9A08618AF4AD85CEDE1C22
//pub = 787ED7B8A51F3AB84E0A66003F32DA5C720B17ECA7137D39ABC66E3C80A892FF769DE61791E5ADC4B9FF85A31354900B202871279A8C49DC3F220F644C57A7B1
//idb = 426F62
//hid = 03
//deb = 94736ACD2C8C8796CC4785E938301A139A059D3537B6414140B2D31EECF41683115BAE85F5D8BC6C3DBD9E5342979ACCCF3C2F4F28420B1CB4F8C0B59A19B1587AA5E47570DA7600CD760A0CF7BEAF71C447F3844753FE74FA7BA92CA7D3B55F27538A62E7F7BFB51DCE08704796D94C9D56734F119EA44732B50E31CDEB75C1
//m = 4368696E65736520494245207374616E64617264
//cipher = 79E5F3AB15CD126634B3134AE668628663954B17D47796CFD451413D01F343DCAB18BCB27595BF8D25C586871F6D33B952CFA718DD22EB5C3F2278A6DB6058AA6C1AF8EE337A88A63A8687B10D2C06C083DA6308C78568E0E624321CEB80B357A68C1B0BD2D5FFC10B400A0ABBD4EF077D82EE7A93406BF5EAEC847097DB292B
//plain = 4368696E65736520494245207374616E64617264
//cipher = A4C9F55304DD3C6545F05E2DA02BE6507BB3A17947B845A8109D1EC97B2F36714E7B6762F1C83F28ACE27D5B5333EAA2DAC35BA312EE8BDEAA18CCA4263882F11DEDD87705E3C9C15ABB30A675A0A0DF8BA85205F9ED7344B43600CBF6B16AC6FB2DE292F960088A7145730C65944FFC0F1D41BE
//plain = 4368696E65736520494245207374616E64617264
//[]=============[]
//[] success []
//[]=============[]