当前位置: 首页 > news >正文

NTRU 加密系统原理及示例:NTRU、CTRU以及ITRU

1. NTRU加密系统

NTRU 加密系统于 1996 年 由 Hoffstein、Pipher 和 Silverman 提出(见1998年论文《NTRU: A Ring-Based Public Key Cryptosystem》)。
NTRU 是一种 非基于因数分解或离散对数问题 的公钥加密系统,它基于格上的最短向量问题(Shortest Vector Problem, SVP)。
NTRU 公钥加密系统是目前已知速度最快的公钥加密系统之一。

NTRU 工作在一个被截断的多项式环中:
Rq=Zq[X]/(XN−1),R_q = \mathbb{Z}_q[X]/(X^N - 1), Rq=Zq[X]/(XN1),

其中:

  • NNN 是固定的正整数,
  • Zq\mathbb{Z}_qZq 表示模 qqq 的整数环。

Zq\mathbb{Z}_qZq整数环中,多项式 fff 可写作:
f=(f0,f1,…,fN−1)=∑k=0N−1fkXk.f = (f_0, f_1, \dots, f_{N-1}) = \sum_{k=0}^{N-1} f_k X^k. f=(f0,f1,,fN1)=k=0N1fkXk.

两个多项式 f=(f0,f1,…,fN−1)f = (f_0, f_1, \dots, f_{N-1})f=(f0,f1,,fN1)g=(g0,g1,…,gN−1)g = (g_0, g_1, \dots, g_{N-1})g=(g0,g1,,gN1) 的加法定义为对应系数的逐项相加:
f+g=(f0+g0,f1+g1,…,fN−1+gN−1).f + g = (f_0 + g_0, f_1 + g_1, \dots, f_{N-1} + g_{N-1}). f+g=(f0+g0,f1+g1,,fN1+gN1).

两个多项式 fffggg 的乘法定义为卷积乘法(convolution):
f⋆g=h=(h0,h1,…,hN−1),其中 hk=∑i+j≡k(mod N)figj.f \star g = h = (h_0, h_1, \dots, h_{N-1}), \quad \text{其中 } h_k = \sum_{i + j \equiv k \ (\text{mod } N)} f_i g_j. fg=h=(h0,h1,,hN1),其中 hk=i+jk (mod N)figj.

如,计算:
(x4+2x3+3)⋆(x4+3x2+x+2)=x8+2x7+3x6+7x5+7x4+4x3+9x2+3x+6.(x^4 + 2x^3 + 3) \star (x^4 + 3x^2 + x + 2) = x^8 + 2x^7 + 3x^6 + 7x^5 + 7x^4 + 4x^3 + 9x^2 + 3x + 6. (x4+2x3+3)(x4+3x2+x+2)=x8+2x7+3x6+7x5+7x4+4x3+9x2+3x+6.

在多项式环 Z3[X]/(X5−1)\mathbb{Z}_3[X]/(X^5 - 1)Z3[X]/(X51) 中,该式可化简为:
x3+2x2+3x+7+7x4+4x3+9x2+3x+6=7x4+5x3+11x2+6x+13=x4+2x3+2x2+1.x^3+2x^2+3x+7+7x^4+4x^3+9x^2+3x+6 \\ = 7x^4+5x^3+11x^2+6x+13\\ =x^4+2x^3+2x^2+1.x3+2x2+3x+7+7x4+4x3+9x2+3x+6=7x4+5x3+11x2+6x+13=x4+2x3+2x2+1.

对于给定的正整数 ddd,定义集合:
B(d)={∑k=0N−1fkXk:fi=0或 1,∑k=0N−1fk=d}.B(d)=\left\{\sum_{k=0}^{N-1}f_kX^k : f_i=0\text{ 或 }1, \sum_{k=0}^{N-1}f_k=d\right\}. B(d)={k=0N1fkXk:fi=0  1,k=0N1fk=d}.

1.1 NTRU参数选型

NTRU中 的参数选取如下:

  • NNN:足够大的素数;
  • p,qp, qp,q:互质整数,且 q≫pq \gg pqp
  • df,dg,drd_f, d_g, d_rdf,dg,dr:整数参数,其中:
    • 私钥多项式从集合 B(df)B(d_f)B(df)B(dg)B(d_g)B(dg) 中选取;
    • 加密时用于掩蔽(blinding)的随机多项式从集合 B(dr)B(d_r)B(dr) 中选取;
  • 明文空间为 Zp[X]/(XN−1)\mathbb{Z}_p[X]/(X^N - 1)Zp[X]/(XN1)

