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

直白理解 NTRU 公钥加密系统

0. 摘要(Abstract)

本文将探讨 NTRU 公钥加密系统(NTRU Public Key Cryptosystem)。
NTRU 由 Joseph Silverman、Jeffery Hoffstein 和 Jill Pipher 于 1996 年提出。
该系统利用截断多项式环(truncated polynomial rings)来实现数据的加密与解密。

在 2013 年,NTRU 被正式开放至公共领域(public domain),供公众自由使用。
本文将描述NTRU加密系统的工作原理,并介绍如何使用该系统进行基本的加密与解密操作。

0.1 引言(Introduction)

密码学(Cryptography)的历史最早可追溯到尤利乌斯·凯撒(Julius Caesar)和古罗马时期。
自那时起,密码学在政府及民间的安全通信中都发挥了重要作用。

一个密码系统(cryptosystem)包含两个核心过程:

  • 加密(encryption):将明文信息转换为难以辨认的文本或数字形式;
  • 解密(decryption):将加密信息还原为原始内容。

私钥加密系统和公钥加密系统都已公开可用,但公钥加密系统相较于私钥加密系统具有某些优势。

NTRU 加密系统 属于一种 公钥密码系统,由 Joseph Silverman、Jeffery Hoffstein 和 Jill Pipher 在 1996 年设计完成。

  • 最初,NTRU 仅以商业授权形式发布;
  • 直到 2013 年,它才被完全开放到公共领域,允许自由使用。

NTRU 的安全性基于某些计算数学问题的公认难度,以及解决这些问题所需的极其长的时间。这些计算问题由NTRU加密系统实现中选定的特定数值参数所定义。

本文旨在通过研究 NTRU 加密系统,帮助读者理解其原理并掌握如何使用它安全地加密消息和数据。
文末还将进一步讨论NTRU加密系统的安全性分析。

为此:

  • 必须了解截断多项式环,
  • 将消息转换为二进制,
  • 以及将这些二进制位串转换为多项式。

1. 预备知识(Preliminary Background)

1.1 密码系统(Cryptosystems)

密码学(Cryptography) 是研究在存在第三方的情况下,如何安全地共享信息的一门科学。

在密码学中,存在多种具体的加密系统(cryptosystem),每个系统都包含独立的加密、解密与密钥生成过程。

  • 加密(Encryption):将明文信息转换为无意义的字母或数字组合;
  • 解密(Decryption):执行加密的逆过程,将密文还原为原文。

每个加密系统中:

  • 都需要定义一些数值参数来决定加密细节。这些参数称为 加密密钥(encryption keys)。
  • 同样地,解密过程中使用的数值参数称为 解密密钥(decryption keys)。

为了说明这一概念,在此以凯撒密码(Caesar Cipher)为例。

假设明文为:

“HELLO WORLD”

若将每个字母在字母表中向后平移两位,则可得到密文:

“JGNNQ YQTNF”

此时的加密密钥为:
key=+2\text{key} = +2 key=+2

要将密文“JGNNQ YQTNF”解回明文“HELLO WORLD”,则需将每个字母向前平移两位:
key=−2\text{key} = -2 key=2

在凯撒密码中,任何 1 至 25 之间的整数都可作为密钥使用。

上面的凯撒密码是私钥加密系统(Private Key Cryptosystem)的一个例子。

在这种系统中:

  • 加密和解密使用的是同一个密钥;
  • 一旦知道加密密钥,就能轻易求出解密密钥;
  • 因此,密钥必须在通信双方之间保密。
    • 这也是“私钥(Private Key)加密系统”这一名称的由来。

与私钥加密系统相对,存在一种称为公钥加密系统(public key cryptosystem)的概念。
在公钥加密系统中,会生成一对密钥:

  • 加密密钥(encryption key)
    —— 该密钥是公开的(public key),任何人都可以使用它来加密消息;
  • 解密密钥(decryption key)
    —— 该密钥必须由密钥持有者严格保密(private key),用于解密。

需要注意的是:公钥与私钥并不相同。
正如前文提到的,NTRU 就是公钥加密系统的一个例子。

1.2 模运算(Modular Arithmetic)

mmm 为一个正整数,aaa 为任意整数。
表达式:
a(modm)a \pmod{m} a(modm)

表示唯一的非负整数 rrr,满足:
0≤r<m,a−r是 m的整数倍。0 \le r < m, \quad a - r \text{ 是 } m \text{ 的整数倍。} 0r<m,ar  m 的整数倍。

