密钥封装和公钥加密的联系和区别?
先理解下面这句话:
密钥封装机制是面向的互联网应用,最大的用处是网络连接时建立双方的临时会话密钥。既然是应用就要考虑到网络传输的协议,协议支持的包大小是有限制的,如果公钥加密方案的密文较大,不便于网络传输,就不能应用于实际的协议中。
可以看出密钥封装:
问题1:是不是一个公钥加密方案就可以实现一个密钥封装机制?
回答1:是的,可以用任何一个公钥加密方案构建一个密钥封装机制,且可以保证相同的安全性。
问题2:既然如此,为何还要单独提出所谓密钥封装机制的概念?
回答2:因为专门构建得到的密钥封装机制\(Enc\)可以变得更加高效,例如密文的长度可以更短。
问题3:是不是一个密钥封装机制就可以实现一个公钥加密方案?
回答3:是的,可以用任何一个密钥封装机制构建一个公钥加密方案,但在一定条件下可以保证相同的安全性。
常见的安全性定义:
CPA安全性(Chosen-Plaintext Security,选择明文攻击),简单来说就是,攻击者可以访问加密预言机,获得任意消息(包括挑战消息)所对应的密文。
CCA安全性(Chosen-Ciphertext Security),即考虑多个密文的不可取分性(indistinguishable multiple encryptions),简单来说就是,攻击者可以访问解密预言机,获得除挑战密文外任意密文所对应的明文。
下面内容来自:Jonathan Katz和Yehuda Lindell著作《Introduction to Modern Cryptography, Second Edition》的第11.3节:混合加密与KEM/DEM范式(Hybrid Encryption and the KEM/DEM Paradigm):
其中:PKE(公钥加密)、SKE(对称加密)、KEM(密钥封装)、DEM(数据封装,可以看成私钥加密方案)
以上两种混合方法的共性都是首先生成对称密钥, 再利用对称密钥加密明文, 因此效率的区别体现在第一部分。
第一种方法先选择一个随机的密钥k, 再使用PKE对其加密得到c, 而第二种方法是两步并做一步完成. 好处在哪里呢?
如果使用PKE的方法, 第一部分密文c一定会存在密文扩张, 这是由概率加密的本质决定的, 而如果使用KEM的方法, 第一部分密文c相比k可能不存在扩张, 原因是此时c是对k的封装, 而非加密。
综上, 使用KEM代替PKE, 不仅能够缩减整体密文尺寸, 也能够提升效率(通常封装算法要比加密算法简单很多, 为什么会简单呢? KEM是功能受限的PKE,即KEM只允许加密随机的消息)。
关于封装算法(KEM)通常要比加密算法(PKE)要简单,下面举例分析:
KEM+DEM范式极大简化了PKE的可证明安全
对比安全模型即可发现, 对于PKE有CPA/CCA1/CCA三个依次增强的安全性, 而KEM只有CPA/CCA两个依次增强的安全性。
最关键的是:在PKE中敌手A对挑战密文c有一定的控制能力, 而KEM中c完全由挑战者控制, 这一区别使得KEM安全证明中的归约算法更容易设计。