文章目录

  • 说明
  • 源码
  • jpbc
    • jpbc-crypto 算法代码结构
    • maven 配置 jpbc
  • SM9
    • 参考文档
    • 密钥对
      • 密钥结构
    • 标准差异
    • 曲线参数
      • SM9CurveGenerator
    • 可配置项
    • 源码结构
    • 测试

算法学习研究项目

说明

本项目仅用于自我学习,实现了一些密码算法,包括但不限于SM9、IBE、ABE。

开发工具使用 IDEA-2022.2,JDK-1.8-221,使用maven管理JPBC和BC密码库。

算法实现的代码结构参考了 jpbc-crypto 中的算法实现。

目前包含的算法:

  • SM9

源码

github源码(https://github.com/yaoyuanyylyy/abestudy)

jpbc

jpbc-crypto 算法代码结构

参考 jpbc-crypto 中属性基加密算法 GGHSW13 的实现,可以看出它的结构特点:

  • generators中是生成器类。如密钥对生成器、参数生成器、秘密密钥生成器等。
  • engines中是算法实现引擎类。如KEMEngine可用来实现密钥封装解封或加密解密。
  • params中是算法参数类。算法中的生成器、引擎类需要的参数都放在这里。
    生成器和引擎类一般通过 init 方法来初始化要使用的参数,所以需要把某个算法中用到的参数都放置在一个参数类中进行传递。
    比如密钥对生成器 GGHSW13SecretKeyGenerator 秘密密钥生成器中要用到的参数都封装在 GGHSW13SecretKeyGenerationParameters 中。
  • 最后在一个算法类 GGHSW13KEM 中实现论文里提出的算法构造步骤,如 setup、keyGen等。这才是应该使用的算法对象。

maven 配置 jpbc

项目中主要使用到了 jpbc 中的 apiplafcrypto这3个库,它们又依赖了 bcprov 库。

  1. 本地库方式
    可以直接在项目中使用下面的方式配置本地库。
    但由于父项目的本地依赖中的 systemPath 无法传递到子项目去,所以需要为每个项目都配置一下。

    <dependency><groupId>it.unisa.dia.gas</groupId><artifactId>jpbc-api</artifactId><version>2.0.0</version><scope>system</scope><systemPath>${pom.basedir}/libs/jpbc-api-2.0.0.jar</systemPath>
    </dependency><dependency><groupId>it.unisa.dia.gas</groupId><artifactId>jpbc-plaf</artifactId><version>2.0.0</version><scope>system</scope><systemPath>${pom.basedir}/libs/jpbc-plaf-2.0.0.jar</systemPath>
    </dependency><dependency><groupId>it.unisa.dia.gas</groupId><artifactId>jpbc-crypto</artifactId><version>2.0.0</version><scope>system</scope><systemPath>${pom.basedir}/libs/jpbc-crypto-2.0.0.jar</systemPath>
    </dependency><dependency><groupId>org.bouncycastle</groupId><artifactId>bcprov-jdk18on</artifactId><version>1.71</version><scope>system</scope><systemPath>${pom.basedir}/libs/bcprov-jdk18on-1.71.jar</systemPath>
    </dependency>
    
  2. 在线库方式
    也可以使用下面的方式来配置,让maven自动下载。
    这种方式可以只在父项目中配置,然后子项目就可以引用。

    <repositories><repository><id>jitpack.io</id><url>https://www.jitpack.io</url><snapshots><enabled>true</enabled></snapshots></repository>
    </repositories><dependencies><dependency><groupId>com.github.stefano81</groupId><artifactId>jpbc</artifactId><version>v2.0.0-m</version><exclusions><exclusion><groupId>org.bouncycastle</groupId><artifactId>bcprov-jdk16</artifactId></exclusion></exclusions></dependency><dependency><groupId>org.bouncycastle</groupId><artifactId>bcprov-jdk18on</artifactId><version>1.71</version></dependency>
    </dependencies>
    

    但这种方式又有另外两个问题:

    • 由于 jpbc 引用了 jitpack.io,这会让maven无法从默认的repository中找到jpbc,所以无法下载。特别是在 maven 的 settings.xml 配置了阿里云时,会提示找不到。这时候需要把阿里云的配置中的 mirrorOf 修改一下,让其从 jitpack.io 上去找库。如需所示:

      <mirror><id>aliyunmaven</id><mirrorOf>*,!jitpack.io</mirrorOf><name>aliyun-maven</name><url>https://maven.aliyun.com/repository/public</url>
      </mirror>
      
    • jpbc中默认使用的BC库版本是 bcprov-jdk16:1.46,这会让IDEA提示“Provides transitive vulnerable dependency”,所以在上面的 jpbc 依赖中添加了 exclusions 来排除 bcprov-jdk16,然后从小引入依赖 bcprov-jdk18on。这个应该和版本有关。

    由于本项目预计包含多个子项目,所以采用第二种方式来配置 jpbc 依赖。因此,可能需要修改自己的maven配置文件中的mirrorOf

SM9

中国商用IBE算法。

此模块实现《GBT 38635》标准。

参考文档

部分文档放置在 docs 目录。

  • 《GBT 38635-2020 信息安全技术 SM9标识密码算法》共2部分
  • 《GMT 0044-2016 SM9 标识密码算法》共5部分
  • 《GMT 0080-2020 SM9密码算法使用规范》

密钥对

从椭圆曲线的角度来看密钥对:

  • 私钥:是 [1, N-1] 范围内的一个随机数。N是曲线的阶。
  • 公钥:私钥*生成元。也就是是椭圆曲线上的一个点,等于生成元私钥倍。

SM9中的密钥包括:

  • 主密钥对

    • 签名主密钥对:在群G2上。只用于签名相关:生成签名私钥,签名,验签
    • 加密主密钥对:在群G1上。用于和签名无关其他情况:生成加密私钥,密钥封装解封,加密解密,密钥协商。
      注意:在密钥协商的初始化步骤中产生的临时密钥对也看作是加密主密钥对(参考《GMT 0080-2020》)。
  • 用户密钥对

    • 用户私钥:
      这里的用户私钥是一个群上的点,是生成元t2倍。t2不是随机数,而是通过用户ID、hid和主私钥计算得来的。

      • 签名私钥:群G1上的点。
      • 加密私钥:群G2上的点。
    • 用户公钥:ID。
      在IBC技术中,用户标识ID可以唯一确定用户的公钥,所以就用它来代表公钥。而在算法内部实现中可以看到,实际上它还是一个群上的点,且和主公钥在同一个群上。也就是说:

      • 内部签名公钥:群G2上的点,用于验签。
      • 内部加密公钥:群G1上的点,用于密钥封装,加密,密钥协商初始化。

总结1:密钥在群上的分布如下表所示。其中主私钥是随机数,除了主私钥和ID,其他密钥都是群上的点。

加密主私钥 签名主私钥 公钥:ID
群G1 加密主公钥 签名私钥 内部加密公钥
群G2 签名主公钥 加密私钥 内部签名公钥

总结2:各个算法中用到的密钥参数如下表所示。

密钥 - 算法 生成私钥 签名 验签 密钥封装 密钥解封 加密 解密 密钥协商初始化 密钥协商
签名主公钥
签名主私钥
签名私钥
公钥:ID
加密主公钥
加密主私钥
加密私钥

密钥结构

本项目中的密钥类图如下所示:

  • 密钥类名称和JPBC略有不同,主要是因为这里要实现全部SM9算法,所以显示地定义了公私钥、签名密钥和加密密钥。后面若要研究基于SM9的ABE,预计会单独提取出加密部分的代码出来,到时候在按照JPBC的风格来实现密钥类。
  • 《GMT 0080 6.1-e/f》中的签名私钥类型为加密主公钥,加密私钥类型为签名主公钥。本项目中直接定义了一个共同基类SM9ElementKey,表示密钥是曲线上的点。得益于JPBC库中曲线的点都可以用接口Element表示,所以这里可以不区分到底是群G1还是G2。
    如果要实现标准中的那种继承关系,则需要在整个密钥链最下面的签名私钥和加密私钥类中,有一个能够设置 isPrivate 属性为 true 的接口,那就需要从顶层向下传递,会在中间的类中定义一些多余的方法,这只在早期代码中实现了一下,后来发现太乱就弃用了。
  • 《GMT 0080/6.4》的 6.2/6.3 中把签名数据结构中的S和加密数据结构中的C1描述为签名私钥;6.4 中把密钥封装数据结构中的C描述为加密主公钥。从它们的群属性来说,这样描述是没问题的,但从代码实现上来说,这样看起来有点奇怪,感觉是密钥在泄露。所以只在早期代码中实现了一下,后面也弃用这种表示方式,直接使用Element进行抽象的描述。

标准差异

相对于GMT,GBT标准中有些不同的地方。在参考了标准中的测试数据后总结如下。

  • 密钥协商的hid: GMT中为0x02;GBT中为0x03。本代码遵循GBT。
  • 签名验签:使用BC的 Singer 接口,含有 update 方法。代码内部使用SM3Digest对消息进行预处理。标准中的测试数据里没有对消息进行预处理,所以数据有所不一致,为此,可以在内部不使用SM3Digest而是使用ByteArrayOutputStream对数据进行缓存,正如 SM9SignerTest 类一样。
  • 加密解密:对于其中使用的分组密码,GMT使用ECB模式,GBT使用CBC模式。同时,在《GMT 0080》中定义了 EnType 来表示使用的加密方式:0表示使用基于KDF的序列密码;1,2,4,8分别表示ECB,CBC,OFB,CFB分组密码模式,如果需要向量,则最后要把向量添加到C2头部。填充模式都使用PKCS5填充。
    • 注意1:在GBT的算法流程图中看到,计算C2时就把IV添加到前面,后面的C3计算时C2中应该也包含了IV。但对照测试数据,则发现计算C3时的C2里面没有IV。代码实现使用后者。
    • 注意2:IV默认使用的向量是全0,代码中添加了一个参数用来表示是否要随机生成IV。
    • 注意3:加密中包含了一个密钥封装的过程,解密中包含了一个密钥解封的过程。所以加密解密类继承了封装解封类并调用其方法。

曲线参数

  • 通过曲线参数生成器 SM9ParametersGenerator 可以生成 SM9Parameters 对象,该对象中包含了SM9算法代码中需要用到的参数。
  • SM9ParametersGenerator 中提供了几个静态 createParameters 方法来创建 SM9Parameters 对象,支持实时生成曲线参数、从参数中构建、从文件中载入。
  • 创建 SM9Parameters 对象时可以设置一个随机数生成器 random,它会贯穿在整个SM9算法中。
  • resources 中的 sm9.properties 文件就是SM9曲线的参数文件;SM9CurveParameters 中也放置了所有参数。
  • SM9Pairing 提供 R-ate 功能,封装在内部的 SM9RatePairingMap 中。

SM9CurveGenerator

实时计算参数时使用 SM9CurveGenerator 类,主要是计算 beta, alpha0, alpha1。

    @Overridepublic PairingParameters generate() {//先随机生成t,然后计算q和r。这里不需要Field Fq = new ZrField(random, SM9CurveParameters.q);//生成b。这里不需要//beta: TypeF中取的 Fq.getNqr(),即非二次剩余。这里须构造BigInteger beta = Fq.newElement(SM9CurveParameters.BETA).toBigInteger();Field Fq2 = new QuadraticField(random, Fq);PolyField Fq2x = new PolyField(random, Fq2);//alpha: TypeF中是随机生成以得到alpha参数;而对于SM9则在这里设置//找出一个形如  f = x^6 + alpha 的不可约多项式。//把 x^6 的系数设置1,然后代入点(1,0),就可以计算出alpha。PolyElement<Point> f = Fq2x.newElement();f.ensureSize(7);f.getCoefficient(6).setToOne();Point point = (Point) Fq2.newElement();point.getX().setToZero();point.getY().setToOne();f.getCoefficient(0).set(point.negate());//存放曲线标准参数PropertiesParameters params = new PropertiesParameters();params.put("type", "f");params.put("q", SM9CurveParameters.q.toString());params.put("r", SM9CurveParameters.N.toString());params.put("b", SM9CurveParameters.b.toString());params.put("beta", beta.toString());params.put("alpha0", f.getCoefficient(0).getX().toBigInteger().toString());params.put("alpha1", f.getCoefficient(0).getY().toBigInteger().toString());params.put("t", SM9CurveParameters.t.toString());return params;}

可配置项

本项目中把SM9中一些可以修改的配置全部提取出来放在了 SM9Config 类中。

配置项 说明
algDigest SM9用到的哈希算法,默认为SM3。在 AlgDigest 中定义了多种哈希算法。
algSymm SM9用到的对称算法,默认为SM4。在 AlgSymm 中定义了多种对称算法。
PADDING SM9用到的对称算法的填充模式,默认为PKCS5Padding。
MAC_KEY_LEN MAC函数的密钥key的长度。按照MAC函数定义来说,这个长度是可以变的,但最好不小于MAC函数中的哈希函数的哈希值长度。这里默认是32字节。
USE_RANDOM_IV 在GBT标准的测试中,加密中使用了CBC模式,但IV全是0。该参数可以配置是否要生成一个随机IV,默认为否。
HID_SIGN 签名私钥生成函数识别符。默认为0x01。
HID_KEY_EXCHANGE 密钥交换时的私钥生成函数识别符。默认为0x03。GMT中是0x02,GBT中是0x03。这里默认配置为GBT标准,但总的来说,应该可以设置为自己想要的值,所以放在这个配置类中,使其可以随意配置。
HID_ENCRYPT 加密私钥生成函数识别符。默认为0x03。
  • 注意:在某些版本的jdk中,有一部分的对称算法(如AES192, AES256)是受到出口限制,导致不能使用。此时可以通过下载特定的包来覆盖解决;也可以使用特定版本的jdk,比如 jdk1.8.0_221 版本就不受限制;另外也可以不使用那些受限的对称算法。

源码结构

  • engines: 存放算法实现类,共4个,对应SM9的4种算法
  • generators: 存放生成器类和pairing类
  • parameters: 存放参数类。主要包括曲线参数、算法接口参数类、生成器参数类3种
  • structs: 存放结构类,如各密钥、各种算法产生的结果值。
  • cipher: 存放对称算法工具和哈希算法
  • SM9: 最上层使用的算法类
  • SM9Utils: SM9工具类

测试

  • SM9Test: 测试类,放在 test 中。
    为了验证GBT中最后的测试,在test中把需要注入随机数的算法类重新拷贝一个并添加日志,这样就不影响常规代码。
    SM9Test中的 test_standard 的测试数据和GBT标准相符。
    test_parameters 中测试了参数的生成方法。

测试数据如下:

SM9 curve parameters:
b:
05t:
60000000 0058F98A q:
B6400000 02A3A6F1 D603AB4F F58EC745 21F2934B 1A7AEEDB E56F9B27 E351457DN:
B6400000 02A3A6F1 D603AB4F F58EC744 49F2934B 18EA8BEE E56EE19C D69ECF25beta:
B6400000 02A3A6F1 D603AB4F F58EC745 21F2934B 1A7AEEDB E56F9B27 E351457Balpha0:
00alpha1:
B6400000 02A3A6F1 D603AB4F F58EC745 21F2934B 1A7AEEDB E56F9B27 E351457CP1:
93DE051D 62BF718F F5ED0704 487D01D6 E1E40869 09DC3280 E8C4E481 7C66DDDD
21FE8DDA 4F21E607 63106512 5C395BBC 1C1C00CB FA602435 0C464CD7 0A3EA616P2:
85AEF3D0 78640C98 597B6027 B441A01F F1DD2C19 0F5E93C4 54806C11 D8806141
37227552 92130B08 D2AAB97F D34EC120 EE265948 D19C17AB F9B7213B AF82D65B
17509B09 2E845C12 66BA0D26 2CBEE6ED 0736A96F A347C8BD 856DC76B 84EBEB96
A7CF28D5 19BE3DA6 5F317015 3D278FF2 47EFBA98 A71A0811 6215BBA5 C999A7C7--------------------------------------------------------------------------------------------------------------------------------------------SM9签名测试签名主密钥和用户签名私钥产生过程中的相关值:
签名主私钥 ks:
sign master private key:
000130E7 8459D785 45CB54C5 87E02CF4 80CE0B66 340F319F 348A1D5B 1F2DC5F4签名主公钥 Ppub-s:
sign master public key:
9F64080B 3084F733 E48AFF4B 41B56501 1CE0711C 5E392CFB 0AB1B679 1B94C408
29DBA116 152D1F78 6CE843ED 24A3B573 414D2177 386A92DD 8F14D656 96EA5E32
69850938 ABEA0112 B57329F4 47E3A0CB AD3E2FDB 1A77F335 E89E1408 D0EF1C25
41E00A53 DDA532DA 1A7CE027 B7A46F74 1006E85F 5CDFF073 0E75C05F B4E3216D实体A的标识IDA:
Alice
IDA的16进制表示
416C6963 65签名私钥 ds_A:
签名私钥生成函数识别符:0x01
H1:
2ACC468C 3926B0BD B2767E99 FF26E084 DE9CED8D BC7D5FBF 418027B6 67862FABt1:
2ACD7773 BD808842 F841D35F 87070D79 5F6AF8F3 F08C915E 760A4511 86B3F59Ft2:
291FE3CA C8F58AD2 DC462C8D 4D578A94 DAFD5624 DDC28E32 8D293668 8A86CF1Asign private key:
A5702F05 CF131530 5E2D6EB6 4B0DEB92 3DB1A0BC F0CAFF90 523AC875 4AA69820
78559A84 4411F982 5C109F5E E3F52D72 0DD01785 392A727B B1556952 B2B013D3签名步骤中的相关值:
待签名消息 M:
Chinese IBS standard
M的16进制表示
4368696E 65736520 49425320 7374616E 64617264 群GT中的元素 g:
4E378FB5 561CD066 8F906B73 1AC58FEE 25738EDF 09CADC7A 29C0ABC0 177AEA6D
28B3404A 61908F5D 6198815C 99AF1990 C8AF3865 5930058C 28C21BB5 39CE0000
38BFFE40 A22D529A 0C66124B 2C308DAC 92299126 56F62B4F ACFCED40 8E02380F
A01F2C8B EE817696 09462C69 C96AA923 FD863E20 9D3CE26D D889B55E 2E3873DB
67E0E0C2 EED7A699 3DCE28FE 9AA2EF56 83430786 0839677F 96685F2B 44D0911F
5A1AE172 102EFD95 DF7338DB C577C66D 8D6C15E0 A0158C75 07228EFB 078F42A6
1604A3FC FA9783E6 67CE9FCB 1062C2A5 C6685C31 6DDA62DE 0548BAA6 BA30038B
93634F44 FA13AF76 169F3CC8 FBEA880A DAFF8475 D5FD28A7 5DEB83C4 4362B439
B3129A75 D31D1719 4675A1BC 56947920 898FBF39 0A5BF5D9 31CE6CBB 3340F66D
4C744E69 C4A2E1C8 ED72F796 D151A17C E2325B94 3260FC46 0B9F73CB 57C9014B
84B87422 330D7936 EABA1109 FA5A7A71 81EE16F2 438B0AEB 2F38FD5F 7554E57A
AAB9F06A 4EEBA432 3A7833DB 202E4E35 639D93FA 3305AF73 F0F071D7 D284FCFB产生随机数 r:
00033C86 16B06704 813203DF D0096502 2ED15975 C662337A ED648835 DC4B1CBE群GT中的元素 w:
81377B8F DBC2839B 4FA2D0E0 F8AA6853 BBBE9E9C 4099608F 8612C607 8ACD7563
815AEBA2 17AD502D A0F48704 CC73CABB 3C06209B D87142E1 4CBD99E8 BCA1680F
30DADC5C D9E207AE E32209F6 C3CA3EC0 D800A1A4 2D33C731 53DED47C 70A39D2E
8EAF5D17 9A1836B3 59A9D1D9 BFC19F2E FCDB8293 28620962 BD3FDF15 F2567F58
A543D256 09AE9439 20679194 ED30328B B33FD156 60BDE485 C6B79A7B 32B01398
3F012DB0 4BA59FE8 8DB88932 1CC2373D 4C0C35E8 4F7AB1FF 33679BCA 575D6765
4F8624EB 435B838C CA77B2D0 347E65D5 E4696441 2A096F41 50D8C5ED E5440DDF
0656FCB6 63D24731 E8029218 8A2471B8 B68AA993 89926849 9D23C897 55A1A897
44643CEA D40F0965 F28E1CD2 895C3D11 8E4F65C9 A0E3E741 B6DD52C0 EE2D25F5
898D6084 8026B7EF B8FCC1B2 442ECF07 95F8A81C EE99A624 8F294C82 C90D26BD
6A814AAF 475F128A EF43A128 E37F8015 4AE6CB92 CAD7D150 1BAE30F7 50B3A9BD
1F96B08E 97997363 91131470 5BFB9A9D BB97F755 53EC90FB B2DDAE53 C8F68E42h:
823C4B21 E4BD2DFE 1ED92C60 6653E996 66856315 2FC33F55 D7BFBB9B D9705ADBl:
3406F164 3496DFF8 385C82CF 5F4442B0 123E89AB AF898013 FB13AE36 D9799108群G1中的元素 s:
73BF9692 3CE58B6A D0E13E96 43A406D8 EB98417C 50EF1B29 CEF9ADB4 8B6D598C
856712F1 C2E0968A B7769F42 A99586AE D139D5B8 B3E15891 827CC2AC ED9BAA05消息M的签名为(h,s):
SM9 result signature:
h:
823C4B21 E4BD2DFE 1ED92C60 6653E996 66856315 2FC33F55 D7BFBB9B D9705ADBS:
73BF9692 3CE58B6A D0E13E96 43A406D8 EB98417C 50EF1B29 CEF9ADB4 8B6D598C
856712F1 C2E0968A B7769F42 A99586AE D139D5B8 B3E15891 827CC2AC ED9BAA05验证步骤中的相关值:
群GT中的元素 g:
4E378FB5 561CD066 8F906B73 1AC58FEE 25738EDF 09CADC7A 29C0ABC0 177AEA6D
28B3404A 61908F5D 6198815C 99AF1990 C8AF3865 5930058C 28C21BB5 39CE0000
38BFFE40 A22D529A 0C66124B 2C308DAC 92299126 56F62B4F ACFCED40 8E02380F
A01F2C8B EE817696 09462C69 C96AA923 FD863E20 9D3CE26D D889B55E 2E3873DB
67E0E0C2 EED7A699 3DCE28FE 9AA2EF56 83430786 0839677F 96685F2B 44D0911F
5A1AE172 102EFD95 DF7338DB C577C66D 8D6C15E0 A0158C75 07228EFB 078F42A6
1604A3FC FA9783E6 67CE9FCB 1062C2A5 C6685C31 6DDA62DE 0548BAA6 BA30038B
93634F44 FA13AF76 169F3CC8 FBEA880A DAFF8475 D5FD28A7 5DEB83C4 4362B439
B3129A75 D31D1719 4675A1BC 56947920 898FBF39 0A5BF5D9 31CE6CBB 3340F66D
4C744E69 C4A2E1C8 ED72F796 D151A17C E2325B94 3260FC46 0B9F73CB 57C9014B
84B87422 330D7936 EABA1109 FA5A7A71 81EE16F2 438B0AEB 2F38FD5F 7554E57A
AAB9F06A 4EEBA432 3A7833DB 202E4E35 639D93FA 3305AF73 F0F071D7 D284FCFB群GT中的元素 t:
B59486D6 F3AE4649 ADF387C5 A22790E4 2B98051A 339B3403 B17B1F2B 38259EFE
1632C30A A86001F5 2EEFED51 7AA672D7 0F03AF3E E9197017 EDA43143 6CFBDACE
2F635B5B 0243F6F4 876A1D91 49EAFAB7 1060EA43 52DE6D4A 83B5F8F3 DF73EFF0
3A27F33E 024339B8 3F16E58A E524A5FA A3E7FD00 9568A9FF 23752BC8 DD85B704
08208E26 734BC667 31AEE530 692B3AE2 77EA70D6 BBAF8F48 5295D067 E67B3B4F
1DBDDD78 126E962E 950CEBB3 85C3F7A3 E0A5597F 9C3B9FB3 F5DAC3DA A85FD016
189E64A3 C0A0D876 11A83AEC 8F3A3688 C0ABF2F6 4860CF33 1463ACB3 A4AABB04
6E3FA26F 762D1A23 71601BE0 0DA702B1 A726273C E843D991 CE5C2EAB AB2EAC6F
A5BCFFD5 40EE56B5 A26CCDA5 66FD8ABC 3615CB7D EA8F240E 0BF46158 16C2B23E
A074A0AA 62A26C28 3F11543C ECDEA524 2113FE2E 982CCBDA 2D495EF6 C05550A6
2E3F160C 96C16059 5A1034B5 15692066 8A7BEE5E 82E0B8BE 06963FDD BDEB5AAE
0DCF9EA2 8617B596 5313B917 D556DA0D 3A557C41 12CE1C4A 06B327D7 DC18273D群G2中的元素 P:
511F2C82 3C7484DD FC16BBC5 3AAD33B7 8D2429AF CF7F8AD8 B72261B4 E1FFCF79
7B234E1D 623A172A AA89164A F3E828B4 D0E49CE6 EC5C7FE9 2E657272 250CBAF6
4831DD31 3EC39FDA 59F3E14F EBCFF784 8D11875D 805662D2 6969CF70 5D46ED70
73B542A6 9058F460 1AC19F23 72036863 68FEC436 C13C2B07 61F9F9B6 E14A36E4群GT中的元素 u:
A97A1713 04A0316F C8BA21B9 11289C43 71E73B7D 2163AC5B 44F3B525 88EB69A1
1838972B F0CA86E1 7147468A 869A3261 FCC27993 AA50E367 27918ED5 ABD71C0C
291663C4 9DF9B4A8 2B122412 B749BF14 4341F2E2 25645061 45E0B771 73496F50
ABB3B115 E006FAE8 EC3CB133 F411DF05 B32CFA15 7716082D EEDF7BDB 188966DF
5FCC7DBD FC714FC8 989E0331 83814227 5EAE6B63 09BAD1DE FE28263A D66E6780
48697F5C 62EE4342 325A9EF0 3775A52F 1C0B9D5F B08D99E8 D65A436B 8A9AF05E
5C53DC7E 4D8A0B75 57920B21 FA5F2E75 B38C4445 F0CF9153 AC412724 0530F5D5
01BBD7B3 4565F80C CB452809 3CE9FAFD F6AD84FD 620F3B5B C324DA19 BB665151
4AE8D623 18D2BA35 F9494189 100BCD82 F1B1399B 0B148677 00D3D7A2 43D02D3A
701409A6 6ED452DE C4586735 CF363137 9501DC75 6466F6F1 8E3BC002 722531AE
7B9A10CE B34F1195 6A04E306 4663D87B 844B452C 3D81C91A 8223938D 1A9ABBC4
753A274B 8E9E35AF 503B7C2E 39ABB32B C8674FC8 EC012D8B EBDFFF2F E0985F85群GT中的元素 w':
81377B8F DBC2839B 4FA2D0E0 F8AA6853 BBBE9E9C 4099608F 8612C607 8ACD7563
815AEBA2 17AD502D A0F48704 CC73CABB 3C06209B D87142E1 4CBD99E8 BCA1680F
30DADC5C D9E207AE E32209F6 C3CA3EC0 D800A1A4 2D33C731 53DED47C 70A39D2E
8EAF5D17 9A1836B3 59A9D1D9 BFC19F2E FCDB8293 28620962 BD3FDF15 F2567F58
A543D256 09AE9439 20679194 ED30328B B33FD156 60BDE485 C6B79A7B 32B01398
3F012DB0 4BA59FE8 8DB88932 1CC2373D 4C0C35E8 4F7AB1FF 33679BCA 575D6765
4F8624EB 435B838C CA77B2D0 347E65D5 E4696441 2A096F41 50D8C5ED E5440DDF
0656FCB6 63D24731 E8029218 8A2471B8 B68AA993 89926849 9D23C897 55A1A897
44643CEA D40F0965 F28E1CD2 895C3D11 8E4F65C9 A0E3E741 B6DD52C0 EE2D25F5
898D6084 8026B7EF B8FCC1B2 442ECF07 95F8A81C EE99A624 8F294C82 C90D26BD
6A814AAF 475F128A EF43A128 E37F8015 4AE6CB92 CAD7D150 1BAE30F7 50B3A9BD
1F96B08E 97997363 91131470 5BFB9A9D BB97F755 53EC90FB B2DDAE53 C8F68E42h2:
823C4B21 E4BD2DFE 1ED92C60 6653E996 66856315 2FC33F55 D7BFBB9B D9705ADBh2 = h, 验证通过! verify OK----------------------------------------------------------------------SM9密钥交换测试加密主私钥 ke:
encrypt master private key:
0002E65B 0762D042 F51F0D23 542B13ED 8CFA2E9A 0E720636 1E013A28 3905E31F加密主公钥 Ppub-e:
encrypt master public key:
91745426 68E8F14A B273C094 5C3690C6 6E5DD096 78B86F73 4C435056 7ED06283
54E598C6 BF749A3D ACC9FFFE DD9DB686 6C50457C FC7AA2A4 AD65C316 8FF74210实体A的标识IDA:
Alice
IDA的16进制表示
416C6963 65加密私钥生成函数识别符:0x03
H1:
32DEE8AA D2DF2DB7 2C087F89 AA5FDA45 1B94D31A BD03F8E3 6A057FE2 CD160014t1:
32E1CF05 DA41FDFA 21278CAC FE8AEE32 A88F01B4 CB75FF19 8806BA0B 061BE333t2:
8C6C41DE ECB6FDDA 9E304420 13EF97E8 1FC55EEC 23ECDD47 500B3E30 156438EB实体A的加密私钥 de_A:
encrypt private key:
4C5EC9C8 CA8DEBA2 38CC3E50 0458F514 7911F225 1A4BD0AA 903BB5F8 D5FD23B4
0360DBBD D69A0573 0775BB3F 8AD799CC 571DCB88 3D417B8D 239302BD 90097C6B
21F05A64 F6592874 00F2D202 72329F2A 80EB6076 7C9FF9D2 3CE8046A F5C950D0
68AFFFD5 03C768A7 65731F62 FC3CB7B7 705456D4 0830E868 CC17A7F9 51855678实体B的标识IDB:
Bob
IDB的16进制表示
426F62加密私钥生成函数识别符:0x03
H1:
9CB1F628 8CE0E510 43CE7234 4582FFC3 01E0A812 A7F5F200 4B85547A 24B82716t1:
9CB4DC83 9443B553 38ED7F57 99AE13B0 8EDAD6AC B667F836 69868EA2 5DBE0A35t2:
965F05D0 1B5E3284 145DAB2C AC0C9EF0 362FF06A 82A0ECEE A92CA016 C294946F实体B的加密私钥 de_B:
encrypt private key:
713E27FB 1C09A61A 08626545 78D4A645 0E1493EF EC23DB0F 7C428B99 DDFDDDE8
0D9C3B42 2AEBB8AB FC847D8A AB1348B6 F96F103D CEDCD7A5 DC907103 6706AF22
83F7CED7 74B11E44 D56FD481 37E97AC7 51BDF497 E442DCFE AD941199 8293A4D9
011D5E96 6FEDB249 E02F1A53 9E362C42 CD9E70D0 CE83F33D E494583F 6DD04276密钥交换的长度: 16 bytes
密钥交换步骤A1-A4中的相关值:
QB:
6D57AED3 264CA6E0 A1E35C94 369142B4 94504FAE E3C2C146 6B1A046D CE67FE22
2336CA2B 93CDB461 5BC395AC 9D0F158B 0160F636 C3DD3862 364A15C5 C5218B9Br:
00005879 DD1D51E1 75946F23 B1B41E93 BA31C584 AE59A426 EC1046A4 D03B06C8R
767A4BED 09FFBB52 29D9CAA1 65548FFA 8284A315 B15FBA86 4887A9AF A5B755FC
02A4E503 51092133 252BA616 09779B45 5DF9C4A0 109ACE24 1485A955 D5B81726密钥交换步骤B1-B8中的相关值:
QB:
1CF00974 AB8AE009 7EAFFDDC B2425184 16DF388A 7DEBAF8B D1C2AE23 DA028C26
97D25B78 504195C4 19600AAB B38E7D2B BACFC13D B28DC48D 371A2651 BB1820DAr:
00018B98 C44BEF9F 8537FB7D 071B2C92 8B3BC65B D3D69E1E EE213564 905634FER
8168903E 4A56DC41 17387217 C0AA55AB 72A5F6A7 8973E612 A58AABE2 A5BBC828
7E07CE2D 3B285A56 148D66FC 64FE0ED9 28BA902C 1FDA056C 0083AF2C B66528AEg1:
28542FB6 954C84BE 6A5F2988 A31CB681 7BA07819 66FA83D9 673A9577 D3C0C134
5E27C19F C02ED9AE 37F5BB7B E9C03C2B 87DE0275 39CCF03E 6B7D36DE 4AB45CD1
A1ABFCD3 0C57DB0F 1A838E3A 8F2BF823 479C978B D1372305 06EA6249 C891049E
34974779 13AB89F5 E2960F38 2B1B5C8E E09DE0FA 498BA95C 4409D630 D343DA40
4FEC9347 2DA33A4D B6599095 C0CF895E 3A7B993E E5E4EBE3 B9AB7D7D 5FF2A3D1
647BA154 C3E8E185 DFC33657 C1F128D4 80F3F7E3 F1680120 8029E194 34C733BB
73F21693 C66FC237 24DB2638 0C526223 C705DAF6 BA18B763 A68623C8 6A632B05
0F63A071 A6D62EA4 5B59A194 2DFF5335 D1A232C9 C5664FAD 5D6AF54C 11418B0D
8C8E9D8D 905780D5 0E779067 F2C4B1C8 F83A8B59 D735BB52 AF35F567 30BDE5AC
861CCD99 78617267 CE4AD978 9F77739E 62F2E57B 48C2FF26 D2E90A79 A1D86B93
9B1CA08F 64712E33 AEDA3F44 BD6CB633 E0F72221 1E344D73 EC9BBEBC 92142765
6BA584CE 742A2A3A B41C15D3 EF94EDEB 8EF74A2B DCDAAECC 09ABA567 981F6437g2:
1052D6E9 D13E3819 09DFF7B2 B41E13C9 87D0A906 8423B769 480DACCE 6A06F492
5FFEB92A D870F97D C0893114 DA22A44D BC9E7A8B 6CA31A0C F0467265 A1FB48C7
2C5C3B37 E4F2FF83 DB33D98C 0317BCBB BBF4AC6D F6B89ECA 58268B28 0045E612
6CED9E2D 7C9CD3D5 AD630DEF AB0B8315 06218037 EE0F861C F9B43C78 434AEC38
0AE7BF3E 1AEC0CB6 7A034409 06C7DFB3 BCD4B6EE EBB7E371 F0094AD4 A816088D
98DBC791 D0671CAC A12236CD F8F39E15 AEB96FAE B39606D5 B04AC581 746A663D
00DD2B74 16BAA911 72E89D53 09D834F7 8C1E31B4 483BB971 85931BAD 7BE1B9B5
7EBAC034 9F854446 9E60C32F 6075FB04 68A68147 FF013537 DF792FFC E024F857
10CC2B56 1A62B62D A36AEFD6 0850714F 49170FD9 4A0010C6 D4B651B6 4F3A3A5E
58C9687B EDDCD9E4 FEDAB16B 884D1FE6 DFA117B2 AB821F74 E0BF7ACD A2269859
2A430968 F1608606 1904CE20 1847934B 11CA0F9E 9528F5A9 D0CE8F01 5C9AEA79
934FDDA6 D3AB48C8 571CE235 4B79742A A498CB8C DDE6BD1F A5946345 A1A652F6g3:
A76B6777 AD87C912 4C7D7065 F74808DB 2E80371C 70471580 B0C7C457 A79EA5E7
242FA31F F8E139FA E169A169 92F5F029 162664CE 78B33332 4B3BDB4C 682BF9B2
0626D64D CE603F33 2E9593F6 2B67A6B0 02DEB6DD 2E7D4FAD 3F33C38F 202DE204
53274906 11B2AE6F 849CF779 B9B74AD9 BA6CF397 F6132612 0777CE46 92F85DC2
ADC269D1 B6233258 2D823132 A9712754 77A0CF1D CCF4B2BF 096D9110 F74E2A01
B1ED0650 2333B2AB 1AE697EA 34F2EF8C 6E47B043 1831706C B5AFCD75 754FA795
28F65B36 51E184BC ED030661 EE4A8D67 0FBAE267 96E8CDB6 6F388ED6 644AF851
885C7F92 4CC7CB20 968AA50E 8230A3B3 9C2BB5DD 4D753D94 BE5DD9A4 272CF827
0DA649CB 8A63172F 8FB028CD 951E7621 5824A4EE 28405D3C 5E5DFDA6 C7CE293F
4A40AC8F C5B7168F A54AD3D0 B81A0F8F 50C16436 6CCDEC1C 9A40DCE9 F0A31133
35D89EAE B36F4D31 BB671306 4CDA8835 E2AA4529 F4212932 7C6F7E8A B760654D
58D17E44 8F6D5CBC A66BD7E3 3810D270 DD3B9436 B1BF46B9 A17C9D11 A5A6B148密钥交换步骤A5-A8中的相关值:
g1:
28542FB6 954C84BE 6A5F2988 A31CB681 7BA07819 66FA83D9 673A9577 D3C0C134
5E27C19F C02ED9AE 37F5BB7B E9C03C2B 87DE0275 39CCF03E 6B7D36DE 4AB45CD1
A1ABFCD3 0C57DB0F 1A838E3A 8F2BF823 479C978B D1372305 06EA6249 C891049E
34974779 13AB89F5 E2960F38 2B1B5C8E E09DE0FA 498BA95C 4409D630 D343DA40
4FEC9347 2DA33A4D B6599095 C0CF895E 3A7B993E E5E4EBE3 B9AB7D7D 5FF2A3D1
647BA154 C3E8E185 DFC33657 C1F128D4 80F3F7E3 F1680120 8029E194 34C733BB
73F21693 C66FC237 24DB2638 0C526223 C705DAF6 BA18B763 A68623C8 6A632B05
0F63A071 A6D62EA4 5B59A194 2DFF5335 D1A232C9 C5664FAD 5D6AF54C 11418B0D
8C8E9D8D 905780D5 0E779067 F2C4B1C8 F83A8B59 D735BB52 AF35F567 30BDE5AC
861CCD99 78617267 CE4AD978 9F77739E 62F2E57B 48C2FF26 D2E90A79 A1D86B93
9B1CA08F 64712E33 AEDA3F44 BD6CB633 E0F72221 1E344D73 EC9BBEBC 92142765
6BA584CE 742A2A3A B41C15D3 EF94EDEB 8EF74A2B DCDAAECC 09ABA567 981F6437g2:
1052D6E9 D13E3819 09DFF7B2 B41E13C9 87D0A906 8423B769 480DACCE 6A06F492
5FFEB92A D870F97D C0893114 DA22A44D BC9E7A8B 6CA31A0C F0467265 A1FB48C7
2C5C3B37 E4F2FF83 DB33D98C 0317BCBB BBF4AC6D F6B89ECA 58268B28 0045E612
6CED9E2D 7C9CD3D5 AD630DEF AB0B8315 06218037 EE0F861C F9B43C78 434AEC38
0AE7BF3E 1AEC0CB6 7A034409 06C7DFB3 BCD4B6EE EBB7E371 F0094AD4 A816088D
98DBC791 D0671CAC A12236CD F8F39E15 AEB96FAE B39606D5 B04AC581 746A663D
00DD2B74 16BAA911 72E89D53 09D834F7 8C1E31B4 483BB971 85931BAD 7BE1B9B5
7EBAC034 9F854446 9E60C32F 6075FB04 68A68147 FF013537 DF792FFC E024F857
10CC2B56 1A62B62D A36AEFD6 0850714F 49170FD9 4A0010C6 D4B651B6 4F3A3A5E
58C9687B EDDCD9E4 FEDAB16B 884D1FE6 DFA117B2 AB821F74 E0BF7ACD A2269859
2A430968 F1608606 1904CE20 1847934B 11CA0F9E 9528F5A9 D0CE8F01 5C9AEA79
934FDDA6 D3AB48C8 571CE235 4B79742A A498CB8C DDE6BD1F A5946345 A1A652F6g3:
A76B6777 AD87C912 4C7D7065 F74808DB 2E80371C 70471580 B0C7C457 A79EA5E7
242FA31F F8E139FA E169A169 92F5F029 162664CE 78B33332 4B3BDB4C 682BF9B2
0626D64D CE603F33 2E9593F6 2B67A6B0 02DEB6DD 2E7D4FAD 3F33C38F 202DE204
53274906 11B2AE6F 849CF779 B9B74AD9 BA6CF397 F6132612 0777CE46 92F85DC2
ADC269D1 B6233258 2D823132 A9712754 77A0CF1D CCF4B2BF 096D9110 F74E2A01
B1ED0650 2333B2AB 1AE697EA 34F2EF8C 6E47B043 1831706C B5AFCD75 754FA795
28F65B36 51E184BC ED030661 EE4A8D67 0FBAE267 96E8CDB6 6F388ED6 644AF851
885C7F92 4CC7CB20 968AA50E 8230A3B3 9C2BB5DD 4D753D94 BE5DD9A4 272CF827
0DA649CB 8A63172F 8FB028CD 951E7621 5824A4EE 28405D3C 5E5DFDA6 C7CE293F
4A40AC8F C5B7168F A54AD3D0 B81A0F8F 50C16436 6CCDEC1C 9A40DCE9 F0A31133
35D89EAE B36F4D31 BB671306 4CDA8835 E2AA4529 F4212932 7C6F7E8A B760654D
58D17E44 8F6D5CBC A66BD7E3 3810D270 DD3B9436 B1BF46B9 A17C9D11 A5A6B148A方
SA: 6CD52312 17E73D80 548A1A65 DED17849 3F4282E6 E471FE3E F62271EA 758470E6S1: E122B3BF A8965562 AA0A4A92 B671A193 352F2832 8A129BFF 45C4DD26 2EBCB9EESK: 68B20D30 77EA6E2B 82531583 6FDBC633 B方
S2: 6CD52312 17E73D80 548A1A65 DED17849 3F4282E6 E471FE3E F62271EA 758470E6SB: E122B3BF A8965562 AA0A4A92 B671A193 352F2832 8A129BFF 45C4DD26 2EBCB9EESK: 68B20D30 77EA6E2B 82531583 6FDBC633 SA = S2
S1 = SB
SK_A = SK_B
密钥交换成功----------------------------------------------------------------------SM9密钥封装测试加密主密钥和用户密钥产生过程中的相关值:
加密主私钥 ke:
encrypt master private key:
0001EDEE 3778F441 F8DEA3D9 FA0ACC4E 07EE36C9 3F9A0861 8AF4AD85 CEDE1C22加密主公钥 Ppub-e:
encrypt master public key:
787ED7B8 A51F3AB8 4E0A6600 3F32DA5C 720B17EC A7137D39 ABC66E3C 80A892FF
769DE617 91E5ADC4 B9FF85A3 1354900B 20287127 9A8C49DC 3F220F64 4C57A7B1实体B的标识IDB:
Bob
加密私钥生成函数识别符:0x03
H1:
9CB1F628 8CE0E510 43CE7234 4582FFC3 01E0A812 A7F5F200 4B85547A 24B82716t1:
9CB3E416 C459D952 3CAD160E 3F8DCC11 09CEDEDB E78FFA61 D67A01FF F3964338t2:
864E4D83 91948B37 535ECFA4 4C3F8D4E 545ADA50 2FF8229C 7C32F529 AF406E06加密私钥 de_B:
encrypt private key:
94736ACD 2C8C8796 CC4785E9 38301A13 9A059D35 37B64141 40B2D31E ECF41683
115BAE85 F5D8BC6C 3DBD9E53 42979ACC CF3C2F4F 28420B1C B4F8C0B5 9A19B158
7AA5E475 70DA7600 CD760A0C F7BEAF71 C447F384 4753FE74 FA7BA92C A7D3B55F
27538A62 E7F7BFB5 1DCE0870 4796D94C 9D56734F 119EA447 32B50E31 CDEB75C1密钥封装的长度: 32 bytes
密钥封装步骤A1-A7中的相关值:
QB:
709D1658 08B0A43E 2574E203 FA885ABC BAB16A24 0C4C1916 552E7C43 D09763B8
693269A6 BE2456F4 33337582 74786B60 51FF87B7 F198DA4B A1A2C6E3 36F51FCCr:
00007401 5F8489C0 1EF42704 56F9E647 5BFB602B DE7F33FD 482AB4E3 684A6722C
1EDEE2C3 F4659144 91DE44CE FB2CB434 AB02C308 D9DC5E20 67B4FED5 AAAC8A0F
1C9B4C43 5ECA35AB 83BB7341 74C0F78F DE81A533 74AFF3B3 602BBC5E 37BE9A4Cg:
9746FC5B 231CEDF3 6F835C47 893D63C6 FF652BCB 92375CE3 C2AB256D 1FD56413
232A2F80 CFBAE061 F196BB99 213D5030 6648AC33 CDC78E8F 8A1563FF BF3BD3EB
68E8A16C 0AC905F6 92904ABC C004B1AC F12106BD 0A15B6E7 08D76E72 B9288EF2
9436A60C 403F4F8B AC4DD3E3 93E25419 E634FC2B 3DAF247F 6092A802 F60D5C58
A140EAEF 3893D574 CB83C01D 951A53F5 1975760B E57F3BBD 89817498 D2158352
95A2BCCE 25359D03 3FC654BD 6A9E462E 5BD0686F F6DDD745 5F71FFF1 5AFFD3F0
B0432019 0B1E90CE DF6AC570 147A23AE 6F0EAE45 034E6C62 124DD6E8 978F78AD
A504E3B4 3C1DD367 94217FA1 B05AC046 C4131854 C3D3E3A5 B5967A64 A861F0A2
897F7B35 D1C0E21D 84D75CFF AC08C73E 744A16A4 7EE76E28 A0B03849 888D10FF
24443BB4 24B12C41 EAF6D34D 92520590 1F5CBA59 CFEBA352 24660DB3 848B0BF5
0825403F B3F681AB 2B036DBB A25483D5 CB98BD56 F3DF95F0 A7A705A2 F6FD804B
9CE7BC68 062182CF 5D9F4A98 C5A4ED1F 3B4CE4EA 817D19ED 7EF2CE98 E6F5864Dw:
8EAB0CD6 D0C95A6B BB7051AC 848FDFB9 689E5E5C 486B1294 557189B3 38B53B1D
78082BB4 0152DC35 AC774442 CC6408FF D68494D9 953D77BF 55E30E84 697F6674
5AAF5223 9E46B037 3B3168BA B75C32E0 48B5FAEB ABFA1F7F 9BA6B4C0 C90E65B0
75F6A2D9 ED54C87C DDD2EAA7 87032320 205E7AC7 D7FEAA86 95AB2BF7 F5710861
247C2034 CCF4A143 2DA1876D 023AD6D7 4FF1678F DA3AF37A 3D9F613C DE805798
8B07151B AC93AF48 D78D86C2 6EA97F24 E2DACC84 104CCE87 91FE90BA 61B2049C
AAC6AB38 EA07F996 6173FD9B BF34AAB5 8EE84CD3 777A9FD0 0BBCA1DC 09CF8696
A1040465 BD723AE5 13C4BE3E F2CFDC08 8A935F0B 207DEED7 AAD5CE2F C37D4203
4D874A4C E9B3B587 65B1252A 0880952B 4FF3C97E A1A4CFDC 67A0A007 2541A03D
3924EABC 443B0503 510B93BB CD98EB70 E0192B82 1D14D69C CB2513A1 A7421EB7
A018A035 E8FB61F2 71DE1C5B 3E781C63 508C113B 3EAC5378 05EAE164 D732FAD0
56BEA27C 8624D506 4C9C278A 193D63F6 908EE558 DF5F5E07 21317FC6 E829C242K:
4FF5CF86 D2AD40C8 F4BAC98D 76ABDBDE 0C0E2F0A 829D3F91 1EF5B2BC E0695480密钥封装结果:
SM9 key package:
C:
1EDEE2C3 F4659144 91DE44CE FB2CB434 AB02C308 D9DC5E20 67B4FED5 AAAC8A0F
1C9B4C43 5ECA35AB 83BB7341 74C0F78F DE81A533 74AFF3B3 602BBC5E 37BE9A4CK:
4FF5CF86 D2AD40C8 F4BAC98D 76ABDBDE 0C0E2F0A 829D3F91 1EF5B2BC E0695480解封装步骤B1-B4中的相关值:
w':
8EAB0CD6 D0C95A6B BB7051AC 848FDFB9 689E5E5C 486B1294 557189B3 38B53B1D
78082BB4 0152DC35 AC774442 CC6408FF D68494D9 953D77BF 55E30E84 697F6674
5AAF5223 9E46B037 3B3168BA B75C32E0 48B5FAEB ABFA1F7F 9BA6B4C0 C90E65B0
75F6A2D9 ED54C87C DDD2EAA7 87032320 205E7AC7 D7FEAA86 95AB2BF7 F5710861
247C2034 CCF4A143 2DA1876D 023AD6D7 4FF1678F DA3AF37A 3D9F613C DE805798
8B07151B AC93AF48 D78D86C2 6EA97F24 E2DACC84 104CCE87 91FE90BA 61B2049C
AAC6AB38 EA07F996 6173FD9B BF34AAB5 8EE84CD3 777A9FD0 0BBCA1DC 09CF8696
A1040465 BD723AE5 13C4BE3E F2CFDC08 8A935F0B 207DEED7 AAD5CE2F C37D4203
4D874A4C E9B3B587 65B1252A 0880952B 4FF3C97E A1A4CFDC 67A0A007 2541A03D
3924EABC 443B0503 510B93BB CD98EB70 E0192B82 1D14D69C CB2513A1 A7421EB7
A018A035 E8FB61F2 71DE1C5B 3E781C63 508C113B 3EAC5378 05EAE164 D732FAD0
56BEA27C 8624D506 4C9C278A 193D63F6 908EE558 DF5F5E07 21317FC6 E829C242K':
4FF5CF86 D2AD40C8 F4BAC98D 76ABDBDE 0C0E2F0A 829D3F91 1EF5B2BC E0695480解封后的密钥:
4FF5CF86 D2AD40C8 F4BAC98D 76ABDBDE 0C0E2F0A 829D3F91 1EF5B2BC E0695480测试成功----------------------------------------------------------------------SM9加解密测试加密主密钥和用户加密密钥产生过程中的相关值:
加密主私钥 ke:
encrypt master private key:
0001EDEE 3778F441 F8DEA3D9 FA0ACC4E 07EE36C9 3F9A0861 8AF4AD85 CEDE1C22加密主公钥 Ppub-e:
encrypt master public key:
787ED7B8 A51F3AB8 4E0A6600 3F32DA5C 720B17EC A7137D39 ABC66E3C 80A892FF
769DE617 91E5ADC4 B9FF85A3 1354900B 20287127 9A8C49DC 3F220F64 4C57A7B1实体B的标识IDB:
Bob
加密私钥生成函数识别符:0x03
H1:
9CB1F628 8CE0E510 43CE7234 4582FFC3 01E0A812 A7F5F200 4B85547A 24B82716t1:
9CB3E416 C459D952 3CAD160E 3F8DCC11 09CEDEDB E78FFA61 D67A01FF F3964338t2:
864E4D83 91948B37 535ECFA4 4C3F8D4E 545ADA50 2FF8229C 7C32F529 AF406E06加密私钥 de_B:
encrypt private key:
94736ACD 2C8C8796 CC4785E9 38301A13 9A059D35 37B64141 40B2D31E ECF41683
115BAE85 F5D8BC6C 3DBD9E53 42979ACC CF3C2F4F 28420B1C B4F8C0B5 9A19B158
7AA5E475 70DA7600 CD760A0C F7BEAF71 C447F384 4753FE74 FA7BA92C A7D3B55F
27538A62 E7F7BFB5 1DCE0870 4796D94C 9D56734F 119EA447 32B50E31 CDEB75C1待加密消息 M:
Chinese IBE standard
消息M的长度: 20 bytes, 0xa0
K1_len: 16 bytes, 0x80
K2_len: 32 bytes, 0x100加密算法步骤A1-A8中的相关值:
QB:
709D1658 08B0A43E 2574E203 FA885ABC BAB16A24 0C4C1916 552E7C43 D09763B8
693269A6 BE2456F4 33337582 74786B60 51FF87B7 F198DA4B A1A2C6E3 36F51FCCr:
0000AAC0 541779C8 FC45E3E2 CB25C12B 5D2576B2 129AE8BB 5EE2CBE5 EC9E785CC
24454711 64490618 E1EE2052 8FF1D545 B0F14C8B CAA44544 F03DAB5D AC07D8FF
42FFCA97 D57CDDC0 5EA405F2 E586FEB3 A6930715 532B8000 759F1305 9ED59AC0g:
9746FC5B 231CEDF3 6F835C47 893D63C6 FF652BCB 92375CE3 C2AB256D 1FD56413
232A2F80 CFBAE061 F196BB99 213D5030 6648AC33 CDC78E8F 8A1563FF BF3BD3EB
68E8A16C 0AC905F6 92904ABC C004B1AC F12106BD 0A15B6E7 08D76E72 B9288EF2
9436A60C 403F4F8B AC4DD3E3 93E25419 E634FC2B 3DAF247F 6092A802 F60D5C58
A140EAEF 3893D574 CB83C01D 951A53F5 1975760B E57F3BBD 89817498 D2158352
95A2BCCE 25359D03 3FC654BD 6A9E462E 5BD0686F F6DDD745 5F71FFF1 5AFFD3F0
B0432019 0B1E90CE DF6AC570 147A23AE 6F0EAE45 034E6C62 124DD6E8 978F78AD
A504E3B4 3C1DD367 94217FA1 B05AC046 C4131854 C3D3E3A5 B5967A64 A861F0A2
897F7B35 D1C0E21D 84D75CFF AC08C73E 744A16A4 7EE76E28 A0B03849 888D10FF
24443BB4 24B12C41 EAF6D34D 92520590 1F5CBA59 CFEBA352 24660DB3 848B0BF5
0825403F B3F681AB 2B036DBB A25483D5 CB98BD56 F3DF95F0 A7A705A2 F6FD804B
9CE7BC68 062182CF 5D9F4A98 C5A4ED1F 3B4CE4EA 817D19ED 7EF2CE98 E6F5864Dw:
63253798 B7535975 A90F2025 61FC5457 0FEE88BF 69E3B7A5 12697069 E59E1F5D
42D54B98 4AF01D71 0BA0030C 18738F6B 14E4DF47 2ACAF893 99228D85 AF117904
B426DFF0 40C49F9A 43BCD7FD 7D757B7D 1D8D7311 C08FC3B5 7616C5EE 137785A3
28D19396 DBDFAC50 EEE62B1C 7F994BB6 F9BD9EFB 2221A1BE 1B6EB3E8 F71485B4
A3EEF46E 1B99F614 D7BD7F57 574BA7EB B502AF0B DABA0787 C5C4DBC5 6A344A25
A06790B6 05CEA0BB AF34776D 6B1FC019 8A02D05B BAAC6F64 A555AB2C A576F0DA
B405CBBF 22197B94 FD18D27D A0B0E52C 8754EE94 27963469 1FEA6E13 FFD0584E
AA2A94A7 E2259B67 1896302B 4275AE3E 8CF20100 98D5BEAF 19D0A6E6 0354E1C5
5C97E64F 848B06D3 9BA8828F F59502C0 81D3DAE6 8F35F7E6 448DB96D 220A0FBA
02BE03C5 1BF062B6 F564AE0B FB42DCA3 6E71D387 512E3BCC CA3379B7 3EC47176
52BE92FB 9E78BA9E 1D80A156 06580493 5742DBD2 B9675430 11AAC533 33909FBF
5FADEC14 A2FBD152 48E77467 442A6969 8246FB03 14C7A824 6D952219 DD2144EDK:
58373260 F067EC48 667C21C1 44F8BC33 CD304978 8651FFD5 F738003E 51DF3117
4D0E4E40 2FD87F45 81B612F7 4259DB57 4F67ECE6 加密明文的方法为基于KDF的序列密码:
klen: 52 bytes, 0x1a0
K1:
58373260 F067EC48 667C21C1 44F8BC33 CD304978 C2:
1B5F5B0E 95148968 2F3E64E1 378CDD5D A9513B1C K2:
8651FFD5 F738003E 51DF3117 4D0E4E40 2FD87F45 81B612F7 4259DB57 4F67ECE6C3:
BA672387 BCD6DE50 16A158A5 2BB2E7FC 429197BC AB70B25A FEE37A2B 9DB9F367加密后的密文 C=C1||C3||C2:
SM9 result ciphertext:
00244547 11644906 18E1EE20 528FF1D5 45B0F14C 8BCAA445 44F03DAB 5DAC07D8
FF42FFCA 97D57CDD C05EA405 F2E586FE B3A69307 15532B80 00759F13 059ED59A
C0BA6723 87BCD6DE 5016A158 A52BB2E7 FC429197 BCAB70B2 5AFEE37A 2B9DB9F3
671B5F5B 0E951489 682F3E64 E1378CDD 5DA9513B 1CEnType: XOR
C1:
24454711 64490618 E1EE2052 8FF1D545 B0F14C8B CAA44544 F03DAB5D AC07D8FF
42FFCA97 D57CDDC0 5EA405F2 E586FEB3 A6930715 532B8000 759F1305 9ED59AC0C2:
1B5F5B0E 95148968 2F3E64E1 378CDD5D A9513B1C C3:
BA672387 BCD6DE50 16A158A5 2BB2E7FC 429197BC AB70B25A FEE37A2B 9DB9F367解密算法步骤B1-B5中的相关值:
w':
63253798 B7535975 A90F2025 61FC5457 0FEE88BF 69E3B7A5 12697069 E59E1F5D
42D54B98 4AF01D71 0BA0030C 18738F6B 14E4DF47 2ACAF893 99228D85 AF117904
B426DFF0 40C49F9A 43BCD7FD 7D757B7D 1D8D7311 C08FC3B5 7616C5EE 137785A3
28D19396 DBDFAC50 EEE62B1C 7F994BB6 F9BD9EFB 2221A1BE 1B6EB3E8 F71485B4
A3EEF46E 1B99F614 D7BD7F57 574BA7EB B502AF0B DABA0787 C5C4DBC5 6A344A25
A06790B6 05CEA0BB AF34776D 6B1FC019 8A02D05B BAAC6F64 A555AB2C A576F0DA
B405CBBF 22197B94 FD18D27D A0B0E52C 8754EE94 27963469 1FEA6E13 FFD0584E
AA2A94A7 E2259B67 1896302B 4275AE3E 8CF20100 98D5BEAF 19D0A6E6 0354E1C5
5C97E64F 848B06D3 9BA8828F F59502C0 81D3DAE6 8F35F7E6 448DB96D 220A0FBA
02BE03C5 1BF062B6 F564AE0B FB42DCA3 6E71D387 512E3BCC CA3379B7 3EC47176
52BE92FB 9E78BA9E 1D80A156 06580493 5742DBD2 B9675430 11AAC533 33909FBF
5FADEC14 A2FBD152 48E77467 442A6969 8246FB03 14C7A824 6D952219 DD2144EDK':
58373260 F067EC48 667C21C1 44F8BC33 CD304978 8651FFD5 F738003E 51DF3117
4D0E4E40 2FD87F45 81B612F7 4259DB57 4F67ECE6 加密明文的方法为基于KDF的序列密码:
klen: 52 bytes, 0x1a0
K1':
58373260 F067EC48 667C21C1 44F8BC33 CD304978 M':
4368696E 65736520 49424520 7374616E 64617264 K2':
8651FFD5 F738003E 51DF3117 4D0E4E40 2FD87F45 81B612F7 4259DB57 4F67ECE6u:
BA672387 BCD6DE50 16A158A5 2BB2E7FC 429197BC AB70B25A FEE37A2B 9DB9F367u=C3'
解密后的明文M':
Chinese IBE standard
加解密成功加密算法步骤A1-A8中的相关值:
QB:
709D1658 08B0A43E 2574E203 FA885ABC BAB16A24 0C4C1916 552E7C43 D09763B8
693269A6 BE2456F4 33337582 74786B60 51FF87B7 F198DA4B A1A2C6E3 36F51FCCr:
0000AAC0 541779C8 FC45E3E2 CB25C12B 5D2576B2 129AE8BB 5EE2CBE5 EC9E785CC
24454711 64490618 E1EE2052 8FF1D545 B0F14C8B CAA44544 F03DAB5D AC07D8FF
42FFCA97 D57CDDC0 5EA405F2 E586FEB3 A6930715 532B8000 759F1305 9ED59AC0g:
9746FC5B 231CEDF3 6F835C47 893D63C6 FF652BCB 92375CE3 C2AB256D 1FD56413
232A2F80 CFBAE061 F196BB99 213D5030 6648AC33 CDC78E8F 8A1563FF BF3BD3EB
68E8A16C 0AC905F6 92904ABC C004B1AC F12106BD 0A15B6E7 08D76E72 B9288EF2
9436A60C 403F4F8B AC4DD3E3 93E25419 E634FC2B 3DAF247F 6092A802 F60D5C58
A140EAEF 3893D574 CB83C01D 951A53F5 1975760B E57F3BBD 89817498 D2158352
95A2BCCE 25359D03 3FC654BD 6A9E462E 5BD0686F F6DDD745 5F71FFF1 5AFFD3F0
B0432019 0B1E90CE DF6AC570 147A23AE 6F0EAE45 034E6C62 124DD6E8 978F78AD
A504E3B4 3C1DD367 94217FA1 B05AC046 C4131854 C3D3E3A5 B5967A64 A861F0A2
897F7B35 D1C0E21D 84D75CFF AC08C73E 744A16A4 7EE76E28 A0B03849 888D10FF
24443BB4 24B12C41 EAF6D34D 92520590 1F5CBA59 CFEBA352 24660DB3 848B0BF5
0825403F B3F681AB 2B036DBB A25483D5 CB98BD56 F3DF95F0 A7A705A2 F6FD804B
9CE7BC68 062182CF 5D9F4A98 C5A4ED1F 3B4CE4EA 817D19ED 7EF2CE98 E6F5864Dw:
63253798 B7535975 A90F2025 61FC5457 0FEE88BF 69E3B7A5 12697069 E59E1F5D
42D54B98 4AF01D71 0BA0030C 18738F6B 14E4DF47 2ACAF893 99228D85 AF117904
B426DFF0 40C49F9A 43BCD7FD 7D757B7D 1D8D7311 C08FC3B5 7616C5EE 137785A3
28D19396 DBDFAC50 EEE62B1C 7F994BB6 F9BD9EFB 2221A1BE 1B6EB3E8 F71485B4
A3EEF46E 1B99F614 D7BD7F57 574BA7EB B502AF0B DABA0787 C5C4DBC5 6A344A25
A06790B6 05CEA0BB AF34776D 6B1FC019 8A02D05B BAAC6F64 A555AB2C A576F0DA
B405CBBF 22197B94 FD18D27D A0B0E52C 8754EE94 27963469 1FEA6E13 FFD0584E
AA2A94A7 E2259B67 1896302B 4275AE3E 8CF20100 98D5BEAF 19D0A6E6 0354E1C5
5C97E64F 848B06D3 9BA8828F F59502C0 81D3DAE6 8F35F7E6 448DB96D 220A0FBA
02BE03C5 1BF062B6 F564AE0B FB42DCA3 6E71D387 512E3BCC CA3379B7 3EC47176
52BE92FB 9E78BA9E 1D80A156 06580493 5742DBD2 B9675430 11AAC533 33909FBF
5FADEC14 A2FBD152 48E77467 442A6969 8246FB03 14C7A824 6D952219 DD2144EDK:
58373260 F067EC48 667C21C1 44F8BC33 CD304978 8651FFD5 F738003E 51DF3117
4D0E4E40 2FD87F45 81B612F7 4259DB57 加密明文的方法为分组密码算法:
klen: 48 bytes, 0x180
K1:
58373260 F067EC48 667C21C1 44F8BC33 C2:
00000000 00000000 00000000 00000000 E05B6FAC 6F11B965 268C994F 00DBA7A8
132C9574 5B2CACB3 82FBFD90 6D9BA86A K2:
CD304978 8651FFD5 F738003E 51DF3117 4D0E4E40 2FD87F45 81B612F7 4259DB57C3:
12AF121D E3795AA5 14D0C6E7 949CE479 807E8B03 140DCA09 D18DD075 E47EB03C加密后的密文 C=C1||C3||C2:
SM9 result ciphertext:
02244547 11644906 18E1EE20 528FF1D5 45B0F14C 8BCAA445 44F03DAB 5DAC07D8
FF42FFCA 97D57CDD C05EA405 F2E586FE B3A69307 15532B80 00759F13 059ED59A
C012AF12 1DE3795A A514D0C6 E7949CE4 79807E8B 03140DCA 09D18DD0 75E47EB0
3C000000 00000000 00000000 00000000 00E05B6F AC6F11B9 65268C99 4F00DBA7
A8132C95 745B2CAC B382FBFD 906D9BA8 6AEnType: CBC
C1:
24454711 64490618 E1EE2052 8FF1D545 B0F14C8B CAA44544 F03DAB5D AC07D8FF
42FFCA97 D57CDDC0 5EA405F2 E586FEB3 A6930715 532B8000 759F1305 9ED59AC0C2:
00000000 00000000 00000000 00000000 E05B6FAC 6F11B965 268C994F 00DBA7A8
132C9574 5B2CACB3 82FBFD90 6D9BA86A C3:
12AF121D E3795AA5 14D0C6E7 949CE479 807E8B03 140DCA09 D18DD075 E47EB03C解密算法步骤B1-B5中的相关值:
w':
63253798 B7535975 A90F2025 61FC5457 0FEE88BF 69E3B7A5 12697069 E59E1F5D
42D54B98 4AF01D71 0BA0030C 18738F6B 14E4DF47 2ACAF893 99228D85 AF117904
B426DFF0 40C49F9A 43BCD7FD 7D757B7D 1D8D7311 C08FC3B5 7616C5EE 137785A3
28D19396 DBDFAC50 EEE62B1C 7F994BB6 F9BD9EFB 2221A1BE 1B6EB3E8 F71485B4
A3EEF46E 1B99F614 D7BD7F57 574BA7EB B502AF0B DABA0787 C5C4DBC5 6A344A25
A06790B6 05CEA0BB AF34776D 6B1FC019 8A02D05B BAAC6F64 A555AB2C A576F0DA
B405CBBF 22197B94 FD18D27D A0B0E52C 8754EE94 27963469 1FEA6E13 FFD0584E
AA2A94A7 E2259B67 1896302B 4275AE3E 8CF20100 98D5BEAF 19D0A6E6 0354E1C5
5C97E64F 848B06D3 9BA8828F F59502C0 81D3DAE6 8F35F7E6 448DB96D 220A0FBA
02BE03C5 1BF062B6 F564AE0B FB42DCA3 6E71D387 512E3BCC CA3379B7 3EC47176
52BE92FB 9E78BA9E 1D80A156 06580493 5742DBD2 B9675430 11AAC533 33909FBF
5FADEC14 A2FBD152 48E77467 442A6969 8246FB03 14C7A824 6D952219 DD2144EDK':
58373260 F067EC48 667C21C1 44F8BC33 CD304978 8651FFD5 F738003E 51DF3117
4D0E4E40 2FD87F45 81B612F7 4259DB57 加密明文的方法为分组密码算法:
klen: 48 bytes, 0x180
K1':
58373260 F067EC48 667C21C1 44F8BC33 M':
4368696E 65736520 49424520 7374616E 64617264 K2':
CD304978 8651FFD5 F738003E 51DF3117 4D0E4E40 2FD87F45 81B612F7 4259DB57u:
12AF121D E3795AA5 14D0C6E7 949CE479 807E8B03 140DCA09 D18DD075 E47EB03Cu=C3'
解密后的明文M':
Chinese IBE standard
加解密成功

Java-JPBC-SM9(GBT 38635)实现与测试相关推荐

  1. 安装jdk配置环境、cmd命令行测试环境变量配置是否正确及运行java程序、安装IDEA编写代码测试

    文章目录 1.安装jdk配置环境 2.cmd命令行测试环境变量配置是否正确及运行java程序 3.安装IDEA编写代码测试 1.安装jdk配置环境 首先打开官网Oracle https://www.o ...

  2. 【读码JDK】- java.lang.Double类Api介绍及测试

    [读码JDK]java.lang包目录 请自行调整包路径,中文仅供参考. java.lang.Double类Api介绍及测试 package lang;import org.junit.Test;/* ...

  3. java破案游戏大全_“我是大侦探,测试即破案”

    "我是大侦探,测试即破案" 2013/12/19 16:09:11  糖糖豆豆  程序员俱乐部  我要评论(0) 摘要:我从05年毕业就开始从事测试工作,从不了解或者说是误解,到全 ...

  4. jPBC 2.0.0配置与测试(补充版)

    题注 随着技术博客中的文章越写越多,越写越有经验,我也越来越喜欢把各种各样自己做的有意思的东西公开给大家了~通过技术博客也认识了全国各地的朋友们,他们涉及到的领域真是包罗万象:有做设计的,有做算法的, ...

  5. Android jPBC 2.0.0配置与测试

    我在前面的一片博客中,介绍了jPBC 2.0.0在PC平台上面的配置和测试.既然jPBC是Java平台上面实现的,那么jPBC能不能在Android这个以Java为主要语言的平台上运行呢?这样一来,各 ...

  6. 【Java 并发编程】线程池机制 ( 测试线程开销 | 启动线程分析 | 用户态 | 内核态 | 用户线程 | 内核线程 | 轻量级进程 )

    文章目录 一.测试线程开销 1.正常测试 2.不创建线程 3.只创建不启动线程 4.只启动不等待执行完成 二.分析测试结果 1.启动线程分析 2.用户线程与内核线程 3.轻量级进程 4.验证 Java ...

  7. 使用java底层实现邮件的发送(含测试,源码)

    直接上代码:3个类,两个主要的类,一个测试类: 主类(Mail): /** * @Title: Mail.java * @Package org.service.impl * @Description ...

  8. java+JBroFuzz对restful api进行fuzz测试

    @本文原创,转载请注明 0X00: 序言 fuzz测试作为安全测试的一个基本策略,被越来越多的引入整个测试过程,来避免一些简单的可能引发的安全问题. 如何将fuzzing测试引入软件自动化测试过程是本 ...

  9. java编译不了testpad,java – Gradle编译但不运行TestNG测试

    我们刚开始在我们的项目中使用Gradle和TestNG,所以我正在检查是否实际上没有任何测试失败.我很惊讶地看到它没有.测试被选中并正确编译,所以我看到了类文件.我也得到了一个关于跑步的报告,但它说了 ...

最新文章

  1. 放射科医生选择AI供应商的10大标准
  2. 值得阅读的C语言开源项目代码
  3. centos 更改mysql数据库目录位置_centos更改MySQL数据库目录位置
  4. 20179311《网络攻防实践》第一周作业
  5. 【Python】Python库之数据可视化
  6. 常见Promise面试题
  7. risc-v 编译 linux,linux - 如何为RISC-V编译Linux Kernel 4.20 - 堆栈内存溢出
  8. ROS专题----导航功能包navigation基础汇总
  9. N720实现4G的TCP连接,数据上云的方法
  10. 11、5款最佳网络故障排除软件,网络故障迎刃而解
  11. 整形美容的消费者心理分析
  12. @GuardedBy注解
  13. Guided Adversarial Attack for Evaluating and Enhancing Adversarial Defenses
  14. 【HDU 5765】Bonds(进制运算妙用)
  15. 表格(Excel)分列,拆分文本怎么用
  16. 牛客题库 题解 | #[NOIP2017]图书管理员#
  17. Windows 10(Win10) 怎么删除设备和驱动里的CD驱动器
  18. 2004-6-6 0:03:43 死得其所
  19. java 通过User-Agent来判断是否是移动浏览器
  20. Magento 过滤导航插件Mana

热门文章

  1. Excel公式教程 数组公式基础:数组扩展
  2. Unity Editor 创建一个精灵
  3. 第30章 MySQL 序列使用教程
  4. avedev matlab,通达信null函数,通达信手机条件选股器
  5. DataWhale集成学习Task15 集成学习案例二 (蒸汽量预测)
  6. linux常见命令的列表
  7. 什么是地图引擎和导航引擎
  8. 一个合格的JAVA架构师需要了解哪些知识?java架构师面试题又会有些什么?
  9. 卅年史诗!地球上出现过的CPU完全收藏 - (20-25) 由无知到精通!详解CPU里遇到的“黑话”
  10. webmoney 接口