NTRU算法详解

NTRU算法详解

算法背景

    NTRU是Hoffstem、Pipher和silverman在1998年提出的一种新的公钥密码体制。该体制是建立在多项式环的基础之上的,其安全性基于格上最短向量问题,可以有效抵抗Shor算法。由于NTRU运算简洁快速,与目前广泛使用的公钥密码系统RSA及椭圆曲线密码系统相比较,在安全要求相同的情况下,NTRU产生密钥对更快,在加密和解密效率上也具有一定的优势。但NTRU的原始方案的安全性一直没有得到严格的证明。

    2011年,Stehle D,SteinfeldR在理想格上基于R-LWE问题构造了选择明文攻击安全的NTRU加密体制。2012年,Ron Steinfeld等人在理想格上提出了选择密文攻击安全的NTRU加密体制。

算法流程

45454f65d2ae336cbc09c4e8178e8769.png

参数选取

N:次数参数,素数

q:大模数,正整数

p:小模数,奇素数或多项式

d:用来限制非0系数的个数,正整数

f(x):模多项式,N次整系数多项式,将格$Z^N$构造为环$Z[x]/f(x)$

经典参数值:

密钥生成

公钥:$(N, p, q, h(x))
$

私钥:$(f(x), f_{p}^{-1}(x))$

  1. 生成$f(x),f_{q}^{-1}(x),f_{p}^{-1}(x)$

    (1)在格$Z[x]$上选取多项式$f(x)$,满足$f(x)$的次数不超过N-1,系数为$\{-1, 0, 1\}$中的值,且有d+1个系数为1,d个系数为-1,其他系数为0。

    (2)检验$f(x)$在环$Z_q[x]/f(x)$上是否可逆,如果可逆则计算逆元$f_{q}^{-1}(x)$

    (3)检验$f(x)$在环$Z_p[x]/f(x)$上是否可逆,如果可逆则计算逆元$f_{p}^{-1}(x)$

    重复上述步骤,直至得到$(f_{q}^{-1}(x), f_{p}^{-1}(x))$

  2. 生成$g(x)$

    在格Z[x]上选取多项式$f(x)$,满足$f(x)$的次数不超过N-1,系数为$\{-1, 0, 1\}$中的值,且有d+1个系数为1,d个系数为-1,其他系数为0

  3. 计算$h(x)$

加密阶段

  1. 将明文编码为系数属于$\{-1,0,1\}$的多项式$m(x)$,明文空间即为$\mathcal{M}=\{-1,0,1\}^N$;同时,在参数选取为$(p,f(x))=(3,x^N-1)$时,有$\mathcal{M}=Z_p[x]/f(x)$

  2. 随机选取多项式$r(x) \in Z_p[x]/f(x)$

  3. 计算密文

解密阶段

  1. 首先计算:(此处省略了多项式后的(x))
因为$r(x),g(x),f(x),m(x)$的系数都较小,故上述计算所得到的为恒等式
而非同余式
  1. 接下来计算:
  1. 需要注意的是,1中实际上为概率性算法,概率与q的取值有关,细节见下图:

知识补充

这一部分主要为在代码实现时所要用到的算法

中心化处理取模

中心化处理,即模q运算或模p运算的结果以0为中心。

比如模3运算的结果属于$\{-1,0,1\}$而不是$\{0,1,2\}$,
模256运算的结果属于$\{-127,-126,…,128\}$而不是$\{0,1…,255\}$。

这样的中心化处理在代数上没有任何不同,但使得尺寸变小了。环$Z_q[x]/f(x)$和环$Z_p[x]/f(x)$都经过这样的中心化处理。

将明文编码为多项式

还没找到合适的算法……

判断多项式是否可逆

NTRU - PamShao - 博客园或论文《NTRU中多项式的逆问题》

多项式卷积计算与快速卷积

设$a(x), b(x), c(x) \in Z^N/f(x)$,其中$c(x)$为a(x)与b(x)的卷积计算结果,记作

将上述多项式表示为向量形式,如下:

由于$X^N \equiv 1 \pmod{X^N -1}$,故乘积后有$X^{N+i} \equiv X^i \pmod{X^N -1}$,进而可以得到:

快速卷积算法