加密数据的最新方法是使用一种称为一体式结构的认证加密算法,该算法也称为有附加数据的认证加密。从之前的博客中,我们看到在特定的操作模式中使用的分组密码,如CBC、OFB、CFB、CTR,提供了IND-CPA安全性。
但是IND-CCA安全性呢?
不可篡改性/不可延展性 - Non-Malleability
可篡改性:给定密文C,可以为相关消息生成C'(不知道消息)
- 例如,给定M的C,生成M+1的C'
- IND-CCA意味着不可延展性
事实上IND-CCA ≡ NM-CCA,NM就是Non-Malleability。
那么OFB是IND-CCA吗?
对于未知 𝑀1来说𝐶 = (𝐶0, 𝐶1)
- 对于𝑀1′= 𝑀1 ⊕ Δ来说,𝐶′= (𝐶0, 𝐶1 ⊕ Δ)是一个有效的密文
事实上,CBC, OFB, CFB, CTR都不属于IND-CCA安全。
那么该如何实现IND-CCA安全呢?
- 为了避免Malleability,我们需要确保如果任何密文被更改,它们都会无效
- 即我们需要保护密文的完整性/真实性
- 针对早期版本IPSec的实际攻击表明了这一点
加密-and-MAC
输入:
消息𝑀, 钥匙(𝐾1.𝐾2)
输出:
密文𝐶, 𝑇
这样不安全,因为MAC标签𝑇 可以泄露有关的信息𝑀。
- MAC不提供任何保密保证
- 适用于SSH
- 通过修改,SSH版本可以变得安全
先MAC再加密
MAC消息,然后加密消息标签对
输入:
消息𝑀, 钥匙(𝐾1.𝐾2)
输出:
密文C
总体上不安全
- 在TLS中使用,TLS版本显示为安全的
- WEP使用了类似的想法(CRC,然后是流密码加密),但被打破了
先加密再MAC
对消息进行加密,然后对生成的密文进行MAC处理。
输入:
消息𝑀, 钥匙(𝐾1.𝐾2)
输出:
密文(C,T)
如果底层加密是IND-CPA安全的,而MAC是UF-CMA安全的,则生成的加密是IND-CCA安全的。
- 用于IPSec
认证加密
在实践中,我们可以直接设计认证加密方案
经过身份验证的加密方案保证:
- 保密性:密文与随机密文无法区分
- 不可伪造性:密文不可伪造
这被称为AE安全
AE安全性比IND-CCA安全性更强,因为:
- 如果𝑀1) 与随机无法区分,并且(𝑀2) 也无法与随机区分,那么(𝑀1) 将无法与区分(𝑀2)
- 密文的不可扩展性意味着对手将无法使用解密查询,因为它甚至无法生成新的密文。
Galois Counter Mode(GCM) - 伽罗瓦计数器模式
在实践中,使用先加密然后MAC比直接构造(如GCM)慢。
- 上半部分类似于CTR,下半部分正在动态生成MAC标签
- GCM提供AE安全
- 另一种方案是偏移代码簿模式 - Offset Codebook Mode(OCB)
总结:
- CCA下的不可延展性等同于CCA中的不可区分性,它们要求保护密文的完整性。
- CBC, OFB, CFB, CTR只能实现IND-CPA安全不能实现IND-CCA安全。
- 当组合对称加密和MAC以实现IND-CCA时,先加密然后MAC是首选解决方案。
- 身份验证加密可以通过某些操作模式实现,如GCM和OCB。