我有一个支持6个TLS密码的小型嵌入式平台。有没有一个好/更好/最好的选择?

我正在网上寻找某种已知的弱点,但找不到的密码评级系统或密码列表。

返回我的项目,在与服务器进行身份验证时,我使用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?

评论

TLS_RSA_WITH_AES_128_CBC_SHA可能是其中一个。

@StephenTouset您可能是对的,但请仅将这种情况作为一个经过充分描述的答案发布,在我看来,仅喊出一个特定的密码套件并没有太大帮助(因此在此处进行讨论是没有意义的。)。

#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意味着以下副作用: DHE适用于Diffie-Hellman参数,这些参数通常是安全性和互操作性的关键点。一些旧系统无法处理超过1024位的DHE参数,而其他一些系统将拒绝少于2048位的DHE参数。客户端无法确保服务器选择的参数确实很好(有些确实很差)。某些实现将无条件地拒绝DHE参数,除非它们是标准参数,并且没有人实施(没有,将来可能会实现)的扩展宣布。密钥必须为DSS类型。没有人这样做。如果您的系统是客户端,那么您极难与之对话的任何服务器都具有DSS密钥。早在2013年,我就在端口443上随机扫描了超过200万个IP地址,并位于大约16000个SSL / TLS服务器上。其中,恰好有6个具有DSS密钥(其中一些证书已过期)。如果您的嵌入式系统是服务器,那么祝您好运,可以从商业CA获得带有DSS密钥的证书。

基本上,这只剩下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