参考:
NTRU
: Nth degree Truncated polynomial Ring Units. Or R=XN−1Z[X]
系统需要一下在各个使用这个系统的使用者之间共享三个信息:
N&R
:N 是一个整数、R 是一个环,在环 R 上的多项式次数均为 N-1
;p
:一个小整数。多项式对 p 系数取模得到一个模环;q
:一个与 p 互素的大整数。多项式对 q 系数取模得到一个模环;
使用这个系统的用户需要通过一下的方式生成公钥与私钥:
从 R 中随机选取两个可逆多项式 f, g;
计算 f 关于 p,q 的逆:f⋅fp≡1(modp),f⋅fq≡1(modq)
计算下面的多项式积:h=p⋅fq⋅g(modq)
封装私钥 (f,fp),封装公钥 (h)
一个用户 A 得到了 B 的公钥,想向 B 发送一条信息,通过下面的方式:
- 将明文 m 表示为模 p 环多项式的形式,多项式的系数选在区间 (−2p,2p) 之中;
- 随机选取一个多项式 r;
- 用以下的方式计算密文:e=r⋅h+m(modq);
B 收到了来自 A 的加密信息将通过以下的方式解密:
- B 私钥中有一个私有的多项式 f,通过以下方式计算多项式 a:a≡f⋅e(modq),其中多项式的系数选在区间 (−2q,2q) 之中;
- 在通过小素数 p 计算:b≡a(modp)
- 最后使用私钥中的多项式 fp 即可得到明文:c≡fp⋅b(modp)
v1.5.0