密码学简介
上文的图例基本展示了常见加密体系。加密体系,如果用比较正式的描述方法,无疑是做了三件事:
- 首先,通过一个生成算法 𝐾𝑒𝑦𝐺𝑒𝑛(1𝜆) 来随机生成一对用于加密和解密的密钥 (𝐸𝑛𝑐𝐾𝑒𝑦,𝐷𝑒𝑐𝐾𝑒𝑦) 。
- 加密方通过加密密钥 𝐸𝑛𝑐𝐾𝑒𝑦 和加密算法 𝐸𝑛𝑐𝑟𝑦𝑝𝑡𝑖𝑜𝑛 来加密原文 𝑃𝑙𝑎𝑖𝑛𝑡𝑒𝑥𝑡 ,最后得到密文 𝐶𝑖𝑝ℎ𝑒𝑟𝑡𝑒𝑥𝑡 。
- 随后,在解密的时候,解密方可以通过解密密钥 𝐷𝑒𝑐𝐾𝑒𝑦 和解密算法 𝐷𝑒𝑐𝑟𝑦𝑝𝑡𝑖𝑜𝑛 来解密密文,最后还原回来原来的原文。
在密码学研究中,每当我们看到一个新的系统的定义之后,接下来往往都要陈述这个系统所应具有的属性(Properties)。
首先,我们第一个要实现的属性是正确性(Correctness)。正确性代表说,如果我拥有一个正确的密钥,那么我就可以通过解密算法 𝐷𝑒𝑐𝑟𝑦𝑝𝑡𝑖𝑜𝑛 来把密文还原成原文。我们往往都使用概率的方法来表示解密的成功率:
∀𝑝𝑡∈𝑃𝑇,(𝑘𝑒𝑛𝑐,𝑘𝑑𝑒𝑐)←𝐾𝑒𝑛𝐺𝑒𝑛(1𝜆): 𝑃𝑟[𝐷𝑒𝑐𝑟𝑦𝑝𝑡𝑖𝑜𝑛(𝑘𝑑𝑒𝑐,𝐸𝑛𝑐𝑟𝑦𝑝𝑡𝑖𝑜𝑛(𝑘𝑒𝑛𝑐,𝑝𝑡))=𝑝𝑡]=1
上面的等式代表了,如果我们拥有正确的密钥,那么解密算法可以还原加密算法生成的密文的几率是100%。
我们要实现的第二个属性是语义安全(Semantic Security)。
具体对于语义安全的定义,我们在这里不多做解释了。但是我们可以理解为,如果我们拥有任意两个不同的原文所对应的密文,那么我们是无法区分到底哪个密文是对应了哪个原文的:
∀𝑚0,𝑚1:{𝐸𝑛𝑐(𝑘𝑒𝑛𝑐,𝑚0)}≈𝑐{𝐸𝑛𝑐(𝑘𝑑𝑒𝑐,𝑚1)}
语义安全的主要意义在于旁观者无法区分两条加密的消息。那么如果有入侵者窃听网络,看到了我发出的加密信息,只要我使用的加密体系是语义安全的,那么我就可以确