1. 纠错
1.1. 像互联网这样的通信系统,被设计成将信息的精确副本从发送方传输到接收方
1.2. 通常,接收到的信号会受到电子噪声的污染
-
1.2.1. 噪声是任何会破坏预期信号的非预期信号的总称
-
1.2.2. 噪声可能源于自然,也可能来自附近电子设备的干扰
-
1.2.3. 如果噪声相对于信号足够强,就会导致信号转换回数据时出现错误
1.3. 检测和校正错误最简单的方法是重复
-
1.3.1. 为了确保传输正确,一个重要的数据可能会连续发送3次
-
1.3.2. 接收方比较所有3个副本
-
1.3.2.1. 如果它们能匹配,则可以推定没有发生错误
-
1.3.2.2. 如果只有两个副本能匹配,那么剩下的那一个可以被推定为出错了,两个相匹配的副本被认为是正确的
-
1.3.2.3. 如果没有彼此匹配的副本,那么就无法确认真实的讯息是怎样的,必须请求重新传送
-
-
1.3.3. 重复很好用,但非常低效
- 1.3.3.1. 如果每个数据包发送3次,那么每秒可以传输的数据包数是添加错误保护之前的三分之一
1.4. 校验和(checksum)要高效得多
-
1.4.1. 其思想是将所有字符(字母、数字和标点符号)均转换为数字
-
1.4.2. 绝大多数情况下,如果校验和不匹配,就表明发生了传输错误
-
1.4.3. 校验和是很常用的
- 1.4.3.1. 国际标准书号(International Standard Book Number,ISBN)就包含一个校验和
-
1.4.4. 基础校验和仅能用来检测错误,但无法弄清楚具体哪个数字是错误的
-
1.4.4.1. 错误甚至可能就出现在校验和本身
1.4.4.1.1. 在这种情况下,讯息本身是正确的
-
1.4.4.2. 基础校验和要求讯息重传以修复错误
-
2. 理查德·汉明
2.1. Richard Hamming
2.2. 想知道是否可以优化校验和,使它能同时提供错误检测和错误纠正
2.3. 1915年出生于芝加哥,主修数学,最终获得伊利诺伊大学的博士学位
2.4. 校验和的最简单形式是奇偶校验位(parity bit)
-
2.4.1. 与校验和一样,奇偶校验位和数据字(数据位的序列)是一起发送的
-
2.4.2. 想要检查错误,接收方仅需要数1的数量
-
2.4.3. 如果最终计数是偶数,则可以推定没有发生错误
-
2.4.4. 如果计数是奇数,那么,十有八九,其中某个位上就出现了错误,0被错误地翻转为了1,或者1被错误地翻转为了0
-
2.4.5. 当错误率很高时,需要额外增加奇偶校验位
2.5. 汉明设计了一种聪明的方法,使用多个奇偶校验位来检测和纠正一个个错误
-
2.5.1. 诀窍在于,任何两个奇偶校验位保护的数据位都不是完全相同的
-
2.5.2. 如果发生了一个错误,通过查看哪些奇偶校验位受到了影响就可以确定错误所在的位置
2.6. 汉明的精妙算法允许计算机检测和纠正一个个错误,代价是发送的总位数略有增加
-
2.6.1. 4个奇偶校验位保护了11个数据位
- 2.6.1.1. 只增加了36%的位数
2.7. 汉明码的生成和检查都极其容易
-
2.7.1. 使它们非常适合高速处理,而这正是计算机网络、内存和存储系统所需要的
-
2.7.2. 现代通信网络混合使用了汉明码、基本校验和,以及更新、更复杂的纠错码,以确保数据传输的完整和准确
2.8. 1968年,汉明因他发明的汉明码和在数值分析方面的其他工作获得了图灵奖
2.9. 1998年,仅仅退休一个月后,他在蒙特雷去世
3. 加密
3.1. 互联网最大的缺陷之一是它在设计时没有考虑到安全问题
- 3.1.1. 其中一个麻烦是数据包很容易在途中被窃听者用电子设备读取
3.2. 加密(encryption)通过更改讯息的方式来避免窃听,只有预期的接收方能够复原出原始文本
-
3.2.1. 明文(plaintext)
- 3.2.1.1. 原始消息
-
3.2.2. 密文(ciphertext)
- 3.2.2.1. 加密的讯息
3.3. 尤利乌斯·恺撒对重要的私人信件也采用了加密技术
-
3.3.1. 恺撒密码将原文中的每一个字母替换为一个替代字母
-
3.3.2. 密文(ciphertext)被发送给接收方
-
3.3.3. 接收方通过将每一个字母按字母表向左移动一个位置来复原原始消息
-
3.3.4. 可以通过频率分析的方法来攻击恺撒密码
-
3.3.4.1. E是英语中最常用的字母
-
3.3.4.2. 一旦单个移位方式被破解,整条讯息就可以被解密
-
3.4. 没有一个加密方案是完美的
-
3.4.1. 只要有足够长的时间和一次巧妙的攻击(attack),大多数密码都是可以被破解的
-
3.4.2. 几乎所有的密码都有漏洞
3.5. 问题在于,攻击需要多长时间才能破解密码?
- 3.5.1. 如果攻击所需时间长到不可接受,那么从实际角度来看,该密码就是安全的
4. 密钥分配问题
4.1. Key Distribution Problem
4.2. 网络并不安全,不能防止窃听
- 4.2.1. 传递密钥唯一方便的方式是通过网络本身
4.3. 马丁·赫尔曼
-
4.3.1. Martin Hellman
-
4.3.2. 1945年出生于纽约
4.4. 惠特菲尔德·迪菲
-
4.4.1. Whitfi eld Diffie
-
4.4.2. 生于1944年,来自华盛顿特区,拥有MIT的数学学位
4.5. 迪菲和赫尔曼在2015年也获得了图灵奖
4.6. 拉尔夫·默克尔
-
4.6.1. Ralph Merkle
-
4.6.2. 出生于1952年
4.7. 1976年,迪菲和赫尔曼发表了一篇论文,描述了一种算法,那是第一批公钥交换的实用算法之一
-
4.7.1. 这篇论文彻底改变了密码学
-
4.7.2. 所有密钥都必须是私人密钥的神话被打破了
-
4.7.3. 一种新的密码形式诞生了:公钥密码学(public key cryptography)
4.8. 迪菲-赫尔曼-默克尔密钥交换方案表明,双方可以经由公开讯息建立密钥
4.9. 传统加密算法使用对称(symmetric)密钥,这意味着加密和解密使用的是相同的密钥
-
4.9.1. 对称加密的缺点是密钥必须始终保密
-
4.9.2. 这个要求就引发了密钥分配问题
4.10. 公钥加密使用两个密钥:一个加密密钥和一个不同的非对称(asymmetric)解密密钥
-
4.10.1. 它们必须能成功地用作加密-解密对,即用其中一个加密,用另一个解密,且必须最终能得到原始讯息的副本
-
4.10.2. 必须不可能通过加密密钥来确定解密密钥是什么
4.11. 步骤
-
4.11.1. 爱丽丝生成加密和解密密钥对。
-
4.11.2. 爱丽丝自己保管解密密钥
-
4.11.3. 她公开了加密密钥
-
4.11.4. 鲍勃使用爱丽丝的公开加密密钥加密他的讯息
-
4.11.5. 鲍勃将加密讯息发送给爱丽丝
-
4.11.6. 爱丽丝使用她的私人解密密钥破解加密的讯息
4.12. 困难所在
-
4.12.1. 必须无法从公开的加密密钥中确定私人解密密钥
-
4.12.2. 解密密钥不能由加密密钥计算出来,没有人知道如何创建这种非对称密钥
4.13. 单向函数(one-way function)
- 4.13.1. 一种无法从输出中轻易推断出输入的计算
5. RSA
5.1. 罗纳德·里维斯特
-
5.1.1. Ronald Rivest
-
5.1.2. 生于1947年,来自纽约州
5.2. 阿迪·沙米尔
-
5.2.1. Adi Shamir
-
5.2.2. 生于1952年,是以色列特拉维夫人
5.3. 伦纳德·阿德曼
-
5.3.1. Leonard Adleman
-
5.3.2. 生于1945年,在旧金山长大
5.4. 里维斯特、沙米尔和阿德曼于2002年获得了图灵奖
5.5. RSA算法如今是互联网加密技术的基石
5.6. RSA算法的加密和解密相当简单直接
-
5.6.1. 加密密钥由两个数字组成——一个模数(modulus)和一个加密指数
-
5.6.2. 解密密钥也包含两个数字——相同的模数和一个不同于加密指数的解密指数
5.7. 对数字组进行加密
-
5.7.1. 计算输入数的加密指数次幂
-
5.7.2. 除以模数,得到余数
-
5.7.3. 输出余数
5.8. 解密过程
-
5.8.1. 计算接收到的数字的解密指数次幂
-
5.8.2. 除以模数,得到余数
-
5.8.3. 输出余数
5.9. 时钟算术(clock arithmetic)
5.10. 数轴(number line)
5.11. 加密密钥和解密密钥是互补的
-
5.11.1. 密钥对是特别挑选出来的,以便其中一个指数能抵消另一个指数的影响
-
5.11.2. 绕时钟表面旋转的完整圈数并不重要
-
5.11.3. 最重要的是指针最后指向的那个数字
5.12. 对密钥对的攻击可以归结为寻找两个素数,它们相乘得到模数
-
5.12.1. 素数做乘法掩盖了选定的素数
-
5.12.2. 对于很大的模数,相乘得到模数的素数对有很多可能,攻击者必须测试大量素数才能破解密码
-
5.12.3. 当使用大模数时,用蛮力搜索寻找初始素数是非常耗时的
5.13. 密钥生成算法中的其他步骤确保了加密和解密是互反的
- 5.13.1. 对于0到模数之间的所有值,解密可以还原加密的结果
5.14. 1977年,《科学美国人》的一篇文章向大众读者介绍了RSA算法
-
5.14.1. 在文末提供了一个100美元奖金的挑战,挑战者要在给定加密密钥的情况下破解RSA密文
-
5.14.2. 模数相当大——一个129位的十进制数字
-
5.14.3. 破解密码花了17年的时间
- 5.14.3.1. 获胜的团队由600名志愿者组成,他们利用业余时间在世界各地的计算机上工作
5.15. RSA是军事级别的加密
5.16. 公匙加密现在被内置于万维网的安全套接层(Secure Socket Layer,SSL)中
-
5.16.1. 当网站地址前面有“https:”时,你的计算机就正在使用SSL和附带的RSA算法与远程服务器通信
-
5.16.2. 70%的网站流量使用SSL
-
5.16.3. 为了防止密文被最新的超级计算机破解,密钥的长度不得不不断增加
-
5.16.4. 现今,包含2048位(相当于617位的十进制数字)或更多数位的密钥很常见