<< 图解密码技术 >> 读后总结

作者详细的介绍了密码学的发展历史,以及常用的加密算法及其使用场景,借助书的一段描述,我认为本文所涉及到的技术可以概括为:

密码学家的工具箱包括:

  • 对称加密
  • 公钥加密
  • 单向散列函数
  • 消息认证码
  • 数字签名
  • 伪随机数生成器

如果你对这6项技术都能很好的运用,以及能区分优缺点,那么恭喜你,你已经入门了,不需要看我写的总结了。另外11/12/13/14章节我省略了,如果你感兴趣,可以自己去查阅。如果你掌握了前10章,那么你对 HTTPS 的原理应该是比较清晰了。

01. 环游密码世界

本章介绍了密码安全的重要性,对一些对象的概念做了详细介绍,比如:消息、发送者、窃听者、接收者。也对一些加密技术做了简单介绍:密码算法、密钥、对称密钥、公钥密码等。

02. 历史上的密码

介绍了古时候的人们是如何对信息进行加密的。介绍了以下算法:

  • 凯撒密码:对英文字母进行平移来加密解密
  • 简单替换密码:自定义替换规则
  • Enigma: 二战中,德国使用一种加密算法

03. 对称密码(加密消息)

对称加密:加密和解密使用相同的密钥,有 DES、3次DES(3个密钥)、AES 等加密算法

  • 对称加密主要使用了 XOR(异或) 以及 论函数
  • DES: 将 64 比特明文加密为64比特密文的算法,密钥长度为 64 比特(包含7为错误检查的比特)
  • AES的规则:
    • 分组长度固定为 128 比特
    • 密钥长度只有 128、192、256 3种
    • Rijndael(简称RD) 基于 AES 规则进行实现,被选为标准算法
  • 缺点:接受方和发送者,都要事先知道加密密钥,因为配送时不能明文传输

04. 分组密码的模式

由于几乎所有的算法都只能将固定长度的明文进行加密,当超过这个长度时就需要分组加密,这些分组是如何进行迭代的可以分为很多模式,这就是分组密码模式。
密码算法可以分为:分组密码 和 流密码(对数据进行连续处理的一类密码算法)

  • 分组模式主要有5类
    • ECB:电子密码本模式,不安全,不要使用
    • CBC:密码分组链接模式,安全,推荐使用,SSL\TLS 都使用了它
    • CFB:密文反馈模式,安全
    • OFB:输出反馈模式,安全
    • CTR:计数器模式,安全
  • CBC/CFB/OFB:这三个需要初始化向量 IV

如果你多这些模式的细节感兴趣,建议你自行上网搜查资料,比如 https://baike.baidu.com/item/CBC/22320875

05. 公钥密码 (密钥配送问题)

公钥密码:加密和解密分别使用不用的密码,被称为公钥(public key)和私钥(private key),公钥常常是公开的,私钥则是私钥的,绝对不能公开,公钥和私钥是一对密钥对,他们在逻辑上是具有数学关系的。它的典型应用是解决密钥配送问题。

  • RSA 是公钥密码算法种最广泛的
  • RSA 主要使用 幂运算 和 模运算,本质是质因素分解的算法
  • 一般来说,对称密码算法 要比 公钥密码算法 快很多
  • 公钥密码 + 堆成密码 经常组合使用
  • 公钥密码缺点:
    • 处理速度远远低于对称密码
    • 公钥密码难以抵御中间人攻击

06. 混合密码系统 (公钥密码抵御中间人攻击)

  • 混合密码技术:用对称密码提高速度,用公钥密码保护会话密钥。
  • 混合密码技术主要为了解决公钥密码难以抵御中间人攻击
  • 加密解密步骤:
    • 加密:将消息通过对称密码来加密,将加密时使用的密钥通过公钥来加密
    • 解密:使用私钥来解密获取密钥,然后使用对称密码+密钥,来解密消息,获得明文
  • 混合密码的组成:
    • 用对称密码来加密消息
    • 通过伪随机数生成器,生成对称密码加密中使用到的会话密钥
    • 通过公钥密码加密会话密钥
    • 从混合密码系统外部赋予公钥密码中的密钥

