我编写了一个简单的文件加密程序作为如何正确进行加密的示例,但是在阅读了有关加密 + MAC 的问题后,我认为我为两者使用相同的密钥而犯了一个错误。
我即将修复我的程序以生成更长的密钥并将其拆分,但我想知道,当你这样做时会发生什么坏事?
我编写了一个简单的文件加密程序作为如何正确进行加密的示例,但是在阅读了有关加密 + MAC 的问题后,我认为我为两者使用相同的密钥而犯了一个错误。
我即将修复我的程序以生成更长的密钥并将其拆分,但我想知道,当你这样做时会发生什么坏事?
将一把钥匙用于多种用途通常被认为是不好的风格。它并不直接暗示漏洞。如果方便协议设计,我偶尔会违反这个原则。
最重要的原因是,如果对多个方案使用相同的密钥,则需要考虑不同方案之间的交互。使用独立键,您无需担心这一点。
另一个担忧是一个方案可能会被破坏,从而允许密钥恢复。然后,该密钥恢复会破坏使用该密钥的协议的所有部分。例如,如果您实施了错误的 MAC 算法,则对该算法的破解可能不仅会破坏身份验证,还会破坏消息的机密性。
一些实际的例子:
这些例子表明,这种组合的实际安全性可以从完全破坏到可证明的安全。
正确的方法是从一个主密钥开始,然后使用密钥派生函数(例如 HKDF)来派生单个密钥。这些密钥是独立的,防止不同方案之间的交互。从单个密钥中恢复主密钥是不可行的,因此破坏系统的一部分并不会破坏基于该主密钥的所有其他内容。