也就是说,当写作:
a≡b(modm)a \equiv b \pmod{m} ab(modm)
意味着 aaabbb 在除以 mmm 时得到相同的余数,因此它们的差值 aaabbbmmm 的倍数。
其中 mmm 称为模数(modulus)。

模运算同样支持加法、减法与乘法。对于任意整数 a, b,有:
a(modm)+b(modm)≡a+b(modm)a(modm)−b(modm)≡a−b(modm)a(modm)×b(modm)≡ab(modm)\begin{aligned} a \pmod{m} + b \pmod{m} &\equiv a + b \pmod{m} \\ a \pmod{m} - b \pmod{m} &\equiv a - b \pmod{m} \\ a \pmod{m} \times b \pmod{m} &\equiv ab \pmod{m} \end{aligned} a(modm)+b(modm)a(modm)b(modm)a(modm)×b(modm)a+b(modm)ab(modm)ab(modm)

当两个整数 aaammm 的唯一正公因数为 111 时,称二者是相对互质的(relatively prime)。
aaammm 相对互质,则存在一个整数 bbb(称为 aaa 在模 mmm 下的逆元(modular inverse)),满足:
ab≡1(modm)ab \equiv 1 \pmod{m} ab1(modm)

在 NTRU 加密系统 中,模运算是作用在多项式(polynomials)上的。因此,上述性质同样可以推广至多项式的运算。

设多项式 a\mathbf{a}ab\mathbf{b}b 的形式如下:
a=a0+a1X+a2X2+⋯+aN−1XN−1+aNXNb=b0+b1X+b2X2+⋯+bN−1XN−1+bNXN\begin{aligned} \mathbf{a} &= a_0 + a_1X + a_2X^2 + \dots + a_{N-1}X^{N-1} + a_NX^N \\ \mathbf{b} &= b_0 + b_1X + b_2X^2 + \dots + b_{N-1}X^{N-1} + b_NX^N \end{aligned} ab=a0+a1X+a2X2++aN1XN1+aNXN=b0+b1X+b2X2++bN1XN1+bNXN
其中所有系数均为整数。
ab\mathbf{a}\mathbf{b}ab 为多项式 a\mathbf{a}ab\mathbf{b}b 的乘积。

表达式:
ab(modm)\mathbf{a}\mathbf{b} \pmod{m} ab(modm)

表示对乘积 ab\mathbf{a}\mathbf{b}ab 的每个系数 cccc(modm)c \pmod mc(modm) 所得到的多项式。

如设:
a=2+5X3,b=X+X2+6X3,m=2\mathbf{a} = 2 + 5X^3, \\ \mathbf{b} = X + X^2 + 6X^3, \\ m = 2 a=2+5X3,b=X+X2+6X3,m=2

首先进行普通多项式乘法:
ab=2X+2X2+12X3+5X4+5X5+30X6\mathbf{a}\mathbf{b} = 2X + 2X^2 + 12X^3 + 5X^4 + 5X^5 + 30X^6 ab=2X+2X2+12X3+5X4+5X5+30X6

然后对每个系数取模 222(即保留余数):
ab(mod2)=X4+X5\mathbf{a}\mathbf{b} \pmod{2} = X^4 + X^5 ab(mod2)=X4+X5

1.3 截断多项式环(Truncated Polynomial Rings)

设 k 为任意正整数。定义:
Zk=0,1,2,…,k−1\mathbb{Z}_k = {0, 1, 2, \dots, k-1} Zk=0,1,2,,k1
表示模 kkk 的整数环(ring of integers modulo kkk)。

固定一个正整数 NNN
T\mathbf{T}T 表示所有系数属于 Zk\mathbb{Z}_kZk 且阶数不超过 N−1N−1N1 的多项式集合。

a,b∈T\mathbf{a}, \mathbf{b} \in \mathbf{T}a,bT,则它们的形式为:
a=a0+a1X+a2X2+⋯+aN−2XN−2+aN−1XN−1b=b0+b1X+b2X2+⋯+bN−2XN−2+bN−1XN−1\begin{aligned} \mathbf{a} &= a_0 + a_1X + a_2X^2 + \dots + a_{N-2}X^{N-2} + a_{N-1}X^{N-1} \\ \mathbf{b} &= b_0 + b_1X + b_2X^2 + \dots + b_{N-2}X^{N-2} + b_{N-1}X^{N-1} \end{aligned} ab=a0+a1X+a2X2++aN2XN2+aN1XN1=b0+b1X+b2X2++bN2XN2+bN1XN1

