HTTPS学习笔记(一):密码&协议

参考书籍:《HTTPS权威指南》http://pan.baidu.com/s/1i5CaUpv

一,加密介绍

1. 对称加密

对称加密(symmetric encryption)又称私钥加密(private-key cryptography)同一个密钥既用来加密同时也用来解密,安全性完全取决于密钥,如果密钥是从某个非常大的密钥空间中选取出来的,那么破解也需要遍历所有这些可能的密钥,其数量极大,几乎不可能。我们可以说这种算法在计算上是安全性的。

常用算法有:AES(Advanced Encryption Standard)(最常用),DES(Data Encryption Standard)(已破解,不再安全)

2. 散列函数

散列函数(hash function)是将任意长度的输入转化为定长输出的算法。

常用算法有:SHA1,MD5,SHA256(SHA1的变种)

3. 非对称加密

非对称加密(asymmetric encryption)又称为公钥加密(public key cryptography),它是另一种方法,使用两个密钥,而不是一个;其中一个密钥是私密的,另一个是公开的。

常用算法有:RSA(现在推荐的RSA强度是2048位,强度等同于112位的对称密钥)

4. 数字签名

以RSA为例

(1) 计算希望签名的文档的散列。不论输入文档的长度如何,输出长度总是固定的。比如,使用SHA256就是256位。

(2) 对结果散列和一些额外的元数据进行编码。比如,接收方需要知道你使用的散列算法,否则不能处理签名。

(3) 使用私钥加密编码过的数据,其结果就是签名,可以追加到文档中作为身份验证的依据。

5.证书

证书是一个包含公钥、订阅人相关信息以及证书颁发者数字签名的数字文件,也就是一个让我们可以交换、存储和使用公钥的壳。

二,SSL/TSL协议简介

SSL协议(Secure Socket Layer,安全套接字层)由Netscape公司开发,TSL协议(Transport Layer Security,传输层安全协议)是为了兼容IE从SSL迁移过来的.最新TSL版本为1.2(RFC5246)(RFC(Request For Comments)-意即“请求注解”,包含了关于网络的几乎所有重要的文字资料。)。

不需要身份验证的客户端与需要身份验证的服务器之间的握手如图:

(1) 客户端开始新的握手,并将自身支持的功能提交给服务器。
在一次新的握手流程中,ClientHello消息总是第一条消息。这条消息将客户端的功能和首选项传送给服务器。
ClientHello包含:
Version,协议版本(protocol version)指示客户端支持的最佳协议版本。
Random,随机数字段包含32字节的数据。
Session ID,在第一次连接时,会话ID(session ID)字段是空的,这表示客户端并不希望恢复某个已存在的会话。在后续的连接中,这个字段可以保存会话的唯一标识。
Cipher Suites,密码套件 块是由客户端支持的所有密码套件组成的列表,该列表是按优先级顺序排列的。
Compression,客户端可以提交一个或多个支持压缩的方法。
Extensions,扩展 块由任意数量的扩展组成。这些扩展会携带额外数据。

(2) 服务器选择连接参数。
ServerHello消息的意义是将服务器选择的连接参数传送回客户端。
这个消息的结构与ClientHello类似,只是每个字段只包含一个选项。

(3) 服务器发送其证书链(仅当需要服务器身份验证时)。
(4) 根据选择的密钥交换方式,服务器发送生成主密钥的额外信息。
(5) 服务器通知自己完成了协商过程。
(6) 客户端发送生成主密钥所需的额外信息。
(7) 客户端切换加密方式并通知服务器。
(8) 客户端计算发送和接收到的握手消息的MAC并发送。
(9) 服务器切换加密方式并通知客户端。
(10) 服务器计算发送和接收到的握手消息的MAC并发送。

密钥交换

在TLS中,会话安全性取决于称为主密钥(mastersecret)的48字节共享密钥。密钥交换的目的是计算另一个值,即预主密钥(premaster secret)。这个值是组成主密钥的来源。

RSA 密钥交换

客户端生成预主密钥(46字节随机数),使用服务器公钥对其加密,将其包含在ClientKeyExchange消息中,最后发送出去。服务器只需要解密这条消息就能取出预主密钥。

 

posted @ 2017-10-10 15:44  月光之殇  阅读(807)  评论(0编辑  收藏  举报