【现代密码学】笔记7.1-7.3、10.4 RSA问题与加密 -- 数论与密码学困难性假设(素数、大整数分解、循环群)《introduction to modern cryphtography》

【现代密码学】笔记7.1-7.3、10.4 RSA问题与加密 -- 数论与密码学困难性假设(素数、大整数分解、循环群)《introduction to modern cryphtography》_第1张图片

【现代密码学】笔记7.1-7.3、10.4 RSA问题与加密 -- 数论与密码学困难性假设(素数、大整数分解、循环群)《introduction to modern cryphtography》

  • 写在最前面
  • 8.2 RSA问题与加密
    • RSA问题
      • RSA问题和分解 N N N
      • RSA问题
      • 整数分解问题
      • 它们之间的关系
      • 安全性影响
    • 针对“书本上RSA”加密的攻击
      • 质数与模算术
    • 实践中的RSA加密
  • 8.3 DH问题与加密

写在最前面

主要在 哈工大密码学课程 张宇老师课件 的基础上学习记录笔记。

内容补充:骆婷老师的PPT
《introduction to modern cryphtography》–Jonathan Katz, Yehuda Lindell(现代密码学——原理与协议)中相关章节
密码学复习笔记 这个博主好有意思

初步笔记,如有错误请指正

快速补充一些密码相关的背景知识


8.2 RSA问题与加密

  1. 本节学习第一个也是目前应用最广泛的公钥加密方案RSA。

  2. 目录:RSA问题,针对“书本上RSA”加密的攻击,实践中的RSA加密。

RSA问题

  1. RSA概览

    • RSA: Ron Rivest, Adi Shamir and Leonard Adleman, 三位作者于1977年发表RSA加密方案。
    • RSA问题: 给定 N = p q N = pq N=pq (两个不同的大质数的乘积) 并且 y ∈ Z N ∗ y \in \mathbb{Z}^*_N yZN,计算 y − e y^{-e} ye,即 y y y N N N下的 e e e次方根。
    • 开放问题:RSA问题比分解 N 更容易吗?
    • RSA相关标准: PKCS#1 (RFC3447/8017), ANSI X9.31, IEEE 1363
    • 密钥长度:1,024 到 4,096 比特
    • 已知最强的公开密码学分析:768比特密钥已经被破解
    • RSA挑战赛:破解 RSA-2048 来赢得 $200,000 USD
    • 密钥长度比较 :3072比特RSA密钥安全强度相当于128比特对称密钥

RSA问题和分解 N N N

RSA问题和分解整数 (N) 的问题,都与RSA加密算法的安全性紧密相关。

RSA问题

RSA问题可以表述为:给定一个RSA公钥 ( N , e ) (N, e) (N,e) 和一个密文 c c c,找到一个明文 m m m 使得下面的等式成立:
m e ≡ c m o d    N m^e \equiv c \mod N mecmodN
这里, N N N 是一个大合数,通常是两个大素数 p p p q q q 的乘积, e e e 是公钥的一部分, m m m 是待求的明文。

整数分解问题

整数分解问题涉及,找出一个给定合数 N N N 的素数因子。在RSA加密的背景下, N = p q N = pq N=pq,其中 p p p q q q 是两个大素数。

它们之间的关系

  • 如果能分解 N N N:如果有人能有效地分解 N N N,即找到 p p p q q q,那么他们可以计算出RSA的私钥。一旦有了私钥,就可以解决RSA问题,即解密任何用相应公钥加密的信息。
  • 如果不能分解 N N N:即使不能分解 N N N,目前还不清楚是否存在其他方法可以解决RSA问题。换句话说,没有已知的方法可以在不分解 N N N 的情况下有效地解决RSA问题,但这并不意味着这样的方法不存在。

安全性影响

这个问题的不确定性是评估RSA加密算法安全性的一个关键因素。如果找到了一种比整数分解更有效的方法来解决RSA问题,那么RSA加密的安全性可能会受到严重影响。因此,密码学家和安全专家持续关注这个开放问题,并寻找可能的解决方案。同时,这也促进了对量子计算和其他潜在威胁对RSA算法影响的研究。

针对“书本上RSA”加密的攻击

  1. 书本上的RSA

    • 构造:
      • G e n \mathsf{Gen} Gen: 输入 1 n 1^n 1n 运行 G e n R S A ( 1 n ) \mathsf{GenRSA}(1^n) GenRSA(1n) 产生 N , e , d N,e,d N,e,d p k = ⟨ N , e ⟩ pk = \langle N,e \rangle pk=N,e s k = ⟨ N , d ⟩ sk = \langle N,d \rangle sk=N,d
      • E n c \mathsf{Enc} Enc: 输入 p k pk pk m ∈ Z N ∗ m \in \mathbb{Z}^*_N mZN,获得密文 c : = [ m e   m o d   N ] c:= [m^e \bmod N] c:=[memodN].
      • D e c \mathsf{Dec} Dec: 输入 s k sk sk m ∈ Z N ∗ m \in \mathbb{Z}^*_N mZN,获得明文 m : = [ c d   m o d   N ] m:= [c^d \bmod N] m:=[cdmodN].
    • 不安全性:由于“书本上的RSA”是确定性的,在我们已经提出的任何安全定义下都是不安全的。
    • 下面学习问题:如何产生 N , e , d N,e,d N,e,d? 什么是 Z N ∗ \mathbb{Z}^*_N ZN? 如何计算 m e   m o d   N m^e \bmod N memodN? 这个难题是TDP? 为什么很难?
    • 参考教材:《A Computational Introduction to Number Theory and Algebra》(Version 2) Victor Shoup。