其中:
a0,a1,…,aN−1,b0,b1,…,bN−1∈Zka_0, a_1, \dots, a_{N-1},\ b_0, b_1, \dots, b_{N-1} \in \mathbb{Z}_k a0,a1,,aN1, b0,b1,,bN1Zk

集合 T\mathbf{T}T 中的加法运算按通常方式进行,即对相同阶数项的系数逐一相加:
a+b=(a0+b0)+(a1+b1)X+⋯+(aN−1+bN−1)XN−1\mathbf{a} + \mathbf{b} = (a_0 + b_0) + (a_1 + b_1)X + \dots + (a_{N-1} + b_{N-1})X^{N-1} a+b=(a0+b0)+(a1+b1)X++(aN1+bN1)XN1

显然,a+b\mathbf{a} + \mathbf{b}a+b 仍属于 T\mathbf{T}T

对于集合 T\mathbf{T}T 中的一对多项式 a\mathbf{a}ab\mathbf{b}b ,如果直接使用普通的多项式乘法,所得积 ab\mathbf{a}\mathbf{b}ab 的阶数可能会大于 N−1N − 1N1,从而不再属于 T\mathbf{T}T

因此,希望重新定义乘法,使得乘积 ab\mathbf{a}\mathbf{b}ab 仍属于 T\mathbf{T}T

显然,两个阶数为 NNN 的多项式相乘,其结果的阶数将大于 N−1N − 1N1
为了解决这一问题,对于每一个大于 N−1N − 1N1 的整数 mmm,将 XmX^mXm 替换为 XrX^rXr,其中:
r=mmodNr = m \bmod N r=mmodN

rrrmmm 除以 NNN 的最小非负余数。

然后,系数依然按通常方式相加。由此得到的积 ab\mathbf{a}\mathbf{b}ab 一定属于 T\mathbf{T}T

如,设:

N=5a=2+X+X3b=8X+5X2+2X4N = 5 \\ \mathbf{a} = 2 + X + X^3 \\ \mathbf{b} = 8X + 5X^2 + 2X^4 N=5a=2+X+X3b=8X+5X2+2X4

则:

ab=(2+X+X3)(8X+5X2+2X4)=16X+10X2+4X4+8X2+5X3+2X5+8X4+5X5+2X7=16X+18X2+5X3+12X4+7X5+2X7∉T\begin{aligned} \mathbf{a}\mathbf{b} &= (2 + X + X^3)(8X + 5X^2 + 2X^4) \\ &= 16X + 10X^2 + 4X^4 + 8X^2 + 5X^3 + 2X^5 + 8X^4 + 5X^5 + 2X^7 \\ &= 16X + 18X^2 + 5X^3 + 12X^4 + 7X^5 + 2X^7 \notin T \end{aligned} ab=(2+X+X3)(8X+5X2+2X4)=16X+10X2+4X4+8X2+5X3+2X5+8X4+5X5+2X7=16X+18X2+5X3+12X4+7X5+2X7/T

根据前述规则,将高阶项按模 N=5N = 5N=5 进行截断:
=16X+18X2+5X3+12X4+7X5+2X7=(7+0)X0+16X+(18+2)X2+5X3+12X4=7+16X+20X2+5X3+12X4∈T\begin{aligned} &=16X + 18X^2 + 5X^3 + 12X^4 + 7X^5 + 2X^7 \\ &= (7 + 0)X^0 + 16X + (18 + 2)X^2 + 5X^3 + 12X^4 \\ &= 7 + 16X + 20X^2 + 5X^3 + 12X^4 \in T \end{aligned} =16X+18X2+5X3+12X4+7X5+2X7=(7+0)X0+16X+(18+2)X2+5X3+12X4=7+16X+20X2+5X3+12X4T

将这种多项式称为截断多项式(truncated polynomial)。

显然,集合 T\mathbf{T}T 在加法与乘法下封闭,并且这两种二元运算都满足结合律与分配律,
因此 T\mathbf{T}T 构成一个环(ring)。

1.4 截断多项式的逆元(Inverses of Truncated Polynomials)

为了使NTRU加密系统能够正常工作,需要在指定模数下找到某个多项式的逆元。

设:

  • p∈T\mathbf{p}\in \mathbf{T}pT 为一个多项式;
  • qqq 为一个整数。

