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] https://zh.wikipedia.org/wiki/%E8%AE%A4%E8%AF%81%E5%8A%A0%E5%AF%86 [3] https://en.wikipedia.org/wiki/Authenticated_encryption [4] https://shadowsocks.org/en/spec/AEAD-Ciphers.html [5] https://libsodium.gitbook.io/doc/secret-key_cryptography/aead