AEAD(authenticated encryption with associated data):关联数据的认证加密,顾名思义,除可提供对密文数据的隐私、完整性和真实性保证外,还可提供对未加密的关联数据的完整性保证。常用的关联数据通常包括消息的长度和消息的编码方式。
AEAD为AE的变种,可让receiver验证所收到消息中已加密和未加密信息的完整性。任何企图将有效加密信息与不同上下文结合的篡改都可通过AEAD发现。
AEAD的实现步骤为:
通过密钥key对消息加密,通过增加随机数来保证隐私;计算一个认证标签,通过该认证标签可保证一条消息中加密和未加密的部分均未被篡改。
常用的AEAD加密算法主要有:
在libsodium
中,对AES256-GCM和ChaCha20-Poly1305 这两种常用的算法做了支持。
libsodium
中AES256-GCM算法的实现,需依赖Intel SSSE3指令集及aesni
和pclmul
等指令来进行硬件加速。对于不依赖于硬件的纯软件实现,容易有cache-collision timing attacks。
对于不支持SSSE3指令集的硬件平台,可采用ChaCha20-Poly1305算法,该算法对timing攻击不敏感。
参考资料:
[1] https://cryptography.io/en/latest/hazmat/primitives/aead/
[2] /wiki/%E8%AE%A4%E8%AF%81%E5%8A%A0%E5%AF%86
[3] /wiki/Authenticated_encryption
[4] /en/spec/AEAD-Ciphers.html
[5] https://libsodium.gitbook.io/doc/secret-key_cryptography/aead