NRTU加密

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

这里简单介绍NRTU加密的方法,之后会继续补充。

一、NRTU历史

NRTU 是一种新的公钥加密系统,是由三个数学家Jeffrey Hoffstein, Jill Pipher, and Joseph H. Silverman 于1996年提出。

二、NRTU加密

Alice 想要向 Bob 传递一个信息M,公钥公开的一个“钥匙”,是Alice 以及 Bob 都知道(也可以说所有人都知道),其目的是用来加密信息。而私钥是只有Bob知道的钥匙,其作用是用来解密。

1.公钥

这里主要是希望收到信息的Bob操作。
选择3个不相同的素数 N,p,q 使得 q > > p , N q>>p,N q>>p,N. 选择两个多项式 f , g ∈ Z [ X ] / X N − 1 f,g\in \mathbb{Z}[X]/X^N-1 f,gZ[X]/XN1 使得 f , g f,g f,g 的系数属于 { − 1 , 0 , 1 } \{-1,0,1\} {1,0,1} 并且存在 f q , f p f_q,f_p fq,fp 使得
f ⋅ f q ≡ 1 m o d    q f\cdot f_q\equiv1\mod q ffq1modq以及
f ⋅ f p ≡ 1 m o d    p . f\cdot f_p\equiv 1\mod p. ffp1modp.实际上以上两个等式要求了 f f f Z q [ X ] / X N − 1 \mathbb{Z}_q[X]/X^N-1 Zq[X]/XN1 以及 Z p [ X ] / X N − 1 \mathbb{Z}_p[X]/X^N-1 Zp[X]/XN1 中是可逆的,这里 Z p = Z / p Z , Z q = Z / q Z \mathbb{Z}_p=\mathbb{Z}/p\mathbb{Z},\mathbb{Z}_q=\mathbb{Z}/q\mathbb{Z} Zp=Z/pZ,Zq=Z/qZ. 计算
h = p ⋅ f q ⋅ g m o d    q h=p\cdot f_q\cdot g\mod q h=pfqgmodq此时将 ( N , p , q , h ) (N,p,q,h) (N,p,q,h) 作为公钥。私钥为 ( f , f p , f q , g ) (f,f_p,f_q,g) (f,fp,fq,g). 公钥Alice是知道的,而私钥只有Bob知道。

2.加密

这里主要是发送信息的Alice在操作。
Alice首先将信息变成 Z [ X ] / X N − 1 \mathbb{Z}[X]/X^N-1 Z[X]/XN1中的一个多项式 m m m,并且保证系数落在 [ − p 2 , p 2 ] [-\frac{p}{2},\frac{p}{2}] [2p,2p]当中。注意这里的多项式的系数即可以作为信息M的载体。Alice随机选取一个 Z [ X ] / X N − 1 \mathbb{Z}[X]/X^N-1 Z[X]/XN1中的多项式 r r r,保证 r r r 的系数比较小即可,这里我们不要求系数落在 { − 1 , 0 , 1 } \{-1,0,1\} {1,0,1}当中。
计算
e = r ⋅ h + m m o d    q . e=r\cdot h+m\mod q. e=rh+mmodq.此时Alice将 e e e作为加密的信息传递给Bob。

3. 解密

这里是Bob用密钥解密的过程。
Bob收到 e e e之后,首先计算
a = f ⋅ e = f ⋅ ( r p f q g + m ) ≡ p r g + f ⋅ m m o d    q a=f\cdot e=f\cdot(rpf_qg+m)\equiv prg+f\cdot m\mod q a=fe=f(rpfqg+m)prg+fmmodq最后一个等式成立是由于 f ⋅ f q ≡ 1 m o d    q f\cdot f_q\equiv 1\mod q ffq1modq. 将 p r g + f ⋅ m prg+f\cdot m prg+fm 记作 b b b.换言之,我们有
b ≡ a m o d    q . b\equiv a\mod q. bamodq. 接下来,我们进行 m o d    p \mod p modp 的操作。由于 p r g m o d    p = 0 prg\mod p=0 prgmodp=0, 我们有
b ≡ f ⋅ m m o d    p b\equiv f\cdot m\mod p bfmmodp此时
m = f p ⋅ b m o d    p . m=f_p\cdot b\mod p. m=fpbmodp.
这里需要注意的是在得到 e e e 之后,直接进行 m o d    p \mod p modp 运算从而得到 m m m 这样是错误的。这是由于 r h rh rh 的系数有可能超出 q q q,故而 e e e r ⋅ h + m r\cdot h+m rh+m 差了一个 q q q 的倍数。同时也有可能导致 r h ≠ 0 m o d    p rh\neq 0 \mod p rh=0modp。但是乘了 f f f 之后就不一样了,首先 m o d    q \mod q modq 之后得到的是 p r g + f ⋅ m prg+f\cdot m prg+fm。我们已经假设了 r r r 的系数较小, f , g f,g f,g 的系数落在 { − 1 , 0 , 1 } \{-1,0,1\} {1,0,1} 中,并且 q > > p q>>p q>>p。这使得 p r g + f ⋅ m prg+f\cdot m prg+fm 的系数都不会超过 ∣ q ∣ |q| q 故而可以将其作为整数。此时 m o d    p \mod p modp 自然得到
f ⋅ m m o d    p . f\cdot m\mod p. fmmodp.

