mac

gcm

https://blog.csdn.net/andylau00j/article/details/79269303

 

 

 

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

AEAD

一图胜千言:


12-4-chacha20-grid.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 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 推荐的配置:



作者:虞大胆的叽叽喳喳
链接:https://www.jianshu.com/p/fe8fc5157f96
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
posted @   zJanly  阅读(158)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示