我读了一篇关于椭圆曲线密码学的出色的三部分文章(一,二,三)。它能够以不需要数学学位就能理解的方式向我解释椭圆曲线。本文的重点在第二页,即讨论“点”操作时:





精彩的动画中上面(所有功劳归于原始作者Nick Sullivan),作者解释说EC Crypto的核心是,如果在曲线A和B上取任意两个点,然后从A到B画一条线,然后继续您结束的线与曲线上的一个点和另一个点的相交。然后,您在相反的x轴上(向上或向下)找到第三个点C点。

这在文章中表示为:


点B = C


可以继续,并根据需要使用初始点和新获取的点:


点C = D
点D = E


我们可以继续执行此过程任意次,但是为了举例,我们将在25个步骤之后停止结束于Z点。
现在我们知道,如果我们从A开始并应用上述过程,则总共需要进行25次“点”运算才能到达Z。但是,可以想象,这是一个非常大的数字很难从某人那里确定他们是否仅知道我们的起点(A点)和终点(Z点):


事实证明,如果您有两个点,则初始点本身会被n点“点”到最终点,而当您仅知道最终点而第一个点很困难时才找出n。为了继续我们的奇异台球比喻,请想象一个人在一个房间里独自玩我们的游戏一段随机的时间。他很容易一遍又一遍地遵循上述规则来击球。如果某人稍后走进房间并看到球的最终位置,即使他们知道比赛的所有规则和球的开始位置,他们也无法确定不经过球就将球击到那里的次数。整场比赛直到球到达同一点。容易做,很难撤消。这是一个很好的活板门功能的基础。中?实际上,他们如何使用上面示例中的A,B,Z或25来获得共享的机密?

出于这个问题的目的,我不关心如何确定曲线,我对双方都选择使用的已有曲线这一事实感到满意。

此外,我不关心DH的暂时性变体,在这一点上,我知道上面文章中描述的基本概念,我只想知道每个参与者以什么价值观开始,它们如何处理这些价值观,以及通过导线共享什么(如果有的话)。

#1 楼

假设每个人都同意某个椭圆曲线和曲线上某处的公共基点$ g $。
当两方爱丽丝和鲍勃想要就一个共享机密达成共识时,他们的操作如下: br />
Alice选择一些随机数$ a $并将曲线运算应用于$ g $(公共基点)$ a $倍。她获得了一些结果$ A = g ^ a = \ underbrace {g \ cdot g \ cdots g} _ {\ text {$ a $ times}} $$,并与Bob共享了这一点。
Bob选择一个随机数$ b $并发布$ B = g ^ b $。也就是说,$ S = B ^ a = \ underbrace {B \ cdot B \ cdots B} _ {\ text {$ a $ times}} $。 $ S'= A ^ b $。

此时,要注意的重要一点是,应用某些操作$ a $乘以$ b $次数与进行某些操作$ b $是同一件事次$ a $次。为了继续滥用台球的比喻:击中球3次,并重复该过程5次,与击中球5次,并重复该过程3次,完全相同。在这两种情况下,球都被击中$ 15 $次。因此,$ S = S'$是共享的秘密!

我们还没有说清楚$ S $为什么是秘密的原因:攻击者只看到$ A $和$ B $,并想找出导致“混合”爱丽丝和鲍勃执行的操作的要点。从数学上讲(这称为Diffie-Hellman问题):给定$ g ^ a $和$ g ^ b $,$ g ^ {ab} $是什么?解决此问题的一种明显(但不是唯一)的方法是计算$ a $和$ b $并简单地评估所需的表达式(记住,击球很容易!)。但是,希望计算$ a $或$ b $(解决离散对数问题)(实际上是一个开放问题),当它们足够大时(如您引用的文本中所述)很难。因此,攻击者(就我们所知)很难获得共享的秘密$ S $,爱丽丝和鲍勃从此以后就可以过上幸福的生活。


