密码学小整理

写在前面

学习网络安全协议的时候用到了很多现代密码学的知识,也重新去学习了现代密码学的应用。想要有体系的整理在这里。

基本介绍

加密算法

现代密码学主要分为对称密码和非对称密码两种。对称密码中主要有分组加密(AES、DES)、和流密码(RC4、LFSR). 非对称密码体制主要有RSA和Elgamal. 对称密码中,通信双方共享同一个秘钥,加密解密都使用这个秘密的key. 而非对称密码体制下,通信双方将使用不同的秘钥,公钥加密的内容需要私钥可以解密。私钥加密的内容,需要公钥解密。非对称密码的安全性都是基于数学上的单向函数保证的,比如RSA基于大数分解的问题,Elgamal基于基于DLP离散对数问题。

对称密码

用到对称加密的时候相对来说比较少需要管对称加密的内部结构,比如S盒子、置换之类的。把对称加密看成一个黑箱,以AES举例,这个黑箱就是坚不可摧的,从算法上来考虑是没有漏洞的。但是分组加密中有很多不同的模式,其中ECB、CFB模式下是可以做文章的,以及数据长度没有刚好填满一组时的padding也有经典的padding oracle问题,这些可以之后写相关的blog总结。然而在实际通信里,如果有一个秘密信道可以保证双方共享了一个秘钥,那么更加倾向使用对称加密的方法,因为对称加密比非对称加密效率高很多。量子通信中也是希望实现秘钥分发过程中无法被破解,那么也就是保证了一个秘密信道,然后使用对称密码快速的加密传输消息。理论上最为安全的是使用一次一秘,明文多长秘钥多长,那么绝对安全。但是实际上量子信道的带宽是远小于传统信道的,所以一般来说是通过分发一个长度比较小的秘钥然后派生出更多的秘钥的方案来解决这个问题。秘钥派生感觉也很讲究,有很多不同的方案,我的理解是就相当于是使用初始秘钥作为种子,然后是RNG生成更多的秘钥。如果种子长度足够长,而且RNG算法够好的话,派生出来的秘钥也就是安全的了。

非对称密码

相比于对称加密需要双方共享同一个秘密的秘钥,非对称加密使用就很灵活。一对秘钥来进行加解密让非对称加密可以使用的情景就丰富很多。一般而言,私钥没有备份,仅保留在所有者的本机上。这个私钥对应的公钥可以随便分发。(其实还需要注册证书之后再说)因为公钥很多人都有,如果通信双方的对象身份已经确认,那么使用公钥加密发送信息,这个密文就只有私钥持有者可以解密信息,保证消息的保密性。反过来,如果一短消息用私钥加密,只有公钥可以解密,那么私钥加密的消息可以保证是本人的行为,于是私钥加密一般也就成为签名,这也就是数字签名。要保证消息来源的可靠性,我们要确认这个消息是Alice发的,那么这个消息上附带有Alice的签名即可。这也是消息确认码(Message Authentication Code)的一种实现方式。

更多的考虑

在实际情况中,没有外加约束条件时,双方通信一般是通过非对称秘钥来传送会话秘钥(会话秘钥Session Key一般就是对称加密的秘钥),然后双方使用对称秘钥来实现通信。这样做的理由是对称加密的开销比非对称加密小得多。然而细想就会发现,使用非对称加密方法来实现通信实际上还有很多没有考虑的因素:

  1. 对方是我要发信息的人吗?这个公钥是对方的吗?
  2. 我接收到的消息有没有被人破坏?
  3. 我接收到的消息是实时的吗?有没有可能是有人重放消息?

我的理解是,只考虑密码学算法只是保证了保密性,灵活的使用密码学算法才能保证:完整性实体真实不可否认性。所谓完整性,就是保证消息没有被篡改。Alice发过来的下午3点见没有变成下午4点见。实体真实性是保证我这个消息是给Alice发过去的,不是发给了某个攻击者。不可否认性是保证消息不可抵赖,比如Alice发给银行的消息里有获得了50元,她不能重放这个消息无限制刷钱。我的理解是,一个完备的通信过程需要依次保证:实体真实、保密完整、不可抵赖。为了确保这些条件满足,引出以下概念。其实都是加密算法的应用:Digital Envelope、Public Key Infrastructure(想到在写,先存稿)

Digital Envelope

由于非对称密码的运算复杂、加/解密速度慢,因此信息的加密采用对称密码算法,其会话密钥的分发采用非对称密码算法,即采用收方的公钥对会话密钥进行加密。这个其实就是使用数字信封发送会话秘钥(待补充)

Public Key Infrastructure

(待补充)

文章目录
  1. 1. 写在前面
  2. 2. 基本介绍
    1. 2.1. 加密算法
    2. 2.2. 对称密码
    3. 2.3. 非对称密码
    4. 2.4. 更多的考虑
    5. 2.5. Digital Envelope
  3. 3. Public Key Infrastructure
|