内容字号:默认大号超大号

段落设置:段首缩进取消段首缩进

字体设置:切换到微软雅黑切换到宋体

https优化必须了解ChaCha20-Poly1305算法

2018-12-05 11:28 出处:清屏网 人气: 评论(0

前几天看到某个公众号发的一遍关于HTTPS优化的文章,进去一看,全是错误的观点,给自己的感觉非常不好。

    • 这篇文章下的留言完全文不答题,可见大家都是走马观花,看的文章越多,就很难去辨别真假和实践了。
    • HTTPS优化其实没有太多的技巧,大家在网络上看到一篇优化文章,一定要留意发表时间,随着时间的推移,这些技巧可能已经过时,一定要看官方的介绍(比如 OpenSSL)。

基于这两个问题,我谈一谈那篇文章提到的二个概念(分别是ChaCha20-Poly1305算法和等价加密算法组),分两篇文章讲解,希望给你更多的思考。本文主要讲解ChaCha20-Poly1305算法的方方面面。

AEAD

一图胜千言:

在HTTPS协议(TLS协议中)中,密码库(OpenSSL、NSS)在进行数据加密的时候,涉及到两种算法,分别是对称加密算法和MAC算法,为保证机密性和完整性,这两种算法必须同时存在。

对于密码库(比如OpenSSL)来说,如果由它结合处理对称加密算法和MAC算法,有的时候会出现安全问题,CBC 迭代会遇到填充攻击,也就是说 传统加密模式 存在安全风险。

这时候就出现了 AEAD 加密模式,它在内部自行处理加密和MAC运算,无须密码库(比如OpenSSL)处理,安全性更高,而ChaCha20-Poly1305也采用AEAD加密模式。

单独从加密算法的角度来看,分为块加密算法和流密码加密算法,RC4是一种流密码加密算法,但由于安全问题,已经基本不在HTTPS中使用了,块加密算法比较流行的就是 AES 算法,而ChaCha20-Poly1305是一种流加密算法。

现在我们从整体上了解了ChaCha20-Poly1305算法的定位,如果你想了解更多 AEAD 的知识,可以参考我写的书《深入浅出HTTPS:从原理到实战》。那么和AES-GCM相比,它有哪些优点呢?它为什么出现呢?

性能

对于 AES 这样的块加密算法来说,在某些硬件上运行的非常快,比如现在的服务器和台式机都有AES-NI加速指令。而如果没有加速指令,纯粹通过软件运行,性能是很低的。

而流密码算法刚好反过来,软件实现性能更高,大部分移动设备(比如手机)由于没有AES-NI支持,运行 AES 加密是很缓慢的。运行 RC4 这样的流加密算法速度相对较快,可惜的是 RC4 早已经被证明不安全了。

这个时候ChaCha20-Poly1305流密码算法来了,除了安全性外,它在移动设备上运行的性能较高。大部分观点认为,在移动设备上(没有AES-NI指令),ChaCha20-Poly1305 算法的性能是 AES-128-GCM 的三倍;当然在台式机和服务器上,AES-128-GCM 性能比ChaCha20-Poly1305更高。

Adam Langley 在 2014 年做过一个性能测试,见下面的表格:

Chip

AES-128-GCM 速度

ChaCha20-Poly1305速度

OMAP 4460

24.1 MB/s

75.3 MB/s

Snapdragon S4 Pro

41.5 MB/s

130.9 MB/s

Sandy Bridge Xeon (AESNI)

900 MB/s

500 MB/s

历史

ChaCha20-Poly1305 算法是Google 2013年提出来的,11月份在Chrome 31版本启用了该算法,2014年4月所有的IOS设备和Android设备上的Chrome也启用了。firfox的密码库用的是 NSS,NSS 3.23 版本支持 ChaCha20/Poly1305。

CloudFlare在2015年2月也支持了ChaCha20/Poly1305算法,经检测有10%的流量使用了这种算法。

不过不管是Google还是CloudFlare,他们实现的ChaCha20/Poly1305算法都不是最终的版本,从2015年开始,IETF 对这一算法进行了标准化,历经了多个草案(https://tools.ietf.org/html/draft-mavrogiannopoulos-chacha-tls-05),最终在2016年6月定稿了(https://tools.ietf.org/html/rfc7905)。

作为世界上最流行的密码库和TLS库,OpenSSL从 1.1.0(2016年8月)开始支持 ChaCha20-Poly1305 算法。如果你使用的是 OpenSSL 版本较旧,可以使用 CloudFlare 开发的 patch(https://github.com/cloudflare/sslconfig/blob/master/patches/openssl__1.1.0_chacha20_poly1305.patch)

Nginx 支持

Nginx使用的密码库是 OpenSSL,只要 OpenSSL 版本支持该算法,那么 Nginx 就能使用,配置非常简单,比如 mozilla 推荐的配置:

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384';
ssl_prefer_server_ciphers on;

我会长期关注HTTPS方面的进展,所有写的文章都不是从《深入浅出HTTPS:从原理到实战》搬移的,都是我最新学习的,欢迎大家关注,我的公众号(ID:yudadanwx,虞大胆的叽叽喳喳)

分享给小伙伴们:
本文标签: httpsChaCha20

相关文章

发表评论愿您的每句评论,都能给大家的生活添色彩,带来共鸣,带来思索,带来快乐。

CopyRight © 2015-2016 QingPingShan.com , All Rights Reserved.

清屏网 版权所有 豫ICP备15026204号