# NTRU

# 介绍

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

# 内容

首先确定33 个参数(N,p,q)(N,p,q) 以及44 个度为N1N-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]/(XN1)R=\mathbb{Z}[X]/(X^N-1) ,这个环中的多项式形式

F=a0+a1X+a2X2++aN2xN2+aN1xN1F=a_0+a_1X+a_2X^2+\cdots+a_{N-2}x^{N-2}+a_{N-1}x^{N-1}

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

Lm\mathcal{L}_m 里面的多项式mm 需要满足12(p1)<[Xi]m<12(p1)-\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 的个数为 d1d_{-1},满足d1=d1+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

fLff\in \mathcal{L}_fgLgg\in \mathcal{L}_g,计算FpF_pFqF_q,满足

Fpf1modpFqf1modqF_p*f\equiv 1 \mod{p}\\ F_q*f\equiv 1 \mod{q}

计算公钥

hpgFqmodqh\equiv p*g*F_q\mod{q}

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

# Encryption

选择明文mLmm\in \mathcal{L_m} 以及随机生成一个多项式rLrr\in \mathcal{L}_r,计算

erh+mmodqe\equiv r*h+m\mod{q}

# Decryption

第一步

aefmodqrpgFqf+mfmodqrpg+mfmodq\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}

第二步

aFp0+mfFpmmodp\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