质数与模算术

  1. 质数与模算术

    • 整数集合 Z \mathbb{Z} Z, a , b , c ∈ Z a,b,c \in \mathbb{Z} a,b,cZ
    • a a a 整除 b b b: a ∣ b a \mid b ab 如果 ∃ c , a c = b \exists c, ac=b c,ac=b (否则 a ∤ b a \nmid b ab). b b b a a a 的倍数。如果 a ∉ { 1 , b } a \notin \{1,b\} a/{1,b},那么 a a a b b b 的因子。
    • p > 1 p > 1 p>1 是质数(素数),如果其没有因子;否则,是合数。
    • ∀ a , b \forall a,b a,b, ∃ \exists q q q, 余数 r r r: a = q b + r a=qb+r a=qb+r, 且 0 ≤ r < b 0\le r < b 0r<b
    • 最大公因子 gcd ⁡ ( a , b ) \gcd(a,b) gcd(a,b) 是最大的整数 c c c 使得 c ∣ a c\mid a ca c ∣ b c\mid b cb gcd ⁡ ( 0 , b ) = b \gcd(0,b)=b gcd(0,b)=b, gcd ⁡ ( 0 , 0 ) \gcd(0,0) gcd(0,0)未定义。
    • a a a b b b 是互质,如果 gcd ⁡ ( a , b ) = 1 \gcd(a,b)=1 gcd(a,b)=1
    • 余数 r = [ a   m o d   N ] = a − b ⌊ a / b ⌋ r= [a\bmod N] = a - b\lfloor a/b\rfloor r=[amodN]=aba/b 并且 r < N rr<N. N N N 称为模。
    • Z N = { 0 , 1 , … , N − 1 } = { a   m o d   N ∣ a ∈ Z } \mathbb{Z}_N = \{0,1,\dots,N-1\} = \{a \bmod N | a \in \mathbb{Z}\} ZN={0,1,,N1}={amodNaZ}.
    • a a a 是模 N N N 下可逆的    ⟺    gcd ⁡ ( a , N ) = 1 \iff \gcd(a,N) = 1 gcd(a,N)=1。如果 a b ≡ 1 ( m o d N ) ab \equiv 1 \pmod N ab1(modN),那么 b = a − 1 b=a^{-1} b=a1是模 N N N a a a 的乘法逆。
  2. 模算术例子

    • 欧几里德算法(辗转相除法): gcd ⁡ ( a , b ) = gcd ⁡ ( b , [ a   m o d   b ] ) . \gcd(a,b) = \gcd(b, [a \bmod b]). gcd(a,b)=gcd(b,[amodb]).

      • gcd ⁡ ( 12 , 27 ) \gcd(12, 27) gcd(12,27)
    • 扩展欧几里德算法:给定 a , N a,N a,N,寻找 X , Y X,Y X,Y 使得 X a + Y N = gcd ⁡ ( a , N ) Xa+YN = \gcd(a,N) Xa+YN=gcd(a,N) (贝祖定理)

      • 例子,求11 (mod 17)下的逆元, a = 11 a = 11 a=11 N = 17 N = 17 N=17 X a + Y N = r Xa + YN = r Xa+YN=r

                       r     X    Y  m
                       17    0    1
                       11    1    0  1
                        6   -1    1  1
                        5    2   -1  1
                        1   -3    2   
        
    • 求余然后相加/乘

      • 计算 193028 ⋅ 190301   m o d   100 193028 \cdot 190301 \bmod 100 193028190301mod100
    • 消去律:如果 gcd ⁡ ( a , N ) = 1 \gcd(a,N)=1 gcd(a,N)=1 a b ≡ a c ( m o d N ) ab \equiv ac \pmod N abac(modN),那么 b ≡ c ( m o d N ) b \equiv c \pmod N bc(modN).

      • a = 3 , c = 10 , b = 2 , N = 24 a=3, c=10, b=2, N=24 a=3,c=10,b=2,N=24
  3. Z N ∗ \mathbb{Z}_N^* ZN

    • Z N ∗ = def { a ∈ { 1 , … , N − 1 } ∣ gcd ⁡ ( a , N ) = 1 } \mathbb{Z}_N^* \overset{\text{def}}{=} \{a \in \{1,\dotsc,N-1 \} | \gcd(a,N) = 1\} ZN=def{a{1,,N1}gcd(a,N)=1}
    • 群是一个集合 G \mathbb{G} G 带有一个二元操作 ∘ \circ :
      • 闭包: ∀ g , h ∈ G \forall g,h \in \mathbb{G} g,hG, g ∘ h ∈ G g \circ h \in \mathbb{G} ghG.
      • 单位元: ∃ \exists 单位元 e ∈ G e\in \mathbb{G} eG 使得 ∀ g ∈ G , e ∘ g = g = g ∘ e \forall g\in \mathbb{G}, e \circ g = g = g \circ e gG,eg=g=ge.
      • 逆元: ∀ g ∈ G \forall g \in G gG, ∃    h ∈ G \exists\; h \in \mathbb{G} hG 使得 g ∘ h = e = h ∘ g g \circ h =e = h \circ g gh=e=hg. h h h g g g 的逆元.
      • 结合律: ∀ g 1 , g 2 , g 3 ∈ G \forall g_1,g_2,g_3 \in \mathbb{G} g1,g2,g3G, ( g 1 ∘ g 2 ) ∘ g 3 = g 1 ∘ ( g 2 ∘ g 3 ) (g_1\circ g_2)\circ g_3 = g_1 \circ (g_2 \circ g_3) (g1g2)g3=g1(g2g3).
    • G \mathbb{G} G with ∘ \circ 是阿贝尔群,如果有交换律: ∀ g , h ∈ G , g ∘ h = h ∘ g \forall g,h \in \mathbb{G}, g\circ h = h\circ g g,hG,gh=hg.
    • 逆元的存在意味着消去律
    • G \mathbb{G} G 是有限群, ∣ G ∣ | \mathbb{G}| G 是群的阶。
    • 问题: Z N ∗ \mathbb{Z}_N^* ZN 是乘法下的群吗? Z N \mathbb{Z}_N ZN 在乘法下呢? Z 15 ∗ = ? \mathbb{Z}_{15}^* = ? Z15=? Z 13 ∗ = ? \mathbb{Z}_{13}^* = ? Z13=?
  4. 群指数

    • g m = def g ∘ g ∘ ⋯ ∘ g ⏟ m    times . g^m \overset{\text{def}}{=} \underbrace{g\circ g\circ \cdots \circ g}_{m\; \text{times}}. gm=defmtimes ggg.
    • 欧拉定理: G \mathbb{G} G 是有限群。那么, ∀ g ∈ G , g ∣ G ∣ = 1 \forall g \in \mathbb{G}, g^{|\mathbb{G}|}=1 gG,gG=1.
    • 注:课上证明,将群中每个元素与 g g g 相乘后连乘等于群中元素连乘。
    • 例子:计算 3 ∈ Z 7 ∗ 3 \in \mathbb{Z}_{7}^* 3Z7 的所有幂。
    • 费马小定理: ∀ g ∈ G \forall g \in \mathbb{G} gG and i i i, g i ≡ g [ i   m o d   ∣ G ∣ ] g^i \equiv g^{[i \bmod {|\mathbb{G}|}]} gig[imodG].
    • 注:这是欧拉定理的推论。
    • 例子:计算 3 78 ∈ Z 7 ∗ 3^{78} \in \mathbb{Z}_{7}^* 378Z7
  5. 算术算法

    • 加/减:线性时间 O ( n ) O(n) O(n).
    • 乘:最初 O ( n 2 ) O(n^2) O(n2)
      • Karatsuba (1960,当时23岁): O ( n log ⁡ 2 3 ) O(n^{\log_2 3}) O(nlog23) ( 2 b x 1 + x 0 ) × ( 2 b y 1 + y 0 ) (2^bx_1+x_0) \times (2^by_1+ y_0) (2bx1+x0)×(2by1+y0) 使用3个乘法。
      • 注:因为 x 1 ⋅ y 0 + x 0 ⋅ y 1 = ( x 1 + x 0 ) ⋅ ( y 1 + y 0 ) − x 1 ⋅ y 1 − x 0 ⋅ y 0 x_1 \cdot y_0 + x_0 \cdot y_1 = (x_1 + x_0) \cdot (y_1 + y_0) - x_1 \cdot y_1 - x_0 \cdot y_0 x1y0+x0y1=(x1+x0)(y1+y0)x1y1x0y0
      • 最佳渐进算法: O ( n log ⁡ n ) O(n\log n) O(nlogn)
    • 除/求余: O ( n 2 ) O(n^2) O(n2)
    • 指数: O ( n 3 ) O(n^3) O(n3),平方指数法,例如计算8次幂并不需要乘8次,而是计算4次幂的平方,而4次幂来自2次幂平方。
      • 输入 g ∈ G g \in G gG; 指数 x = [ x n x n − 1 … x 2 x 1 x 0 ] 2 x=[x_nx_{n-1}\dots x_2x_1x_0]_2 x=[xnxn1x2x1x0]2
      • 输出: g x g^x gx
      • y ← g ; z ← 1 y \gets g; z \gets 1 yg;z1
      • For i = 0 i = 0 i=0 to n n n
        • If ( x i = = 1 x_i == 1 xi==1){ z ← z × y z \gets z \times y zz×y}
        • y ← y 2 y \gets y^2 yy2
      • Return z z z
      • 这里举个例子,例如算 g 9 g^9 g9
  6. 欧拉的Phi函数

    • 欧拉phi函数: ϕ ( N ) = def ∣ Z N ∗ ∣ \phi(N) \overset{\text{def}}{=} |\mathbb{Z}_N^*| ϕ(N)=defZN. 注:整数乘法群的阶
    • 算法基本定理: N = ∏ i p i e i N = \prod_ip_i^{e_i} N=ipiei , { p i } \{p_i\} {pi} 是不同的质数, ϕ ( N ) = ∏ i p i e i − 1 ( p i − 1 ) \phi(N) = \prod_ip_i^{e_i-1}(p_i-1) ϕ(N)=ipiei1(pi1)
    • 例题: N = p q N=pq N=pq 其中 p , q p,q p,q 是不同质数。 ϕ ( N ) = ? \phi(N)=? ϕ(N)=? ϕ ( 12 ) = ? \phi(12)=? ϕ(12)=? ϕ ( 30 ) = ? \phi(30)=? ϕ(30)=?
    • 欧拉定理与费马小定理: a ∈ Z N ∗ a \in \mathbb{Z}_N^* aZN. a ϕ ( N ) ≡ 1 ( m o d N ) a^{\phi (N)} \equiv 1 \pmod N aϕ(N)1(modN). 注:前面证明过
    • 如果 p p p 是质数并且 a ∈ { 1 , … , p − 1 } a \in \{1,\dotsc,p-1\} a{1,,p1},那么 a p − 1 ≡ 1 ( m o d p ) a^{p-1} \equiv 1 \pmod p ap11(modp). 注:因为质数 p p p乘法群的阶为 p − 1 p-1 p1
    • 例题: 3 43   m o d   49 = ? 3^{43} \bmod 49 = ? 343mod49=?
  7. 基于群指数函数的排列

    • 指数函数 f e    : f_e\;: fe: Z N ∗ → Z N ∗ \mathbb{Z}^*_N \to \mathbb{Z}^*_N ZNZN by f e ( x ) = [ x e   m o d   N ] f_e(x) =[x^e \bmod N] fe(x)=[xemodN].
    • 对指数函数求逆: y y y e e e 次方根: x e ≡ y x^e \equiv y xey, x ≡ y 1 / e x \equiv y^{1/e} xy1/e.
    • 推论:如果 gcd ⁡ ( e , ϕ ( N ) ) = 1 \gcd(e,\phi(N))=1 gcd(e,ϕ(N))=1,那么 f e f_e fe 是排列。
    • 证明:令 d = [ e − 1   m o d   ϕ ( N ) ] d = [e^{-1} \bmod \phi(N)] d=[e1modϕ(N)],那么 f d f_d fd f e f_e fe 的逆函数。 y ≡ x e ; f d ( y ) ≡ y d ≡ x e d ≡ x y \equiv x^{e};\quad f_{d}(y) \equiv y^d \equiv x^{ed} \equiv x yxe;fd(y)ydxedx.
    • 例题:在 Z 10 ∗ \mathbb{Z}^*_{10} Z10 中, e = 3 ,   d = ? ,   f e ( 3 ) = ? ,   f d ( f e ( 3 ) ) = ? ,   9 1 3 = ? e = 3,\ d = ?,\ f_{e}(3) = ?,\ f_{d}(f_{e}(3)) = ?,\ 9^{\frac{1}{3}} = ? e=3, d=?, fe(3)=?, fd(fe(3))=?, 931=?
    • 问题:如果对于某些特别的 N N N无法计算 ϕ ( N ) \phi(N) ϕ(N) ,那么会如何?如果不能分解 N N N 呢?
  8. 整数分解是难的

    • 分解 N = p q N=pq N=pq. p , q p,q p,q 长度相同为 n n n.
    • 尝试分解: O ( N ⋅ p o l y l o g ( N ) ) \mathcal{O}(\sqrt{N}\cdot \mathsf{polylog}(N)) O(N polylog(N)).
    • Pollard’s p − 1 p-1 p1 方法: 当 p − 1 p-1 p1 具有小质数因子时有效。
    • Pollard’s rho 方法: O ( N 1 / 4 ⋅ p o l y l o g ( N ) ) \mathcal{O}(N^{1/4}\cdot \mathsf{polylog}(N)) O(N1/4polylog(N)).
    • 二次筛法 [Carl Pomerance]: 亚指数时间 O ( exp ⁡ ( n ⋅ log ⁡ n ) ) \mathcal{O}(\exp(\sqrt{n\cdot \log n})) O(exp(nlogn )).
    • 已知最优算法为通用数域筛法 [Pollard]: O ( exp ⁡ ( n 1 / 3 ⋅ ( log ⁡ n ) 2 / 3 ) ) \mathcal{O}(\exp(n^{1/3}\cdot(\log n)^{2/3})) O(exp(n1/3(logn)2/3)).
  9. RSA问题是难的

    • 思路:分解难    ⟹    \implies 对于 N = p q N=pq N=pq, 找到 p , q p,q p,q    ⟹    \implies 计算 ϕ ( N ) = ( p − 1 ) ( q − 1 ) \phi(N)=(p-1)(q-1) ϕ(N)=(p1)(q1)

         ⟹    \implies 无法模 ϕ ( N ) \phi(N) ϕ(N) 计算

         ⟹    \implies 计算 e − 1   m o d   ϕ ( N ) e^{-1} \bmod \phi(N) e1modϕ(N)

      这里存在一段空白

         ⟹    \implies RSA 问题难:给定 y ∈ Z N ∗ y \in \mathbb{Z}^*_N yZN, 计算 y − e y^{-e} ye modulo N N N.

    • 开放问题:RSA 比分解容易?

  10. 产生随机质数

    • 为了构造RSA问题,首先需要一个产生随机质数的方法:随机选择的一个数,测试其是否为质数。
    • 该方法的有效性需要回答两个问题:(1) 随机选择的数是质数的概率多大?(2) 是否能够有效地测试其是否为质数?
    • 对于问题1, ∃ \exists 常数 c c c 使得, ∀ n > 1 \forall n>1 n>1, 一个随机选择的 n n n 比特数为质数的概率至少 c / n c/n c/n
    • 对于问题2,如果 N N N 是质数,那么Miller-Rabin质性测试始终输出质数。如果 N N N 是合数,那么算法输出质数的概率至多 2 − t 2^{-t} 2t
  11. 产生RSA问题

    • G e n M o d u l u s ( 1 n ) \mathsf{GenModulus}(1^n) GenModulus(1n) 为一个概率多项式时间算法,输入 1 n 1^n 1n, 输出 ( N , p , q ) (N,p,q) (N,p,q) ,其中 N = p q N=pq N=pq, 并且 p , q p,q p,q n n n 比特质数,除了有可忽略的概率失败。
    • 产生RSA问题算法简述:
      1. G e n M o d u l u s ( 1 n ) \mathsf{GenModulus}(1^n) GenModulus(1n) 产生 ( N , p , q ) (N,p,q) (N,p,q)
      2. 计算 ϕ ( N ) : = ( p − 1 ) ( q − 1 ) \phi(N) := (p-1)(q-1) ϕ(N):=(p1)(q1)
      3. 寻找一个 e e e,使得 gcd ⁡ ( e , ϕ ( N ) ) = 1 \gcd(e,\phi(N))=1 gcd(e,ϕ(N))=1
      4. 计算 d : = [ e − 1   m o d   ϕ ( N ) ] d := [e^{-1} \bmod \phi(N)] d:=[e1modϕ(N)]
      5. 返回 N , e , d N,e,d N,e,d
  12. RSA假设

    • RSA实验 R S A i n v A , G e n R S A ( n ) \mathsf{RSAinv}_{\mathcal{A},\mathsf{GenRSA}}(n) RSAinvA,GenRSA(n):
      1. 运行 G e n R S A ( 1 n ) \mathsf{GenRSA}(1^n) GenRSA(1n) 来产生 ( N , e , d ) (N,e,d) (N,e,d)
      2. 选择 y ← Z N ∗ y \gets \mathbb{Z}^*_N yZN
      3. 敌手 A \mathcal{A} A 给定 N , e , y N,e,y N,e,y, 并输出 x ∈ Z N ∗ x \in \mathbb{Z}^*_N xZN.
      4. R S A i n v A , G e n R S A ( n ) = 1 \mathsf{RSAinv}_{\mathcal{A},\mathsf{GenRSA}}(n)=1 RSAinvA,GenRSA(n)=1 ,实验成功,如果 x e ≡ y ( m o d N ) x^e \equiv y \pmod N xey(modN),否则实验失败 0 。
    • 定义:RSA问题相对于 G e n R S A \mathsf{GenRSA} GenRSA是难的,如果 ∀ \forall PPT算法 A \mathcal{A} A, ∃ \exists n e g l \mathsf{negl} negl 使得, Pr ⁡ [ R S A i n v A , G e n R S A ( n ) = 1 ] ≤ n e g l ( n ) . \Pr[\mathsf{RSAinv}_{\mathcal{A},\mathsf{GenRSA}}(n) = 1] \le \mathsf{negl}(n). Pr[RSAinvA,GenRSA(n)=1]negl(n).
  13. 构造陷门排列

    • G e n R S A \mathsf{GenRSA} GenRSA 来定义一个排列族:
      • G e n \mathsf{Gen} Gen: 输入 1 n 1^n 1n, 运行 G e n R S A ( 1 n ) \mathsf{GenRSA}(1^n) GenRSA(1n) 来产生 ( N , e , d ) (N,e,d) (N,e,d) 并且 I = ⟨ N , e ⟩ , t d = d I=\langle N,e \rangle, \mathsf{td}=d I=N,e,td=d, 令 D I = D t d = Z N ∗ \mathcal{D}_I = \mathcal{D}_{\mathsf{td}} = \mathbb{Z}^*_N DI=Dtd=ZN.
      • S a m p \mathsf{Samp} Samp: 输入 I I I, 挑选一个随机元素 x x x of Z N ∗ \mathbb{Z}^*_N ZN.
      • f I ( x ) = [ x e   m o d   N ] f_{I}(x) = [ x^e \bmod N] fI(x)=[xemodN].
      • 确定性求逆算法 I n v t d ( y ) = [ y d   m o d   N ] \mathsf{Inv}_{\mathsf{td}}(y) = [ y^d \bmod N] Invtd(y)=[ydmodN].
    • 将RSA问题规约到陷门排列求逆问题。
  14. 回顾“书本上的RSA”

  15. 攻击带有小 e e e的“书本上的RSA”

    • e e e 和 小 m m m 令模算术失去作用,不再是难题。
      • 如果 e = 3 e=3 e=3 并且 m < N 1 / 3 m < N^{1/3} m<N1/3,那么 c = m 3 c = m^3 c=m3 并且 m = m= m=
      • 在混合加密中,1024比特 RSA 与 128比特 AES。
    • 当小 e e e 被使用时通用攻击:
      • e = 3 e=3 e=3, 同一个消息 m m m 被发送给 3 个不同的接收者。
      • c 1 = [ m 3   m o d   N 1 ] c_1= [ m^3 \bmod N_1] c1=[m3modN1], c 2 = [ m 3   m o d   N 2 ] c_2= [ m^3 \bmod N_2] c2=[m3modN2], c 3 = [ m 3   m o d   N 3 ] c_3= [ m^3 \bmod N_3] c3=[m3modN3].
      • N 1 , N 2 , N 3 N_1,N_2,N_3 N1,N2,N3 互质, 并且 N ∗ = N 1 N 2 N 3 N^*=N_1N_2N_3 N=N1N2N3,使用中国剩余定理可知, ∃ \exists 唯一的 c ^ < N ∗ \hat{c} < N^* c^<N:
      • c ^ ≡ c 1 ( m o d N 1 ) \hat{c} \equiv c_1 \pmod{N_1} c^c1(modN1), c ^ ≡ c 2 ( m o d N 2 ) \hat{c} \equiv c_2 \pmod{N_2} c^c2(modN2), c ^ ≡ c 3 ( m o d N 3 ) \hat{c} \equiv c_3 \pmod{N_3} c^c3(modN3).
      • c ^ ≡ m 3 ( m o d N ∗ ) \hat{c} \equiv m^3 \pmod{N^*} c^m3(modN). 由于 m 3 < N ∗ m^3 < N^* m3<N, m = c ^ 1 / 3 m = \hat{c}^{1/3} m=c^1/3.
  16. 对恢复明文的二次改进

    • 如果 1 ≤ m < L = 2 ℓ 1 \le m < \mathcal{L} = 2^{\ell} 1m<L=2, 存在一个算法可以在 L \sqrt{\mathcal{L}} L 时间恢复 m m m
    • 思路:$ c \equiv m^e = (r\cdot s)^e = r^e\cdot s^e \pmod N $
    • 算法:
      • 输入:公钥 ⟨ N , e ⟩ \langle N,e \rangle N,e; 密文 c c c; 参数 ℓ \ell
      • 输出: m < 2 ℓ m < 2^{\ell} m<2 使得 m e ≡ c ( m o d N ) m^e \equiv c \pmod N mec(modN)
      • T : = 2 α ℓ T := 2^{\alpha \ell} T:=2α // 1 2 < constant    α < 1 \frac{1}{2} < \text{constant}\; \alpha <1 21<constantα<1
      • For{ r = 1 r=1 r=1 to T T T} { x r : = [ c / r e   m o d   N ] x_r := [c/r^e \bmod N] xr:=[c/remodN]}
      • sort pairs { ( r , x r ) } r = 1 T \{ (r,x_r)\}^T_{r=1} {(r,xr)}r=1T by x r x_r xr
      • For s = 1 s=1 s=1 to T T T
        • If [ s e   m o d   N ] = ? x r [s^e \bmod N] \overset{?}{=} x_r [semodN]=?xr for some r r r
          • Return [ r ⋅ s   m o d   N ] [r\cdot s \bmod N] [rsmodN]
      • Return fail
  17. 共模攻击

    • 共模攻击使用相同的模数 N N N.
    • 情况1:多个用户带有自己的密钥。每个用户可以以自己的 e , d e,d e,d 计算 ϕ ( N ) \phi(N) ϕ(N) ,然后找到其他人的 d d d.
    • 情况2:用两个公钥为同一个消息加密。
      • 假设 gcd ⁡ ( e 1 , e 2 ) = 1 \gcd(e_1,e_2)=1 gcd(e1,e2)=1, c 1 ≡ m e 1 c_1 \equiv m^{e_1} c1me1 and c 2 ≡ m e 2 ( m o d N ) c_2 \equiv m^{e_2} \pmod N c2me2(modN). ∃ X , Y \exists X,Y X,Y 使得 X e 1 + Y e 2 = 1 Xe_1 + Ye_2 = 1 Xe1+Ye2=1 (贝祖定理).
      • c 1 X ⋅ c 2 Y ≡ m X e 1 m Y e 2 ≡ m 1 ( m o d N ) . c_1^X\cdot c_2^Y \equiv m^{Xe_1}m^{Ye_2} \equiv m^1 \pmod N. c1Xc2YmXe1mYe2m1(modN).
      • N = 15 , e 1 = 3 , e 2 = 5 , c 1 = 8 , c 2 = 2 , m = ? N = 15, e_{1} = 3, e_{2} = 5, c_{1} = 8, c_{2} = 2, m = ? N=15,e1=3,e2=5,c1=8,c2=2,m=?
  18. 对“书本上RSA”的CCA

    • 使用CCA恢复消息:敌手 A \mathcal{A} A 选择一个随机数 r ← Z N ∗ r \gets \mathbb{Z}^*_N rZN 并计算 c ′ = [ r e ⋅ c   m o d   N ] c' = [r^e\cdot c \bmod N] c=[recmodN],使用CCA获得 m ′ m' m 。那么, m = ? m= ? m=?
    • 在拍卖中讲价格翻倍: c = [ m e   m o d   N ] c = [m^e \bmod N] c=[memodN]. c ′ = [ 2 e c   m o d   N ] c'= [2^ec \bmod N] c=[2ecmodN].
  19. RSA实现问题

    • 将二进制串编码为 Z N ∗ \mathbb{Z}^*_N ZN 中元素: ℓ = ∥ N ∥ \ell = \|N\| =N。任意长度为 ℓ − 1 \ell - 1 1 的二进制串 m m m 可以被看作是 Z N Z_N ZN 中元素。尽管 m m m 不在 Z N ∗ Z_N^* ZN 中,RSA 仍工作。
    • e e e 的选择: e = 3 e=3 e=3 或小 d d d 都是坏选择。 推荐 e = 65537 = 2 16 + 1 e=65537=2^{16}+1 e=65537=216+1
    • 使用中国剩余定理来加速解密:$ [c^d \bmod N] \leftrightarrow ([c^d \bmod p],[c^d \bmod q]). $
    • 假设一个 n n n 比特整数指数预算需要 n 3 n^3 n3 操作。RSA 解密花费 ( 2 n ) 3 = 8 n 3 (2n)^3=8n^3 (2n)3=8n3,其中使用中国剩余定理需要 2 n 3 2n^3 2n3
  20. Padded RSA

    • 思路:添加随机性来改进安全
    • 构造:
      • ℓ \ell 为一个函数,对所有 n n n ℓ ( n ) ≤ 2 n − 2 \ell(n) \le 2n-2 (n)2n2,为被加密的消息长度。
      • G e n \mathsf{Gen} Gen: 输入 1 n 1^n 1n, 运行 G e n R S A ( 1 n ) \mathsf{GenRSA}(1^n) GenRSA(1n) 来产生 ( N , e , d ) (N,e,d) (N,e,d). 输出 p k = ⟨ N , e ⟩ pk = \langle N,e \rangle pk=N,e s k = ⟨ N , d ⟩ sk = \langle N,d \rangle sk=N,d
      • E n c \mathsf{Enc} Enc: 输入 m ∈ { 0 , 1 } ℓ ( n ) m \in \{0,1\}^{\ell(n)} m{0,1}(n), 选择随机串 r ← { 0 , 1 } ∥ N ∥ − ℓ ( n ) − 1 r \gets \{0,1\}^{\|N\| - \ell(n)-1} r{0,1}N(n)1. 输出 c : = [ ( r ∥ m ) e   m o d   N ] c:=[(r\|m)^e \bmod N] c:=[(rm)emodN]注:填充随机串后加密
      • D e c \mathsf{Dec} Dec: 计算 m ^ : = [ c d   m o d   N ] \hat{m} := [c^d \bmod N] m^:=[cdmodN], 并输出 m ^ \hat{m} m^ 中的低 ℓ ( n ) \ell(n) (n)个比特。注:这部分为明文
    • ℓ \ell 不应该太大 (理论上的 r r r 太小) 也不应该太小 (实践中的 m m m 太小)。
    • 定理:如果RSA问题相对于 G e n R S A \mathsf{GenRSA} GenRSA 是难的,那么基于 ℓ ( n ) = O ( log ⁡ n ) \ell(n)=\mathcal{O}(\log n) (n)=O(logn) 的构造是CPA安全的。
    • 证明:与对称加密中CPA安全方案类似。

