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

举报
且听风吟 发表于 2019/10/14 10:02:43 2019/10/14
【摘要】 https优化必须了解ChaCha20-Poly1305算法,本文将带你粗略了解一下ChaCha20-Poly1305算法。

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

  • 这篇文章下的留言完全文不答题,可见大家都是走马观花,看的文章越多,就很难去辨别真假和实践了。

  • HTTPS优化其实没有太多的技巧,大家在网络上看到一篇优化文章,一定要留意发表时间,随着时间的推移,这些技巧可能已经过时,一定要看官方的介绍(比如 OpenSSL)。

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

AEAD

一图胜千言:

5.png

在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年做过一个性能测试,见下面的表格:

ChipAES-128-GCM 速度ChaCha20-Poly1305速度
OMAP 446024.1 MB/s75.3 MB/s
Snapdragon S4 Pro41.5 MB/s130.9 MB/s
Sandy Bridge Xeon (AESNI)900 MB/s500 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 推荐的配置:

image.png


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


本文转载自异步社区。

原文链接:https://www.epubit.com/articleDetails?id=N914078cc-b5fd-4f42-8167-8764af85685b

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。