提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
这里简单介绍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,g∈Z[X]/XN−1 使得
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
f⋅fq≡1modq以及
f
⋅
f
p
≡
1
m
o
d
p
.
f\cdot f_p\equiv 1\mod p.
f⋅fp≡1modp.实际上以上两个等式要求了
f
f
f在
Z
q
[
X
]
/
X
N
−
1
\mathbb{Z}_q[X]/X^N-1
Zq[X]/XN−1 以及
Z
p
[
X
]
/
X
N
−
1
\mathbb{Z}_p[X]/X^N-1
Zp[X]/XN−1 中是可逆的,这里
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=p⋅fq⋅gmodq此时将
(
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]/XN−1中的一个多项式
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]/XN−1中的多项式
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=r⋅h+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=f⋅e=f⋅(rpfqg+m)≡prg+f⋅mmodq最后一个等式成立是由于
f
⋅
f
q
≡
1
m
o
d
q
f\cdot f_q\equiv 1\mod q
f⋅fq≡1modq. 将
p
r
g
+
f
⋅
m
prg+f\cdot m
prg+f⋅m 记作
b
b
b.换言之,我们有
b
≡
a
m
o
d
q
.
b\equiv a\mod q.
b≡amodq. 接下来,我们进行
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
b≡f⋅mmodp此时
m
=
f
p
⋅
b
m
o
d
p
.
m=f_p\cdot b\mod p.
m=fp⋅bmodp.
这里需要注意的是在得到
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
r⋅h+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+f⋅m。我们已经假设了
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+f⋅m 的系数都不会超过
∣
q
∣
|q|
∣q∣ 故而可以将其作为整数。此时
m
o
d
p
\mod p
modp 自然得到
f
⋅
m
m
o
d
p
.
f\cdot m\mod p.
f⋅mmodp.
三、 攻击
这里主要解释针对密钥
f
f
f 的攻击。我们已经知道公钥
h
=
p
⋅
f
q
⋅
g
m
o
d
q
h=p\cdot f_q\cdot g\mod q
h=p⋅fq⋅gmodq. 可以得到
h
ˉ
=
f
q
⋅
g
m
o
d
q
\bar{h}=f_q\cdot g\mod q
hˉ=fq⋅gmodq, 故而
g
=
f
⋅
h
ˉ
m
o
d
q
g=f\cdot \bar{h}\mod q
g=f⋅hˉ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=f⋅hˉ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}
α=∣f∣2∣g∣2。这里二范数
∣
g
∣
2
,
∣
f
∣
2
|g|_2,|f|_2
∣g∣2,∣f∣2 是公开已知的数。原因如下:
根据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=(α∣f∣22+α−1∣g∣22)−1. 当
α
=
∣
g
∣
2
∣
f
∣
2
\alpha=\frac{|g|_2}{|f|_2}
α=∣f∣2∣g∣2 取得极值。
四、总结
待续