1.2 NTRU密钥生成

NTRU密钥生成为:

  1. 随机选择多项式 f∈B(df)f \in B(d_f)fB(df),要求 fff 在模 ppp 和模 qqq 下均可逆;
  2. 计算:
    fp≡f−1(modp),fq≡f−1(modq);f_p \equiv f^{-1} \pmod{p}, \quad f_q \equiv f^{-1} \pmod{q}; fpf1(modp),fqf1(modq);
  3. 随机选择多项式 g∈B(dg)g \in B(d_g)gB(dg)
  4. 计算:
    h≡g⋆fq(modq);h \equiv g \star f_q \pmod{q}; hgfq(modq);
  5. 公钥为 (N,h)(N, h)(N,h),私钥为 (f,fp)(f, f_p)(f,fp)

1.3 NTRU加密过程

NTRU加密过程为:

  1. 将消息表示为明文空间中的多项式 mmm
  2. 随机选择多项式 r∈B(dr)r \in B(d_r)rB(dr)
  3. 根据以下规则生成密文:
    e≡p⋆r⋆h+m(modq).e \equiv p \star r \star h + m \pmod{q}. eprh+m(modq).

1.4 NTRU解密过程

NTRU解密过程为:

  1. 计算:
    a≡f⋆e(modq);a \equiv f \star e \pmod{q}; afe(modq);
  2. aaa 的系数转换到区间 [−q2,q2)[-\frac{q}{2}, \frac{q}{2})[2q,2q)
  3. 计算:
    m≡fp⋆a(modp).m \equiv f_p \star a \pmod{p}. mfpa(modp).

解密正确性验证:

  • 计算如下:
    a≡f⋆e(modq)≡f⋆(p⋆r⋆h+m)(modq)≡p⋆r⋆g⋆f⋆fq+f⋆m(modq)≡p⋆r⋆g+f⋆m(modq).\begin{equation*} \begin{aligned} a &\equiv & f \star e \pmod{q}\\ &\equiv & f \star (p \star r \star h + m) \pmod{q}\\ &\equiv & p \star r \star g \star f \star f_q + f \star m\pmod{q}\\ &\equiv & p \star r \star g + f \star m\pmod{q}.\\\end{aligned} \end{equation*} afe(modq)f(prh+m)(modq)prgffq+fm(modq)prg+fm(modq).

因此:
fp⋆a(modp)≡(p⋆r⋆g+f⋆m)⋆fp(modp)≡m(modp).f_p \star a \pmod{p} \equiv (p \star r \star g + f \star m) \star f_p \pmod{p} \equiv m \pmod{p}. fpa(modp)(prg+fm)fp(modp)m(modp).

1.5 NTRU加解密示例

如为演示NTRU加解密示例,取:
N=7,p=3,q=41,f=X6−X4+X3+X2−1,g=X6+X4−X2−X,m=−X5+X3+X2−X+1,r=X6−X5+X−1.\begin{equation*} \begin{aligned} && N=7, p=3, q=41,\\ && f=X^6-X^4+X^3+X^2-1,\\ && g=X^6+X^4-X^2-X,\\ && m=-X^5+X^3+X^2-X+1,\\ && r=X^6-X^5+X-1.\end{aligned} \end{equation*} N=7,p=3,q=41,f=X6X4+X3+X21,g=X6+X4X2X,m=X5+X3+X2X+1,r=X6X5+X1.

计算结果为:
fp=X6+2X5+X3+X2+X+1,fq=8X6+26X5+31X4+21X3+40X2+2X+37,h=19X6+38X5+6X4+32X3+24X2+37X+8,e=31X6+19X5+4X4+2X3+40X2+3X+25.\begin{equation*} \begin{aligned} && f_p=X^6 + 2X^5 + X^3 + X^2 + X + 1,\\ && f_q=8X^6 + 26X^5 + 31X^4 + 21X^3 + 40X^2 + 2X + 37,\\ && h=19X^6 + 38X^5 + 6X^4 + 32X^3 + 24X^2 + 37X + 8,\\ && e=31X^6 + 19X^5 + 4X^4 + 2X^3 + 40X^2 + 3X + 25. \end{aligned} \end{equation*} fp=X6+2X5+X3+X2+X+1,fq=8X6+26X5+31X4+21X3+40X2+2X+37,h=19X6+38X5+6X4+32X3+24X2+37X+8,e=31X6+19X5+4X4+2X3+40X2+3X+25.

