Cyan's Blog

Search

Search IconIcon to open search

Diffie-Hellman问题

Last updated Unknown Edit Source

# Diffie-Hellman问题

# 两个Diffie-Hellman问题

# Computation Diffie-Hellman / CDH

即给定一个基数与两个指数, 计算合并的指数

# Decision Diffie-Hellman / DDH

即给你三个指数, 让你判断最后一个是不是前两个的合并

注意: 给定的 α\alphann 阶元素, 所以上面的运算都是 mod αnmod\space \alpha^n

# 辨析: CDH / DDH

# DDH T\propto_T CDH T\propto_T Discrete Logarithm / 三个问题的图灵归约关系

图灵归约 Turing Reduction

图灵归约 Turing Reduction

把还没解决的问题归约到已经解决的问题上 用已经解决的问题去解决还没解决的问题 密码学原理与实践 Page 167 > 假设我们已经存在一个解决问题 A 的算法 G(x)G(x) 一个A到B的图灵归约即利用G(x)G(x)构造一个解决问题B的算法H(x)H(x), 并且H(x)H(x)是多项式时间的. 这篇文章译自reductions-and-jokes > > 一个物理学家和一个数学家正坐在教师休息室里。突然间,休息室里的咖啡机着火了。物理学家就拿了一个垃圾桶,把里面的垃圾清空,跑到水池前,给垃圾桶灌满水,随后扑灭了火。由于这个咖啡机着过一次火了,大家都同意把垃圾桶装满水放在这个咖啡机旁边。 > 第二天,同样的两个人又坐在同样的休息室里,咖啡机又一次着火了。这一次,数学家站了起来,把装满水的垃圾桶拿了起来,把里面的水倒掉,又放了一些垃圾在里面,交给了物理学家。这样就把问题归约到了一个之前已经解决过的问题上。 > 虽然这个笑话是讽刺数学家的,但确实很好地解释了归约这个概念。其想法很简单:我们现在遇到了个问题,可以把它转化到一个某个已解决的问题上,而不是一定要直接解决这个问题。从这个意义上来说,归约其实是一种比较懒的解决问题的方式。 > Instead of putting out a fire,...

11/19/2023

# CDH T\propto_T Discrete Logarithm

很简单, 正如前面已经提到的一样, 可以先用 αb,αc\alpha^b,\alpha^cb,cb,c 再计算 b×c,b\times c, 再算出 αbc\alpha^{bc}.

CDH T\propto_T Discrete Logarithm 说明了 Discrete Logarithm 至少和 CDH 一样难

这样想更清晰: Discrete Logarithm至少比CDH难

# DDH T\propto_T CDH

因为我们都可以求正确的αbc\alpha^{bc}了,我们只需要验证αbc\alpha^{bc}αd\alpha^{d}是不是一样就可以解决DDH了

DDH T\propto_T CDH说明了CDH至少比DDH难

# 一个思考, DDH / CDH / Discrete Logarithm到底哪个最难?

一个错误想法:

有 DDH T\propto_T CDH, 说明 DDH 至少是和 CDH 一样难的(因为解决了 CDH 一定就可以解决 DDH)

有 CDH T\propto_T Discrete Logarithm, 说明 CDH 至少是和 Discrete Logarithm 一样难的(因为解决了 Discrete Logarithm 一定就可以解决 CDH)

这样看来, 好像 Discrete Logarithm 最简单. CDH 第二简单, DDH 最难, 但是为什么实际是反过来的呢?

正确想法:

有DDH T\propto_T CDH, 说明CDH至少是和DDH一样难的(因为解决了CDH一定就可以解决DDH)

有CDH T\propto_T Discrete Logarithm, 说明Discrete Logarithm至少CDH是和一样难的(因为解决了Discrete Logarithm一定就可以解决CDH)

这样看来, Discrete Logarithm最难, CDH第二难, DDH最简单

第十一个知识点:DLP,CDH和DDH问题都是什么

……

CDH是和DLP相关的,但是哪个更难呢?如果我能有效率的解决DLP,那么我就可以找出aa,然后轻松的计算出gabg^{ab}就像Bob做的那样,因此我们就解决了CDH.所以我们说能解决DLP那么一定能解决CDH,这就是说DLP至少和CDH一样难.

……

如果对手能够解决DDH(输出正确的x的概率大于1/2).那么就是说G,ga,gbG,g^a,g^b一定泄露了一些关于gabg^{ab}的信息,使得攻击者能把它从随机的元素中分辨出来,尽管不能直接计算出来.而且很明显,如果对手能解决CDH问题,那么它可以有效率的解决DDH,因为它已经可以得到gabg^{ab} 的值.这意味着,CDH至少和DDH一样难.

这就是我们这篇中讨论的三个问题,我们给出了一个简明的证明对他们的困难性进行排序:DLP最难,然后是CDH,最后是DDH.就像我们看到的那样,DLP有时候是简单的,会让CDH和DDH都变简单.因此群GG和生成器gg的选择在做密码学的时候是十分重要的!

# 解CDH的算法和解ElGamal的算法是等价的

in ElGamal:

注意α,β\alpha, \beta都是公钥

y1=αkK=βk=αaky2=xK=xβk=xαakx=dk(y1,y2)=y2(αak)1=y2(y1a)1 \begin{align} y_1&=\alpha^k\\ K&=\beta^k=\alpha^{ak}\\ y_2&=xK=x\beta^k=x\alpha^{ak}\\ &\Downarrow\\ x=d_k(y_1,y_2)&=y_2\cdot (\alpha^{ak})^{-1}=y_2\cdot (y_1^a)^{-1} \end{align}

# OracleCDH  ElGamalOracleCDH\space\Rightarrow\space ElGamal

δ=OracleCDH(α,β,y1)=OracleCDH(α,αk,αk)\delta=OracleCDH(\alpha,\beta,y_1)=OracleCDH(\alpha,\alpha^k,\alpha^k)

由此算出 δ=αak\delta=\alpha^{ak},就相当于y1ay_1^a

所以x=y2δ1x=y_2\cdot\delta^{-1}

# CDHOracleElGamalCDH \quad\Leftarrow\quad OracleElGamal

x=OracleElGamal(α,β,(y1,y2))=OracleElGamal(α,αa,(αk,y2))=y2(αak)1\begin{align} x&=OracleElGamal(\alpha,\beta,(y_1,y_2))\\ &=OracleElGamal(\alpha,\alpha^a,(\alpha^k,y_2))\\ &=y_2\cdot (\alpha^{ak})^{-1} \end{align} 所以αak=y2(y2(αak)1)1=αak\alpha^{ak}=y_2\cdot (y_2\cdot (\alpha^{ak})^{-1})^{-1}=\alpha^{ak}