实践中的RSA加密

  1. 对RSA的实现攻击

    • 对HTTPS中PKCS1 v1.5的简化的CCA攻击 [Bleichenbacher]
    • 服务器对给定的密文来应答明文的最高有效位是否等于1 (版本号) 。攻击者发送 c ′ = ( 2 r ) e ⋅ c c' = (2^{r})^{e}\cdot c c=(2r)ec。如果收到 Y e s Yes Yes,那么明文中第 ( r + 1 ) (r+1) (r+1)最高有效位= ?
    • 防御:处理格式不正确的消息和格式正确的消息的方式应该是不可区分的。[RFC 5246]
  2. PKCS #1 v2.1 (RSAES-OAEP)

    • 最优非对称加密填充(Optimal Asymmetric Encryption Padding,OAEP): 将长度 n / 2 n/2 n/2 m m m 编码为长度 2 n 2n 2n 的消息 m ^ \hat{m} m^ G , H G, H G,H 是随机预言机。
    • RSA-OAEP在ROM下是CCA安全的。(当RO实例化后可能不安全)
    • CPA攻击下,敌手不知道 r r r,则 m m m被完美保护;若要知道 r r r,则必须知道 s s s,这不可能。
    • CCA攻击下,无法有效进行解密查询,因为在应答前会检查明文中“00…0”。
    • 局限性:这个方案对RSA是安全的,但对其他TDP可能不是。
  3. OAEP改进

    • OAEP+对所有TDP都是CCA安全的
    • SAEP+更简单填充,同样安全
  4. 对RSA的实现攻击(续)

    • 计时攻击:[Kocher et al. 1997] 计算 c d c^d cd 所消耗的时间可能泄漏 d d d。 (需要高解析时钟)
    • 能耗攻击:[Kocher et al. 1999] 为计算 c d c^d cd 智能卡消耗的能量可能泄漏 d d d
    • 防御:将密文和随机数 r r r 绑定,解密 r e ⋅ c r^{e}\cdot c rec
    • 密钥生成问题:(在 OpenSSL RSA 密钥生成过程中):
    • 相同的 p p p 由多个设备产生 (源自启动时的低熵),但是不同的 q q q (源自额外的随机性).
      • 问题: 不同设备的 N 1 , N 2 N_1,N_2 N1,N2 , gcd ⁡ ( N 1 , N 2 ) = ? \gcd(N_1,N_2) = ? gcd(N1,N2)=?
      • 实验结果: 可分解 0.4% 的公开的HTTPS密钥。
  5. 对RSA的故障攻击

    • 故障攻击:在解密过程中 c d   m o d   N c^d\bmod N cdmodN 发生的计算机故障可能泄漏 d d d

    • 之前提到过使用中国剩余定理来加速解密:

      [ c d   m o d   N ] ↔ ( [ m p ≡ c d ( m o d p ) ] , [ m q ≡ c d ( m o d q ) ] ) [c^d \bmod N] \leftrightarrow ([m_p \equiv c^d \pmod p],[m_q \equiv c^d \pmod q]) [cdmodN]([mpcd(modp)],[mqcd(modq)])

    • 假设在计算 m q m_q mq 时发生错误,但在计算 m p m_p mp 时没有错误。

    • m ′ ≡ c d ( m o d p ) m' \equiv c^d \pmod p mcd(modp), m ′ ≢ c d ( m o d q ) m' \not \equiv c^d \pmod q mcd(modq)

    • ( m ′ ) e ≡ c ( m o d p ) (m')^e \equiv c \pmod p (m)ec(modp), ( m ′ ) e ≢ c ( m o d q ) (m')^e \not \equiv c \pmod q (m)ec(modq)

    • gcd ⁡ ( ( m ′ ) e − c , N ) =   ? \gcd((m')^e-c, N)=\ ? gcd((m)ec,N)= ?

    • 防御:检查输出 (但减慢 10% )。

  6. 总结

    • RSA问题是TPD,但书本上RSA加密不安全,RSA-OAEP在ROM下是CCA安全的。

8.3 DH问题与加密

  1. 本节学习基于循环群上离散对数问题的DH问题及Elgamal加密方案。

  2. 目录:循环群与离散对数,DH假设和应用,Elgamal加密方案。

  3. 循环群(Cyclic Groups)与生成元(Generators)

    • G \mathbb{G} G 是一个群并且一个元素 g ∈ G g \in \mathbb{G} gG通过运算生成一个子群 ⟨ g ⟩ = def { g 0 , g 1 , … , } = { g 0 , g 1 , … , g i − 1 } \langle g \rangle \overset{\text{def}}{=} \{ g^0,g^1,\dotsc,\} = \{ g^0,g^1,\dotsc, g^{i-1}\} g=def{g0,g1,,}={g0,g1,,gi1}
    • g g g 的阶是最小的正整数 i i i g i = 1 g^i=1 gi=1
    • G \mathbb{G} G 是一个循环群(cyclic group)如果 ∃    g \exists\;g g 有阶 m = ∣ G ∣ m = |\mathbb{G}| m=G. ⟨ g ⟩ = G \langle g \rangle = \mathbb{G} g=G, g g g G \mathbb{G} G 的生成元。注:循环群中存在一个元素通过指数运算可生成整个群中每个元素。
    • 例题: 乘法下的 Z 6 ∗ \mathbb{Z}_6^* Z6, Z 7 ∗ \mathbb{Z}_7^* Z7,或 Z 8 ∗ \mathbb{Z}_8^* Z8 是循环群吗? 找到生成元。
  4. 离散对数

    • 如果 G \mathbb{G} G 是阶为 q q q 的循环群,那么 ∃ \exists 生成元 g ∈ G g \in \mathbb{G} gG 使得 { g 0 , g 1 , … , g q − 1 } = G \{ g^0,g^1,\dotsc,g^{q-1}\} = \mathbb{G} {g0,g1,,gq1}=G
    • ∀ h ∈ G \forall h \in \mathbb{G} hG, ∃ \exists 唯一的 x ∈ Z q x \in \mathbb{Z}_q xZq 使得 g x = h g^x = h gx=h
    • x = log ⁡ g h x= \log_gh x=loggh 是以 g g g为底 h h h的离散对数(discrete logarithm)。
    • 如果 g x ′ = h g^{x'}=h gx=h, 那么 log ⁡ g h = [ x ′   m o d   q ] \log_gh = [x' \bmod q] loggh=[xmodq]
    • log ⁡ g 1 = 0 \log_g1=0 logg1=0 并且 log ⁡ g ( h 1 ⋅ h 2 ) = [ ( log ⁡ g h 1 + log ⁡ g h 2 )   m o d   q ] \log_g(h_1\cdot h_2) = [(\log_gh_1+\log_gh_2) \bmod q] logg(h1h2)=[(loggh1+loggh2)modq]
  5. 离散对数算法概览

    • 给定一个生成元 g ∈ G g \in \mathbb{G} gG 并且 y ∈ ⟨ g ⟩ y \in \langle g \rangle yg,求 x x x 使得 g x = y g^x=y gx=y.
    • 蛮力: O ( q ) \mathcal{O}(q) O(q), q = o r d ( g ) q = \mathsf{ord}(g) q=ord(g) ⟨ g ⟩ \langle g\rangle g 的阶。
    • Baby-step/giant-step [Shanks]: O ( q ⋅ p o l y l o g ( q ) ) \mathcal{O}(\sqrt{q}\cdot \mathsf{polylog}(q)) O(q polylog(q)).
    • Pohlig-Hellman算法:当 q q q 有较小因子。
    • Index calculus 法: O ( exp ⁡ ( n ⋅ log ⁡ n ) ) \mathcal{O}(\exp{(\sqrt{n\cdot \log n})}) O(exp(nlogn )).
    • 已知最好的算法是通用数域筛法: O ( exp ⁡ ( n 1 / 3 ⋅ ( log ⁡ n ) 2 / 3 ) ) \mathcal{O}(\exp(n^{1/3}\cdot(\log n)^{2/3})) O(exp(n1/3(logn)2/3)).
    • 椭圆曲线群 vs. Z p ∗ \mathbb{Z}_p^* Zp: 在保证安全性相同的同时,更高效。(1024-bit Z p ∗ \mathbb{Z}_p^* Zp 和 132-bit 椭圆曲线都需要 2 66 2^{66} 266 步来破解。)
  6. 使用质数阶群

    • 定理:如果 G \mathbb{G} G 是质数阶,那么 G \mathbb{G} G 是循环群。除单位元外,所有 g ∈ G g \in \mathbb{G} gG 是生成元。
    • 根据拉格朗日定理,任意元素的阶都等于群的阶。
    • 拉格朗日定理:子群阶可以整除群阶。 ⟨ g ⟩ \langle g \rangle g G \mathbb{G} G 子群,并且 ∣ ⟨ g ⟩ ∣ ∣ ∣ G ∣ |\langle g \rangle| \mid |\mathbb{G}| gG
      • 思路:由一个子群可以派生覆盖了整个群的若干子集,这些子集的阶与子群相同,并且这些子集彼此不相交。
      • 设群 G \mathbb{G} G的子群 H H H,陪集(coset) g H gH gH g g g H H H中每个元素 h h h运算构成的集合)和子群 H H H的阶相同。
      • 子群的任意两个陪集 g 1 H g_1H g1H g 2 H g_2H g2H
        • 或者相同,如果 g 1 − 1 g 2 ∈ H g_1^{-1}g_2 \in H g11g2H g 1 ( g 1 − 1 g 2 ) h ∈ g 1 H g_1(g_1^{-1}g_2 )h \in g_1H g1(g11g2)hg1H g 2 h ∈ g 1 H g_2h \in g_1H g2hg1H
        • 或者没有交集,如果 g 1 − 1 g 2 ∉ H g_1^{-1}g_2 \notin H g11g2/H。采用反证法,如果有交集,则 g 1 h 1 = g 2 h 2 g_1h_1 = g_2h_2 g1h1=g2h2 g 1 − 1 g 2 = h 1 h 2 − 1 ∈ H g_1^{-1}g_2 = h_1h_2^{-1} \in H g11g2=h1h21H,矛盾。
      • 因此,群可以划分为任意子群的若干不相交陪集,每个陪集阶相同,群的阶就是子群的整数倍。
      • 推荐参考:https://brilliant.org/wiki/lagranges-theorem/
    • 离散对数问题在质数阶群上是最难的。
    • 在质数阶群上找一个生成元很简单。
    • 任何非零指数在以质数阶为模下都可逆。
    • DDH问题是难题的必要条件是 D H g ( h 1 , h 2 ) \mathsf{DH}_g(h_1,h_2) DHg(h1,h2) 与群中随机元素之间是不可区分的。在质数阶群上这基本成立。
  7. 产生质数阶(子)群

    • 如果 p p p 是质数,那么 Z p ∗ \mathbb{Z}^*_p Zp 是乘法群。
    • y ∈ Z p ∗ y \in \mathbb{Z}^*_p yZp 是模 p p p下的二次剩余(quadratic residue modulo),如果 ∃ x ∈ Z p ∗ \exists x \in \mathbb{Z}^*_p xZp 使得 x 2 ≡ y ( m o d p ) x^2 \equiv y \pmod p x2y(modp)
    • 例题: Z 7 ∗ \mathbb{Z}_{7}^{*} Z7 下的二次剩余?
    • QR集合是一个子群(满足群条件),阶为 ( p − 1 ) / 2 (p-1)/2 (p1)/2,因为 x 2 ≡ ( p − x ) 2 ( m o d p ) x^2 \equiv (p-x)^2 \pmod p x2(px)2(modp)
    • p p p 是一个强质数(strong prime),如果 p = 2 q + 1 p=2q+1 p=2q+1 q q q 是质数。
    • 强质数下的二次剩余子群是一个循环群,因为群的阶是质数。
    • 循环群生成算法:产生一个强质数 p p p,阶为 q = ( p − 1 ) / 2 q=(p-1)/2 q=(p1)/2,随机选择一个 x ∈ Z p ∗ x \in \mathbb{Z}^*_p xZp,得到生成元 g = x 2 g=x^2 g=x2,输出 p , q , g p, q, g p,q,g
  8. 离散对数假设

    • 离散对数(discrete logarithm)实验 D L o g A , G ( n ) \mathsf{DLog}_{\mathcal{A},\mathcal{G}}(n) DLogA,G(n):
      • 运行一个群生成算法 G ( 1 n ) \mathcal{G}(1^n) G(1n) 来产生 ( G , q , g ) (\mathbb{G},q,g) (G,q,g),其中 G \mathbb{G} G 是阶为 q q q ( ∥ q ∥ = n \|q\|=n q=n) 的循环群,并且 g g g G \mathbb{G} G 的生成元。
      • 挑选一个 h ← G h \gets \mathbb{G} hG. ( x ′ ← Z q x' \gets \mathbb{Z}_q xZq and h : = g x ′ h := g^{x'} h:=gx)
      • 敌手 A \mathcal{A} A 给定 G , q , g , h \mathbb{G}, q, g, h G,q,g,h,并且输出 x ∈ Z q x \in \mathbb{Z}_q xZq.
      • 实验成功 D L o g A , G ( n ) = 1 \mathsf{DLog}_{\mathcal{A},\mathcal{G}}(n) = 1 DLogA,G(n)=1,如果 g x = h g^x = h gx=h, 否则 0 。
    • 定义:离散对数问题相对于群 G \mathcal{G} G是难的,如果 ∀ \forall ppt 算法 A \mathcal{A} A, ∃ \exists n e g l \mathsf{negl} negl 使得 Pr ⁡ [ D L o g A , G ( n ) = 1 ] ≤ n e g l ( n ) . \Pr[\mathsf{DLog}_{\mathcal{A},\mathcal{G}}(n)=1] \le \mathsf{negl}(n). Pr[DLogA,G(n)=1]negl(n).
  9. DH假设

    • 计算性DH(Computational Diffie-Hellman, CDH)问题: D H g ( h 1 , h 2 ) = def g log ⁡ g h 1 ⋅ log ⁡ g h 2 \mathsf{DH}_g(h_1,h_2) \overset{\text{def}}{=} g^{\log_gh_1\cdot \log_gh_2} DHg(h1,h2)=defgloggh1loggh2
    • 判断性DH(Decisional Diffie-Hellman, DDH))问题:区分 D H g ( h 1 , h 2 ) \mathsf{DH}_g(h_1,h_2) DHg(h1,h2) 与一个随机的群元素 h ′ h' h.
    • 定义:DDH问题与 G \mathcal{G} G相关的是难的,如果 ∀ \forall ppt A \mathcal{A} A, ∃ \exists n e g l \mathsf{negl} negl 使得 ∣ Pr ⁡ [ A ( G , q , g , g x , g y , g z ) = 1 ] − Pr ⁡ [ A ( G , q , g , g x , g y , g x y ) = 1 ] ∣ ≤ n e g l ( n ) . |\Pr[\mathcal{A}(\mathbb{G},q,g,g^x,g^y,g^z)=1] - \Pr[\mathcal{A}(\mathbb{G},q,g,g^x,g^y,g^{xy})=1]|\le \mathsf{negl}(n). Pr[A(G,q,g,gx,gy,gz)=1]Pr[A(G,q,g,gx,gy,gxy)=1]negl(n).
    • DL, CDH 和 DDH 的难解性:DDH 比 CDH 和 DL 容易。
  10. 安全密钥交换实验

    • 密钥交换实验(key-exchange experiment) K E A , Π e a v ( n ) \mathsf{KE}^{\mathsf{eav}}_{\mathcal{A},\Pi}(n) KEA,Πeav(n):

      1. 双方持有安全参数 1 n 1^n 1n 执行协议 Π \Pi Π Π \Pi Π 执行的结果为对话记录 (transcript) t r a n s \mathsf{trans} trans 包含双方发送的所有消息,以及各方都输出的密钥 k k k
      2. 选择一个随机比特 b ← { 0 , 1 } b \gets \{0,1\} b{0,1} 。 如果 b = 0 b=0 b=0 那么选择 k ^ ← { 0 , 1 } n \hat{k} \gets \{0,1\}^n k^{0,1}n u.a.r;如果 b = 1 b=1 b=1 那么令 k ^ : = k \hat{k} :=k k^:=k
      3. 敌手 A \mathcal{A} A 给定 t r a n s \mathsf{trans} trans k ^ \hat{k} k^, 并且输出一个比特 b ′ b' b
      4. K E A , Π e a v ( n ) = 1 \mathsf{KE}^{\mathsf{eav}}_{\mathcal{A},\Pi}(n)=1 KEA,Πeav(n)=1 如果 b ′ = b b'=b b=b, 否则 0 。
    • 定义:一个密钥交换协议 Π \Pi Π 在出现窃听者攻击下是安全的,如果 ∀ \forall ppt A \mathcal{A} A, ∃ \exists n e g l \mathsf{negl} negl 使得

      $ \Pr[\mathsf{KE}^{\mathsf{eav}}_{\mathcal{A},\Pi}(n) = 1] < \frac{1}{2} + \mathsf{negl}(n). $

  11. DH密钥交换协议

    • K E ^ A , Π e a v \widehat{\mathsf{KE}}^{\mathsf{eav}}_{\mathcal{A},\Pi} KE A,Πeav 表示一个实验,其中如果 b = 0 b=0 b=0 ,敌手被给予 k ^ ← G \hat{k} \gets \mathbb{G} k^G
    • 定理:如果DDH问题与 G \mathcal{G} G相关是难的,那么DH 密钥交换协议 Π \Pi Π 在出现窃听者时是安全的 (对应改动的实验 K E ^ A , Π e a v \widehat{\mathsf{KE}}^{\mathsf{eav}}_{\mathcal{A},\Pi} KE A,Πeav)。
    • 不安全性:在主动的敌手,中间人,攻击下是不安全的 (Man-In-The-Middle)。敌手在中间与双方分别通信,通信双方无法发现在与敌手通信,敌手可以与双方分别协商出密钥。
  12. 证明

    • $\Pr \left[ \widehat{\mathsf{KE}}^{\mathsf{eav}}_{\mathcal{A},\Pi} =1\right] $ = 1 2 ⋅ Pr ⁡ [ K E ^ A , Π e a v = 1 ∣ b = 1 ] + 1 2 ⋅ Pr ⁡ [ K E ^ A , Π e a v = 1 ∣ b = 0 ] = \frac{1}{2}\cdot \Pr\left[ \widehat{\mathsf{KE}}^{\mathsf{eav}}_{\mathcal{A},\Pi} =1 | b=1\right] + \frac{1}{2}\cdot \Pr\left[ \widehat{\mathsf{KE}}^{\mathsf{eav}}_{\mathcal{A},\Pi} =1 | b=0\right] =21Pr[KE A,Πeav=1b=1]+21Pr[KE A,Πeav=1b=0]
    • 如果 b = 1 b=1 b=1, 那么给真密钥;否则给随机的 g z g^z gz.
    • = 1 2 ⋅ Pr ⁡ [ A ( g x , g y , g x y ) = 1 ] + 1 2 ⋅ Pr ⁡ [ A ( g x , g y , g z ) = 0 ] = \frac{1}{2}\cdot \Pr\left[ \mathcal{A}(g^x,g^y,g^{xy})=1 \right] + \frac{1}{2}\cdot \Pr\left[ \mathcal{A}(g^x,g^y,g^z)=0 \right] =21Pr[A(gx,gy,gxy)=1]+21Pr[A(gx,gy,gz)=0]
    • = 1 2 ⋅ Pr ⁡ [ A ( g x , g y , g x y ) = 1 ] + 1 2 ⋅ ( 1 − Pr ⁡ [ A ( g x , g y , g z ) = 1 ] ) = \frac{1}{2}\cdot \Pr\left[ \mathcal{A}(g^x,g^y,g^{xy})=1 \right] + \frac{1}{2}\cdot (1-\Pr\left[ \mathcal{A}(g^x,g^y,g^z)=1 \right]) =21Pr[A(gx,gy,gxy)=1]+21(1Pr[A(gx,gy,gz)=1])
    • = 1 2 + 1 2 ⋅ ( Pr ⁡ [ A ( g x , g y , g x y ) = 1 ] − Pr ⁡ [ A ( g x , g y , g z ) = 1 ] ) = \frac{1}{2} + \frac{1}{2}\cdot \left( \Pr\left[ \mathcal{A}(g^x,g^y,g^{xy})=1 \right] - \Pr\left[ \mathcal{A}(g^x,g^y,g^z)=1 \right] \right) =21+21(Pr[A(gx,gy,gxy)=1]Pr[A(gx,gy,gz)=1])
    • ≤ 1 2 + 1 2 ⋅ n e g l ( n ) \le \frac{1}{2} + \frac{1}{2}\cdot \mathsf{negl}(n) %\left| \Pr\left[ \mathcal{A}(g^x,g^y,g^{xy})=1 \right] - \Pr\left[ \mathcal{A}(g^x,g^y,g^z)=1 \right] \right| 21+21negl(n)
  13. DHKE例子

    • G = Z 11 ∗ \mathbb{G} = \mathbb{Z}^*_{11} G=Z11 ;二次剩余循环群的阶 q = ? q = ? q=?
    • 二次剩余子群 ?
    • g = 3 g = 3 g=3 是生成元吗?
    • 如果 x = 3 x = 3 x=3 y = 4 y = 4 y=4,Bob发给Alice消息是?
    • Alice 如何计算密钥?
    • Bob 如何计算密钥?
  14. 三方密钥交换

    • DH基于的KE在2轮实现三方密钥交换,Key = g a b c =g^{abc} =gabc
    • Joux’s KE 在 1 轮实现三方密钥交换。在 bilinear map中,Key = e ( P , P ) a b c =e(P,P)^{abc} =e(P,P)abc
    • 开放问题:如何在一轮中在4方之间交换密钥?
  15. 完美保密私钥加密引理

    • 引理: G \mathbb{G} G 是有限群并且 m ∈ G m\in \mathbb{G} mG 是任意元素。那么选择随机 k ← G k \gets \mathbb{G} kG 并令 c : = m ⋅ k c := m\cdot k c:=mk ,将得到与随机选择的 c ← G c \gets \mathbb{G} cG 相同的分布,即 ∀ g ∈ G \forall g \in \mathbb{G} gG: $ \Pr[m\cdot k = g] = 1/|\mathbb{G}| $。
    • 证明: g ∈ G g \in \mathbb{G} gG 是任意的,那么 $\Pr[m\cdot k = g] = \Pr[k = m^{-1}\cdot g] $。由于 k k k 均匀随机选择,选择 k k k 的概率与一个固定元素 m − 1 ⋅ g m^{-1}\cdot g m1g 相同,都是 1 / ∣ G 1/|\mathbb{G} 1/G|。
    • 注:这是一种完美保密的私钥加密方案,将一个元素(明文)与另一个元素(密钥)的运算得到第三个元素(密文),与之前一个字母的移位密码是完美保密是类似的。
  16. Elgamal加密方案

    • 一个算法 G \mathcal{G} G, 输入 1 n 1^n 1n, 输出一个循环群 G \mathbb{G} G, 其阶为 q q q ( ∥ q ∥ = n \|q\| = n q=n), 并且生成元为 g g g
    • 构造:
      • G e n \mathsf{Gen} Gen: 运行 G ( 1 n ) \mathcal{G}(1^n) G(1n) 来产生 ( G , q , g ) (\mathbb{G},q,g) (G,q,g)。一个随机的 x ← Z q x \gets \mathbb{Z}_q xZq h : = g x h := g^x h:=gx p k = ⟨ G , q , g , h ⟩ pk = \langle \mathbb{G},q,g,h \rangle pk=G,q,g,h 并且 s k = ⟨ G , q , g , x ⟩ sk = \langle \mathbb{G},q,g,x \rangle sk=G,q,g,x
      • E n c \mathsf{Enc} Enc: 一个随机 y ← Z q y \gets \mathbb{Z}_q yZq 并且输入 ⟨ c 1 , c 2 ⟩ = ⟨ g y , h y ⋅ m ⟩ \langle c_1, c_2 \rangle = \langle g^y, h^y\cdot m\rangle c1,c2=gy,hym
      • D e c \mathsf{Dec} Dec: m : = c 2 / c 1 x m:=c_2/c_1^x m:=c2/c1x
    • 定理:如果DDH问题与 G \mathcal{G} G相关是难的,那么Elgamal加密方案是CPA安全。
  17. Elgamal加密例子

    • 加密前首先对明文进行二进制串编码:
      • 在模一个强质数 p = ( 2 q + 1 ) p = (2q+1) p=(2q+1) 的二次剩余子群中,
      • 一个串 m ^ ∈ { 0 , 1 } n − 1 \hat{m} \in \{0,1\}^{n-1} m^{0,1}n1, n = ∥ q ∥ n = \|q\| n=q
      • m ^ \hat{m} m^ 映射到被加密的明文 m = [ ( m ^ + 1 ) 2   m o d   p ] m = [(\hat{m}+1)^2 \bmod p] m=[(m^+1)2modp]
        • 这里的加1是为了保证在消息为“0”时,明文也在这个乘法群里
      • 映射是一对一且可逆的。
    • 例子,略。
  18. 证明

    • 思路:通过将DDH问题的算法 D D D规约到窃听者算法 A \mathcal{A} A来证明 Π \Pi Π 在窃听者出现时是安全的。
    • Π \Pi Π 改造为 Π ~ \tilde{\Pi} Π~: 加密是通过随机选择的 y ← Z q y \gets \mathbb{Z}_q yZq z ← Z q z \gets \mathbb{Z}_q zZq 然后输出密文: ⟨ g y , g z ⋅ m ⟩ \langle g^y, g^z\cdot m\rangle gy,gzm
    • Π ~ \tilde{\Pi} Π~ 不是一个加密方案.
    • g y g^y gy 独立于 m m m
    • g z ⋅ m g^z\cdot m gzm 是独立于 m m m 的随机元素 (之前的私钥加密引理)。
    • 实验成功概率与完美保密加密方案中是相同的。 Pr ⁡ [ P u b K A , Π ~ e a v ( n ) = 1 ] = 1 2 . \Pr\left[\mathsf{PubK}^{\mathsf{eav}}_{\mathcal{A},\tilde{\Pi}}(n)=1\right] = \frac{1}{2}. Pr[PubKA,Π~eav(n)=1]=21.
  19. 证明(续一)

    • 将DDH问题的算法 D D D规约到窃听者算法 A \mathcal{A} A
  20. 证明(续二)

    • 情况1: g 3 = g z g_3 = g^z g3=gz, 密文是 ⟨ g y , g z ⋅ m b ⟩ \langle g^y, g^z\cdot m_b\rangle gy,gzmb.

      $ \Pr[D(gx,gy,g^z)=1] = \Pr\left[\mathsf{PubK}^{\mathsf{eav}}_{\mathcal{A},\tilde{\Pi}}(n)=1\right] = \frac{1}{2}. $

    • 情况2: g 3 = g x y g_3 = g^{xy} g3=gxy, 密文是 ⟨ g y , g x y ⋅ m b ⟩ \langle g^y, g^{xy}\cdot m_b\rangle gy,gxymb.

      $ \Pr[D(gx,gy,g^{xy})=1] = \Pr\left[\mathsf{PubK}^{\mathsf{eav}}_{\mathcal{A},\Pi}(n)=1\right] = \varepsilon(n). $

    • 由于DDH问题是难的,

      n e g l ( n ) ≥ ∣ Pr ⁡ [ D ( g x , g y , g z ) = 1 ] − Pr ⁡ [ D ( g x , g y , g x y ) = 1 ] ∣ = ∣ 1 2 − ε ( n ) ∣ . \mathsf{negl}(n) \ge |\Pr[D(g^x,g^y,g^z)=1] - \Pr[D(g^x,g^y,g^{xy})=1]| =|\frac{1}{2}-\varepsilon(n)|. negl(n)Pr[D(gx,gy,gz)=1]Pr[D(gx,gy,gxy)=1]=21ε(n).

  21. Elgamal加密中CCA

    • Elgamal不是CCA安全的。
    • 例题:构造明文 m ⋅ m ′ m\cdot m' mm 的密文。
      • 给定 p k = ⟨ g , h ⟩ pk=\langle g, h\rangle pk=g,h, c = ⟨ c 1 , c 2 ⟩ c = \langle c_1, c_2\rangle c=c1,c2, c 1 = g y c_1=g^y c1=gy, c 2 = h y ⋅ m c_2=h^y\cdot m c2=hym,
      • 方法1:计算 c 2 ′ : = c 2 ⋅ m ′ c_2' := c_2\cdot m' c2:=c2m, 和 c ′ = ⟨ c 1 , c 2 ′ ⟩ c' = \langle c_1, c_2'\rangle c=c1,c2. $ \frac{c_2’}{c_1^x} = ? $
      • 方法2:计算 c 1 ′ ′ : = c 1 ⋅ g y ′ ′ c_1'' := c_1\cdot g^{y''} c1:=c1gy, 和 c 2 ′ ′ : = c 2 ⋅ h y ′ ′ ⋅ m ′ c_2'' := c_2\cdot h^{y''}\cdot m' c2:=c2hym
        • $ c_1’’=g^y\cdot g^{y’’} = g^{y+y’’};\text{and}; c_2’’= ? $
        • 所以 c ′ ′ = ⟨ c 1 ′ ′ , c 2 ′ ′ ⟩ c''=\langle c_1'',c_2''\rangle c=c1,c2 m ⋅ m ′ m\cdot m' mm 的密文。
  22. Elgamal实现问题

    • 共享公开参数: G \mathcal{G} G 产生参数 G , q , g \mathbb{G},q,g G,q,g
      • 这些参数可以只产生一次并且为所有人所使用(’‘once-and-for-all’’)。
      • 可以被多个接收者使用。
      • 每个接收者必须选择各自的保密数值 x x x 并且发布他们自己的公钥包含 h = g x h=g^x h=gx
    • 参数共享:在 Elgamal 的情况下,公开参数可以被共享。在 RSA 情况下,参数可以被共享吗?
  23. 椭圆曲线密码学

    • 在椭圆曲线群上构造的离散对数问题
    • 其他密码学上的应用在1985年被提出
    • 类比离散对数,DH密钥交换,ElGamal加密和DSA,在椭圆曲线上有,ECDL,ECDHKE,ElGamal ECC,ECDSA
    • 比自然数域上更有效,密钥长度是所需蛮力搜索指数长度的二倍。
      • 二倍的原因是,离散对数问题的蛮力搜索所需指数长度是群阶指数长度的一半
  24. 椭圆曲线群

    • 椭圆曲线群是在一个有限域中的一个平面代数曲线上的点之间“加法”操作
    • 在有限域中取模是关键,单位元是无穷远点
  25. 在椭圆曲线点上做加法构成循环群

    • 每条直线和曲线有三个交点
      • 一条直线与曲线的切点算2次
      • 垂直线上,无穷远点计做一个点
    • 点上的加法
      • 三点成一线,三点之和为无穷远点
    • 密钥生成
      • 私钥是 d d d,公钥为 d P dP dP
  26. ECDHKE的一个例子

    • 计算ECDHKE的密钥,这里枚举了生成元为(3,4)的所有指数结果
    • Alice的密钥为 a = 4 a = 4 a=4,收到(2,7)
    • Alice密钥计算是从(2,7)开始,向后数3个点(乘4=加3次)
    • Bob密钥计算是从(4,10)开始(因为 a = 4 a=4 a=4),向后数2个点(因为 b = 3 b=3 b=3
  27. 实践中的椭圆曲线密码系统

    • P256有一定风险,被揭露有NSA的后门;
    • Curve25519更安全高效,其中常数选择有充分的解释;
  28. 总结

    • DHKE,ElGamal加密来自于CDH,DDH问题,后者来自于在指数阶群上的离散对数问题
    • 椭圆曲线密码学更有效并且被广泛使用

你可能感兴趣的:(密码学,笔记,gpt,网络,安全,网络安全)