我目前正在试验ed25519,我注意到在创建秘密密钥时,始终设置254位,并始终清除低3位。我发现在这个问题中总是设置254位来防止定时攻击:使用Curve25519时,为什么私钥总是在2 ^ 254处有固定位?

为什么低3位呢?清除位。显然,它与curve25519文件中的公式有关:
密钥集定义为$ \ {\下划线{n}:n \ in 2 ^ {254} + 8 \ {0,1 ,2、3,\ ldots,2 ^ {251} -1 \} \} $

是因为里面有8个,但为什么那里有8个呢?我怀疑它与curve25519论文中的定理2.1有关,但我不确定,因为我不完全了解那里的证明。

我正在某些加密例程中尝试使用ed25519原语,这需要我向标密钥添加标量(添加标密钥)。即使我添加了两个格式正确的ed25519秘密密钥,结果也将不会总是设置254位并清除低3位。这是安全问题吗?我了解位254的风险,但不了解较低位3的风险。

评论

组顺序是8的倍数。将最低位设置为零,将标量设置为8的倍数,确保点在素数次子组中,而不会受到小子组的干扰。

只需添加以上注释即可:这意味着您不必验证字符串是否代表组元素,这通常很昂贵。省略此步骤而没有其他对策的协议已被破坏。

请注意,当我问以下问题时,我仅对ECC有基本的了解:根据该文件,ed25519的组顺序是质数($ 2 ^ {252} + 27742317777372353535851937790883648493 $),按定义,它不是任何东西的倍数。我想念什么?另外,我还在寻找当我添加/乘以2个有效秘密密钥时得到的非整数8的含义。这是否意味着此新秘密密钥不适合使用edDSA对消息进行签名?

回答我自己的问题:这里似乎有两个小组在玩。曲线组和生成基点组。在这种情况下,曲线组为8 *基点组。此问题在此链接的“小组攻击”部分中进行了介绍:safecurves.cr.yp.to/twist.html。 Curve25519通过将每个密钥设置为8的倍数来解决此问题。尽管在我看来,这是牺牲3位来防止3位安全问题。另一种方法是在处理公钥之前先检查它们,如下所述:cr.yp.to/ecdh.html#validate

#1 楼

清除秘密密钥的低3位可确保它是8的倍数,这又确保了在进行小组攻击时,不会泄漏任何有关秘密密钥的信息,尽管可能很小。 br />
典型的简单Diffie-Hellman密钥交换的工作原理如下:

$$
\ text {Alice} \ xrightarrow {\ hspace {3cm} a G \ hspace {3cm}} \ text {Bob} \\
\ text {Alice} \ xleftarrow {\ hspace {3cm} b G \ hspace {3cm}} \ text {Bob}
$$

$ a $和$ b $是爱丽丝和鲍勃的秘密密钥,而$ G $是基点,它是curve25519中的$(9,\ ldots)$。爱丽丝(Alice)计算$ a \ cdot bG $,鲍勃(Bob)计算$ b \ cdot aG $,共享秘密是通过将$ abG $通过某个键派生函数传递而得出的。

现在,您已经注意到, $ G $的顺序为$ p_1 = 2 ^ {252} + 27742317777372353535851937790883648493 $,而曲线本身的点数为$ 8 p_1 $。这意味着剩下的一些点顺序较小。主动的攻击者可以例如,将Bob的消息$ bG $替换为订购点$ 8 $,并可以通过检查以下消息来找到$ a \ bmod 8 $。当每个有效秘密密钥为$ 0 \ bmod 8 $时,攻击者一无所获。

人们可能会辩称,这浪费了3个非常好的密钥位,以防止已经无效的攻击。但是请注意,该方案的实际安全性与基点$ p_1 \ approx 2 ^ {252} $的顺序有关。清除这3位(总共255个)并不会减少键空间,因为它仍然留下252个有用位,从而提供与$ G $生成的点数大致相同的键空间。

评论


$ \ begingroup $
我在上面已经弄清楚了,但是您的回答对我来说是最完整,最容易理解的。您还回答了“浪费了3位吗?”我稍后提出的问题。谢谢
$ \ endgroup $
–MepAhoo
2014年1月1日15:37

$ \ begingroup $
谢谢您的解释。我只是在这里问这个问题的一个稍微扩展的版本:crypto.stackexchange.com/questions/29791/…
$ \ endgroup $
–杰夫·伯吉斯(Jeff Burdges)
15-10-12在11:40



$ \ begingroup $
@Samuel Neves,当您说一些剩余的具有小阶数的点时,我们如何知道p1之外的其他点是各种小阶数组的一部分?鉴于剩余点数为p1 * 8,是否不存在更多点数,因此我们可以拥有另一个大小组?
$ \ endgroup $
–伍德斯托克
19年11月19日在14:37