Skip to content

Latest commit

 

History

History
226 lines (161 loc) · 14.3 KB

8.3 DH问题与加密.md

File metadata and controls

226 lines (161 loc) · 14.3 KB

8.3 DH问题与加密

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

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

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

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

    • 如果 $\mathbb{G}$ 是阶为 $q$ 的循环群,那么 $\exists$ 生成元 $g \in \mathbb{G}$ 使得 ${ g^0,g^1,\dotsc,g^{q-1}} = \mathbb{G}$
    • $\forall h \in \mathbb{G}$, $\exists$ 唯一的 $x \in \mathbb{Z}_q$ 使得 $g^x = h$
    • $x= \log_gh$ 是以$g$为底$h$的离散对数(discrete logarithm)。
    • 如果 $g^{x'}=h$, 那么 $\log_gh = [x' \bmod q]$
    • $\log_g1=0$ 并且 $\log_g(h_1\cdot h_2) = [(\log_gh_1+\log_gh_2) \bmod q]$
  5. 离散对数算法概览

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

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

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

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

    • 计算性DH(Computational Diffie-Hellman, CDH)问题:$ \mathsf{DH}_g(h_1,h_2) \overset{\text{def}}{=} g^{\log_gh_1\cdot \log_gh_2} $
    • 判断性DH(Decisional Diffie-Hellman, DDH))问题:区分 $\mathsf{DH}_g(h_1,h_2)$ 与一个随机的群元素 $h'$.
    • 定义:DDH问题与$\mathcal{G}$相关的是难的,如果 $\forall$ ppt $\mathcal{A}$, $\exists$ $\mathsf{negl}$ 使得 $ |\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). $
    • DL, CDH 和 DDH 的难解性:DDH 比 CDH 和 DL 容易。
  10. 安全密钥交换实验

    • 密钥交换实验(key-exchange experiment) $\mathsf{KE}^{\mathsf{eav}}_{\mathcal{A},\Pi}(n)$:

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

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

  11. DH密钥交换协议

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

    • $\Pr \left[ \widehat{\mathsf{KE}}^{\mathsf{eav}}{\mathcal{A},\Pi} =1\right] $ $= \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] $
    • 如果 $b=1$, 那么给真密钥;否则给随机的 $g^z$.
    • $= \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] $
    • $= \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]) $
    • $= \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) $
    • $ \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| $
  13. DHKE例子

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

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

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

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

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

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

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

    • 情况1: $g_3 = g^z$, 密文是 $\langle g^y, g^z\cdot m_b\rangle$.

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

    • 情况2: $g_3 = g^{xy}$, 密文是 $\langle g^y, g^{xy}\cdot m_b\rangle$.

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

    • 由于DDH问题是难的,

      $ \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)|. $

  21. Elgamal加密中CCA

    • Elgamal不是CCA安全的。
    • 例题:构造明文 $m\cdot m'$ 的密文。
      • 给定 $pk=\langle g, h\rangle$, $c = \langle c_1, c_2\rangle$, $c_1=g^y$, $c_2=h^y\cdot m$,
      • 方法1:计算 $c_2' := c_2\cdot m'$, 和 $c' = \langle c_1, c_2'\rangle$. $ \frac{c_2'}{c_1^x} = ? $
      • 方法2:计算 $c_1'' := c_1\cdot g^{y''}$, 和 $c_2'' := c_2\cdot h^{y''}\cdot m'$
        • $ c_1''=g^y\cdot g^{y''} = g^{y+y''};\text{and}; c_2''= ? $
        • 所以 $c''=\langle c_1'',c_2''\rangle$$m\cdot m'$ 的密文。
  22. Elgamal实现问题

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

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

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

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

    • 计算ECDHKE的密钥,这里枚举了生成元为(3,4)的所有指数结果
    • 密钥计算是从(7,6)开始,向后数5个点
  27. 实践中的椭圆曲线密码系统

    • P256有一定风险,Curve25519更安全高效
  28. 总结

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