在以前的安全解决方案博客中,我们讨论了数据完整性的重要性,以及为什么加密本身不能提供语义安全性。我们引入了消息身份验证代码 (MAC) 和数字签名作为对数据进行身份验证和保护数据不被修改的方法。
在另一篇博客中,jwallrabenstein启发了我们关于资源受限环境(如物联网和嵌入式系统)的轻量级加密技术。这些新的轻量级算法中的大多数都是使用附加数据(AEAD)密码进行身份验证的加密,这些密码既可以通过加密提供机密性,也可以提供数据的完整性(保证数据未被修改)和真实性(保证数据来自特定实体),从而保护其免受修改。在本博客中,我们将更深入地讨论AEAD加密。
什么是AEAD?
加密仅提供机密性,但不提供完整性或真实性。如果可以对密文进行修改,从而导致对生成的明文进行可预测的修改,则密文具有延展性。可以对邮件进行更改,这些更改可能无法检测到。单独加密邮件并不能防止这种情况。
例如,假设爱丽丝想向鲍勃发送 100 美元。金融服务使用流密码加密交易,流密码的工作原理是将明文交易与密钥流进行异或运算。每笔交易都有一个固定的格式,它指定谁是收款人以及要转移的金额。Alice 对 100 美元的交易进行加密,并将密文发送给 Bob。
攻击者拦截加密交易,并希望修改数据而不被检测到。攻击者将数字 9 的密文与事务格式中的千个占位符的位置进行 XOR 运算。尽管攻击者无法解密消息,但了解事务格式会告诉他们在哪里进行修改。
Bob 接收修改后的密文并使用他的密钥流解密。由于对手的修改,Bob 收到一笔金额交易。由于只使用了加密,因此 Bob 无法检测到此修改!
为了保护消息不被修改,我们必须传输其他数据以及可用于验证消息的消息。对于AEAD,这通常采用消息身份验证代码(MAC)的形式。MAC 必须具有在不知道身份验证密钥的情况下难以为任何消息找到有效 MAC 的属性。对于给定的消息和 MAC 标记,还必须很难找到具有相同 MAC 的第二条消息(第二原像电阻)。还必须很难找到导致相同MAC标记(抗碰撞性)的一对消息。
密钥(加密)哈希函数通常用于生成消息身份验证代码。当与加密算法配对时,它们可用于创建AEAD密码系统,该系统可以加密和验证数据。示例包括AES CCM,它将AES CTR模式与AES CBCMAC相结合进行身份验证。另一个例子是AES GCM,它将AES CTR模式与MAC的GHASH算法相结合。在每一个中,一个称为标签的MAC通过传输的消息计算,并与消息一起发送。对于每条消息,标签通常为 16 个字节长,并将此额外开销添加到消息中。消息的接收方可以与消息一起验证标记。如果消息或标签以任何方式被修改,则接收方将拒绝该消息无效。这将防止篡改消息。
2 TinyJAMBU (NIST 轻量级加密决赛入围者) [TinyJAMBU: A Family of Lightwieght Certified Encryption Algorithms, Wu et al]
其他数据
AEAD提供数据的真实性,机密性是可选的。它允许使用其他数据与加密数据一起发送,而无需对其进行加密。额外的明文数据和加密数据都一起进行身份验证:如果其中任何一个部分发生更改,则将导致无效标记。这在许多上下文中都很有用,例如在数据包标头中。如果数据被打包并通过网络发送,则数据包通常包含一个标头,其中包含发送方和接收方地址等元数据。此数据在发送时无法加密,因为路由上的其他节点需要能够读取此信息,以便可以将数据包发送到正确的目的地。我们仍然希望保护此信息不被修改。AEAD 允许此明文数据与消息的其余部分一起进行身份验证,即使消息的某些部分已加密。AEAD 甚至可以用于在不加密任何数据的情况下发送消息,同时仍提供消息的真实性。
易于使用
AEAD 的一个主要好处是身份验证内置于算法中。这使得实施者更难犯错误。
HMAC 是一种键控哈希函数,可以与加密一起使用,以实现经过身份验证的加密。数据可以通过HMAC运行以生成MAC,该MAC可以与数据一起发送以对其进行身份验证。这可以通过任何算法完成,但在组合加密原语时必须小心。一个潜在的错误是没有验证所有必要的数据。例如,加密算法中通常使用初始化向量。这需要包含在经过身份验证的数据中。
需要包括全部数据。如果数据长度可变,这也可能会出现问题。发射器可能会向接收器发送一个字段,其中包含消息的长度。此长度也需要包含在经过身份验证的数据中,以便不会省略消息的某些部分或添加部分。
另一个风险是将接收到的标签与计算的标签进行比较时侧信道泄漏。如果标记是按每个字节计算的字节数,并在达到不匹配时立即退出,则此比较所需的时间取决于匹配或不匹配的字节数。如果使用函数 memcmp() 天真地比较标签,则可能会发生这种情况。这会泄露信息,这些信息可能有助于攻击者测量执行时间并确定匹配或不匹配的字节数。在大多数 AEAD 模式下,这仍然是一个风险,但比较可能会以安全的方式在加密库中实现。
在标准协议中使用现有的 AEAD 模式可降低引入此类漏洞的风险,这些漏洞可能难以预料。
加密协议
AEAD本身也无法抵御整类攻击。这可能包括重播攻击、反射攻击和其他攻击。在重放攻击中,攻击者可以监控受 AEAD 保护的流量并记录它。攻击者稍后可以尝试重新发送它观察到的先前传输的消息,而无需对其进行修改。消息尚未修改,因此将具有有效的 MAC 标记,并且 AEAD 算法不会检测到它是由对手发送的。这些类型的攻击无法在算法级别解决,但可以通过加密协议解决。该协议可能包括类似单调递增的数据包编号之类的内容,接收方在对消息进行身份验证之前会检查该数据包编号。如果接收方已经收到相同的数据包编号(或者可能已经收到更高的编号),它将拒绝该数据包以防止重放。此数据包编号或其他信息也可以包含在其他经过身份验证的数据中。AES CCM 也是 IEEE 802.15.4 下的加密协议,在某些配置中,它还可以防止重放攻击和其他协议级攻击。
总之,加密只能保证机密性,但我们数据的完整性和真实性也很重要。AEAD模式提供了这种保证,并且比单独的结构更容易正确使用。密码学是一个雷区,即使对专家来说也是危险的。采用AEAD加密并仅使用标准加密协议是保护我们数据的最佳实践。
审核编辑:郭婷
-
嵌入式
+关注
关注
5082文章
19104浏览量
304810 -
发射器
+关注
关注
6文章
848浏览量
53451 -
物联网
+关注
关注
2909文章
44557浏览量
372778
发布评论请先 登录
相关推荐
评论