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

杨亚涛 等: SM3-OTS: 基于国密算法      SM3  的紧凑型后量子一次签名方案                                  4421


                 的环境中比    WOTS+方案具有更大的应用潜力.
                    SM3-OTS  方案主要包含     3  个算法: 密钥生成算法     KeyGen( )、签名生成算法    Sign( )、签名验证算法    Verify( ).
                 密钥生成算法接受一个安全参数            n 作为输入, 经过相应运算输出签名密钥对             (sk, pk), 私钥  sk  为只有签名者拥有,
                                      pk  可以被任何人获得, 用于对消息的签名作有效性验证. 签名生成算法接受待签名的
                 用于对消息进行签名; 公钥
                 消息   M、私钥   sk 两个输入, 经过算法后生成消息        M  对应的签名值     σ. 签名验证算法接受消息        M、 M  对应的签名
                 值   σ 以及公钥  pk  这  3  个输入, 签名验证算法可验证签名值的有效性, 若签名值有效则输出                 true, 若签名值无效则
                 输出  false.
                  4.1   SM3-OTS  方案密钥生成
                                                     Seed  作为伪随机数发生器      PRNG  的种子数据生成     48  个伪随机数:
                    在   n =256 bits 的安全参数下, 将秘密种子
                 sk 0 , sk 1 ,..., sk 47 , 每个伪随机数为  32  字节的伪随机十六进制数据称为一个私钥块, SM3-OTS     签名方案私钥      sk  包
                 含  48  个私钥块, 记为  sk = sk 0 , sk 1 ,..., sk 47 .
                    SM3-OTS  签名方案公钥由对应的私钥生成, 使用国密算法               SM3  将上述  48  个私钥块  sk i  分别做  255  次哈希运
                            255
                 算, 即  pk i = H (sk i ), 生成  48  个公钥块:  pk 0 , pk 1 ,..., pk 47 , SM3-OTS  签名方案公钥  pk  包含  48  个公钥块, 记为
                 pk = pk 0 , pk 1 ,..., pk 47 . 从私钥生成公钥的过程得到  48  条哈希链, 分别为  L 0 ,L 1 ,...,L 47 , 每条哈希链中包含  256  个链
                 节点, 每条哈希链中相邻两个链节点中后一个节点为前一个节点的哈希值, 每条哈希链的首节点为该哈希链对应
                 私钥块, 每条哈希链的尾节点为该哈希链对应的公钥块, 密钥生成如算法                      1  所示.
                 算法  1. 密钥生成  KeyGen  算法.

                 输入: 安全参数    n;
                 输出: 私钥集合    sk = sk 0 , sk 1 ,..., sk 47 ; 公钥集合  pk = pk 0 , pk 1 ,..., pk 47 .
                 1.  Seed ⇐ PRNG //通过伪随机数发生器   PRNG  生成随机种子
                 2. for  0 ⩽ i ⩽ 47 //利用种子生成  48  个私钥块
                 3.    sk i = PRNF(Seed,i)
                 4. end for
                 5. for  0 ⩽ i ⩽ 47 //利用私钥块生成对应公钥块
                     pk i = H (sk i ) //对每个私钥块做  255  次哈希运算得到对应公钥块
                          255
                 6.
                 7. end for
                                       ;
                 8. return  sk = sk 0 , sk 1 ,..., sk 47 pk = pk 0 , pk 1 ,..., pk 47  //输出密钥对
                    如算法   1  所示, 在预设的安全参数      n=256 bits 下, 使用秘密种子   Seed  和伪随机数发生器     PRNG  随机生成   48
                   n 字节的随机数作为私钥, 分别将         48  个私钥块使用国密算法        SM3  做  255  次哈希运算生成  48   n 字节的哈希
                 个                                                                          个
                 值作为公钥, 密钥生成如图        1  所示, 哈希链结构如图     2  所示.
                                  私钥      公钥


                           伪       0       0                           SM3 运算     链节点
                           随                         私钥                                             公钥
                           机       1       1
                    密钥     数                                                 ...
                    种子     生       2       2       L 0
                           成       ...     ...     L 1                       ...
                           器                        ...                       ...
                                  47       47      L 47                      ...
                      图 1    SM3-OTS  密钥生成                            图 2    哈希链结构
                  4.2   SM3-OTS  签名生成
                    SM3-OTS  签名生成是将消息摘要的信息映射到哈希链节点的过程. 如图                     3  所示, 图  3(a) 为签名方案的哈希
   19   20   21   22   23   24   25   26   27   28   29