首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >理解和适配AEAD加密套件

理解和适配AEAD加密套件

作者头像
owent
发布于 2018-08-01 09:44:30
发布于 2018-08-01 09:44:30
5.6K0
举报
文章被收录于专栏:owentowent

什么是AEAD

按照维基百科的说法。AEAD的全称是Authenticated encryption (AE) and authenticated encryption with associated data (AEAD, variant of AE)。也就是带附加数据的加密和验证算法。

我们很多涉及IO的系统收发数据的时候一般会加上一些校验码,以便检测IO错误。而对外的socket里,这个校验码还有一个功能是挡掉一些不正常的数据。如果这时候如果我们的数据需要带上加密的话,那就是AE了。然后AEAD就是在AE的基础上,增加一些自定义数据,用于防止猜解。

按维基百科的说法,AEAD也分为 Encrypt-then-MAC (EtM,先加密,再对密文做hash) 、Encrypt-and-MAC (E&M,先对原文做hash,然后分别加密原文和hash值) 和 MAC-then-Encrypt (MtE,先对原文hash,再把hash值附加到原文后,最后一起加密) 三种。

所以,其实我们有些服务可以直接用AEAD,而不是自己去加密然后算hash值,这样反而安全性更高一些。并且像openssl这类加密算法库还能使用一些硬件加速。

扩充crypto_cipher的加密套件

原来我为了写 atframework 的网络接入层,实现了对opensslmbedtls的适配和对接。也是为了同时满足服务器上高性能和客户端设备上易集成。既然已经有了,那么我就往这里面加入了AEAD的支持。区分加密套件是否是AEAD的类型,并且统一成一个易用的接口。openssl的接口实在太晦涩,而mbedtls的接口设计比openssl好太多,所以接口使用了mbedtls的形式。实际测下来,openssl的性能比mbedtls高一个数量级,所以服务器还是用openssl比较好。

原来的版本里,crypto_cipher 就已经支持常用的XXTEA、RC4、AES-128/192/256-CFB了。并且使用openssl 1.1以上的花,还支持chacha20。其中XXTEA是内置提供的加密算法代码,而其他的来自于加密库的cipher模块。既然扩充了,就顺便增加一下opensslmbedtls都支持的其他cipher。像是aes-128/192/256-ecb/cbc、des-ecb/cbc/ede/ede3、BLOWFISH、camellia等等。

AEAD算法比原来的接口多一个associated data的参数和一个tag的参数。所以我另外加了两个接口( encrypt_aeaddecrypt_aead )专门用于AEAD的加解密。同时这两个API在调用的时候也会检查用户是否使用了正确的接口,防止误用。

这里最重要的是保证数据和流程上标准化,也就是无论是用openssl还是mbedtls又或是其他库加密和解密的结果要一致。那怎么实现这个呢?当然最好的方法是单元测试和CI。

openssl的单元测试套件

之前crypto_cipher里的单元测试数据是mbedtls里爬出来的。但是我看到openssl里的单元测试数据集(evptests.txt)更完整,覆盖也更全面。所以就直接写了代码读它的测试数据集了。配合上原来的测试数据,然后CI里的构建矩阵同时开opensslmbedtls两种模式。这样所有支持的算法就都在测试集中了。

libsodium和openssl的chacha20

现在Google的chacha20算法比较火热,所以我们支持了chacha20chacha20-poly1305,一个仅仅是加密,另一个是AEAD。我没有实测过,但是看到一些文章说,在支持硬件加速的设备上,AES-128-GCM性能是ChaCha20-Poly1305的好几倍。而现代化的设备里已经越来越多的设备支持硬件加速AES算法了。

现在有一些开源框架支持使用libsodium来补充更完整的chacha20支持。libsodium 提供了更多的salsa20系列的算法,包括chacha20-ietf、xchacha20、chacha20-poly1305、chacha20-poly1305-ietf、xchacha20-poly1305-ietf。这样如果嵌入式设备和移动终端使用mbedtls的话,即便cipher里没有,也可以用这个库来提供 chacha20 的支持。

在单元测试的过程中我发现,在openssl里的名字为chacha20-poly1305的cipher,实际上对应的是 libsodium 里的chacha20-poly1305-ietf。所以导致这里不得不对openssl的名字也做一次名字转换。另外在 openssl 的代码和单元测试中,所有的 AEAD算法 都是支持动态iv长度、并且可以一定程度上设置associated data和tag的长度的。但是 libsodium 里这些长度都是固定的。这也是这两个库最大的不一致的地方。

最后

