SSL: secure socket layer 安全套接字层
TLS: transport layer security 传输层安全
传输层安全
TLS 主要实现以下四个目标
- 加密安全, 为任意愿意交换信息的双方启用安全通信
- 互操作性,独立的编程人员应该能够使用通用的加密参数开发程序和库,使他们可以相互通信
- 可扩展性, TLS 是一种能高效开发和部署加密协议的框架,目标是独立于实际使用的基元(例如密码和散列函数),从而不需要创建新的协议,允许从一个基元迁移到另一个
- 效率, 减少昂贵加密操作的执行次数,提供一个会话缓存方案,避免加密操作在随后的连接中被执行。
网络层
IP: internet protoccol
TCP: transmission control protocol
如果部署了加密,攻击者也许有能力得到加密数据的访问权限,但是不能解密数据或者篡改数据。为了避免伪装攻击,SSL 和 TLS 依赖 公钥基础设施 (public key infrastructure) ,确保将流量发送到正确的接收端。
为了理解 SSL 和 TLS 的运作,需要了解网络通信的理论模型,开放系统互联 (open systems interconnection)
OSI 层 | 描述 | 协议示例 |
---|---|---|
应用层 | 应用数据 | HTTP、SMTP、IMAP、DNS |
表示层 | 数据表示、转换和加密 | SSL / TLS |
会话层 | 多连接管理 | - |
传输层 | 包或流的可靠传输 | TCP、UDP |
网络层 | 网络节点间的路由与数据分发 | IP、IPsec |
数据链路层 | 可靠的本地数据连接 (LAN) | 以太网 |
物理层 | 直接物理数据连接 ( 电缆 ) | CAT5 |
密码学
对称加密
对称加密,通信双方使用相同的加密算法和密钥,加密与解密使用相同的密钥。
- 序列密码
序列密码的核心是生成一串无穷密钥序列,加密是将密钥序列中的1字节与明文序列中的1字节进行异或操作。异或操作是可逆的,解密是将密文序列中的1字节与密钥序列中的相同字节进行异或操作。RC4是熟知的序列密码。
- 分组密码
分组密码每次加密一整块数据,现代分组密码倾向于使用 128 位 (16字节) 大小的块。一个分组密码是一个变换函数,接受输入并生成看似杂乱无章的输出。 世界上流行的分组密码是高级加密标准 AES,可以使用 128位、192位和256位的加密强度。限制:
- 只能使用分组密码加密长度等于加密块的数据,实际使用分组算法时,需要一个方法处理任意长度的数据。
- 分组密码确定的情况下,对于相同的输入,输出也是相同的
- 填充
处理数据长度小于加密块大小的数据,追加额外的数据到明文尾部。TLS中,加密块的最后1字节包含填充长度,指示填充有多少字节 (不包含填充长度字节),填充的每字节都被设置成与填充长度字节相同的值,用于接收方检查填充是否正确。
散列函数
散列函数是将任意长度的输入转化为定长输出的算法,散列函数被称为指纹、消息摘要。如为了避免直接比较两个文件,可以比较他们的 hash
消息验证代码
hash function 可以用于验证数据完整性,仅在数据的散列与数据本身分开传输的条件下如此,否则攻击者可以同时修改数据和散列,从而轻易避开检测。消息验证代码或者使用密钥的散列是以身份验证扩展了散列函数的密码学函数。
分组密码模式
CBC 加密块链接仍是 SSL 和 TLS 的主要模式。
- 整个过程始于一个随机数 IV,长度与加密块相等。
- 加密前,明文第一块内容与 IV 进行异或操作。这一步对明文进行了掩饰,并保证密文总是不尽相同,对于下一个加密块,使用上一块的密文作为 IV。
- 每次加密操作都是加密链条中的一部分。
- IV 必须通过线路传送到接收端,这个信息是成功解密所必须的。
非对称加密
也称为公钥加密,如果利用 A 的公钥加密数据,只有 A 对应的私钥能解密数据。如果利用 B的私钥加密数据,任何人都可以t利用 B 的公钥解开消息,这种操作不提供机密性,但可以用作数字签名。
非对称加密较为缓慢,不适用于数据量大的场景,常被部署于进行身份验证和共享密钥的协商,这些密钥将用于后续快速的对称加密。RSA 是目前最普遍部署的非对称加密算法。
网友评论