三、 攻击

这里主要解释针对密钥 f f f 的攻击。我们已经知道公钥 h = p ⋅ f q ⋅ g m o d    q h=p\cdot f_q\cdot g\mod q h=pfqgmodq. 可以得到 h ˉ = f q ⋅ g m o d    q \bar{h}=f_q\cdot g\mod q hˉ=fqgmodq, 故而 g = f ⋅ h ˉ m o d    q g=f\cdot \bar{h}\mod q g=fhˉmodq. 以下举 N = 2 N=2 N=2 的例子。假设 h ˉ = h 0 + h 1 x , f = f 0 + f 1 x \bar{h}=h_0+h_1x, f=f_0+f_1x hˉ=h0+h1x,f=f0+f1x 以及 g = g 0 + g 1 x g=g_0+g_1x g=g0+g1x. 设矩阵
A = ( α 0 h 0 h 1 0 α h 1 h 0 0 0 q 0 0 0 0 q ) . A= \left(\begin{array}{ccc} \alpha & 0&h_0 &h_1 \\ 0&\alpha&h_1 &h_0\\ 0 &0&q&0\\ 0 & 0&0&q \\ \end{array}\right). A= α0000α00h0h1q0h1h00q .假设 L \mathcal{L} L 是由矩阵A的行向量生成的格。由于 g = f ⋅ h ˉ m o d    q g=f\cdot \bar{h}\mod q g=fhˉmodq, τ = ( α f , g ) = ( α f 0 , α f 1 , g 0 , g 1 ) \tau=(\alpha f,g)=(\alpha f_0,\alpha f_1,g_0,g_1) τ=(αf,g)=(αf0,αf1,g0,g1) 包含在格 L \mathcal{L} L 中。其中 α \alpha α 是一个较小的参数。由于最开始假定的 f , g f,g f,g 的系数都很小,故而我们的目的是寻找 L \mathcal{L} L 中长度最短的向量 τ \tau τ。这样我们就能知道 f , g f,g f,g 了。

一般取 α = ∣ g ∣ 2 ∣ f ∣ 2 \alpha=\frac{|g|_2}{|f|_2} α=f2g2。这里二范数 ∣ g ∣ 2 , ∣ f ∣ 2 |g|_2,|f|_2 g2,f2 是公开已知的数。原因如下:
根据Gaussian heuristic 知道,一个随机的行列式为 D D D n n n 维矩阵,其最短向量的大小落在
D 1 / n n 2 π e , D 1 / n n π e D^{1/n}\sqrt{\frac{n}{2\pi e}} ,\quad D^{1/n}\sqrt{\frac{n}{\pi e}} D1/n2πen ,D1/nπen 之间。在我们这个情况下行列式为 q N α N q^N\alpha^N qNαN (A取一般形式下的矩阵) 矩阵大小为 2 N 2N 2N 阶的。故而最短向量应当大于
s = N α q π e . s=\sqrt{\frac{N\alpha q}{\pi e}}. s=πeNαq . α \alpha α 的选取原则是期望 s / ∣ τ ∣ 2 s/|\tau|_2 s/∣τ2 尽可能小。此时
s ∣ τ ∣ 2 = ( α ∣ f ∣ 2 2 + α − 1 ∣ g ∣ 2 2 ) − 1 . \frac{s}{|\tau|_2}=(\alpha|f|_2^2+\alpha^{-1}|g|_2^2)^{-1}. τ2s=(αf22+α1g22)1. α = ∣ g ∣ 2 ∣ f ∣ 2 \alpha=\frac{|g|_2}{|f|_2} α=f2g2 取得极值。

四、总结

待续

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值