5.1 投币机物柜的使用方法
公钥密码在现实生活中的应用。
硬币是关闭寄物柜的密钥,而钥匙则是打开寄物柜的密钥。
关闭寄物柜是加密,使用的是公钥;
打开寄物柜则是解密,使用的是私钥。
公钥是公开的,任何人都可以获得;私钥是保密的,需要解密的人才能拥有。
5.2 本章学习的内容
在密码学历史上有两种数据加密的方式:对称加密和非对称加密。
对称加密也称作共享密钥,这里的共享是信息发送者和接受者两方共享,他们使用相同的密钥进行加密和解密,其他人不知道(其他人有可能会获取)。
这个可能性就是在密钥的配送过程被其他人截获。
非对称加密也称作公开密钥。这里的公开是指公钥的公开,每个人都知道。但是私钥只有数据的接收者拥有。
私钥不需要配送,更安全。
5.3 密钥配送问题
5.3.1 什么是密钥配送问题
如何理解P104第一句话“当然,如果窃听者 E 无法推测出通信中使用的是什么密码算法,那么即便得到了密文和密钥也是无法解密的”?
例如我们输入的1,然后通过1+2=3这个算法,得到密文就是3,其中这2就是密钥,这个算法就是密码算法,当密文3传输给后台后,后台就得进行解密,解密算就是3-2=1,然后得到输入密码1。
这里如果我们不知道1+2=3,也不知道3-2=1,那么就无法知道明文1。
密钥必须要发送,但又不能发送。
不发送密钥,接收者无法解密,也就不知道你要传输的数据;发送吧,又怕窃密者截获密钥。
这就是对称密码的密钥配送问题。
我们既要沟通,又要防止密钥传输的时候密钥被截获,咋办?只有首先要解决密钥配送的问题,如何配送密钥能够不被截获。
解决密钥配送问题的方法有以下几种?
- 通过事先共享密钥来解决;
- 通过密钥分配中心来解决;
- 通过 Diffie-hellman (棣弗-赫尔曼,两个人名的组合,他俩共同发明的一个算法)密钥交换来解决;
- 通过公钥密码来解决
思考一个问题:这些方法真的解决密钥配送的问题了吗?如果解决了,为什么还需要非对称加密算法?
5.3.2 通过事先共享密钥来解决
是先共享密钥尽管有效,但却有一定的局限性。
5.3.3通过密钥分配中心来解决
解释密钥分配中心工作流程和原理,并解释小测验的问题。
弊端:
1、单点故障的风险大大增加。如果密钥分配中心发生故障,则所有人都无法进行加密通信;
2、攻击者可能会攻击密钥分配中心下手,一旦得手,那么所有人的加密通信都会被破译。
使用公钥加密,通信实体越多,密钥管理越简单。哪怕有一万人之间进行通信,那么每个人只需要一对密钥对(公钥和私钥)就可以了。不需要关心其他人密钥。
小测验。。。。。。。
5.3.4 通过 diffie-Hellman 密钥交换来解决密钥配送问题
自己看第11章
5.3.5 通过公钥密码来解决密钥配送问题
上面三种方法都是对称加密,需要传递密钥。
使用非对称加密算法(即公钥密码),不需要传递密钥。
小测验2.。。。。
这个其实就是5.4节的内容。
5.4 公钥密码
5.4.1 什么是公钥密码
第一节已经介绍。此处不在说了。
5.4.2 公钥密码的历史
自己了解一下。
5.4.3 公钥通信的流程
流程在第一节已经说了,文字部分这里不看了,直接看图5-2吧。
5.4.4 各种术语
对称加密也叫共享密钥;
非对称加密也叫公开密钥。
非对称加密有一对密钥:公钥(public key)和私钥(private key)
5.4.5 公钥密码无法解决的问题
这一节列举了两个公钥密码无法解决的问题:
1、公钥认证问题;这个问题是通过“证书颁发机构(CA)”来解决。
2、解密效率低的问题。
这两个问题都会在后面的章节进行介绍,这里先不说了,感兴趣的先预习一下。
5.5 时钟运算
5.5.1 加法
总结:
- 时钟的指针向右旋转相当于做加法;
- 不过,我们做的不是单纯的加法,而是“除法求余数”。
5.5.2 减法
时钟只能向右转,不能反过来向左转,也就是说时钟是能做加法,那减法怎么办呢?
我们将减法转换为加法。
看例题和表5-1.
5.5.3 乘法
乘法相当于加法的多次重复。
5.5.4 除法
既然减法是加法的逆运算,那么除法也就可以看成是乘法的逆运算。
这个解释起来还有点麻烦。
5.5.5 乘方
乘法是加法的多次重复运算,乘方是乘法的多次重复运算。
5.5.6对数
乘方的逆运算称为对数。
5.5.7 从时钟指针到 RSA
通过上面的内容如果你能知道“7的4次方 mod 12”的意思就是“求7的4次方除以12的余数”就可以了。
5.6 RSA
5.6.1 什么是 RSA
RSA 是一种公钥密码算法。
RSA 可以被用于公钥密码和数字签名。
疑问:是不是所有的非对称加密算法都可以用于数字签名?
5.6.2 RSA 加密
RSA加密过程很简单,公式就是方框里面。
公式中出现了两个数字 E 和 N,因此任何人知道这两个数字都可以完成加密运算。也就是说,E 和 N 的组合就是公钥。
E 和 N 的组合才是一个公钥,用来进行数据加密。
5.6.3 RSA 解密
RSA 的解密公式如下:
D 和 N 的组合就是私钥,用来数据解密。
5.6.4 生成密钥对
RSA的加密是求“E 次方的 mod N”,解密是求“D 次方的 mod N ”
5.7 对 RSA 的攻击
任何一件新生事物的诞生,都会遭到质疑,这并不一定都是坏事情,就是因为这些质疑,新生事物才会更好更完善。
RSA 至今还未被证明是安全的,但是也没被证明是不安全的。目前公钥加密算法中使用最广泛的就是 RSA。
这一节主要是讨论破译 RSA 的一些可能方法。
5.7.1 通过密文来求得明文
本节最后一句话表明了这个方法的不可行性。
5.7.2 通过暴力破解来找出 D
RSA 算法的安全性基千大素数分解的困难性。如果攻击者可以分解已知的 n, 得到 p 和 q, 然后可得到 z, 最后用 Euclid 算法,由 e 和 z 得到 d。然 而要分解 200 位的数,需要 40 亿年; 分解 500位的数,则需要 1025年。
所以说,不可能在现实的时间内通过暴力破解找出数 D。
5.7.3 通过 E 和 N 求出 D
本节最后一句话说明了这个方法本身的不可行性。
5.7.4 中间人攻击
第一段说了:这种方法不能破译 RSA,但却是一种针对机密性的有效攻击。
看图5-6
5.8 其他公钥密码
仅做了解,不讲了。
5.9 关于公钥密码的 Q&A
列举了一些常见问题,并给出了解答,感兴趣的自己看。