目录
关联数据的认证加密(AEAD, Authenticated encryption with associated data)
认证加密的三种实现方式
一、Encrypt-then-MAC (EtM)
二、Encrypt-and-MAC (E&M)
三、MAC-then-Encrypt (MtE)
本文翻译自:https://en.wikipedia.org/wiki/Authenticated_encryption
认证加密(AE, Authenticated Encryption)或关联数据的认证加密(AEAD, Authenticated Encryptioni with Associated Data)是一种加密形式,它能同时保证数据的机密性(confidentiality)和完整性(integrity或authenticity)。这些属性通过一个单一的易于使用的编程接口来提供。
AE的需求来源于这么一个观察,即把单独机密性和认证块加密操作模式(authentication block cipher operation modes)安全的组合到一起非常容易出错且非常困难。生产中的协议或应用由于未能正确实现或缺乏认证而遭受的很多实际的攻击(包括SSL/TLS)就证实 了这一点。
在2000年左右,针对这个概念做了很多努力。尤其是,Charanjit Jutla's IACBC 和 IAPM modes在2000年的发表使得人们对这些模式产生了强烈的兴趣。ISO/IEC 19772:2009 标准化了6种不同的认证加密模式(OCB 2.0,Key Wrap,CCM,EAX,Encrypt-then-MAC(EtM)以及GCM)。为响应NIST的征集,又开发了多种模式。Sponge function可以在双工模式下使用,以提供认证加密。
AE模式的典型编程接口会提供以下功能:
这里的header部分旨在为不需要机密性,但需要完整性的网络包或存储metadata,提供完整性(integrity)保护。
除了对消息提供机密性(confidentiality)和完整性(integrity)保护,认证加密还可以针对选定密文攻击(chosen ciphertext attack)提供安全保护。选定密文攻击时,攻击者提交精心选择的密文到“解密神谕(decryption oracle)”然后分析解密的结果从而尝试获得针对加密系统的优势。(住:“oracle”不是指 数据库,而是指拥有超能力,能得到本不应该得到的东西。见这里)。认证加密模式可以识别出错误构建的密文然后拒绝解密。除非攻击者利用加密算法正确构建出了密文,否则,攻击者无法让系统解密任意构建的密文,但,能正确构建出密文其实意味着攻击者早就已经知道明文了。通过阻止攻击者获取他尚未掌握的有用信息,如果能正确实现的话这就使得“解密神谕(decryption oracle)”失效了。
已经开发了许多专门的认证加密模式(authentication encryption mode)用于对称块加密(symmetric block cipher)。但,认证加密一般可以通过组合加密方案和MAC来实现,但,需要满足下面条件:
Bellare 和Namprempre (2000) 分析了这些原语的组成,演示了“加密一条消息然后针对密文应用MAC(即:Encrypt-then MAC)”意味着针对自适应的选定密文攻击是安全的,只要加密方案和MAC满足上述属性即可。Katz和Yung调查了这一概念,并证明“不可伪造的加密”就意味着针对选定密文攻击是安全性的。
2013年宣布了一项竞赛,鼓励设计认证加密模式。
AEAD是AE的变体,对于被加密的数据,AEAD即保证机密性,也保证了完整性。AEAD把关联的数据绑定到密文,同时也绑定到数据所出现的上下文,对一条有效的密文"cut-and-paste"到不同的上下文时能够被探测到从而被拒绝。
例如,网络包就需要这种特性:
1. Header需要完整性(integrity),且header是可见的明文(即:不需要confidentiality)
2. Payload则既需要完整性(integrity)也需要机密性(confidentiality)
3. Header和payload都需要认证发送者的身份(即:authentication)
ciphertext=encrypt(key1, plaintext)
MAC=hash(key2, ciphertext)
ciphertext+MAC发送到对端
IPsec即采用该方式(VPN使用该种方式)。
注意:加密的密钥和hash的密钥必须是不同的,否则就有可能不安全(取决于加密方法和hash方法)
ciphertext=encrypt(key, plaintext)
MAC=hash(key, plaintext)
ciphertext+MAC发送到对端
SSH即采用该方式。
E&M本身尚未被证明是强不可伪造(strongly unforgeable)的,但,可以对SSH做一些小的改动使得SSH强不可伪造
MAC=hash(key, plaintext)
ciphertext=encrypt(key, plaintext+MAC)
ciphertext发送到对端
SSL/TLS即采用该方式。
EtM本身尚未被证明是强不可伪造(strongly unforgeable)的,但,Krawczyk已证明的,由于编码和MtE机制,SSL/TLS是安全的。不管理论上的安全,深入分析SSL/TLS,其安全模型是MAC-then-pad-then-encrypt,即:plaintext需要先pad到加密函数的block size,但,padding错误经常会导致接收端可以探测的到错误,而这会导致"padding oracle"攻击,例如Lucky 13就是这种攻击。