AEAD stands for Authenticated Encryption with Associated Data. AEAD ciphers simultaneously provide confidentiality, integrity, and authenticity. Users should use AEAD ciphers whenever possible. AEAD 产生的原因很简单,单纯的对称加密算法,其解密步骤是无法确认密钥是否正确的。 12 16 AEAD_AES_256_GCM aes-256-gcm 32 32 12 16 AEAD_AES_192_GCM aes-192-gcm 24 24 12 16 AEAD_AES_128
什么是AEAD 按照维基百科的说法。 AEAD的全称是Authenticated encryption (AE) and authenticated encryption with associated data (AEAD, variant 然后AEAD就是在AE的基础上,增加一些自定义数据,用于防止猜解。 既然已经有了,那么我就往这里面加入了AEAD的支持。区分加密套件是否是AEAD的类型,并且统一成一个易用的接口。 AEAD算法比原来的接口多一个associated data的参数和一个tag的参数。所以我另外加了两个接口( encrypt_aead 和 decrypt_aead )专门用于AEAD的加解密。
这就是非 AEAD加密模式的致命缺陷:只管加密,不防篡改。 为什么加密不等于安全? 划重点:什么是AEAD? AEAD is awesome!" Nonce(编号)防重放攻击 当前支持AEAD的加密算法 目前超过90%的HTTPS流量使用AES-GCM或ChaCha20-Poly1305,而TLS 1.3更是强制使用AEAD技术! 虽然AEAD提供终极防护,但如果实现不当(如密钥泄漏或随机数重用),仍然可能导致各种数据风险,因此,AEAD不是银弹,因为黑客从不攻击算法本身,而是寻找人犯错留下的缝隙。
ipsecmb native* openssl ipsecmb* openssl aead-decrypt ipsecmb native* * openssl aead-decrypt ipsecmb native* openssl ipsecmb* openssl aes-256- gcm aead-encrypt ipsecmb native* openssl ipsecmb* openssl aead-decrypt aead-encrypt openssl* openssl* aead-decrypt openssl* * aead-decrypt openssl* openssl* chacha20-poly1305 aead-encrypt
GCM模式是AEAD的,所以不需要MAC算法。 GCM模式是AEAD的一种,AEAD 的 作用类似于 Encrypt-then-HMAC ,例如 Sha256 + Salt + AES + IV 此处需要介绍一个陷阱。 4.7. record层的密码学保护— AEAD cipher AEAD 到了我们重点关注的AEAD,AEAD是新兴的主流加密模式,是目前最重要的模式,其中主流的AEAD模式是 aes-gcm-128/ 并且规定 N_MAX小于8字节的AEAD不得用于TLS。 AEAD输入的明文就是 TLSCompressed.fragment (记得上面的介绍吗?AEAD是MAC和encrypt的集成,所以输入数据不需要在算MAC了).
AEAD_AES_256_GCM 加解密 首先是这个 AEAD_AES_256_GCM 加解密能力函数的应用。 (见文末参考文档中第二条链接) $data = '测试加密'; // 原始数据 $nonce = random_bytes(SODIUM_CRYPTO_AEAD_AES256GCM_NPUBBYTES) ; // 加密证书的随机串,加密证书的随机串 $ad = 'fullstackpm'; // 加密证书的随机串 $kengen = sodium_crypto_aead_aes256gcm_keygen (); // 密钥 // 是否可用 echo sodium_crypto_aead_aes256gcm_is_available(), PHP_EOL; // 1 // 加密 $pem = sodium_crypto_aead_aes256gcm_encrypt sodium_crypto_aead_aes256gcm_encrypt() 加密生成的内容也是二进制的内容,所以相对来说也是非常安全的一种加密形式。
0x13,0x02 - TLS_AES_256_GCM_SHA384 TLSv1.3 Kx=any Au=any Enc=AESGCM(256) Mac=AEAD 0x13,0x03 - TLS_CHACHA20_POLY1305_SHA256 TLSv1.3 Kx=any Au=any Enc=CHACHA20/POLY1305(256) Mac=AEAD 0x13,0x01 - TLS_AES_128_GCM_SHA256 TLSv1.3 Kx=any Au=any Enc=AESGCM(128) Mac=AEAD 0xA9 - ECDHE-ECDSA-CHACHA20-POLY1305 TLSv1.2 Kx=ECDH Au=ECDSA Enc=CHACHA20/POLY1305(256) Mac=AEAD 0xA8 - ECDHE-RSA-CHACHA20-POLY1305 TLSv1.2 Kx=ECDH Au=RSA Enc=CHACHA20/POLY1305(256) Mac=AEAD
AEAD(带认证的加密) 使用对称算法(如AES-GCM-256)加密数据基于ECDH密钥交换模拟HPKE运行机制本地密钥生成:KEM实现:HPKE 密钥协商:加解密封装:模拟 HPKE 的运行逻辑:运行效果 plaintext.decode()}')print(f'plain hash:{hashlib.sha256(plaintext).hexdigest()}')# 定义HPKE所需的附加信息 aead_info =b"HPKE AEAD INFO" psk =b"HPKE PSK DATA" psk_id =b"HPKE PSK ID" aad_tag =b"HPKE AEAD TAG"# print(f'alice_tmp_enc_public_key_bytes length:{len(alice_tmp_enc_public_key_bytes)}')# 发送方Alice加密数据# AEAD psk , psk_id = psk_id , pks = alice_public_key_for_auth ,# 发送者的公钥)# 接收方Bob解密数据# AEAD
Linux Kernel 的 Crypto API 中有一个 algif_aead 模块,负责将用户态通过 AF_ALG 套接字发送的数据交给内核 AEAD 算法进行认证加密与解密。 为了优化性能,AF_ALG 的 AEAD 解密路径在 2017 年引入了一次就地(in-place)操作的优化(提交 72548b093ee3),会将 splice() 传递进来的目标文件页缓存页面直接链入可写的输出散列表 2026-31431 Red Hat 安全公告:https://access.redhat.com/security/cve/cve-2026-31431 缓解措施 若暂时无法升级内核,可禁用 algif_aead 内核模块: echo "install algif_aead /bin/false" > /etc/modprobe.d/disable-algif-aead.conf 注:建议在升级前做好数据备份工作
漏洞描述 Description 01 漏洞成因 Linux 内核加密模块 authencesn在 2017 年引入了一处针对 AEAD(认证加密)操作的原地(in-place)优化,该优化导致在特定条件下 触发方式:本地 权限认证要求:普通用户权限 系统配置要求:默认配置 用户交互要求:无需用户交互 利用成熟度:EXP 已公开,732 字节,100% 稳定复现 修复复杂度:低,升级内核或临时禁用 algif_aead 内核模块可阻断漏洞利用路径: # 永久禁用(重启后生效) echo "install algif_aead /bin/false" > /etc/modprobe.d/disable-algif.conf # 立即卸载(当前会话生效) rmmod algif_aead 2>/dev/null || true 禁用 algif_aead 的影响评估: 不影响:dm-crypt/LUKS、kTLS、IPsec 可能影响:显式启用了 afalg引擎的 OpenSSL、部分嵌入式加密卸载路径、直接绑定 aead/skcipher/hash 套接字的应用。
func (w StreamWriter) Write(src []byte) (n int, err error) func (w StreamWriter) Close() error type AEAD func NewGCM(cipher Block) (AEAD, error) NewCBCDecrypter NewCBCEncrypter NewCFBDecrypter NewCFBEncrypter type AEAD type AEAD interface { // 返回提供给Seal和Open方法的随机数nonce的字节长度 NonceSize() int // 返回原始文本和加密文本的最大长度差异 Open(dst, nonce, ciphertext, data []byte) ([]byte, error) } AEAD接口是一种提供了使用关联数据进行认证加密的功能的加密模式。 func NewGCM func NewGCM(cipher Block) (AEAD, error) 函数用迦洛瓦计数器模式包装提供的128位Block接口,并返回AEAD接口。
|执行被篡改程序| E[获得 root shell] end subgraph "漏洞成因" F[2017 年内核优化] -->|引入 in - place 优化| G[algif_aead 永久禁用 algif_aead 模块 echo "install algif_aead /bin/false" > /etc/modprobe.d/disable-algif.conf # 2. 卸载已加载模块(失败则忽略,可能内置) rmmod algif_aead 2>/dev/null || true # 3. 验证模块是否被禁用 modprobe algif_aead 2>&1 || echo "✓ algif_aead 模块已成功禁用" # 4. 立即禁用 algif_aead 模块 echo "install algif_aead /bin/false" > /etc/modprobe.d/disable-algif.conf rmmod algif_aead
的内存写逻辑缺陷,由 2017 年一次提升 AEAD 加密吞吐量的代码提交引入。 2.2 漏洞技术机理Copy Fail 漏洞的触发依赖 Linux 内核三大组件协同:AF_ALG 加密接口、algif_aead 子系统、页缓存(Page Cache)机制。 AF_ALG:用户态程序调用内核加密能力的标准套接字接口,允许应用程序使用内核加密算法;algif_aead:内核中负责 AEAD 类加密操作的模块,为提升性能采用零拷贝机制,直接操作页缓存;页缓存:内核将磁盘文件加载到内存的临时副本 grep algif_aead > /dev/nullif [ $? ,降低攻击面;plaintext# /etc/modprobe.d/disable-alg-aead.confinstall algif_aead /bin/trueLSM 强制访问控制:启用 AppArmor
同时,Ascon还为提供带有关联数据的验证加密(AEAD),AEAD保护消息的机密性,但它也允许在不加密的情况下包含额外的信息,例如消息的标头或设备的IP地址。 AEAD可用于车对车通信,还有助于防止与射频识别(RFID)标签交换的消息被伪造,射频识别(RFID)标签通常有助于跟踪仓库中的包裹。
$tcp_port = \Sodium\randombytes_random16(); 对称加密算法 AEAD_AES_256_GCM 对数据进行 AES-256-GCM 加密和解密。 微信支付最新的 V3 版本接口,微信返回的报文中,如果涉及敏感信息,是需要基于 AEAD_AES_256_GCM 进行解密的。 ); $encrypt = sodium_crypto_aead_aes256gcm_encrypt($data, $aad, $iv, $keygen); return [ sodium_crypto_aead_aes256gcm_is_available()) { exit('Not support AES-256-GCM'); } // 生成AES-256-GCM的密钥 $keygen = sodium_crypto_aead_aes256gcm_keygen(); // 加密原文内容 $data = '开源技术小栈
请按以下步骤 立即止损: 最推荐的方式:禁用 algif_aead内核模块 Copy Fail 漏洞的核心触发点就是 algif_aead模块。直接禁用它,漏洞的利用路径就被切断了。 # 1. 禁止模块在下次重启后自动加载 echo "install algif_aead /bin/false" > /etc/modprobe.d/disable-algif.conf # 2. 立即卸载已加载的模块(如果需要) rmmod algif_aead 2>/dev/null || true ✅ 这个临时缓解对正常业务几乎无影响:不会影响 dm‑crypt/LUKS、kTLS、IPsec ❌ 仅在应用程序显式配置使用 afalg engine或直接绑定 AEAD/skcipher/hash 套接字时才会受影响。
1、概述对比属性 AES-GCM 3DES 加密方式 块加密 + 认证 (AEAD)三次 DES 加密 块大小 128 位 64 弱(已有攻击方法) 推荐状态 强烈推荐 已弃用 适合平台 环境新,Web/API/TLS遗留系统/经典程序 2、安全性对比AES-GCM完全支持 AEAD GCM 支持 AEAD 模式:提供加密和完整性认证。
引擎演示链接 正在编写的3D射击游戏 RustCrypto:chacha20poly1305,aead,polyval,universal-hash RustCrypto项目,本周发布了4个新的crates aead:使用关联数据进行身份验证加密(Authenticated Encryption with Associated Data, AEAD)的trait,chacha20poly1305包是根据这些
3.2必须使用AEAD算法: 消息认证(message authentication)或数据源认证(data origin authentication)表示数据在传输过程中没有被修改(完整性),并且接收消息的实体能够验证消息的源 有人提出将Encrypt和MAC直接集成在一个算法内部,让有经验的密码专家在算法内部解决安全问题,不让算法使用者选择,这就是这就是AEAD(Authenticated-Encryption With Addtional TLS1.3彻底禁止AEAD以外的其他算法。 AEAD(Authenticated_Encrypted_with_associated_data)——唯一保留的加密方式。 AEAD将完整性校验和数据加密两种功能集成在同一算法中完成,是TLS 1.3中唯一支持的加密方式。 AEAD算法和使用HKDF的hash算法组成了TLS1.3的可用密码套件 +------------------------------+-------------+ | Description |
微信支付小微商户接口: 微信支付小微商户接口地址 其接口操作中需要下载证书针对返回的 AEAD_AES_256_GCM算法解密,其中用到了sodium_crypto_aead_aes256gcm_decrypt ') && sodium_crypto_aead_aes256gcm_is_available()) { return sodium_crypto_aead_aes256gcm_decrypt ') && Sodiumcrypto_aead_aes256gcm_is_available()) { return Sodiumcrypto_aead_aes256gcm_decrypt ciphertext, $associatedData, $nonceStr, $aesKey); } // openssl (PHP >= 7.1 support AEAD nonceStr, $authTag, $associatedData); } throw new RuntimeException('AEAD_AES