有时,可以找到另一个多项式 P∈T\mathbf{P} \in \mathbf{T}PT,使得:
pP≡1(modq)\mathbf{p}\mathbf{P} \equiv 1 \pmod{q} pP1(modq)

需要注意的是,并非所有多项式 p\mathbf{p}p 都存在逆元。
如:
p=X+X2,P=2+X,q=2,N=3\mathbf{p} = X + X^2, \\ \mathbf{P} = 2 + X, \\ q = 2, \\ N = 3 p=X+X2,P=2+X,q=2,N=3

则有:
pP(mod2)=(X+X2)(2+X)=2X+X2+X2+X3=2X+2X2+X3≡1+2X+2X2(mod2)≡1\begin{aligned} \mathbf{p}\mathbf{P} &\pmod{2} = (X + X^2)(2 + X) \\ &= 2X + X^2 + X^2 + X^3 \\ &= 2X + 2X^2 + X^3 \\ &\equiv 1 + 2X + 2X^2 \pmod{2} \\ &\equiv 1 \end{aligned} pP(mod2)=(X+X2)(2+X)=2X+X2+X2+X3=2X+2X2+X31+2X+2X2(mod2)1

因此,在该例中,P\mathbf{P}Pp\mathbf{p}p 在模 q=2q=2q=2 下的逆元。

1.5 字母到二进制的转换(Letter to Binary Conversion)

在计算机中,所有消息、文本、图像等都会被转换为由 0 和 1 组成的比特串,
通常使用 ASCII(American Standard Code for Information Interchange) 编码。

NTRU 加密系统也遵循相同的思想,因此,理解这种转换方式是必要的。
这种转换非常简单,而且是确定的,因此可以使用现成的 ASCII 对照表(见本文附录)。

2. NTRU 公钥加密系统(NTRU Public Key Cryptosystem)

2.1 参数(Parameters)

NTRU 加密系统有多个不同的版本,其中一些为了提高安全性而更为复杂。
本文讨论的是最基本的 NTRU 版本,仅使用三个主要参数。
(更复杂的版本可能包含更多参数。)

本系统使用了在 1.3 节 定义的集合 T\mathbf{T}T

这三个参数是:

  • NNN:多项式环中多项式的维度;
  • qqq:一个选定的较大模数;
  • ppp:一个选定的较小模数。

2.2 生成密钥(Generating a Key)

假设 Bob 想使用 NTRU 加密系统 向 Alice 发送一条消息。
在此之前,Alice 必须先创建她的加密密钥(encryption key)和解密密钥(decryption key)。

  • 1)步骤 1:选择随机多项式
    Alice 从环 T\mathbf{T}T 中随机选择两个多项式 f\mathbf{f}fg\mathbf{g}g
    这两个多项式都需要是“较小的(small)”,即它们的系数相对于模 qqq 下的随机多项式来说比较小。
    换句话说,它们的每个系数都不能超过 qqq

  • 2)步骤 2:计算 f\mathbf{f}f 的逆元 【取 (f,fp)(\mathbf{f},\mathbf{f}_p)(f,fp) 为私钥】
    接下来,Alice 分别在模 qqq 和模 ppp 下计算 f\mathbf{f}f 的逆元。
    f\mathbf{f}f 在这些模下可逆,则满足:
    ffq≡1(modq)(1)\mathbf{f} \mathbf{f}_q \equiv 1 \pmod{q} \tag{1} ffq1(modq)(1)
    以及
    ffp≡1(modp)(2)\mathbf{f} \mathbf{f}_p \equiv 1 \pmod{p} \tag{2} ffp1(modp)(2)
    其中:

    • fq\mathbf{f}_qfq:表示 f\mathbf{f}f 在模 qqq 下的逆元;
    • fp\mathbf{f}_pfp:表示 f\mathbf{f}f 在模 ppp 下的逆元。

    如果在任意一个模数下逆元不存在,Alice 必须重新随机选择另一个 f\mathbf{f}f,直到找到一个同时满足 (1) 与 (2) 的多项式为止。

  • 3)步骤 3:生成公钥 h\mathbf{h}h
    当 Alice 找到一个可逆的 f\mathbf{f}f 后,她计算如下多项式:
    h=pfqg(modq)\mathbf{h} = p \mathbf{f}_q \mathbf{g} \pmod{q} h=pfqg(modq)