在 SageMath 中,可以如下实现 NTRU 加密与解密:

def cmap(t, p):if (ZZ(t) % p) > (p // 2):return ((ZZ(t) % p) - p)else:return ZZ(t) % pN = 7
p = 3
q = 41
print("(N,p,q)=", (N, p, q))Zx.<X> = ZZ[]
f = X^6 - X^4 + X^3 + X^2 - 1
g = X^6 + X^4 - X^2 - X
print("f=", f)
print("g=", g)Pp.<b> = PolynomialRing(GF(p))
Pq.<c> = PolynomialRing(GF(q))f3 = Pp(f).inverse_mod(b^N - 1)
f41 = Pq(f).inverse_mod(c^N - 1)
print("f_p=", f3(b=X))
print("f_q=", f41(c=X))h = (p * f41 * Pq(g)) % (c^N - 1)
print("public key h: ", h(c=X))r = X^6 - X^5 + X - 1
print("r=", r)m = -X^5 + X^3 + X^2 - X + 1
print("message m:", m)em = (Pq(r) * h) % (c^N - 1) + Pq(m) % (c^N - 1)
print("encrypted m: ", em(c=X))A = (Pq(f) * em) % (c^N - 1)
print(A(c=X))A1 = [cmap(k, q) for k in A.list()]
print(Zx(A1))print("decrypted message m: ", Zx([cmap(k, p) for k in Pp((Zx(A1) * Zx(f3)) % (X^N - 1)).list()]))

以上sagemath程序输出结果如下:

(N,p,q)= (7, 3, 41)
f = X^6 - X^4 + X^3 + X^2 - 1
g = X^6 + X^4 - X^2 - X
f_p = X^6 + 2*X^5 + X^3 + X^2 + X + 1
f_q = 8*X^6 + 26*X^5 + 31*X^4 + 21*X^3 + 40*X^2 + 2*X + 37
public key h: 19*X^6 + 38*X^5 + 6*X^4 + 32*X^3 + 24*X^2 + 37*X + 8
r = X^6 - X^5 + X - 1
message m: -X^5 + X^3 + X^2 - X + 1
encrypted m: 31*X^6 + 19*X^5 + 4*X^4 + 2*X^3 + 40*X^2 + 3*X + 25
X^6 + 10*X^5 + 33*X^4 + 40*X^3 + 40*X^2 + X + 40
X^6 + 10*X^5 - 8*X^4 - X^3 - X^2 + X - 1
decrypted message m: -X^5 + X^3 + X^2 - X + 1

1.6 NTRU上基于格的攻击

NTRU中公钥满足以下关系式:
h≡g⋆fq(modq)h \equiv g \star f_q \pmod{q} hgfq(modq)

因此有:
f⋆h≡g(modq)f \star h \equiv g \pmod{q} fhg(modq)

现在考虑定义如下的格(lattice):
Λ=(F1,F2)∈Rq×Rq:F1⋆h≡F2(modq)\Lambda = { (F_1, F_2) \in R_q \times R_q : F_1 \star h \equiv F_2 \pmod{q} } Λ=(F1,F2)Rq×Rq:F1hF2(modq)

显然,(f,g)∈Λ(f, g) \in \Lambda(f,g)Λ
关系 f⋆h≡g(modq)f \star h \equiv g \pmod{q}fhg(modq) 可以写成:
f⋆h−u⋆q=g,其中 u∈Rqf \star h - u \star q = g, \quad \text{其中 } u \in R_q fhuq=g,其中 uRq

上式可以重写为:
(fg)=(10hq)(f−u)\begin{equation*} \begin{pmatrix} f\\ g \end{pmatrix}= \begin{pmatrix} 1 & 0\\ h & q \end{pmatrix} \begin{pmatrix} f\\ -u \end{pmatrix} \end{equation*} (fg)=(1h0q)(fu)

或者更有用地写成矩阵形式:
(f0f1⋮fN−1g0g1⋮gN−1)=(10⋯000⋯001⋯000⋯0⋮⋮⋱⋮⋮⋮⋱⋮00⋯100⋯0h0h1⋯hN−1q0⋯0hN−1h0⋯hN−20q⋯0⋮⋮⋱⋮⋮⋮⋱⋮h1h2⋯h000⋯q)(f0f1⋮fN−1−u0−u1⋮−uN−1)\begin{equation*} \begin{pmatrix} f_0\\ f_1\\ \vdots\\ f_{N-1}\\ g_0\\ g_1\\ \vdots\\ g_{N-1}\\ \end{pmatrix}= \begin{pmatrix} 1 & 0& \cdots& 0& 0& 0& \cdots& 0\\ 0 & 1& \cdots& 0& 0& 0& \cdots& 0\\ \vdots & \vdots& \ddots& \vdots& \vdots& \vdots& \ddots& \vdots\\ 0 & 0& \cdots& 1& 0& 0& \cdots& 0\\ h_0 & h_1& \cdots& h_{N-1}& q& 0& \cdots& 0\\ h_{N-1} & h_0& \cdots&h_{N-2} & 0& q& \cdots& 0\\ \vdots & \vdots& \ddots& \vdots& \vdots& \vdots& \ddots& \vdots\\ h_1 & h_2& \cdots& h_0& 0& 0& \cdots& q \end{pmatrix} \begin{pmatrix} f_0\\ f_1\\ \vdots\\ f_{N-1}\\ -u_0\\ -u_1\\ \vdots\\ -u_{N-1}\\ \end{pmatrix} \end{equation*} f0f1fN1g0g1gN1=100h0hN1h1010h1h0h2001hN1hN2h0000q000000q000000qf0f1fN1u0u1uN1

需要注意的是,多项式 fffggg 的系数都很小,因此 (f,g)(f, g)(f,g) 是格 Λ\LambdaΛ 中的一个短向量(short vector)。
因此,可以使用 LLL 算法(Lenstra–Lenstra–Lovász) 来逼近该短向量。

接下来,将对前面讨论的 NTRU 示例应用上述思想。
在 SageMath 中,可以按如下方式实现该格构造与 LLL 攻击:

N=7
p=3
q=41
Zx.<X> = ZZ[]                 # 多项式环 Z[X]
f=X^6-X^4+X^3+X^2-1
g=X^6+X^4-X^2-X
h=19*X^6 + 38*X^5 + 6*X^4 + 32*X^3 + 24*X^2 + 37*X + 8
M = matrix(2*N)              # 初始化 2N×2N 的零矩阵
for i in [0..N-1]: M[i,i] = 1
for i in [N..2*N-1]: M[i,i] = q
for i in [0..N-1]:for j in [0..N-1]:M[i+N,j] = ((Zx(GF(q)(1/p)*h)*X^i)%(X^N-1))[j]
pretty_print(M)
pretty_print(M.transpose().LLL())
pretty_print(f.coefficients(sparse=False))
pretty_print(g.coefficients(sparse=False))

以上sagemath程序输出如下,可成功破解获得 (f,g)(f,g)(f,g)
(1000000000000001000000000000001000000000000001000000000000001000000000000001000000000000001000000030268382402041000000203026838240041000004020302683820041000024020302683800041000382402030268000041008382402030260000041026838240203000000041)\displaystyle \left(\begin{array}{rrrrrrrrrrrrrr} 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ 30 & 26 & 8 & 38 & 2 & 40 & 20 & 41 & 0 & 0 & 0 & 0 & 0 & 0 \\ 20 & 30 & 26 & 8 & 38 & 2 & 40 & 0 & 41 & 0 & 0 & 0 & 0 & 0 \\ 40 & 20 & 30 & 26 & 8 & 38 & 2 & 0 & 0 & 41 & 0 & 0 & 0 & 0 \\ 2 & 40 & 20 & 30 & 26 & 8 & 38 & 0 & 0 & 0 & 41 & 0 & 0 & 0 \\ 38 & 2 & 40 & 20 & 30 & 26 & 8 & 0 & 0 & 0 & 0 & 41 & 0 & 0 \\ 8 & 38 & 2 & 40 & 20 & 30 & 26 & 0 & 0 & 0 & 0 & 0 & 41 & 0 \\ 26 & 8 & 38 & 2 & 40 & 20 & 30 & 0 & 0 & 0 & 0 & 0 & 0 & 41 \end{array}\right)1000000302040238826010000026302040238800100008263020402380001000388263020402000010023882630204000000104023882630200000001204023882630000000041000000000000004100000000000000410000000000000041000000000000004100000000000000410000000000000041
(−1−1−1−1−1−1−10000000−101−1−101−10−101101−1−101−10−10110−100101−1010−1−1002001−101−1−110−10−1011−2000−1−1001−10−11101−1010−1−100200−10−10081−1−3−58−5−1511−2−900−1952−3−67−500081−1−10−18−5−151−3−5−191−2−900−5052−3−6791−2−900−1052−3−67−5−10081−1−10−58−5−151−3−3−16−26−2−2−6−11−3−4−91−9)\displaystyle \left(\begin{array}{rrrrrrrrrrrrrr} -1 & -1 & -1 & -1 & -1 & -1 & -1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ -1 & 0 & 1 & -1 & -1 & 0 & 1 & -1 & 0 & -1 & 0 & 1 & 1 & 0 \\ 1 & -1 & -1 & 0 & 1 & -1 & 0 & -1 & 0 & 1 & 1 & 0 & -1 & 0 \\ 0 & 1 & 0 & 1 & -1 & 0 & 1 & 0 & -1 & -1 & 0 & 0 & 2 & 0 \\ 0 & 1 & -1 & 0 & 1 & -1 & -1 & 1 & 0 & -1 & 0 & -1 & 0 & 1 \\ 1 & -2 & 0 & 0 & 0 & -1 & -1 & 0 & 0 & 1 & -1 & 0 & -1 & 1 \\ 1 & 0 & 1 & -1 & 0 & 1 & 0 & -1 & -1 & 0 & 0 & 2 & 0 & 0 \\ -10 & -1 & 0 & 0 & 8 & 1 & -1 & -3 & -5 & 8 & -5 & -1 & 5 & 1 \\ 1 & -2 & -9 & 0 & 0 & -1 & 9 & 5 & 2 & -3 & -6 & 7 & -5 & 0 \\ 0 & 0 & 8 & 1 & -1 & -10 & -1 & 8 & -5 & -1 & 5 & 1 & -3 & -5 \\ -1 & 9 & 1 & -2 & -9 & 0 & 0 & -5 & 0 & 5 & 2 & -3 & -6 & 7 \\ 9 & 1 & -2 & -9 & 0 & 0 & -1 & 0 & 5 & 2 & -3 & -6 & 7 & -5 \\ -1 & 0 & 0 & 8 & 1 & -1 & -10 & -5 & 8 & -5 & -1 & 5 & 1 & -3 \\ -3 & -1 & 6 & -2 & 6 & -2 & -2 & -6 & -11 & -3 & -4 & -9 & 1 & -9 \end{array}\right)11100111010191310111201209101111010109812061101001001298211111008019016101011111100012110111019101102011010135850560001001525058110111110831525300100105652314010010217136590112010553671100001101057539
[−1,0,1,1,−1,0,1]\displaystyle \left[-1, 0, 1, 1, -1, 0, 1\right][1,0,1,1,1,0,1]
[0,−1,−1,0,1,0,1]\displaystyle \left[0, -1, -1, 0, 1, 0, 1\right][0,1,1,0,1,0,1]

可见,通过对 NTRU 公钥构造的格 Λ\LambdaΛ 应用 LLL 算法,可以得到一个短向量,其分量与私钥多项式 fffggg 的系数十分接近。这说明 NTRU 的安全性与找到格中的短向量的难度(即最短向量问题 SVP)密切相关。

2. CTRU:在 F2\mathbb{F}_2F2 上使用多项式的NTRU变体

Gaborit、Ohler 和 Solé 提出了一种 NTRU 的变体,使其能够避免基于格(lattice-based)的攻击。
NNN 为一个正整数,定义
R=A[X]/(XN−1),R = A[X]/(X^N - 1),R=A[X]/(XN1),
其中 AAA 表示 F2\mathbb{F}_2F2 上的多项式环。

固定两个在 A[X]A[X]A[X] 中的不可约多项式 PPPQQQ,它们的阶分别为 sssttt,即
deg⁡P=s,deg⁡Q=t.\deg P = s, \quad \deg Q = t.degP=s,degQ=t.

这些数应满足条件 2≤s≤t2 \le s \le t2stgcd⁡(s,t)=1\gcd(s, t) = 1gcd(s,t)=1
最后一个 gcd⁡\gcdgcd 最大公因数条件保证 F2s∩F2t=F2\mathbb{F}_{2^s} \cap \mathbb{F}_{2^t} = \mathbb{F}_2F2sF2t=F2

给定多项式:
F=F0(T)+F1(T)X+⋯+FN−1(T)XN−1∈R,F = F_0(T) + F_1(T)X + \dots + F_{N-1}(T)X^{N-1} \in R,F=F0(T)+F1(T)X++FN1(T)XN1R,
deg⁡T(F)\deg_T(F)degT(F) 表示 FFFXXX 的系数关于 TTT 的最大阶数。

定义集合:
L(d)={F∈R:deg⁡T(F)<d}.\begin{equation*} \mathcal{L}(d)=\{F\in R : \deg_T(F)<d\}. \end{equation*}L(d)={FR:degT(F)<d}.

对于给定的 XiX^iXi,其对应的系数多项式为:
Fi,0+Fi,1T+⋯+Fi,d−1Td−1,F_{i,0} + F_{i,1}T + \dots + F_{i,d-1}T^{d-1},Fi,0+Fi,1T++Fi,d1Td1,
其中 Fi,j∈F2F_{i,j} \in \mathbb{F}_2Fi,jF2

因此,可能的系数多项式共有 2d2^d2d 个。
由于共有 NNN 个系数,所以集合 L(d)\mathcal{L}(d)L(d) 的大小为 2dN2^{dN}2dN

在 CTRU 中,使用三个额外参数 df,dg,dϕd_f, d_g, d_\phidf,dg,dϕ,它们是介于 111t−1t-1t1 之间的整数。
Alice 和 Bob 按以下步骤进行通信:

  • Alice 的步骤:

    • 选择一个多项式 f∈L(df+1)f \in \mathcal{L}(d_f + 1)fL(df+1),使得 fff 在模 PPP 和模 QQQ 意义下均可逆。
      fPf_PfPfff 在模 PPP 下的逆元,fQf_QfQ 为模 QQQ 下的逆元。
    • 再选择一个多项式 g∈L(dg+1)g \in \mathcal{L}(d_g + 1)gL(dg+1)
    • 公钥为
      h=g∗fQ(modQ).h = g \ast f_Q \pmod{Q}.h=gfQ(modQ).
  • Bob 的步骤:

    • 选择两个多项式:
      第一个是消息多项式 mmm
      第二个是随机多项式 ϕ∈L(dϕ+1)\phi \in \mathcal{L}(d_\phi + 1)ϕL(dϕ+1)
    • 使用以下公式加密消息:
      e=P∗ϕ∗h+m(modQ).e = P \ast \phi \ast h + m \pmod{Q}.e=Pϕh+m(modQ).
  • Alice 的解密:

    • 收到 eee 后计算:
      a=e∗f=P∗ϕ∗h∗f+m∗f=P∗ϕ∗g+m∗f(modQ),\begin{aligned} a &= e \ast f = P \ast \phi \ast h \ast f + m \ast f \ &= P \ast \phi \ast g + m \ast f \pmod{Q}, \end{aligned} a=ef=Pϕhf+mf =Pϕg+mf(modQ),
      然后计算
      a∗fP=P∗ϕ∗g∗fP+m∗f∗fP=m(modP).a \ast f_P = P \ast \phi \ast g \ast f_P + m \ast f \ast f_P = m \pmod{P}. afP=PϕgfP+mffP=m(modP).

3. ITRU:NTRU 的一种变体

2017 年,Gaithuru、Salleh 和 Mohamad 提出了一种名为 ITRU 的 NTRU 变体。
与 NTRU 使用截断多项式环不同,ITRU 基于整数环进行构建。
ITRU 的参数及主要步骤如下:

  • 建议取 p=1000p = 1000p=1000
  • 随机选择整数 f,g,rf, g, rf,g,r,其中 fff 在模 ppp 意义下可逆。
  • 固定一个素数 qqq,满足
    q>p⋅r⋅g+f⋅m,q > p \cdot r \cdot g + f \cdot m,q>prg+fm,
    其中 mmm 是消息的十进制表示。
    建议的转换基于 ASCII 表,如字符 a → 97
  • 计算
    Fp=f−1(modp),Fq=f−1(modq),F_p = f^{-1} \pmod{p}, \quad F_q = f^{-1} \pmod{q},Fp=f1(modp),Fq=f1(modq),
    这些可以使用扩展欧几里得算法求得。
  • 公钥为
    h≡p⋅Fq⋅g(modq)h \equiv p \cdot F_q \cdot g \pmod{q}hpFqg(modq)
    以及 qqq
  • 加密过程类似于 NTRU:
    生成随机整数 rrr,计算
    e≡r⋅h+m(modq).e \equiv r \cdot h + m \pmod{q}.erh+m(modq).
  • 为从密文恢复明文,计算
    a≡f⋅e(modq).a \equiv f \cdot e \pmod{q}.afe(modq).
    然后通过计算
    Fp⋅a(modp)F_p \cdot a \pmod{p}Fpa(modp)
    恢复消息。

需要验证最终确实能得到原始消息。
有:
a≡f⋅e≡f(r⋅h+m)≡f(r⋅p⋅Fq⋅g+m)≡r⋅p⋅g+f⋅m(modq).a \equiv f \cdot e \equiv f(r \cdot h + m) \equiv f(r \cdot p \cdot F_q \cdot g + m) \equiv r \cdot p \cdot g + f \cdot m \pmod{q}. afef(rh+m)f(rpFqg+m)rpg+fm(modq).
这里利用了 f⋅Fq≡1(modq)f \cdot F_q \equiv 1 \pmod{q}fFq1(modq)
接着计算 Fp⋅a(modp)F_p\cdot a\pmod{p}Fpa(modp)
Fp⋅a≡Fp(r⋅p⋅g+f⋅m)≡Fp⋅f⋅m≡m(modp).F_p \cdot a \equiv F_p (r \cdot p \cdot g + f \cdot m) \equiv F_p \cdot f \cdot m \equiv m \pmod{p}. FpaFp(rpg+fm)Fpfmm(modp).

需要注意的是,为了选定合适的 qqq,必须知道消息表示的最大可能值。
如果仅使用字母 'A''Z''a''z',则最大值为 122。
在以下 SageMath 的实现中,将使用 255 作为上界:

s='cryptography'
pretty_print('The message is : ', s)
r=8
p=1000
F=Set([k for k in range(2,1000) if gcd(k,1000)==1])
f=F.random_element()
S=Set([2..1000])
g=S.random_element()
m=[ord(k) for k in s]
pretty_print('The ASCII code of the message :',m)
q=next_prime(p*r*g+255*f)
Fp=(1/f)%p
Fq=(1/f)%q
h=(p*Fq*g)%q
pretty_print('Large modulus :', q)
pretty_print('Public key :',h)
pretty_print('Private key pair :', (f,Fp))
e=[((r*h)+m[i])%q for i in [0..len(m)-1]]
pretty_print('The encrypted message :',e) 
a=[(f*e[i])%q for i in [0..len(e)-1]]
pretty_print(html(r'$f\cdot e\pmod{q}$ is : $%s$'%latex(a))) 
C=[(Fp*a[l])%p for l in [0..len(a)-1]]
pretty_print(html(r'$F_p\cdot a\pmod{q}$ is : $%s$'%latex(C))) 
D=[chr(k) for k in C]
pretty_print('The original message :', ''.join(D))

以上sagemath程序输出为:

The message is : cryptography
The ASCII code of the message : [99, 114, 121, 112, 116, 111, 103, 114, 97, 112, 104, 121]
Large modulus : 6340039
Public key : 2524887
Private key pair : (957, 93)
The encrypted message : [1179078, 1179093, 1179100, 1179091, 1179095, 1179090, 1179082, 1179093, 1179076, 1179091, 1179083, 1179100]
f⋅e(mod q) is : [6190743, 6205098, 6211797, 6203184, 6207012, 6202227, 6194571, 6205098, 6188829, 6203184, 6195528, 6211797]
F_p⋅a(mod p) is : [99, 114, 121, 112, 116, 111, 103, 114, 97, 112, 104, 121]
The original message : cryptography

接下来加密一段来自描述 ITRU 的文章中的文字(不包含空格):

‘ThegoalofthisstudyistopresentavariantofNTRUwhichisbasedontheringof
integersasopposedtousingthepolynomialringwithintegercoefficients.
WeshowthatNTRUbasedontheringofintegers(ITRU),hasasimpleparameter
selectionalgorithm,invertibilityandsuccessfulmessagedecryption.
Wedescribeaparameterselectionalgorithmandalsoprovideanimplementation
ofITRUusinganexample.ITRUisshowntohavesuccessfulmessagedecryption,
whichprovidesmoreassuranceofsecurityincomparisontoNTRU.’

如果大模数为 1104427,且公钥为 37619,则密文开头为:

301036, 301056, 301053, 301055, 301063, 301049, 301060, 301063, 301054 …

密文中共有 32 个不同的数字,这些数字介于 300992 和 301073 之间。
通过简单的频率分析,可以得到以下数据:
[(301056, 0.0380313199105145), (301057, 0.0850111856823266),
(301060, 0.0313199105145414), (301061, 0.0290827740492170),
(301062, 0.0648769574944072), (301063, 0.0738255033557047),
(301064, 0.0313199105145414), (301066, 0.0536912751677852),
(301067, 0.0850111856823266), (301068, 0.0693512304250559),
(301069, 0.0201342281879195), (301070, 0.0111856823266219),
(301071, 0.0111856823266219), (301072, 0.00223713646532438),
(301073, 0.0134228187919463), (300992, 0.00223713646532438),
(300993, 0.00223713646532438), (300996, 0.00671140939597315),
(300998, 0.00894854586129754), (301025, 0.00671140939597315),
(301030, 0.00671140939597315), (301034, 0.0134228187919463),
(301036, 0.0156599552572707), (301037, 0.0134228187919463),
(301039, 0.00447427293064877), (301049, 0.0693512304250559),
(301050, 0.00894854586129754), (301051, 0.0357941834451902),
(301052, 0.0246085011185682), (301053, 0.109619686800895),
(301054, 0.0223713646532438), (301055, 0.0290827740492170)]

也就是说,数字 301053 在密文中出现次数最多。
可以猜测 301053 可能对应字母 'e''a''t'
如果假设它对应 'e',那么应用公式:
ci−300952c_i - 300952 ci300952

得到一串数字序列开头为:

84, 104, 101, 103, 111, 97, 108, 111

如果将这串数字视为 ASCII 码并转为对应的字符,就能得到解码后的明文消息。

参考资料

[1] 8 The NTRU cryptosystem

附录:SageMath 功能总结

  • LLL()
    返回经过 LLL(Lenstra–Lenstra–Lovász)约化的向量系统。
  • chr()
    根据给定的 ASCII 码返回对应的字符。
  • coefficients()
    返回多项式的系数。
  • ord()
    返回给定字符的 ASCII 码。
http://www.dtcms.com/a/531865.html

相关文章:

  • k8s高频面试题汇总
  • 一篇文章理解LRC校验:
  • 石家庄免费网站建设百度收录入口提交查询
  • 专业提供网站建设服务培训学校 网站费用
  • 找做网站公司需要注意什么条件国外网站建设什么价格
  • 阮一峰《TypeScript 教程》学习笔记——tsconfig.json 文件
  • python如何做声音识别
  • 解决Docker磁盘空间不足导致MySQL启动失败
  • 【微服务组件】Springboot结合Dubbo实现RPC调用
  • One-Shot Federated Learning with Classifier-FreeDiffusion Models
  • powershell终端在ide里默认位置不对
  • 探索Linux进程:从理论到实践
  • 正则化机制解析:L2 的约束逻辑与 L1 的特征选择
  • 股票与期货战法理论发展路径
  • 用Python手写一个能识花的感知器模型——Iris分类实战详解
  • MySQL笔记16
  • gRPC通信流程学习
  • 百度站长平台有哪些功能网站做权重的好处
  • 数据科学复习题2025
  • 牛客网 AI题​(二)机器学习 + 深度学习
  • 拆解AI深度研究:从竞品分析到出海扩张,这是GTM的超级捷径
  • HarmonyOS 环境光传感器自适应:构建智能光线感知应用
  • 护肤品 网站建设策划shopex网站经常出错
  • 机器人描述文件xacro(urdf扩展)
  • AI决策平台怎么选?
  • 当 AI 视觉遇上现代 Web:DeepSeek-OCR 全栈应用深度剖析
  • 紫外工业相机入门介绍和工业检测核心场景
  • 商业求解器和开源求解器哪个更适合企业?
  • 比尤果网做的好的网站深圳网站设计精选刻
  • WPF 控件速查 PDF 笔记(可直接落地版)