原文链接: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:

  1. 在地址栏输入“about:config” 并回车,打开配置参数的详细列表。
  2. 确保 “security.tls.version.min”是“1”,以便关闭对SSLv2和SSLv3的支持。
  3. 搜索 “security.ssl3“。
  4. 将名字中不含“aes_256”的所有算法项(例如RC4、camellia、des等)的值都改为“false”。这将会使得它们不再可用。
  5. 你将只剩下TLS  v1.0+和AES256的各项。
  6. 你甚至无需重启Firefox即可生效。

注意Firefox有一个非常NB的插件叫“CipherFox”,它允许你查看所连接站点的密码算法信息。

Mozilla Thunderbird: (也可参看 optimization tips for Thunderbird)

  1. 从“Tools”菜单选择“Options”。
  2. 在“Option”对话框的“Advanced”标签页的“General”区,点击“Config Editor...”按钮。
  3. 采取同Firefox设置类似的操作,禁用SSLv2和SSLv3,关闭所有名字中不包括“aes_256”的算法。
  4. 重启Thunderbird以便一些持久化的连接关闭并且重新打开。
  5. 确保你的email帐号都配置为使用SSL或TLS,不是“if available”,而是“always”。
  6. 如果你的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设为默认选择,可参考这些指引

  1. 通过在命令行窗口中键入gpedit.mscd打开组策略编辑器。
  2. 选择Computer Configuration | Administrative Templates | Network | SSL Configuration Settings.
  3. 只有一个条目: SSL Cipher Suite Order. 打开它。
  4. 选择Enabled.
  5. 现在你需要小心操作。你将会看到同上面一样的列表,但没有进行很好的格式化,而是简单的以逗号分割。列表的第一项是:
    TLS_RSA_WITH_AES_128_CBC_SHA
    第二项是:
    TLS_RSA_WITH_AES_256_CBC_SHA
    在列表中移动光标。将第一个128改为256,然后继续移动光标,将256改为128.(如果你不能编辑或输入,可以将其拷贝出来,粘贴到记事本中,编辑后在粘贴回来)。
  6. 如果你想取消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
  7. 也可改变其他的顺序,但要保证确实是在算法种类中做的改变。
  8. 点击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来进行的。这将会记录下客户端和服务端选择的密码算法。

[译]使用AES 256以达到SSL/TLS安全最大化的更多相关文章

  1. [译]HIPAA要求的SSL/TLS等级

    原文链接:https://luxsci.com/blog/level-ssl-tls-required-hipaa.html 原文发表时间:2015.1.13 本博文仅仅是上述原文的翻译,仅供研究参考 ...

  2. [译]SSL/TLS真的被BEAST攻击攻破了吗?真实情况是怎样的?我应该做什么?

    原文链接:https://luxsci.com/blog/is-ssltls-really-broken-by-the-beast-attack-what-is-the-real-story-what ...

  3. Network - SSL/TLS的基本概念

    对称加密与非对称加密 加密---明文变成密文:解密---密文变为明文.在这两个过程中,都需要密钥. 对称密钥加密(共享密钥) 指的是双方共同拥有使用完全相同的单个key, 这种Key既用于加密,也用于 ...

  4. SSL/TLS协议详解(下)——TLS握手协议

    本文转载自SSL/TLS协议详解(下)--TLS握手协议 导语 在博客系列的第2部分中,对证书颁发机构进行了深入的讨论.在这篇文章中,将会探索整个SSL/TLS握手过程,在此之前,先简述下最后这块内容 ...

  5. 一篇文章搞懂密码学基础及SSL/TLS协议

    SSL协议是现代网络通信中重要的一环,它提供了传输层上的数据安全.为了方便大家的理解,本文将先从加密学的基础知识入手,然后展开对SSL协议原理.流程以及一些重要的特性的详解,最后会扩展介绍一下国密SS ...

  6. HTTPS(SSL/TLS) 原理之深入浅出

    注:本文参考自网络上的多篇HTTPS相关文章,本人根据自己的理解,进行一些修改,综合. 1. 必要的加密解密基础知识 1)对称加密算法:就是加密和解密使用同一个密钥的加密算法.因为加密方和解密方使用的 ...

  7. MINA、Netty、Twisted一起学(十一):SSL/TLS

    什么是SSL/TLS 不使用SSL/TLS的网络通信,一般都是明文传输,网络传输内容在传输过程中很容易被窃听甚至篡改,非常不安全.SSL/TLS协议就是为了解决这些安全问题而设计的.SSL/TLS协议 ...

  8. SSL/TLS 握手过程详解

    在现代社会,互联网已经渗透到人们日常生活的方方面面,娱乐.经济.社会关系等都离不开互联网的帮助.在这个背景下,互联网安全就显得十分重要,没有提供足够的安全保障,人们是不会如此依赖它的.幸运的是,在大牛 ...

  9. SSL/TLS通信

    本文同时发表在https://github.com/zhangyachen/zhangyachen.github.io/issues/31 复习基本概念 对称密码:加密和解密使用同一密匙. 公钥密码: ...

随机推荐

  1. jQuery 工具类库集锦

    备注:待验证. ...................................以下待验证................................ 今天度娘发现这个内容,原来我一直做的都 ...

  2. erlang远程加载模块须知

    erlang加载本地beam到远程节点,需要把依赖库一个个手动加载,否则他不会自动加载. 另外,创建lib的话,使用 rebar-creator create-lib

  3. golang一个深复制的库

    https://github.com/mitchellh/copystructure

  4. PLSQL_基础系列10_子查询WITH AS(案例)

    2015-05-29 Created By BaoXinjian

  5. Java中的注解是如何工作的?--annotation学习一

    自Java5.0版本引入注解之后,它就成为了Java平台中非常重要的一部分.开发过程中,我们也时常在应用代码中会看到诸如@Override,@Deprecated这样的注解.这篇文章中,我将向大家讲述 ...

  6. Python标准库04 文件管理 (部分os包,shutil包)

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 在操作系统下,用户可以通过操作系统的命令来管理文件,参考linux文件管理相关命令 ...

  7. 解决xcode打开时loading假死的问题

    症状如下: 点击打开xcode后,就一直会看到loading,但是CPU消耗很高,基本上就是死了(动弹不得),通过活动监测器看到xcode显示为“未响应” 以为是安装程序的问题,结果选中xcode拉到 ...

  8. Gatling的进阶三

    1. checks check是Gatling非常重要的一个特性,用来判断是场景否真的执行成功了   .exec(http("request_1")       .get(&quo ...

  9. JMeter非GUI方式运行时动态设置线程组及传参

    http://blog.csdn.net/selingchen/article/details/48106517 在使用JMeter进行性能测试自动化时,可能会有如下需求: 1.指定运行多少线程,指定 ...

  10. Dapper.NET使用(转)

    Dapper.NET使用 本文目录 Dapper.NET使用 1.为什么选择Dapper 2.以Dapper(4.0)为例. 2.1 在数据库中建立几张表. 2.2实体类. 3.使用方法 3.1  一 ...