我正在网上寻找某种已知的弱点,但找不到的密码评级系统或密码列表。
返回我的项目,在与服务器进行身份验证时,我使用Wireshark工具捕获了“客户端问候”,我的(超薄)选项如下:
TLS_RSA_WITH_AES_128_CBC_SHA(0x002F)
TLS_DHE_DSS_WITH_AES_128_CBC_SHA(0x0032)
TLS_RSA_WITH_3DES_EDE_CBC_SHA(0x000A)
和MD5是不安全的,因此我应该避免使用那些算法进行加密吗?这是否使我拥有密码套件TLS_RSA_WITH_AES_128_CBC_SHA和TLS_DHE_DSS_WITH_AES_128_CBC_SHA?
#1 楼
理想情况下,您不应使用其中任何一个。根本。这就是原因。
不再使用RC4,MD5和DES。旧的加密货币。
AES中的CBC模式有时会遇到实现问题(请参阅Padding Oracles)。因此,应避免使用CBC。
SHA1被认为是不安全的,自2017年1月以来,主流浏览器不接受将其作为证书签名哈希。这些密码中,我在这里同意@otus,并建议TLS_DHE_DSS_WITH_AES_128_CBC_SHA。
如果您有机会向嵌入式平台添加其他密码,请了解以下信息:从21世纪开始,AES和ChaCha20是最好使用的对称密码。两者之间的区别只是
是块和流密码,因此
速度不同。
AES通常利用硬件加速AES-NI在当前的笔记本电脑和服务器上的许多处理器上都可以找到。
ChaCha20在移动和嵌入式平台上是首选,在该平台上,
AES硬件加速很少,因为它确实更快。
Poly1305实际上是ChaCha20的最佳伙伴,因此它们成对出现。
对于AES,请考虑AEAD兼容模式,例如GCM。
选择一个SHA2或更高版本(SHA384,SHA512等)的哈希算法。越高,越安全。但是,这太过分了,将花费更多的时间并且在大小方面会更重。因此,请坚持使用SHA256。
非对称密码(用于密钥交换):
Diffie-Hellman是当今的趋势和最佳使用。更好的是,瞬时椭圆曲线Diffie-Hellman(ECDHE),因为它更小,更快(您可以在几毫秒内生成384位参数,对应于嵌入式设备上将花费数小时才能生成的7680个非EC位) 。
证书签名:
没有人使用DH。
RSA很好。从现在开始要避免。仍然很好。
它的验证速度甚至比DSA还要快-与
openssl speed
一起查看(由您确定这是否对您有用)。最佳用途:ECDSA。 DSA是新的,并且结合了椭圆曲线,它比RSA更小且速度更快,请参阅
openssl speed
。被认为更安全。遗憾的是,目前OpenSSL不支持Edwards曲线。编辑:添加了关于在ECDSA和RSA之间选择的说明。感谢@Dreadlockyx和@otus让我再看一遍!评论
$ \ begingroup $
我真的不明白为什么应该把RSA放在一边而不支持(EC)DSA,因为它过于依赖RNG,有时可能是不安全的。 EdDSA实际上是要走的路。
$ \ endgroup $
– Dreadlockyx
17年1月2日,14:20
$ \ begingroup $
SHA-1不支持证书签名,但是在密码套件中可以。另外,您为什么认为在证书签名中应避免使用RSA?
$ \ endgroup $
–otus
17年1月2日,14:46
$ \ begingroup $
我同意你们俩。目前,OpenSSL不支持EdDSA。 +1关于RNG。对于RSA来说,您是对的,我可能对此有些极端,正在顺其自然。在验证方面,RSA实际上比DSA更快,因此从客户端角度来看是更好的选择。我将添加这些精度,谢谢!
$ \ endgroup $
–数学
17年1月9日在3:29
$ \ begingroup $
@lahwran与RSA相比,它相对较新。
$ \ endgroup $
–数学
19年5月24日在18:10
$ \ begingroup $
糟糕,我原本认为DSA已过时的说法是错误的,但我想到的是DES。
$ \ endgroup $
– lahwran
19年5月24日在22:12
#2 楼
RC4很烂。3DES也很烂,但比RC4小。
AES不会坏。 “ CBC”部分有点麻烦,但还不到3DES(无论如何也具有CBC),并且可以通过适当的实现进行修复。除非有不良副作用,否则它很不错。在您的列表中,使用DHE意味着以下副作用:
基本上,这只剩下
TLS_RSA_WITH_AES_128_CBC_SHA
。这不是有史以来最好的密码套件,但是可以使用。如果使用该密码,那么当您的系统被彻底入侵时,极不可能的原因是密码套件选择不正确。#3 楼
它们都不是最佳选择,但只有RC4明显损坏。RC4已过时,应禁用(请参阅RFC 7465)。
3DES和AES都是很好,尽管后者由于其速度和更大的块大小而在实践中是首选。 (假设您可以使用它们。ThomasPornin对有限的支持有一点看法。)
CBC并不是最佳选择,因为客户可能容易受到BEAST等类似漏洞的侵害,但是它已经修复了很长一段时间,因此除非您使用一些古老的软件-或期望在另一端-应该没问题。
评论
$ \ begingroup $
鉴于DH和DSS密钥具有足够的强度。 RSA通常比这些选项具有更高的密钥强度。即如果DH和DSS密钥停留在1024位,而RSA使用2048位,则您可能需要考虑使用RSA。
$ \ endgroup $
–马腾·博德威斯♦
16-12-29在15:51
$ \ begingroup $
@MaartenBodewes,是的,添加。
$ \ endgroup $
–otus
16-12-29在20:23
$ \ begingroup $
3DES还具有一个缺点,即如果加密数兆字节的数据,则可能会泄漏少量有关纯文本的信息。这并不是什么大的泄漏,但这是选择AES的另一个原因。
$ \ endgroup $
–雨披
16 Dec 29'在22:37
#4 楼
您应该使用以下两个之一:TLS_RSA_WITH_AES_128_CBC_SHA(0x002F)
TLS_DHE_DSS_WITH_AES_128_CBC_SHA(0x0032)
原因如您所说,其余组合使用不安全的算法。 RC4,DES和MD5已被破坏,它们不是每个版本的最新版本。
RC4:最终版本是RC6。禁止在TLS中使用RC4。此外,您可以在[此处]了解有关他的安全问题的更多信息。(https://en.wikipedia.org/wiki/RC4#Security)
MD5:最新版本是MD6。 MD1、5、1、2、3和4中的碰撞攻击和原像违反了MD5。
3DES:3Br暴力破解了3DES。 3DES具有漏洞和理论攻击。
评论
$ \ begingroup $
请注意,有问题的密码套件使用3DES而不是DES。
$ \ endgroup $
– SEJPM♦
16年12月29日在9:38
$ \ begingroup $
我不会说加密算法具有版本(MD5,MD6等),它们只是单独的算法(版本可能在Whirlpool中,这是经过微调的相同算法)。不过,好的答案是+1。
$ \ endgroup $
–axapaxa
16-12-29在14:11
$ \ begingroup $
@CGG,您没有解决答案。相反,现在错了,因为COPACOBANA无法用暴力破解3DES。
$ \ endgroup $
–otus
16-12-29在14:27
$ \ begingroup $
尽管有名称,但RC6不是RC4的版本。完全不同的设计!
$ \ endgroup $
– Henno Brandsma
16-12-29在15:37
$ \ begingroup $
MD5具有映像前攻击,但其复杂度为$ 2 ^ {123} $,在实际协议中不必直接担心。而且由于此处将MD5用于PRF(即HMAC),因此您不必担心密码套件内的冲突攻击(尽管使用MD5进行签名生成/验证当然是另一回事了)。当然,我并不是建议您使用TLS_RSA_WITH_RC4_128_MD5。
$ \ endgroup $
–马腾·博德威斯♦
16/12/29在15:59
评论
TLS_RSA_WITH_AES_128_CBC_SHA可能是其中一个。@StephenTouset您可能是对的,但请仅将这种情况作为一个经过充分描述的答案发布,在我看来,仅喊出一个特定的密码套件并没有太大帮助(因此在此处进行讨论是没有意义的。)。