国密SM9算法C++实现之二:测试工具

SM9算法C++实现系列目录:

国密SM9算法C++实现之二:测试工具

在网上找了个基于miracle库实现的SM9算法例子,经过完善后在win10的vs2015中写了个测试工具,主要的界面功能截图如下。

  • KGC**生成
    在上一篇介绍中已经说明,SM9中的**包括KGC的签名主**对和加密主**对、用户的签名私钥和加密私钥。同时用户的加密私钥又分为两种,一种是用在**解封和解密中,另一种是用在**交换中,二者都是加密私钥,只是KGC在生成私钥时使用的hid参数(私钥生成函数识别符)不同。
    需注意的是主私钥始终是个小于N的随机数,因此在用主私钥生成用户私钥时,要用签名主私钥生成用户的签名私钥;用加密主私钥生成用户的加密私钥。

国密SM9算法C++实现之二:测试工具

  • 签名验签算法
    SM9签名时需要签名主私钥和签名者的签名私钥,而验签时则需要签名者的身份标识ID。签名值包含h和S两个部分。

国密SM9算法C++实现之二:测试工具

  • **封装解封算法
    SM9**封装时需要加密主公钥和解封者的ID,而解封时则需要解封者的加密私钥。封装算法产生一个用于解封算法所需的C和封装的**的明文K,K是提供给封装者用的,解封者通过C可解出K。
    国密SM9算法C++实现之二:测试工具

  • 加密解密算法
    SM9加密时需要加密主公钥和解密者的ID,而解密则需要解密者的加密私钥和解密者ID。同时,加解密中对于明文的加密方法分成两种,一种是使用分组密码算法(仅可用ECB模式,算法可使用SM4),另一种是基于KDF的序列密码算法(KDF可使用SM3)。

国密SM9算法C++实现之二:测试工具

  • **交换算法
    SM9**交换涉及到发起方和响应方,计算共享**是需要一个加密主公钥、双方各自的ID和加密私钥。安装SM9标准的算法流程,可将第1~3步提取出来,作为**交换的前奏,这三步实际上是产生了一对G1上 临时公私钥,这对临时公私钥用在己方计算共享**中,同时,需要将临时公钥传给对方,对方在计算共享**时也需要。因为这个临时**对每次都是随机生成的,所以在测试中可以看到每次协商的结果是不一样的。

国密SM9算法C++实现之二:测试工具

另外需要注意的是,虽然在SM9算法中,四类算法(签名验签、**封装解封、加密解密、**交换)的主**对可以各不相同,但在同一类算法中主**必须是一样的。如在在**交换中,发起方和响应方的主公钥应该同一个,而且双方的加密私钥也应该是经由一个主私钥计算得来的。

此处先提供一个测试工具的下载地址,具体的代码在后续的文章中再详解。
测试工具下载地址:https://download.csdn.net/download/yaoyuanyylyy/10520451