此时:

  • 私钥(private key) 是多项式对:(f,fp)(\mathbf{f}, \mathbf{f}_p)(f,fp),必须保密;
  • 公钥(public key) 是多项式 h\mathbf{h}h,可以公开发布给任何人。

2.3 加密(Encryption)

当 Alice 生成好她的密钥对后,她将公钥 h\mathbf{h}h 公布给外界。
此时,Bob 就可以用这个公钥向 Alice 发送加密消息。

  • 1)步骤 1:消息多项式化
    Bob 首先将他的消息转换为一个多项式 m\mathbf{m}m,其系数取模 ppp,使得 m\mathbf{m}m 成为模 qqq 下的“较小”多项式。

  • 2)步骤 2:选择随机掩码
    Bob 还需选择一个随机的小多项式 r\mathbf{r}r,用于混淆消息内容。
    这可以增加安全性,使非目标接收者更难解密。

  • 3)步骤 3:生成密文
    Bob 使用多项式 m\mathbf{m}mr\mathbf{r}r 以及 Alice 的公钥 h\mathbf{h}h,计算:
    e=rh+m(modq)\mathbf{e} = \mathbf{r} \mathbf{h} + \mathbf{m} \pmod{q} e=rh+m(modq)
    其中:

    • e\mathbf{e}e:即为加密后的消息(ciphertext)。

    随后,Bob 将多项式 e\mathbf{e}e 发送给 Alice。

2.4 解密(Decryption)

当 Alice 收到 Bob 的密文后,她需要将其解密回原始消息。

  • 1)步骤 1:计算多项式 a\mathbf{a}a
    Alice 使用她的多项式 f\mathbf{f}f 计算:
    a=fe(modq)\mathbf{a} = \mathbf{f} \mathbf{e} \pmod{q} a=fe(modq)
  • 2)步骤 2:计算多项式 b\mathbf{b}b
    然后对多项式 a\mathbf{a}a 取模 ppp,得到:
    b=a(modp)\mathbf{b} = \mathbf{a} \pmod{p} b=a(modp)
  • 3)步骤 3:计算多项式 c\mathbf{c}c
    最后,Alice 使用她的 fp\mathbf{f}_pfp(即 f\mathbf{f}f 在模 ppp 下的逆元)计算:
    c=fpb(modp)\mathbf{c} = \mathbf{f}_p \mathbf{b} \pmod{p} c=fpb(modp)
    结果多项式 c\mathbf{c}c 就是 Bob 最初发送的明文消息 m\mathbf{m}m

正确性验证:
T\mathbf{T}T 的结构,以及逆元的存在,使得 Alice 能够解出 Bob 的消息。
当 Alice 计算 a\mathbf{a}a 时,实际上她是在计算:
a=fe(modq)=f(rh+m)(modq)=f(rpfqg+m)(modq)=ffqprg+fm(modq)=prg+fm(modq)\begin{aligned} \mathbf{a} & = \mathbf{f} \mathbf{e} \pmod{q}\\ &= \mathbf{f} (\mathbf{r} \mathbf{h} + \mathbf{m}) \pmod{q} \\ &= \mathbf{f} (\mathbf{r} p \mathbf{f}_q \mathbf{g} + \mathbf{m}) \pmod{q} \\ &= \mathbf{f} \mathbf{f}_q p \mathbf{r} \mathbf{g} + \mathbf{f} \mathbf{m} \pmod{q} \\ &= p \mathbf{r} \mathbf{g} + \mathbf{f} \mathbf{m} \pmod{q} \end{aligned} a=fe(modq)=f(rh+m)(modq)=f(rpfqg+m)(modq)=ffqprg+fm(modq)=prg+fm(modq)

由于多项式的所有系数都远小于模数 qqq,且 p≪qp \ll qpq,因此在取模 qqq 时不发生数值截断或折返,即系数保持不变。
于是有:
a=prg+fm\mathbf{a} = p \mathbf{r} \mathbf{g} + \mathbf{f} \mathbf{m} a=prg+fm

从而有:
b=a(modp)=prg+fm(modp)=fm(modp)\begin{aligned} \mathbf{b} & = \mathbf{a} \pmod{p}\\ &= p \mathbf{r} \mathbf{g} + \mathbf{f} \mathbf{m} \pmod{p} \\ &= \mathbf{f} \mathbf{m} \pmod{p} \end{aligned} b=a(modp)=prg+fm(modp)=fm(modp)