07. 单向散列函数 (消息一致性)

  • 单向散列函数,也被称为哈希函数,消息摘要函数
  • 单向散列函数,用于获取消息的指纹,判断消息一致性,是否被篡改
  • 单向散列函数中,输入是消息,输出是散列值(指纹),散列值的长度和消息的长度无关,总是固定的某个长度,比如 SHA-256 的散列值永远是 256 比特。
  • 性质:
    • 根据任意非固定长度,计算出固定长度的散列值
    • 能够快速计算,文件很大时,也能很快计算
    • 消息不同散列值也不同
    • 具备单向性,无法根据散列值获得消息
  • 实际应用:
    • 检测软件是否被纂改
    • 基于口令的加密:将口令(也就是密码) 和 盐(伪随机数) 进行混合,计算其散列值,作为加密的密钥
    • 消息认证码:将 "发送者和接收者之间的共享密钥" 和 "消息" 进行混合后计算出散列值,消息认证码在SSL/TLS中得到了运用
    • 数字签名:数字签名类似于签名和盖章的操作,一般先计算消息的散列值,然后对散列值进行数字签名。
    • 伪随机数生成器
    • 一次性口令
  • 常见的单向散列函数
    • MD5 (Message Digest)信息摘要的缩写, 产生128 比特的散列值,已经被破解不安全了
    • SHA-1 老美发明的,已经被标记不安全
    • SHA-2 老美改进 SHA-1
      • SHA-256 产生 256 比特的散列值
      • SHA-512 产生 512 比特的散列值
    • SHA-3 继续优化版本
      • Keccak 函数
  • 单向散列只能解决消息一致性,无法对消息的来源进行认证,也就是伪装。

08. 消息认证码(消息被正确传送了吗)

  • 消息认证码:是一种确认完整性并进行认证的技术,简称MAC,消息认证码的输入包括一个任意长度的消息,以及发送者和接收者之间共享的密钥。输出固定的长度,这个值叫做 MAC 值。
  • 和单向散列的区别:消息认证码需要密钥。
  • 消息认证码也存在密钥配送问题
  • 消息认证码算法实现
    • HMAC 算法:利用单向散列函数构造 HMAC,比如 SHA-1/SHA-256/SHA-512
  • 消息认证码无法解决的问题
    • 对第三方的证明
    • 放置否认

9. 数字签名(消息到底是谁写的)

  • 消息认证码的局限性:消息认证码无法仿制否认,因为消息可能是发送者伪造的,也可能是接收者伪造的,他们他俩的密钥是一样的
  • 数字签名技术:3个点
    • 发送者使用一个只有自己才知道的私钥A,发送消息时用该私钥生成一个签名
    • 接受者使用一个只有自己才知道的私钥B(A和B不同),收到消息,使用B对签名进行验证。
    • 使用B只能进行签名验证,而无法生成签名
  • 通过数字签名的特别,可以看出它的逻辑和公钥密码非常相似。公钥加密,私钥解密
  • 公钥密码和数字签名刚好相反
    • 使用私钥加密,生成签名
    • 使用公钥解密,验证签名
    • 为什么是相反呢?因为公钥是开放的,所以任何人都能用公钥解密验证签名

9.1 数字签名的方法

  • 直接对消息签名,太耗时,不推荐使用
  • 对消息的散列值签名,推荐使用

9.2 数字签名无法解决的问题

要正确的使用数字签名,一个大前提是,用于验证签名的公钥,必须属于真正的发送者,这样我们陷入了死胡同:用来识别是否篡改、伪装、以及否则的数字签名,它本身以来公钥篡改识别的功能。为了验证公钥是否为合法的发送者,我们需要使用证书。所谓证书就是将公钥作为一条消息,有一个可信的第三方对其签名后所得到的公钥。当然,这只是问题转移,为了对证书上的数字签名进行验证,我们必然需要另一条公钥,这就设计到了PKI,即公钥基础设施。

10. 证书(为公钥加上数字签名)

证书:用来对公钥的合法性提供证明的技术。
公钥证书(PKC)类似驾照,里面有姓名,组织,邮箱,地址等个人信息,以及属于此人的公钥,并由认证机构施加数字签名。主要步骤为:

  • Bob生成密钥对
  • Bob在认证机构Trent注册自己的公钥
  • 认证机构 Trent 使用自己的私钥对 Bob 的公钥施加数字签名并生成证书
  • Alice 得到带有认证机构 Trent 的数字签名的 Bob 的公钥(证书)
  • Alice 使用认证机构 Trent 的公钥,验证 Bob 的公钥的合法性
  • Alice 使用 Bob 的公钥信息加密消息,发送给 Bob
  • Bob 使用自己私钥解密得到明文

10.1 公钥设施基础(PKI)

为了能够更有效运用公钥而制定的一系列规范和规格的集合。

你可能感兴趣的:(<< 图解密码技术 >> 读后总结)