这次也是学习了解一下这个密码学的知识吧。之前确实是不了解AEAD,使用这个API和单元测试走了一遍坑之后也算是大致了解了这些加密的基本流程。像是openssl并没有 all in one的接口。如果想当然的用的话还是比较容易误用的,误用的结果就是可能和其他环境交互的时候出现各种不匹配的问题,也很难去查。现在封装好更易用的API并且先把坑淌一遍的话,以后在使用的时候就可以手到擒来了。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-07-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
AEAD 认证加密
AEAD stands for Authenticated Encryption with Associated Data. AEAD ciphers simultaneously provide confidentiality, integrity, and authenticity. They have excellent performance and power efficiency on modern hardware. Users should use AEAD ciphers whenever possible.
vanguard
2020/03/17
3.6K0
现代密码学实践指南[2015年]
本文介绍目前现代密码学的最先进技术, 前半部分主要翻译自 《Cryptographic Right Answers》,附上收集的资料,和byron个人的理解。
byronhe
2021/06/25
1.1K0
ChaCha20-Poly1305 算法介绍
ChaCha20 的核心是一个基于 ARX(Addition-Rotation-XOR,加法-循环移位-异或)操作的伪随机函数。它通过迭代一个称为“四分之一轮”的操作来生成密钥流。
密码学人CipherHUB
2025/06/02
5360
ChaCha20-Poly1305 算法介绍
ChaCha20 vs AES:当加密算法遇上TLS1.3的安全铁拳
基于 macbook pro M2 Max 芯片、Python 3.12.7 环境实测
密码学人CipherHUB
2025/06/08
4120
ChaCha20 vs AES:当加密算法遇上TLS1.3的安全铁拳
为什么我强烈建议你使用ECC 证书
本文包含三部分内容:1)简单介绍 ECC 证书是什么;2)介绍如何申请 ECC 证书;3)以 Nginx 为例介绍如何使用 ECC 证书。
Bug开发工程师
2019/05/05
12.2K1
为什么我强烈建议你使用ECC 证书
几个开源 RUST 安全算法库
这段时间把 RUST 语法过了一遍,写一些简单的 Demo 程序没啥问题了,但离掌握这门语言还差的远,需要项目实战才行。我决定从之前研究过的国密算法入手,使用 RUST 实现国密算法。
云水木石
2023/10/08
2.7K0
几个开源 RUST 安全算法库
让大象起舞第二弹---HTTPS计算性能优化
从第一弹的分析可以知道,HTTPS协议中最消耗CPU计算资源的就是密钥交换过程中的RSA计算。也是我们优化的最主要对象。
腾讯 架构师
2021/07/15
1.3K0
让大象起舞:HTTPS 计算性能优化
腾讯技术工程官方号
2017/08/02
6.2K1
让大象起舞:HTTPS 计算性能优化
OpenSSL安全套接字密码库命令
OpenSSL整个软件包大概可以分成三个主要的功能部分:密码算法库、SSL协议库以及应用程序,OpenSSL的目录结构自然也是围绕这三个功能部分进行规划的;
全栈工程师修炼指南
2022/09/29
1.2K0
让互联网更快的协议,QUIC在腾讯的实践及性能优化
本文系由“腾讯技术工程官方号”公众号与“InfoQ”公众号合办的“腾讯技术工程”专栏第二篇文章(第一篇回顾:QQ相册后台存储架构重构与跨IDC容灾实践),新的一年,腾讯技术工程专栏将为大家提供更多的腾讯技术干货与落地实践。同时,该专栏欢迎TEGer投递优质稿件,投稿请联系RTX(alvisshao)。
腾讯技术工程官方号
2023/07/26
1.6K0
让互联网更快的协议,QUIC在腾讯的实践及性能优化
让互联网更快的协议,QUIC 在腾讯的实践及性能优化
本文将主要介绍 QUIC 协议在腾讯内部及腾讯云上的实践和性能优化。
serena
2018/01/15
4.9K1
让互联网更快的协议,QUIC 在腾讯的实践及性能优化
让互联网更快的协议,QUIC 在腾讯的实践及性能优化
本文将主要介绍 QUIC 协议在腾讯内部及腾讯云上的实践和性能优化。
腾讯技术工程官方号
2018/01/10
2.5K0
让互联网更快的协议,QUIC 在腾讯的实践及性能优化
让互联网更快:新一代QUIC协议在腾讯的技术实践分享
如果:你的 App,在不需要任何修改的情况下就能提升 15% 以上的访问速度,特别是弱网络的时候能够提升 20% 以上的访问速度。
JackJiang
2018/08/29
2.6K0
如何针对老旧浏览器设置 HTTPS 策略
几天前,一位朋友问我:都说推荐用 Qualys SSL Labs 这个工具测试 SSL 安全性,为什么有些安全实力很强的大厂家评分也很低?我认为这个问题应该从两方面来看:
哲洛不闹
2018/09/14
1.5K0
如何针对老旧浏览器设置 HTTPS 策略
SSL/TLS加密检测脚本testssl.sh
以前SSL检测常用工具就是ssllabs的:https://www.ssllabs.com/ssltest/ 以及国内的https://myssl.com/.
Zach
2018/07/24
4.6K0
HTTP - TLS1.3 初次解读
在HTTP - HTTPS(TLS1.2)中,笔者介绍了目前世界主流的TLS1.2协议的相关知识点,文中从HTTP的缺陷、SSL的历史、信息加密的主要手段、数字证书、以及最为关键的TLS1.2交互过程介绍了现今HTTPS的关键部分内容。
阿东
2022/09/26
4.2K0
TLS协议分析 (三) record协议
record协议做应用数据的对称加密传输,占据一个TLS连接的绝大多数流量,因此,先看看record协议 图片来自网络:
用户8964349
2021/09/06
1.5K0
对比 AES-GCM 和 3DES
在对称加密算法中,AES-GCM 和 3DES 是两种综合性能和历史都算有代表性的算法。本文将从安全性、性能、应用场景等综合综吁解析,全面对比这两种对称加密算法。
孟斯特
2025/06/02
2260
对比 AES-GCM 和 3DES
learning:vpp crypto 框架介紹
本文基于vpp 主线master分支版本号v24.02介绍当前vpp ipsec crypto框架。在公众号《DPDK与SPDK开源社区》中,有一篇文章介绍VPP的异步Crypto框架(链接在参考文章1中)。与当前版本框架相差不大。
dpdk-vpp源码解读
2023/12/19
1.3K0
learning:vpp crypto 框架介紹
HTTPS安全优化配置最佳实践指南简述
描述: 当下越来越多的网站管理员为企业站点或自己的站点进行了SSL/TLS配置, SSL/TLS 是一种简单易懂的技术,它很容易部署及运行,但要对其进行安全部署的情况下通常是不容易。
全栈工程师修炼指南
2022/09/29
3K0
HTTPS安全优化配置最佳实践指南简述
相关推荐
AEAD 认证加密
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档