#1 楼
在SSH中,使用两种算法:密钥交换算法(Diffie-Hellman或称为ECDH的椭圆曲线变体)和签名算法。密钥交换产生密钥,该密钥将用于对该会话的数据进行加密。签名使客户端可以确保它与正确的服务器对话(如果服务器强制执行基于密钥的客户端身份验证,则可以使用由客户端计算出的另一个签名)。ECDH使用曲线大多数软件使用标准NIST曲线P-256。 Curve25519是另一条曲线,其“销售音调”是,它比P-256更快而不是更强。从人的角度来看,性能差异非常小:我们在小型PC上所进行的计算不到一毫秒,并且每个SSH会话仅发生一次。您不会注意到它。哪一条曲线都不能说比另一条曲线“更强”,实际上(在“无法打破它”的领域中都遥不可及)或在学术上(都处于“ 128位安全级别”)都可以说。 >
即使使用ECDH进行密钥交换,大多数SSH服务器和客户端也将使用DSA或RSA密钥进行签名。如果要基于椭圆曲线的签名算法,则为ECDSA或Ed25519;由于曲线方程的精确定义,出于某些技术原因,P-256为ECDSA,Curve25519为Ed25519。同样,这两个都不比另一个强,并且速度差异太小而无法被人类用户察觉。
但是大多数浏览器(包括Firefox和Chrome)不再支持ECDH(dh也是如此)。 br />
现在使用P-256应该会产生更好的互操作性,因为Ed25519较新且不那么广泛。但是,对于您配置的给定服务器以及要从自己的计算机进行访问的服务器,互操作性并不重要:您可以控制客户端和服务器软件。
因此,基本上,选择取决于美学,即完全由您决定,没有合理的理由。无论如何,安全问题不会由这种选择引起。密码算法是整个系统中最强大的部分,而不是最弱的部分。
评论
25519的“销售建议”更多:不是NIST,所以不是NSA。没有速度。
–马丁·施罗德(MartinSchröder)
2014年2月5日在10:02
实际上,速度也非常快。构造良好的Edwards / Montgomery曲线可以比已建立的NIST曲线快几倍。 imperialviolet.org/2010/12/21/eccspeed.html
–伊沃
2014年2月7日在12:51
实际上,如果您真的想在最新的PC上提高速度,那么NIST批准的二进制Koblitz曲线甚至会更快(这要归功于x86 AES指令附带的“无进位乘法”操作码)。对于K-233中的通用点乘法,可以降低到大约40000个周期,比Curve25519快两倍以上-但是要找到这种额外速度实际上产生显着差异的方案是具有挑战性的。
–汤姆韭菜
2014年2月7日,12:57
此IETF草案提供了更多的“销售建议”:尽管NIST曲线的广告宣传是随机验证的,但并没有解释用于生成NIST曲线的种子。相反,用于拾取这些曲线的过程已得到充分记录,并且足够严格,因此可以独立进行验证。人们普遍认为这是安全优势,因为它可以防止生成方恶意操纵参数。
– ATo
16年8月21日在7:25
根据DJB的safecurves.cr.yp.to网站的数据,NIST曲线可能不如Curve25519安全或可靠。
– Tortor
16年11月9日14:49
#2 楼
从Ed25519简介开始,有一些速度上的好处和一些安全上的好处。更有趣的安全性好处之一是,它可以抵抗多种边信道攻击:没有秘密数组索引。该软件从不从RAM中的机密地址读取或写入数据。地址的模式是完全可以预测的。因此,该软件不受高速缓存定时攻击,超线程攻击和其他依赖于通过CPU高速缓存的地址泄漏的旁通道攻击的影响。
没有秘密分支条件。该软件永远不会根据秘密数据执行条件转移;跳跃的模式是完全可以预测的。因此,该软件不受侧通道攻击的影响,侧通道攻击依赖于通过分支预测单元的信息泄漏。为了进行比较,在各种算法上展示了几种现实世界中的缓存定时攻击。 http://en.wikipedia.org/wiki/Timing_attack
评论
“更有趣的安全优势之一是,它不受数个旁通道攻击的影响”-显而易见,这取决于实现方式。 Bernstein团队的代码,Adam Langley的代码,Andrew Moon的代码(等)应该可以。但是我认为您不能对任意实现说同样的话。
–user29925
19年2月8日在11:49
我想可以更准确地说,该算法的设计使其可以在不使用秘密数组索引或分支条件的情况下实现它。当然您是对的,仍然有可能实施得不好。
–布赖恩·明顿(Brian Minton)
19年2月8日在13:00
一个时间片并不安全,因为它取决于实现方式。
–尼克T
20年7月1日在20:27
#3 楼
与(EC)DSA相比,Ed25519有一个重要的实际优势:与签名的随机数生成器一起使用时,后者的算法家族完全失效。从理论上讲,实现可以防止出现此特定问题,但这种RNG失败以前已经发生过,很可能会再次发生。但是,要验证两端是否使用了正确的实现,要比仅仅验证实现更困难。首选或强制执行(取决于您的兼容性需求)明确指定安全行为的算法(Ed25519)。#4 楼
我的印象是,Curve25519实际上比NIST曲线更安全,因为它的形状使它不易受到各种侧通道攻击和实现失败的影响。请参阅:http://safecurves.cr.yp.toEd25519的优点是能够使用相同的密钥来签署密钥协议(通常您不会这样做)。我不太了解数学,无法说这是否是爱德华兹曲线的一个特性,尽管我确实知道它已被转换为蒙哥马利坐标系(有效地转换为Curve25519)以达成关键共识...
Ed25519不仅是一条曲线,它还指定了确定性的密钥生成(例如,哈希),值得牢记。碰巧,这对于DJB实现是一个令人沮丧的事情,因为必须区别对待它们以保持互操作性。
#5 楼
到目前为止,还没有直接解决的问题是,您的问题将或多或少的几个不相关的名称混合在一起,好像它们是彼此的等效替代品,实际上并非如此。ECDH和ECDSA只是密码方法的名称。
ECDH是一种密钥交换方法,供双方使用,它们可以在不安全的通信通道上协商安全密钥。它是DH(Diffie-Hellman)密钥交换方法的变体。 ECDH代表椭圆曲线Diffie–Hellman。但是ECDH只是一种方法,这意味着您不能仅将其与一条特定的椭圆曲线一起使用,而可以将其与许多不同的椭圆曲线一起使用。
ECDSA是一种签名算法,可用于对数据的任何更改都会导致签名验证失败,但是攻击者在更改之后将无法正确地重新签名数据。它是DSA(数字签名算法)的变体。 ECDSA代表椭圆曲线数字签名算法。 ECDSA也仅描述了可用于不同椭圆曲线的方法。
ECDH和ECDSA的安全性因此取决于两个因素:
安全性如何?方法本身?如果该方法不安全,那么单词中的最佳曲线不会改变。
该曲线的安全性如何?如果曲线不安全,则从理论上讲该方法将不会起作用。
Curve25519是特定椭圆曲线的名称。其他曲线分别命名为Curve448,P-256,P-384和P-521。
Ed25519是EdDSA具体变体的名称。使用SHA-512和Curve25519执行EdDSA时,此变体称为Ed25519。 EdDSA是签名算法,就像ECDSA一样。
因此,如果某个实现只是说它使用ECDH进行密钥交换或使用ECDSA签名数据,而没有提及任何特定曲线,则通常可以假定它将使用NIST曲线(P-256,P-384或P-512),但是实现实际上应该始终明确地命名所使用的曲线。
要回答有关安全性的问题:ECDH和ECDSA已被证明是概念上的安全密钥交换和签名方法,因此ECDH的安全性ECDSA很大程度上取决于以下事实:是否有人找到一种方法来打破常规的椭圆密码学(可能性很小但并非不可能)或在使用的曲线内发现缺陷(可能性更大)。
有些人之所以会选择Curve25519而不是NIST标准曲线,是因为事实,即NIST尚未明确记录为什么它选择这些曲线以支持现有替代方案。通用的说法“表面上选择曲线是为了获得最佳的安全性和实现效率”,听起来很像是营销的秃头,并且不会说服密码专家。
NIST还于2006年对基于随机数发生器的椭圆曲线密码术(Dual_EC_DRB)进行了标准化,并且纽约时报宣称(在审查了Edward Snowden泄露的备忘录之后),它是NSA影响NIST的标准化此特定的随机数生成器。在该生成器中发现了一个巨大的弱点,并且可以相信它是NSA故意创建的后门程序,它能够破坏基于该生成器的TLS加密。当首次向Dual_EC_DRB提交ANSI时,ANSI显然发现了该缺陷,但是尽管知道如何避免,但他们并没有改进算法,也没有公开这些缺陷,因此,认为它们是不允许的(gag order) )。当薄弱环节广为人知时,该标准于2014年撤消。
有了这些背景知识,人们当然开始怀疑,也许神秘的NIST曲线参数的来源实际上也是NSA,因为这些曲线还隐藏了尚未公开的弱点,但NSA可能知道这些弱点。因此能够基于这些曲线破解密码。没有任何证据可以证明这一主张,甚至没有推定证据,但它肯定比童话故事更可行和更现实。这就是为什么人们对这些曲线失去信任,而转向极不可能的,因为这些曲线受到世界上任何秘密服务的影响的原因。 J. Bernstein在2005年,他还设计了著名的Salsa20流密码及其现已广泛使用的ChaCha20变体。他还发明了Poly1305消息身份验证。 Google决定将ChaCha20与Poly1305结合使用是一种安全的替代方法,因为该算法已被破坏,因此必须删除RC4后才能在TLS中使用。与使用AES块削片机相比,它所需的计算能力要低得多(对移动设备非常有用,因为它可以节省电池运行时间),但据信可提供相当的安全性。 ChaCha20 / Poly1305在RFC 7905中进行了标准化,并从今天开始广泛用于TLS客户端-服务器通信中。因此,如果伯恩斯坦是NSA间谍,这不太可能发生,那么我们所有人都将注定要失败,因为今天使用的TLS可能无法保护数据免受秘密服务的侵害。
评论
尽管ECDSA可以用于多条曲线,但实际上并未与Bernstein曲线一起使用。 Ed25519和Ed448是EdDSA的实例,它是一种不同的算法,具有一些技术优势。在OpenSSH中(按要求),命令选项ssh-keygen -t ecdsa和默认文件名id_ecdsa *没有指定曲线,但是实际的键(内容)包括线路和已知的主机等;参见rfc5656。包括nistP-521,不包括不存在的P-512。
–dave_thompson_085
19年6月10日在16:30
@ dave_thompson_085我从未宣称ECDSA与伯恩斯坦的一起使用。我从未声称过openSSH会指定一条曲线。因此,请不要评论我从未写过的东西。 P-512显然像是ECDSA for EdDSA的错字,毕竟我写了很多文字,所以错字就发生了。
–麦基
19年6月11日在16:02
我只想指出,您在修订说明中有一个错字,其中拼写了“讨厌的nitpickers”。 🌵
–迈克尔
19年6月14日在17:33
#6 楼
ECDH用于密钥交换(DH的EC版本)ECDSA用于签名(DSA的EC版本)
Ed25519是EdDSA(ECDSA的爱德华版本)的示例,实现了Curve25519用于签名
Curve25519是ECC中实现的曲线之一(最有可能是RSA的继任者)。
更好的安全级别取决于算法强度和密钥大小。 Ed448密码具有相当于12448位RSA密钥的等效强度
NTRUEncrypt算法声称具有量子抗性,并且是RSA和ECC的基于格的替代方法。
评论
这是一种很奇怪的说法。 Curve25519是您可以在其上执行Diffie-Hellman(ECDH)的一条特定曲线。 Diffie-Hellman用于交换密钥。 Ed25519和ECDSA是签名算法。相关:SSH密钥:Ed25519与RSA
另请参见Bernstein Curve25519:新的Diffie-Hellman速度记录。他似乎做得很好,可以回答您的很多问题。
wiki.archlinux.org/index.php/…