Page 25 - 《软件学报》2025年第10期
P. 25

4422                                                      软件学报  2025  年第  36  卷第  10  期


                 链, 将待签名的消息摘要信息处理后映射到对应的链节点如图                    3(b) 中深色节点, 被映射到的链节点将作为签名块
                 记录到最后生成的签名值中. 本节将详细介绍              SM3-OTS  签名过程中的具体映射方式.













                                               (a) 哈希链             (b) 签名值
                                                      图 3 哈希链映射

                    首先使用国密算法       SM3  对待签名的消息      M  做哈希运算:   m = H(M), 得到  32  字节的消息摘要值, 使用     m_bin
                                             m_hex 记录下消息摘要的十六进制信息. 32          字节消息摘要的二进制形式每           8
                 记录下消息摘要的二进制信息, 使用
                 位比特可以转为      32  组  0–255  之间的十进制数字. 使用消息摘要转换后的十进制数字分别作为前                  32  条哈希链  L 0 −
                 L 31  中链节点位置的索引, 将索引到的链节点作为            SM3-OTS  签名值中的前    32  个签名块, 记为   σ 0 ,σ 1 ,...,σ 31 . 例如
                 “Hello World!”经过  SM3 算法计算出的消息摘要值为      0AC0A9FEF0D212AA76A3C431F793853CE145659CA1D14B114
                 E96C1215CF26582. 其中第  1  个字节为  0A, 转换为二进制为     00001010, 则其对应的十进制数字为       10, 将第  1  个私
                 钥块  sk 0  做  10  次哈希运算得到第  1  个签名块  σ 0 . 摘要中第  2  个字节为  C0, 转换为二进制的结果为     11000000, 则其
                 对应的十进制数字为       192, 将第  2  个私钥块  sk 1  做  192  次哈希运算得到第  2  个签名块  σ 1 , 摘要中第  3  个字节为  A9,
                 转换为二进制的结果为        10101001, 则其对应的十进制数字为        169, 将第  3  个私钥块  sk 2  做  169  次哈希运算得到第  2

                 个签名块   σ 2 , 以此类推, 计算出  0–31  号哈希链对应的签名块, 如表       3  所示.

                                               表 3 过程参数与签名       (部分省略)

                              哈希链        哈希值中的信息          对应值            index        签名块
                                                                                       10
                                0             0A            10            10          H (sk 0 )
                                1             C0            192          192         H 192 (sk 1 )
                                …             …             …             …             …
                                31            82            130          130         H 130 (sk 31 )
                                                                                       15
                                32            0             15            15         H (sk 32 )
                                33            1             362          107         H 107 (sk 33 )
                                …             …             …             …             …
                                                                                       92
                                40            8             92            92         H (sk 40 )
                                41            9             123          123         H  123 (sk 41 )
                                                                                       98
                                42            A             98            98         H (sk 42 )
                                                                                       46
                                43            B             46            46         H (sk 43 )
                                …             …             …             …             …
                                47            F             100          100         H 100 (sk 47 )
                                                       15
                                                                        98
                                      10
                                  σ = H (sk 0 ),...,H 130 (sk 31 ),H (sk 32 ),...,H 123 (sk 41 ),H (sk 42 ),...,H 100 (sk 47 )

                    32  字节消息摘要的十六进制形式包含           64  个  0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F  中的数据元素, 以十六进
                 制形式的消息摘要下第        1  个元素的位置定义为       1, 最后一个元素的位置定义为         64, 计算出  0–F  的每个元素所在位
                 置的和作为每个元素的位置信息, 将每个元素的位置信息模除                    255, 元素  0  的位置信息为   1+4+10=15, 将计算出的
                 位置信息模除     255  得到  15, 将私钥块  sk 32  做  15  次哈希运算得到第  33  个签名块  σ 32 . 元素  1  的位置信息经计算为
   20   21   22   23   24   25   26   27   28   29   30