# NTRU

# 介绍

NTRU 是基于格的加密算法来加密数据的。它包括两部分算法:NTRUEncrypt 用来加密数据,NTRUSign 用来进行数字签名。

# 内容

首先确定33 个参数(N,p,q)(N,p,q) 以及44 个度为N−1N-1 的多项式集合Lf,Lg,Lr,Lm\mathcal{L}_f,\mathcal{L}_g,\mathcal{L}_r,\mathcal{L}_m

需要满足gcd⁡(p,q)=1\gcd(p,q)=1 并且q>pq>p,并且所有多项式需要在环R=Z[X]/(XN−1)R=\mathbb{Z}[X]/(X^N-1) ,这个环中的多项式形式

F=a0+a1X+a2X2+⋯+aN−2xN−2+aN−1xN−1F=a_0+a_1X+a_2X^2+\cdots+a_{N-2}x^{N-2}+a_{N-1}x^{N-1}

其中系数都是整数,度数不超过N−1N-1

Lm\mathcal{L}_m 里面的多项式mm 需要满足−12(p−1)<[Xi]m<12(p−1)-\frac{1}{2}(p-1)\lt [X^i]m\lt \frac{1}{2}(p-1)

Lf\mathcal{L}_f 里面多项式的系数只有1,−1,01,-1,0 三种,记系数为11 的个数为d1d_1,系数为−1-1 的个数为 d−1d_{-1},满足d1=d−1+1d_1=d_{-1}+1

Lg\mathcal{L}_g 里面多项式的系数只有1,−1,01,-1,0 三种,满足d_1=d_

LrL_{r} 里面多项式的系数只有1,−1,01,-1,0 三种,满足d_1=d_

# Public key generation

令f∈Lff\in \mathcal{L}_f,g∈Lgg\in \mathcal{L}_g,计算FpF_p 和FqF_q,满足

Fp∗f≡1mod  pFq∗f≡1mod  qF_p*f\equiv 1 \mod{p}\\ F_q*f\equiv 1 \mod{q}

计算公钥

h≡p∗g∗Fqmod  qh\equiv p*g*F_q\mod{q}

公钥(h,N,p,q)(h,N,p,q),私钥是(f,Fp)(f,F_p)

# Encryption

选择明文m∈Lmm\in \mathcal{L_m} 以及随机生成一个多项式r∈Lrr\in \mathcal{L}_r,计算

e≡r∗h+mmod  qe\equiv r*h+m\mod{q}

# Decryption

第一步

a≡e∗fmod  q≡r∗p∗g∗Fq∗f+m∗fmod  q≡r∗p∗g+m∗fmod  q\begin{aligned} a &\equiv e*f\mod{q}\\ &\equiv r*p*g*F_q*f+m*f\mod{q}\\ &\equiv r*p*g+m*f\mod{q} \end{aligned}

第二步

a∗Fp≡0+m∗f∗Fp≡mmod  p\begin{aligned} a*F_p\equiv 0+m*f*F_p\equiv m\mod{p} \end{aligned}

Edited on

Give me a cup of [coffee]~( ̄▽ ̄)~*

岚沐 WeChat Pay

WeChat Pay

岚沐 Alipay

Alipay

岚沐 PayPal

PayPal