短暂的“变体”:没有。区别仅在于使用上述过程的方式不同:“临时”仅表示私钥$ a $和$ b $仅在单个会话中生成,然后被丢弃,从而提供了机密性。


编辑。正如斯蒂芬在评论中指出的那样,实际上并不是那么容易:如果爱丽丝天真地应用了$ a $次曲线操作,则攻击者显然也可能具有对$ a $进行暴力搜索的计算能力。实际上,该操作的重复应用是通过平方取幂进行的,有效地获得了时间$ \ mathcal O(\ log a)$而不是$ \ mathcal O(a)$的结果。根据观察结果,当$ a = 2a_h + a_ \ ell $与$ a_ \ ell \ in \ {0,1 \} $时,则
$$ g ^ a =(g ^ 2) ^ {a_h} \ cdot g ^ {a_ \ ell} \ text。$$
递归地应用此身份来计算$(g ^ 2)^ {a_h} $直到$ a_h $为零需要许多步骤与$ a $的位长成正比。当$ a = \ sum_ {i = 0} ^ ra_i2 ^ i $和所有$ a_i \ in \ {0,1 \} $是$ a $的二进制表示形式时,得出公式
$$ g ^ a = g ^ {\ sum_ {i = 0} ^ ra_i2 ^ i} = \ prod_ {i = 0} ^ rg ^ {a_i2 ^ i} \ text。$$
(不使用公式,这意味着:对于每个设置了$ a $最低有效位的$ i $,取$ g $并将其乘以$ i $次。即,设置$ t:= g $并重复赋值$ t:= t ^ 2 $,即对$ t $和$ t $进行曲线运算,然后再将结果$ t $调用$ i $次,对所有$ i $执行此操作,并将结果$ t合并$ s使用曲线操作。)

评论


$ \ begingroup $
那么,您基本上将正常DH中的重复乘幂替换为ECDH中的重复点乘幂?
$ \ endgroup $
–cpast
2015年1月4日在1:29



$ \ begingroup $
准确;不同组的情况确实相同:标准Diffie-Hellman使用$(\ mathbb Z / p \ mathbb Z)^ \ times $作为素数$ p $,而椭圆曲线Diffie-Hellman使用椭圆曲线组。实际上,一般想法在任何组中都可以“起作用”,但是在许多组中它当然是不安全的。
$ \ endgroup $
– yyyyyyy
2015年1月4日在1:34



$ \ begingroup $
几乎,但是您犯了一个非常重要的错误:他们没有像您所描述的那样继续彼此的操作。这样,两者实际上都将以相同的$ S $结尾,即$ g ^ {a + b} $,但是攻击者可以轻松地从$ A $和$ B $计算出该$ S $(只需“点”它们产生$ AB = g ^ ag ^ b = g ^ {a + b} $)。相反,爱丽丝接受$ B $并将其“加点”到自身$ a $次。鲍勃(Bob)取$ A $并将其“加点”到自身$ b $倍。基点$ g $不再涉及。
$ \ endgroup $
– yyyyyyy
2015年1月4日在3:03



$ \ begingroup $
等一下,因此,如果爱丽丝必须通过将$ g $自身乘以$ a $次来计算$ g ^ a $,为什么攻击者不能这样做呢?用$ g $本身,检查结果是否匹配,如果不重复?我认为这是因为可以计算足够大的$ a $来计算$ g ^ a $而不是线性地更快?
$ \ endgroup $
–斯蒂芬·托瑟(Stephen Touset)
2015年1月4日,下午5:39

$ \ begingroup $
@StephenTouset Bingo。例如,您可以像使用乘法组一样使用平方乘。用点,加号或倍号书写都是相同的:这只是一个组操作(实际上,我为EC组学习了加法表示法,因此您可以写$ n \ cdot g = ng = g + \ cdots + g $,而不是$ g ^ n = g \ cdot g \ cdots g $,但这又无关紧要)。攻击者做您描述的事情并不比通过将$ g $自身乘以常规DH来查找离散日志容易。
$ \ endgroup $
–cpast
15年1月4日在7:04