Page 332 - 《软件学报》2026年第7期
P. 332

胡晓雯 等: 基于   CUDA Core 和  Tensor Core 的  CTRU-Prime 高吞吐量实现                       3017


                 CTRU-Prime 基于  NTRU  假设和  RLWR  假设, 在安全性、带宽、实现效率方面和             SNTRU-Prime 相比具有优势,
                 表  1  给出了  CTRU-Prime 的  3  组参数集.

                                                  表 1 CTRU-Prime 参数集

                    n      q     q 2  n'    (Ψ 1 ,Ψ 2 ,Ψ 3 )  |pk|  |ct|  B.W.  NTRU(C, Q)  RLWR(C, Q)  δ
                                 11                                                                 −166
                   653   4 621  2     320   (B 3 , B 3 , B 3 )  994  898  1 892  (152, 137)  (151, 136)  2
                                 10                                                                 −170
                   761   4 591  2     376   (B 3 , B 2 , B 3 )  1 158  952  2 110  (178, 161)  (181, 164)  2
                                 10                                                                 −279
                   1 277  7 879  2    632   (B 2 , B 2 , B 2 )  2 067  1 597  3 664  (299, 271)  (297, 269)  2

                    CTRU-Prime 的公钥加密方案如算法        1–3  所示, 密钥封装方案如算法      4–6  所示.
                 算法  1. CTRU-Prime.PKE.KeyGen.
                              k
                 输入: 安全参数    1 ;
                                    (pk, sk).
                 输出: 公钥加密公私钥对
                 1.  g ← Ψ 1 , f ← Ψ 2
                          ′
                        ′
                 2.   f = pf +1
                 3.  h = g/ f
                 4. return  (pk = h, sk = f)

                 算法  2. CTRU-Prime.PKE.Enc.

                 输入: 公钥   pk, 明文  m;
                 输出: 密文  c.
                 1.  r ← Ψ 3
                 2.  σ = hr
                     ⌊                 ⌉
                      q 2
                 3.  c =  (σ+PolyEncode(m)) mod q 2
                       q
                 4. return  c

                 算法  3. CTRU-Prime.PKE.Dec.

                 输入: 私钥   sk, 密文  c;
                 输出: 明文  m.
                            ±
                 1.  m = c f mod q 2
                    ′
                 2.  m = PolyDecode(m )
                                 ′
                 3. return  m
                 算法  4. CTRU-Prime.KEM.KeyGen.
                              k
                 输入: 安全参数    1 ;
                                      ′
                                         ′
                 输出: 密钥封装公私钥对       (pk , sk ).
                                                k
                 1.  (pk, sk) ← CTRU-Prime.PKE.KeyGen(1 )
                 2.  z ← {0,1} ι
                 3. return  (pk = pk, sk = (sk,z))
                                ′
                          ′
   327   328   329   330   331   332   333   334   335   336   337