# NTRU
# 介绍
NTRU 是基于格的加密算法来加密数据的。它包括两部分算法:NTRUEncrypt 用来加密数据,NTRUSign 用来进行数字签名。
# 内容
首先确定3 个参数(N,p,q) 以及4 个度为N−1 的多项式集合Lf,Lg,Lr,Lm
需要满足gcd(p,q)=1 并且q>p,并且所有多项式需要在环R=Z[X]/(XN−1) ,这个环中的多项式形式
F=a0+a1X+a2X2+⋯+aN−2xN−2+aN−1xN−1
其中系数都是整数,度数不超过N−1
Lm 里面的多项式m 需要满足−21(p−1)<[Xi]m<21(p−1)
Lf 里面多项式的系数只有1,−1,0 三种,记系数为1 的个数为d1,系数为−1 的个数为 d−1,满足d1=d−1+1
Lg 里面多项式的系数只有1,−1,0 三种,满足d_1=d_
Lr 里面多项式的系数只有1,−1,0 三种,满足d_1=d_
# Public key generation
令f∈Lf,g∈Lg,计算Fp 和Fq,满足
Fp∗f≡1modpFq∗f≡1modq
计算公钥
h≡p∗g∗Fqmodq
公钥(h,N,p,q),私钥是(f,Fp)
# Encryption
选择明文m∈Lm 以及随机生成一个多项式r∈Lr,计算
e≡r∗h+mmodq
# Decryption
第一步
a≡e∗fmodq≡r∗p∗g∗Fq∗f+m∗fmodq≡r∗p∗g+m∗fmodq
第二步
a∗Fp≡0+m∗f∗Fp≡mmodp