原文链接:https://luxsci.com/blog/256-bit-aes-encryption-for-ssl-and-tls-maximal-security.html
原文发表时间:2015.2.4
本博文仅仅是上述原文的翻译,仅供研究参考,本人不对准确性作任何保证,侵立删,如有转载,需自行承担所有责任。如有翻译不准确的地方,欢迎指教。
SSL/TLS是当今因特网上保护传输安全的重量级角色。然而,很多人并不知道安全的等级可以跨越“几乎没什么卵用”到“真的非常非常安全,美国政府TOP SECRET级别的数据都可使用”,等级变换的关键点在于“密码”或“密码技术”。有许多种密码:一些很快但不安全,一些很慢但非常安全。不安全密码的一个例子是“出口级密码”,当年美帝不允许将其出口至其他国家。
AES (高级加密标准)是比DES更新的加密算法。AES在2001年成为标准,在此之前经过了5年的审核,如今AES是最为流行的对称密码算法(SSL/TLS协议进行传输数据加密的实际算法)之一。它是加密技术的“黄金标准”,很多安全敏感的组织都要求其雇员使用AES-256进行通信数据的加密。
本文讨论AES以及它在SSL(多WEB浏览器和EMAIL程序都支持SSL协议)中的角色,以及如何保证所有的安全通信都使用AES256加密呢,还有其他更多的内容。
深入理解AES
大多数密码库对AES的支持都有相当长一段时间了。openssl对其的支持是从2002年的v0.9.7版本开始的。openssl是unix和linux环境下最为流行的SSL基础库,例如在LuxSci中,GPG(PGP的开源实现)中也包含了对AES256的支持。
AES是当前的新宠,已经成功的渗透到大多数软件中。但是,正如我们将要看到的,这并不意味着在你的计算机中已经实际使用到它了。
AES256有多安全
AES是FIPS(联邦信息处理标准)认证的算法,并且目前尚未有除了暴力破解外的其他攻击方式(除了一些针对AES处理的旁路分时攻击,但并不适用于网络环境和SSL)。实际上,AES的安全是如此之强,美国政府的“绝密(top secret)”级别信息都可使用其进行加密。
AES算法设计的具有不同的密钥长度(128、192、256),目的是提供对从“已分类信息( classified information)"到”机密信息(SECRET )“都提供适当的保护。绝密(TOP SECRET)级信息需要使用192或256长度的密钥。为了保护国家安全系统/信息的AES实现在使用之前必须通过NAS的认证 (Lynn Hathaway, June 2003 – reference.)。
如果你正在选择加密算法,AES256是一个不错的选择,虽然AES128和AES192的也不错。
Beast Attack和SSL安全相关站点
针对保护Web通信的SSL协议的攻击,广为人知的是Beast攻击。在此攻击中,位于你网络可信区域的攻击者可以进入你的SSL Session并且窃听通信数据。
解决办法是使用TLS v1.1+的密码算法。然而,BEAST攻击如如今不再被认为是一个很重要的攻击。
参看:
有除了AES之外的选择吗?
SSL/TLS中有许多可选的密码算法,一个不错的选择是“3DES”(例如,出于兼容XP系统的目的)。出于已知的弱点,我们不建议使用RC4算法。FIST/NIST给出了高安全级别的推荐算法,这些算法基本上都是AES或DES结合不同的哈希算法、密钥交换协议。
SSL/TLS会话中如何选择密码算法?
一般而言,当SSL客户端(例如email程序或WEB浏览器)向服务器发起SSL或TLS连接时,客户端发送它所支持的加密算法列表。服务器顺序检查该列表,并且选择自身也支持的第一个匹配项。客户端一般将最安全的算法放在第一位,因此客户端和服务端将会选择双方都支持的最安全的算法。不过客户端有时会权衡安全和速度,也可能会导致选择了次优算法。
大多数支持SSL的现代WEB和EMAIL服务器(例如LuxSci.com的服务器)支持很多种不同的强加密技术,包括128位的RC4和256位的AES。它们提供了一系列算法而非只有一个最优的,这允许那些使用较老软件的访问者仍能享受加密的好处,即使其安全强度比理想中要低很多。
另外,大多数提供安全服务的公司都禁止使用那些安全强度过低的算法,这些算法可能很容易的被攻破(例如曾广泛使用的出口级密码)。因此,如果你访问一个基于SSL或TLS提供的声誉良好的服务,加密类型的选择基本上是由你的客户端程序(例如email程序或WEB浏览器)根据服务端提供的选项及选项排列来决定的。
现代浏览器都支持那些加密技术?
对于任何浏览器,通过访问如下网址可以很方便的看到它所支持的最佳加密技术:https://www.howsmyssl.com/
通过对一些浏览器的检查,可以得到下表:
浏览器 |
操作系统 | 最佳密码算法 | 结论? |
Native Android Browser (LG G3) | Android v4.4.2+ | AES 256-bit | Good! |
Chrome v39+ | Android v4.4.2+ | AES 256-bit | Good! |
FireFox Mobile v8+ | Android | AES 256-bit | Good! |
Safari | iOS v8+ (iPhone/iPad/etc.) | AES 256-bit | Good |
Safari | iOS v5.0.1 | AES 128-bit | Good |
Safari | iOS v2.2 | AES 128-bit | Good |
Silk | Kindle Fire | RC4 128-bit | Fair |
FireFox v35+ | Windows XP & Vista, Mac OSX | AES 256-bit | Good! |
FireFox v8+ | Windows XP & Vista, Mac OSX | AES 256-bit | Good! |
FireFox v3.0.5 | Windows XP & Vista, Mac OSX | AES 256-bit | Good! |
Safari v8+ | Windows Vista/7, Mac OSX | AES 256-bit | Good |
Safari v5.1.2 | Windows Vista/7, Mac OSX | AES 128-bit | Good |
Safari v3.2.1 | Windows Vista, Mac OSX | AES 128-bit | Good |
Safari v3.2.1 | Windows XP | RC4 128-bit | Fair |
Chrome v40+ | Windows Vista/7, Mac OSX | AES 256-bit | Good! |
Chrome v15+ | Windows Vista/7, Mac OSX | AES 256-bit | Good! |
Chrome v1.x | Windows Vista | AES 128-bit | Good |
Chrome v1.x | Windows XP | RC4 128-bit | Fair |
Internet Explorer v11 | Windows 7 | AES 256-bit | Good |
Internet Explorer v9 | Windows 7 | AES 128-bit | Good |
Internet Explorer v9 | Windows Vista | RC4 128-bit | Fair |
Internet Explorer v7 & v8 | Windows Vista | AES 128-bit | Good |
Internet Explorer v8 | Windows XP | RC4 128-bit | Fair |
Internet Explorer v7 | Windows XP | RC4 128-bit | Fair |
Internet Explorer v6 | Windows XP | RC4 128-bit | Fair |
Opera v26+ | Mac OSX | AES 256-bit | Good! |
Opera v11.10+ | Windows Vista | AES 256-bit | Good! |
Opera v9.62 | Windows XP & Vista | AES 256-bit | Good! |
从上表可以看出,即使环境支持AES算法,也仅仅只有某些浏览器会默认使用AES算法。我们也看到任何使用Windows默认SSL库的程序在XP上会使用RC4算法,在Vista上会使用128位的AES算法。因此,使用XP或Win2000系统的同学最好使用有自己SSL算法管理器的浏览器(例如Firefox,Opera)。
现代Email程序都支持那些加密技术?
这里的Email程序不包括使用浏览器。很显然,如果使用WebMail接口访问邮箱,该问题的答案取决于使用的是什么浏览器。
注意Email连接不受Beast攻击的影响。
我们测试了一些流行的Email程序,以测试它们与支持多种强加密算法的服务器连接时会选择何种密码算法.1 结果见下表:
Email程序 | 操作系统 | 结论? | 结果 |
Mozilla Thunderbirdv2+ | Windows XP & Vista | Good! | 256-bit AES |
Thunderbird v2+ | Mac OSX v10.4.11 | Good! | 256-bit AES |
Outlook 2010 | Windows 7 | Good! | 256-bit AES |
Outlook 2007 | Windows XP | Fair | 128-bit RC4 is the best supported |
Outlook 2007 | Windows Vista | Good | 128-bit AES chosen (though 256-bit is there, it is not listed 1st in the program and thus not used) |
Outlook 2003 | Windows XP | Fair | 128-bit RC4 is the best supported |
Mail.app | Mac OSX v10.10 | Good | 256-bit AES |
Mail.app | Mac OSX v10.5.5 | Good | 128-bit AES chosen (though 256-bit is there, it is not listed 1st in the program and thus not used) |
Mail.app | Mac OSX v10.4.11 | Good | 128-bit AES chosen (though 256-bit is there, it is not listed 1st in the program and thus not used) |
Mail.app | iPhone v2.2 | Good | 128-bit AES chosen (though 256-bit is there, it is not listed 1st in the program and thus not used) |
Eudora v7 | Windows XP | Good | 256-bit AES |
Eudora v8 | Mac OSX v10.4 | Good | 256-bit AES |
Entourage v12 | Mac OSX v10.4 | Fair | DES |
我们看到了类似的模式,大多数情况下,密码算法的选择取决于操作系统而不是程序。一些程序使用其自身的SSL库(例如Thunderbird/Eudora),一些使用的是操作系统内建的库。因此,我们可以推断出在Vista或Windows7+上的新版Outlook将会至少支持128位的AES,XP系统上的大部分程序将使用128位的RC4。
如何强制浏览器和Email程序使用256位AES?
如前讨论,email客户端的选择是决定加密算法使用的首要要素(?似不符,应是指使用自己SSL库的email客户端)。例如,如果使用Firefox或Opera进行Web访问,使用Thunderbird访问email,将会使用245位的AES算法,当然前提是服务器也支持。
然而,如果你想更进一步,保证只有在使用256位AES算法时才进行安全连接,这也是可行的。如果你的组织强制要求使用256位AES,或你不信任那些使用其他算法的服务器,可以考虑这种方法。
上述方式在另外一种场景下也是非常有用的:你正在连接的Web站点将RC4算法放在了AES算法之前,但是你知道你的浏览器是不受Beast攻击影响的(例如你使用了TLS v1.1+的协议),并且你更倾向于使用AES。现在,大多数现代浏览器的新版本(例如Ie、Firefox、Chrome、Opera)都是Beast免疫的。但是,浏览器的旧版本还是会受Beast攻击的影响。
根据下面的指导,你可以确保256位的AES算法应用于所有的安全连接,如果服务端不支持AES256则连接会失败。如果你有其他操作系统或程序的设置方式,请留言告知我们。
注意如果你移除了RC4算法的支持,你可能无法访问一些站点,那些只支持RC4的站点,我们办公室旁边支持网上订餐的Pizza店就是个例子。
Mozilla Firefox:
- 在地址栏输入“about:config” 并回车,打开配置参数的详细列表。
- 确保 “security.tls.version.min”是“1”,以便关闭对SSLv2和SSLv3的支持。
- 搜索 “security.ssl3“。
- 将名字中不含“aes_256”的所有算法项(例如RC4、camellia、des等)的值都改为“false”。这将会使得它们不再可用。
- 你将只剩下TLS v1.0+和AES256的各项。
- 你甚至无需重启Firefox即可生效。
注意Firefox有一个非常NB的插件叫“CipherFox”,它允许你查看所连接站点的密码算法信息。
Mozilla Thunderbird: (也可参看 optimization tips for Thunderbird)
- 从“Tools”菜单选择“Options”。
- 在“Option”对话框的“Advanced”标签页的“General”区,点击“Config Editor...”按钮。
- 采取同Firefox设置类似的操作,禁用SSLv2和SSLv3,关闭所有名字中不包括“aes_256”的算法。
- 重启Thunderbird以便一些持久化的连接关闭并且重新打开。
- 确保你的email帐号都配置为使用SSL或TLS,不是“if available”,而是“always”。
- 如果你的email提供商支持,彻底的禁用你帐号的不安全连接。这将会导致连接失败,即使email程序意外的配置为安全连接(?)。
Google Chrome
Chrome使用操作系统的SSL设置。因此,如果你从操作系统上改变了密码算法顺序或移除了RC4(方法见下面),这将会解决你在Chrome上的问题。
我们发现如果使用一些额外的命令行参数启动Chrome,可以强制使用TLS1.0+并且可以阻止某些密码算法的使用,例如:将下述参数添加至Chrome快捷方式(以Arguments的方式)或命令行。
--ssl-version-min=tls1 --cipher-suite-blacklist=0x0005,0x0004,0xc011,0xc007
将会阻止RC4算法的使用.
Internet Explorer
为了禁用RC4算法,并设置AES256为主要算法,你需要在Windows操作系统中更改密码算法支持。方法参看下面。
Skype:
- 稍微偏离了点主题,但 Skype 使用256位的AES加密算法,因此如果你使用它聊天或语音电话,你的数据将会以这种方式加密。
Windows Vista, Windows 7+
我们已经看到,Windows Vista及更高的版本支持256位的AES,但是它将128位AES放在了列表的首位,因此这也是windows环境中大多数依赖于Windows内建SSL模块程序的工作方式(例如IE、Chrome、Outlook等)。
如果你的Windows是“小企业版”及以上的版本,你可以通过使用“组策略编辑器”移除不想使用的密码算法,也可改变算法的出现顺序。例如,为了将AES256而不是AES128或RC4设为默认选择,可参考这些指引:
- 通过在命令行窗口中键入gpedit.mscd打开组策略编辑器。
- 选择Computer Configuration | Administrative Templates | Network | SSL Configuration Settings.
- 只有一个条目: SSL Cipher Suite Order. 打开它。
- 选择Enabled.
- 现在你需要小心操作。你将会看到同上面一样的列表,但没有进行很好的格式化,而是简单的以逗号分割。列表的第一项是:
TLS_RSA_WITH_AES_128_CBC_SHA
第二项是:
TLS_RSA_WITH_AES_256_CBC_SHA
在列表中移动光标。将第一个128改为256,然后继续移动光标,将256改为128.(如果你不能编辑或输入,可以将其拷贝出来,粘贴到记事本中,编辑后在粘贴回来)。- 如果你想取消RC4和其他非AES算法,以便使用AES替代RC4,并且你知道你的浏览器是Beast免疫的,那么可在列表中移除RC4的项。 例如:TLS_RSA_WITH_RC4_128_SHA, TLS_RSA_WITH_RC4_128_MD5, and SSL_CK_RC4_128_WITH_MD5
- 也可改变其他的顺序,但要保证确实是在算法种类中做的改变。
- 点击OK,关闭组策略编辑器,重启系统。
使用相同的方法,你可以移除不想使用的所有算法,以锁定Windows只使用AES或只使用AES256作为加密算法。
然而,对于基本家庭版和高级家庭版的用户而言,是没有“组策略编辑器”的(如果你从其他Windows中拷贝过来是无法运行的),进行这项改变是比较麻烦的。但是上述多有设置都会体现在注册表中,因此可以直接更改注册表。我们这里不详细说明了,具体可以参看此链接。
如果你不确定你的Windows版本,可以尝试上述操作,看看gpedit.msc是否能打开一个对话框。
锁定你的Web站点(Apache)
如果你是一个web站点的所有者,并且你的站点使用了SSL,你可以“锁定”站点以便只支持AES256。这将去除终端用户的选择权--要么使用AES,要么不安全的连接(?)。这对于非常敏感的站点是很好的事情。然而,它的“危险”是你的一些用户可能使用的是不支持AES算法的浏览器(例如IE的一些旧版本),因此他们无法访问你的站点,除非更换浏览器。
要想将你的站点锁定为支持AES128或AES256(使用AES但不要求256是为了iPhone等设备上的浏览器可以工作),你可以在httpd.conf文件中添加如下内容:
SSLCipherSuite AES256-SHA:AES128-SHA
这也可以添加全局配置,在虚拟目录中,甚至是在你的.htaccess文件中(不太懂)。这会确保所有到你的站点的连接都使用了这些算法中的一个。需要保证将其添加到你站点的安全设置中,而不仅是不安全的站点区域(?)。更多信息参看这里。
一般而言,要为Apache进行高级别安全配置,你应该仅仅支持TLS v1.0+的协议和NIST推荐算法。参看: what level of TLS is required for HIPAA.
结论
如果你有AES选项的话,它是使用SSL的正确姿势。只要你是用的计算机不是古董,它真的不会太多的影响速度和性能。如果你担心安全的话,我们强烈建议你使用启用了AES的浏览器和/或email客户端(如今大多数程序中都包括)。
注意SSL和TLS只保护在你和服务器之间传输的数据,当你收发email时,在发送者和接收者之间网络上传输的信息数据是不受保护的,无论你的SSL是多么好(译者注:也就是说SSL只是信道加密),更多信息请参考The Case for Email Security。解决方案是在SSL之外使用端到端的email加密方案,例如LuxSci的SecureLine(SecureLine保护信息内容,SSL保护你的用户名和口令)。
1 对于真实email程序的测试,我们通过在IMAP端口运行调试模式的openssl来进行的。这将会记录下客户端和服务端选择的密码算法。