因为有:
c=fpb(modp),\mathbf{c} = \mathbf{f}_p \mathbf{b} \pmod{p}, c=fpb(modp),

b=fm(modp)\mathbf{b} = \mathbf{f} \mathbf{m} \pmod{p}b=fm(modp),从而有:
c=fpb(modp)=fpfm(modp)=m(modp)=m\begin{aligned} \mathbf{c} & = \mathbf{f}_p \mathbf{b} \pmod{p} \\ &= \mathbf{f}_p \mathbf{f} \mathbf{m} \pmod{p} \\ &= \mathbf{m} \pmod{p} \\ & = \mathbf{m} \end{aligned} c=fpb(modp)=fpfm(modp)=m(modp)=m

因此,Alice 成功恢复了原始消息 m\mathbf{m}m

2.5 NTRU 的一个使用示例

为了演示 NTRU 加密系统的使用,首先需要选择整数 NNNpppqqq
设:
N=11,q=32,p=3.N = 11, \quad q = 32, \quad p = 3. N=11,q=32,p=3.

接下来,需要选择一个多项式 f\mathbf{f}f,使得它在模 ppp 和模 qqq 下均存在逆元,并且选择另一个多项式 g\mathbf{g}g

设:
f=−1+X+X2−X4+X6+X9−X10\mathbf{f} = -1 + X + X^2 - X^4 + X^6 + X^9 - X^{10} f=1+X+X2X4+X6+X9X10
以及:
g=−1+X+X2+X3−X8−X10.\mathbf{g} = -1 + X + X^2 + X^3 - X^8 - X^{10}. g=1+X+X2+X3X8X10.

对应的逆元为:
fp=1+2X+2X3+2X4+X5+2X7+X8+2X9\mathbf{f}_p = 1 + 2X + 2X^3 + 2X^4 + X^5 + 2X^7 + X^8 + 2X^9 fp=1+2X+2X3+2X4+X5+2X7+X8+2X9
以及:
fq=5+9X+6X2+16X3+4X4+15X5+16X6+22X7+20X8+18X9+30X10.\mathbf{f}_q = 5 + 9X + 6X^2 + 16X^3 + 4X^4 + 15X^5 + 16X^6 + 22X^7 + 20X^8 + 18X^9 + 30X^{10}. fq=5+9X+6X2+16X3+4X4+15X5+16X6+22X7+20X8+18X9+30X10.

由于公钥的定义为:
h=pfqg(modq).\mathbf{h} = p \mathbf{f}_q \mathbf{g} \pmod{q}. h=pfqg(modq).

使用上述数值计算得:
h=pfqg(modq)=18+6X+21X2+16X3+2X4+21X5+X6+17X7+30X8+3X9+25X10\begin{aligned} \mathbf{h} & = p \mathbf{f}_q \mathbf{g} \pmod{q} \\ & = 18 + 6X + 21X^2 + 16X^3 + 2X^4 + 21X^5 + X^6 + 17X^7 + 30X^8 + 3X^9 + 25X^{10} \end{aligned} h=pfqg(modq)=18+6X+21X2+16X3+2X4+21X5+X6+17X7+30X8+3X9+25X10

现在得到了 h\mathbf{h}h——即为 公钥,可以向外界公开,以便他人向我们发送加密消息。

接下来,来尝试发送一条消息——假设要发送的消息是 “Hi”。

为了将这条消息转换为多项式形式,首先需要将每个字母转换为对应的 二进制(binary) 表示。这可以通过附录中的 ASCII 表完成。

因此:
H=1001000H = 1001000 H=1001000
i=1101001i=1101001 i=1101001

要将它们转换为多项式,只需在相应的二进制位上加上 XXX 的幂次即可:

H=X3+X6H = X^3 + X^6 H=X3+X6

i=1+X3+X5+X6i = 1 + X^3 + X^5 + X^6 i=1+X3+X5+X6

令它们分别为多项式 m1\mathbf{m}_1m1m2\mathbf{m}_2m2

在使用公钥 h\mathbf{h}h 加密消息之前,必须选择一个随机多项式 r\mathbf{r}r
设:
r=1+X+X2+X7.\mathbf{r} = 1 + X + X^2 + X^7. r=1+X+X2+X7.

由于加密消息定义为:
e=rh+m1(modq).\mathbf{e} = \mathbf{r} \mathbf{h} + \mathbf{m}_1 \pmod{q}. e=rh+m1(modq).

