https权威指南读书笔记

date:2018-8-08 11:45:24
title: https权威指南读书笔记
description: 配合加解密实战的一期分享, 补充相关基础知识, 既知道「怎么做」, 也了解「为什么这样做」

https权威指南
github/bulletproof-tls
SSL Labs
作者blog - Ivan Ristić

SSL 和 TLS 傻傻分不清楚

SSL和TLS都是加密协议,旨在基于不安全的基础设施提供安全通信
非常不幸,本身相同的协议却有两个名称(各位读者可能不会注意到这些,那也没关系)

SSL: secure socket layer 安全套接字层
TLS: transport layer security 传输层安全

SSL1 Netscape公司开发
SSL2 Netscape 1994
SSL3 Netscape 1995

TLS 工作组成立, 开始将SSL从Netscape迁移至IETF 1996
TLS1.0 1999
TLS1.1 2006
TLS1.2 2008
TLS1.3 draft(草案) 19[8] 2017.3

PKI: public key infrastructure 公钥基础设施; SSL和TLS依赖PKI, 确保不能解密数据和篡改数据

osi: open systems interconnection 开放系统互联, 常见的两种说法 OSI 7层网络模型 + tcp/ip 4层网络模型

  • 安全协议从哪里融入互联网基础设施


    https权威指南读书笔记_第1张图片
    安全协议从哪里融入互联网基础设施

密码学

安全的三个核心需求:

  • 保持秘密(机密性)
  • 验证身份(真实性)
  • 保证传输安全(完整性)

工作方式

  • 各种加密基元cryptographic primitive, 完成特定功能(加密/完整性检查)
  • 加密基元组合成方案(scheme)和协议(protocol)
  • 方案/协议完成加密任务

加密时通常会使用到三个术语

  • 明文(plaintext,即原始数据)
  • 密钥(cipher,用于加密)
  • 密文(ciphertext,即加密后的数据)

密码可以分为两大类

  • 序列密码(stream cipher): 密钥 + 序列密码(比如 RC4) -> 密钥序列; 密钥序列 + 明文 -> 密文
  • 分组密码(block cipher): 每次加密一整块数据(比如128位); 人们通过称为分组密码模式(block cipher mode)的加密方案来使用分组密码; 世界上最流行的分组密码是高级加密标准(advanced encryption standard,AES); 填充, 数据不足数据块大小(比如128位)的情况

散列函数(hash function)

  • 将任意长度的输入转化为定长输出的算法
  • 指纹、消息摘要,摘要
  • SHA1(160位) -> SHA256
  • 生日悖论(概率论中的常见问题)-> 散列函数的强度最多只是散列长度的一半
  • 散列函数可以用于验证数据完整性: 消息验证代码(message authentication code,MAC) 基于散列的消息验证代码(hash-based message authentication code,HMAC)

分组密码模式

  • 为了加密任意长度的数据而设计的密码学方案; ECB、CBC、CFB、OFB、CTR、GCM 等; ECB是设计一种分组加密模式的反面例子, CBC则仍是SSL和TLS的主要模式, GCM是TLS中相对较新(TLS1.2)的模式
  • 电码本(electronic codebook,ECB)模式
  • 加密块链接(cipher block chaining,CBC)模式, 为了解决ECB天生的确定性,CBC引入了初始向量(initialization vector,IV)的概念。即使输入相同,IV也可以使每次的输出都不相同

对称加密/非对称加密

  • 对称加密(symmetric encryption), 又称私钥加密(private-key cryptography): 在高速处理大量数据方面做得非常好; 相同团体的成员必须共享相同的密钥; 为了更好的安全性,你可以在每两个人之间使用不同的密钥,但是这个方法不可扩展 (1+n)*n/2
  • 非对称加密(asymmetric encryption)又称为公钥加密(public key cryptography): 公钥公开, 私钥自己保管; 公钥加密私钥解密 -> 加密数据; 私钥加密公钥解密 -> 数字签名
  • RSA是目前最普遍部署的非对称加密算法, 现在推荐的RSA强度是2048位,强度等同于112位的对称密钥; 可以同时用于加密和数字签名
  • 数字签名(digital signature): 验证一条电子消息或者一篇电子文档的真实性; 比如 RSA, DSA, ECDSA

随机数生成

  • 计算机按指令执行 -> 可能做不好生成随机数这项工作 -> 真正的随机数只能通过观测特定的物理处理器才能得到 -> 没有的话,计算机将关注于收集少量的熵(entropy)
  • 通过这种方式收集熵是一种真随机数生成器(true random number generator,TRNG) -> 你可能需要生成一个4096位的密钥,但是系统可能只有数百位的熵可用
  • 基于上面的原因,我们在实际使用中依靠的是伪随机数生成器(pseudorandom number generator,PRNG) -> PRNG也要利用少量真正的随机数使系统运转起来。这个过程被称为种子设定(seeding) -> 普通用途的PRNG被常常用于编程,但它们并不适用于密码学 -> 加密安全伪随机数生成器(cryptographically secure pseudorandom number generator,CPRNG)是不可预测的PRNG
https权威指南读书笔记_第2张图片
衡量强度

https权威指南读书笔记_第3张图片
常用密钥长度的加密强度映射

接下来还有什么

  • 协议
  • 公钥基础设施
  • 攻击PKI
  • http和浏览器问题
  • 实现问题
  • 协议攻击
  • 部署
  • 性能优化
  • http严格传输安全/内容安全策略和钉扎
  • openSSL

你可能感兴趣的:(https权威指南读书笔记)