7.1、一致公钥密码系统
一、引言
在本节中,我们将描述一个真实公钥密码系统的玩具模型。这个模型与维数为 2 的格有着意想不到的联系,由于维数太低,因此存在致命漏洞。不过,它也是一个具有启发性的例子,说明了即使基础难题似乎与格无关,格也可能出现在密码分析中。此外,它还为第 7.10 节将要介绍的 NTRU 公钥密码系统提供了最低维度的介绍。
二、一个简要的加密模型介绍
下表概述了同余加密系统。
2.1、系统设置
Alice首先选择一个大的正整数 q(公共参数),以及另外两个秘密正整数 f 和 g(满足以下条件):
f
<
q
/
2
,
q
/
4
<
g
<
q
/
2
,
a
n
d
g
c
d
(
f
,
q
g
)
=
1
f<\sqrt{q/2}, \qquad \sqrt{q/4}<g<\sqrt{q/2}, \qquad and \qquad gcd(f,qg)=1
f<q/2,q/4<g<q/2,andgcd(f,qg)=1
然后,她计算出以下结果:
h
≡
f
−
1
g
(
m
o
d
q
)
其中
0
<
h
<
q
h\equiv f^{-1}g\pmod{q} \qquad 其中0<h<q
h≡f−1g(modq)其中0<h<q
请注意,f 和 g 与 q 相比很小,因为它们是
o
(
q
)
o(\sqrt{q})
o(q) ,而 h 一般是
o
(
q
)
o(q)
o(q) ,要大得多。Alice的私钥是一对小整数 f 和 g,她的公钥是大整数 h。
2.2、加密
为了发送消息,Bob选择一个明文m和一个随机整数r(一个随机元素),m和r需要满足一下不等式条件:
0
<
m
<
q
/
4
a
n
d
0
<
r
<
q
/
2
0<m<\sqrt{q/4} \qquad and \qquad 0<r<\sqrt{q/2}
0<m<q/4and0<r<q/2
他计算密文:
e
≡
r
h
+
m
(
m
o
d
q
)
e \equiv rh+m \pmod{q}
e≡rh+m(modq),其中
0
<
e
<
q
0<e<q
0<e<q。然后发送给Alice。
2.3、解密
Alice通过第一次计算解密消息:
a
≡
f
e
(
m
o
d
q
)
a \equiv fe \pmod{q}
a≡fe(modq),其中
0
<
a
<
q
0<a<q
0<a<q。然后计算:
b
≡
f
−
1
a
(
m
o
d
q
)
其中
0
<
b
<
q
(
7.1
)
b \equiv f^{-1}a \pmod{q} \qquad 其中 \qquad 0<b<q \qquad (7.1)
b≡f−1a(modq)其中0<b<q(7.1)
注意(7.1)中的
f
−
1
f^{-1}
f−1是f模g的逆。
2.4、正确性验证
现在我们验证b = m,这将表明Alice已经恢复了Bob的明文。我们首先观察到量a满足一下等式:
a
≡
f
e
≡
f
(
r
h
+
m
)
≡
f
r
f
−
1
g
+
f
m
≡
r
g
+
f
m
(
m
o
d
q
)
a \equiv fe \equiv f(rh+m) \equiv frf^{-1}g+fm \equiv rg+fm \pmod{q}
a≡fe≡f(rh+m)≡frf−1g+fm≡rg+fm(modq)
f, g, r,m的大小限制意味着整数rg +fm很小,具体如下:
r
g
+
f
m
<
q
2
q
2
+
q
2
q
4
<
q
rg+fm<\sqrt{\frac{q}{2}}\sqrt{\frac{q}{2}}+\sqrt{\frac{q}{2}}\sqrt{\frac{q}{4}}<q
rg+fm<2q2q+2q4q<q
因此,当Alice以 0 <a<q 计算
a
≡
f
e
(
m
o
d
q
)
a \equiv fe \pmod{q}
a≡fe(modq)时,她会得到精确的值:
a
=
r
g
+
f
m
.
(
7.2
)
a=rg+fm. \qquad (7.2)
a=rg+fm.(7.2)
关键在于:公式 (7.2) 是整数相等,而不仅仅是 q 的同余。最后Alice计算:
b
≡
f
−
1
a
≡
f
−
1
(
r
g
+
f
m
)
≡
f
−
1
f
m
≡
m
(
m
o
d
g
)
其中
0
<
b
<
g
b \equiv f^{-1}a \equiv f^{-1}(rg+fm) \equiv f^{-1}fm \equiv m \pmod{g} \qquad 其中 0<b<g
b≡f−1a≡f−1(rg+fm)≡f−1fm≡m(modg)其中0<b<g
由于
m
<
q
/
4
<
g
m<\sqrt{q/4}<g
m<q/4<g,因此 b = m。
三、模型攻击
Eva如何攻击这个系统呢?她可以尝试对所有可能的私钥或所有可能的明文进行暴力搜索,但这需要 O(q) 次操作。让我们更详细地考虑一下Eva试图从已知公钥(q,h)中找到私钥(f,g)的任务。不难发现,如果Eva能找到满足以下条件的任意一对正整数 F 和 G:
F
h
≡
G
(
m
o
d
q
)
a
n
d
F
=
o
(
q
)
a
n
d
G
=
o
(
q
)
(
7.3
)
Fh \equiv G \pmod{q} \qquad and \qquad F=o(\sqrt{q}) \qquad and \qquad G=o(\sqrt{q}) \qquad (7.3)
Fh≡G(modq)andF=o(q)andG=o(q)(7.3)
那么 (F,G) 很可能就是解密密钥。将同余式 (7.3) 改写为 Fh = G + qR,我们可以将Eva的任务重新表述为寻找一对相对较小的整数 (F,G),其性质为:
因此,Eva知道两个向量 v1 =(1,h) 和 v2 =(0,q),每个向量的长度都是 O(q),她希望找到一个线性组合
w
=
a
1
v
1
+
a
2
v
2
w=a_{1}v_{1}+a_{2}v_{2}
w=a1v1+a2v2,使得 w 的长度为
o
(
q
)
o(\sqrt{q})
o(q),但要记住系数 a1 和 a2 必须是整数。因此,Eva需要在向量集合中找到一个非零的短向量:
L
=
a
1
v
1
+
a
2
v
2
:
a
1
,
a
2
∈
Z
L={a_{1}v_{1}+a_{2}v_{2}:a_{1},a_{2} \in Z}
L=a1v1+a2v2:a1,a2∈Z
这个集合 L 就是二维格的一个例子。请注意,它看起来有点像以
{
v
1
,
v
2
}
\{v_{1}, v_{2}\}
{v1,v2} 为基础的二维向量空间,只是我们只允许取
v
1
v_{1}
v1 和
v
2
v_{2}
v2 的整数线性组合。
对Bob和Alice来说,不幸的是,有一种极其快速的方法可以在二维格中找到短向量。第 7.13.1 节介绍了这种由高斯提出的方法,第 7.14.1 节则用它来破解同余的密码系统。
四、我的一些想法
对于上述模型的解密步骤:
1
)
a
≡
f
e
(
m
o
d
q
)
;
2
)
b
≡
f
−
1
a
(
m
o
d
q
)
1)a \equiv fe \pmod{q}; \qquad 2)b \equiv f^{-1}a \pmod{q}
1)a≡fe(modq);2)b≡f−1a(modq)
不能等同于
b
≡
e
(
m
o
d
g
)
b \equiv e \pmod{g}
b≡e(modg),因为在转换模的时候,经过分析:
a
≡
r
g
+
f
m
(
m
o
d
q
)
=
r
g
+
f
m
a\equiv rg+fm \pmod{q}=rg+fm
a≡rg+fm(modq)=rg+fm,不会模运算,所以a是一个精确的值,而
e
≡
e
f
−
1
g
+
m
(
m
o
d
q
)
e \equiv ef^{-1}g+m \pmod{q}
e≡ef−1g+m(modq)则会根据
f
−
1
f^{-1}
f−1的范围,可能发生模运算,从而在后续
b
≡
e
(
m
o
d
g
)
b \equiv e \pmod{g}
b≡e(modg)转换模的时候,精度不准产生错误结果。书上的例子举例:
Alice 选择 q = 122430513841,f = 231231, 和 g = 195698。此处 f ≈ 0.66 q f\approx 0.66\sqrt{q} f≈0.66q和 g ≈ 0.56 q g\approx 0.56\sqrt{q} g≈0.56q,符合范围。Alice计算 f − 1 f^{-1} f−1 ≡ 49194372303 (mod q), h≡ f − 1 f^{-1} f−1 g ≡ 39245579300 (mod q)。 Alice的公钥是密钥对: (q, h) = (122430513841, 39245579300).
Bob决定使用随机值r = 101010向Alice发送明文m = 123456。他使用Alice的公钥来计算密文: e ≡ rh +m ≡ 18357558717 (mod q),
为了解密e,Alice首先使用她的秘密值f来计算a ≡ fe ≡ 48314309316 (mod q). (注意a = 48314309316 < 122430513841 = q。)然后她使用 f − 1 f^{-1} f−1 ≡193495 (mod g)来计算 f − 1 a f^{-1}a f−1a ≡ 193495 · 48314309316 ≡ 123456 (mod g),
如果使用b≡e(mod g),则计算结果为b≡e(mod g) ≡ 18357558717 (mod 195698)=107827,错误值。
五、我的一些疑问
模型破解攻击时,为什么会想到公式: Fh≡G(mod q),以及将公式转变为:F(1,h)-R(0,q)=(F,G)