因此,使用 m1\mathbf{m}_1m1 计算得:
e=rh+m1(modq)=14+6X+14X2+29X3+5X4+18X5+18X6+7X7+10X8+7X9+22X10\begin{aligned} e & = \mathbf{r} \mathbf{h} + \mathbf{m}_1 \pmod{q} \\ &= 14 + 6X + 14X^2 + 29X^3 + 5X^4 + 18X^5 + 18X^6 + 7X^7 + 10X^8 + 7X^9 + 22X^{10} \end{aligned} e=rh+m1(modq)=14+6X+14X2+29X3+5X4+18X5+18X6+7X7+10X8+7X9+22X10

要解密 m1\mathbf{m}_1m1,首先计算 a\mathbf{a}a
根据解密中定义:
a=fe(modq).\mathbf{a} = \mathbf{f} \mathbf{e} \pmod{q}. a=fe(modq).
代入 f\mathbf{f}fe\mathbf{e}e,得:

a=fe(modq)=6+5X+2X2+8X3+5X4+3X5+29X6+3X7+X8+X9+28X10\begin{aligned} a &= \mathbf{f} \mathbf{e} \pmod{q} \\ &= 6 + 5X + 2X^2 + 8X^3 + 5X^4 + 3X^5 + 29X^6 + 3X^7 + X^8 + X^9 + 28X^{10} \end{aligned} a=fe(modq)=6+5X+2X2+8X3+5X4+3X5+29X6+3X7+X8+X9+28X10

接着根据 b=a(modp)\mathbf{b}=\mathbf{a}\pmod pb=a(modp),有:

b=a(modp)=2X+2X2+2X3+2X4+2X6+X8+X9+X10\begin{aligned} \mathbf{b} & = \mathbf{a} \pmod{p} \\ & = 2X + 2X^2 + 2X^3 + 2X^4 + 2X^6 + X^8 + X^9 + X^{10} \end{aligned} b=a(modp)=2X+2X2+2X3+2X4+2X6+X8+X9+X10

根据公式 c=fpb(modp)\mathbf{c} = \mathbf{f}_p \mathbf{b} \pmod{p}c=fpb(modp),计算:
c=fpb(modp)=X3+X6=m1\begin{aligned} \mathbf{c} &= \mathbf{f}_p \mathbf{b} \pmod{p} \\ & = X^3 + X^6 \\ & = \mathbf{m}_1 \end{aligned} c=fpb(modp)=X3+X6=m1

接下来,对消息 m2\mathbf{m}_2m2 重复相同的过程。仍然使用之前相同的随机多项式 r\mathbf{r}r

因此,加密过程为:
e=rh+m2(modq)=17+6X+14X2+29X3+5X4+11X5+18X6+25X7+22X8+7X9+10X10\begin{aligned} \mathbf{e} & = \mathbf{r} \mathbf{h} + \mathbf{m}_2 \pmod{q} \\ & = 17 + 6X + 14X^2 + 29X^3 + 5X^4 + 11X^5 + 18X^6 + 25X^7 + 22X^8 + 7X^9 + 10X^{10} \end{aligned} e=rh+m2(modq)=17+6X+14X2+29X3+5X4+11X5+18X6+25X7+22X8+7X9+10X10

为了解密 m2\mathbf{m}_2m2,再次计算:
a=fe(modq)=6+3X2+18X3+3X4+5X5+14X6+25X7+X8+X9+8X10\begin{aligned} \mathbf{a} & = \mathbf{f} \mathbf{e} \pmod{q} \\ & = 6 + 3X^2 + 18X^3 + 3X^4 + 5X^5 + 14X^6 + 25X^7 + X^8 + X^9 + 8X^{10} \end{aligned} a=fe(modq)=6+3X2+18X3+3X4+5X5+14X6+25X7+X8+X9+8X10

然后取模 ppp
b=a(modp)=2X5+X6+X7+X8+X9+X10\begin{aligned} \mathbf{b} & = \mathbf{a} \pmod{p} \\ & = 2X^5 + X^6 + X^7 + X^8 + X^9 + X^{10} \\ \end{aligned} b=a(modp)=2X5+X6+X7+X8+X9+X10

最后,计算:
c=fpb(modp)=1+X3+X5+X6=m2\begin{aligned} \mathbf{c} & = \mathbf{f}_p \mathbf{b} \pmod{p} \\ & = 1 + X^3 + X^5 + X^6 \\ & = \mathbf{m}_2 \end{aligned} c=fpb(modp)=1+X3+X5+X6=m2

现在得到了该消息的两个部分 m1\mathbf{m}_1m1m2\mathbf{m}_2m2,即完整的原始消息。

2.6 NTRU 的安全性

NTRU 的安全性基于某些计算数学问题的计算难度以及解决这些问题所需的极高时间成本。
这些计算问题由系统实现时选择的数值参数 N,q,pN, q, pN,q,p 所定义。通过对这些参数施加特定条件,可以进一步提高系统的安全性。

在 NTRU 加密系统中,目前已知唯一可行的攻击方法是基于格(lattice-based)的攻击。
这种攻击方式通过建立一个方程组,试图求解某个多项式。该方程组对应一个大小为 N×NN \times NN×N 的矩阵。

目前已知存在几种格攻击,其中最复杂的一种仅在 N<100N < 100N<100 时,能在大约 40 分钟 内破解 NTRU。

虽然格攻击在 N<100N < 100N<100 时确实有效,但可以通过设置特定条件来提高 NTRU 的安全性。
如,可以令 NNN 取较大的值:

  • N=200N = 200N=200,则系统具有中等安全性(moderate security);
  • N=500N = 500N=500,则系统具有高安全性(high security)。

这是因为,虽然计算机能够求解大型矩阵,但当破解时间需要数周甚至数年时,攻击就变得不可行。
如,当 N=500N = 500N=500 时,预计破解所需时间约为 8.4 年。

此外,如果参数 pppqqq 被选为较大且相对互素(relatively prime),则求解整个系统的难度将进一步增加。

3. 附录:ASCII 字母与二进制对照表

ASCII 字母与二进制的对应关系:

字母二进制表示字母二进制表示
A1000001a1100001
B1000010b1100010
C1000011c1100011
D1000100d1100100
E1000101e1100101
F1000110f1100110
G1000111g1100111
H1001000h1101000
I1001001i1101001
J1001010j1101010
K1001011k1101011
L1001100l1101100
M1001101m1101101
N1001110n1101110
O1001111o1101111
P1010000p1110000
Q1010001q1110001
R1010010r1110010
S1010011s1110011
T1010100t1110100
U1010101u1110101
V1010110v1110110
W1010111w1110111
X1011000x1111000
Y1011001y1111001
Z1011010z1111010

参考资料

[1] 2019年论文《Understanding the NTRU Public Key Cryptosystem》

http://www.dtcms.com/a/536700.html

相关文章:

  • 如何在物联网产品应用串行psram
  • 1.2、实战准备:AI安全研究环境搭建与工具链
  • 鞋材加工东莞网站建设山西网页制作
  • 网站建设基本流程包括哪几个步骤工装设计方案网站
  • 苏州手机网站建设报价logo设计网站平台
  • 数据驱动AI落地:交通运维与仓储管理的智能化破局方法论与技术实践
  • 多功能雷达行为辨识与预测技术研究
  • Rust面试题及详细答案120道(115-120)-- 对比其他语言
  • LeetCode算法学习之移除元素
  • allWebPlugin中间件IE特别版发布
  • 前端八股之HTTP
  • rust笔记
  • 西安招聘网站建设多多鱼网页设计代码
  • 中国团队开发出有效的钙钛矿电池缓冲液
  • 使用mybatis-plus,实现将排序时,字段值为NULL的数据排在最后
  • Websocket两台服务器之间的通信
  • 网站技能培训班有哪些做网站用什么软件ps字体
  • 摩根大通将支持比特币和以太坊作为抵押品
  • 绿园区住房和城乡建设局网站c2c平台是什么意思
  • Web前端开发:用JavaScript阻止表单提交
  • 从 TCP 粘包到线程池:一起了解用 QRunnable 重构 Qt 高并发网络通信架构
  • Blender入门学习07 - 形态键
  • 网站推广常用方法包括二手车 东莞网站建设
  • LUMI 大模型分拣机器人应用 和 Lumi视觉标定
  • 开源项目分享:Gitee热榜项目 2025-10-27 日榜
  • [Dify 实战] 封闭插件开发到发布:本地编写、Remote调试与上线全流程(Python)
  • ARM《5》_系统移植(在开发板上运行linux程序)
  • 长沙网络营销公司排名郑州seo外包
  • 仿淘宝电商网站开发报价安徽网站开发培训价格
  • 关于Mysql的学习二(函数,约束与多表查询)