TLS/SSL
协议是为了解决网络通信中的信息安全问题而诞生的。git
它的设计目的主要有三个:github
TLS/SSL
协议主要包含两部分:
一、Record
记录协议算法
二、Handshake
握手协议浏览器
对称加密算法是指在加密和解密过程当中使用相同的密钥。安全
举例:
张三在与李四通信时为了防止第三方窃听,使用莫斯密码将通信内容加密。李四接收到通信内容后,使用相同的莫斯密码将内容解密。网络
由于使用了相同的莫斯密码,因此这属于对称加密。dom
网络通信中的对称加密之因此可以使用相同的密钥对内容进行加/解密,是由于使用了异或运算。函数
在数学领域中异或运算:当两两数值相同为否,而数值不一样时为真。网站
在计算机领域中的异或运算: 加密
举例:
现有一把密钥:1010,与明文:0110。
一、使用密钥对明文进行加密,得出密文为:1100
XOR
0 = 1XOR
1 = 1XOR
1 = 0XOR
0 = 0二、使用相同的密钥对密文进行解密,得出明文:0110
XOR
1 = 0XOR
1 = 1XOR
0 = 1XOR
0 = 0可见XOR
异或运算是对称加密的关键!
优势:
缺点:
异或运算要求双方长度一致的这个缺点要怎么解决呢?聪明的同窗或许已经想到解决方法了:就是将明文划分为多个等长的块。
好比密钥为16字节的,那就将明文划分为多个16字节的块,分别用密钥对这些明文块进行加解密。
Block cipher
分组加密原理就是这样:将明文划分为多个等长的Block
块,对每个Block
块分别加解密。
但并非全部的明文都能刚好的划分为16字节的块。这时就须要填充!
填充的目的:
Block
块的长度不足时,就须要填充。填充主要有两种方法:
其中字节填充有4种填充方式:
Block块
只有12个字节,那么就填入00 00 00 00。ANSI X9.23
--也是补零,只是在最后一个字节填写说明须要填充多少个字节。Block
块只有12个字节,那么就填入00 00 00 04。ISO 10126
--填随机数,在最后一个字节填写说明须要填充多少个字节。Block
块只有12个字节,那么就填入45 A3 D2 04。PKCS7
--须要填充多少个字节,就填写多少。Block
块只有12个字节,那么就填入04 04 04 04。对明文进行分组、填充后,还要按照必定的规律或方法进行加/解密。这些规律或者方法就是工做模式。
分组工做模式:block cipher mode of operation
一、 电子密码本ECB
模式--Electronic codebook
就是直接将明文分解为多个块,对每一个块进行加密。
这种工做方法很是简单、快速。可是缺点在于一样的明文块会被加密成相同的密文块;所以,它不能很好的隐藏数据模式。
举例:
对图片进行ECB
以后,是没法隐藏到图像的轮廓特性的。以下图所示:
二、密码分组连接CBC
模式--Cipher-block chaining
每一个明文块先与前一个密文块进行异或后,再进行加密。在这种方法中,每一个密文块都依赖于它前面的全部明文块。同时,为了保证每条消息的惟一性,在第一个块中须要使用初始化向量。
它的主要缺点在于加密过程是串行的,没法被并行化。
三、计数器模式CTR
模式--Counter
CTR
将块密码变为流密码。它经过递增一个加密计数器以产生连续的密钥流,其中,计数器能够是任意保证长时间不产生重复输出的函数。
这样加密和解密过程都可以进行并行处理并且加密效果也很是理想。
CTR
模式一样存在问题:没法提供密文的完整性校验。当密文在传输过程当中存在丢失的状况下,是没法保证密文的完整性的。
MAC
算法--Message Authentication Code
。
MAC
算法可以实现消息的完整性校验。工做原理是基于hash函数的。
hash
函数是一种从任何一种数据中建立小的数字“指纹”的方法。hash
函数把消息或数据压缩成摘要,使得数据量变小,将数据的格式固定下来。
简而言之就是:不管输入多长的字符串,经过hash
函数,都能获得定长较短的字符串。
MAC
工做流程如图所示:
MAC
算法生成一个MAC
序列。而后将密文与MAC
序列值一块儿打包发送。MAC
算法也生成一个MAC
序列。而后比对这两个MAC
序列是否相同。CTR
分组工做模式加上MAC
算法就诞生了GCM
分组工做模式。
高级加密标准AES
算法--Advanced Encryption Standard
PKCS7
GCM
AES
的分组Block
块长度固定为128比特,也就是16字节。
密钥长度则能够是128,192或256比特。
AES加密过程是在一个4×4的字节矩阵上运做。
因此从上图中看出,分组长度128比特分为4个32比特。而不一样长度的密钥则分为四、六、8组32位比特的矩阵。
AES
加密流程:如图所示
AddRoundKey
轮密钥加二、普通轮
AddRoundKey
轮密钥加SubBytes
字节替代ShiftRows
行移位MixColumns
列混合三、最终轮
SubBytes
字节替代ShiftRows
行移位AddRoundKey
轮密钥加addRoundKey
轮密钥加
round key
)作XOR
运算;每一个子密钥由密钥生成方案产生。SubBytes
字节替代
ShiftRows
行移位
MixColumns
列混合
MixColumns
步骤,而以另外一个AddRoundKey
取代。 对称加密的最大的问题是怎么把密钥传递给对方。非对称密码能够实现密钥的安全传递。
每个参与方都有一对密钥:
非对称加解密过程:
举例:
张三要和李四通信
第一步:张三用李四的公钥进行加密,将密文发送给李四。
第二步:李四用本身的私钥进行解密。
密文是没法经过公钥解密的,只有私钥才能解密。
张三怎么拿到李四的公钥?有两种办法:
RSA
是基于公开密钥密码体制的。
公开密钥密码体制是一种“由已知加密密钥推导出解密密钥在计算上是不可行的”密码体制。
RSA
算法中公私钥的产生:
p
和q
。p
和q
的乘积n
(明文小于n
)。n
的欧拉函数v
, v=(p-1)*(q-1)
。e
,且1<e<v
,k
与v
是互质。e
对于v
的膜反元素d
,(d * e)%v = (e * d)%v = 1
。(e, n)
。(d, n)
。RSA
的安全性依赖于大数因数分解很是很是困难,也就是经过一个大数n
是很是难的分解出p
和q
。
RSA
算法的加解密流程:以下图所示
因为进行大量的大数乘法运算,RSA的速度是对应一样安全级别的对称密码算法的1/1000左右。
PKI
是非对称密码学的一个很是重要的应用。
基于私钥加密,只能使用公钥解密的原理实现身份验证的做用。
签名与验签的流程
RSA
算法生成一对公私钥,而后将公钥与站长的我的身份发送给Certificate Authority
数字证书认证机构CA
机构核实完我的信息后就对这些信息使用CA
机构的私钥进行加密生成一个公钥数字证书CA
信息、公钥用户信息、公钥、权威机构的签名和有效期。具体的流程:如图所示
签名:
hash
函数生成一个hash
值。CA
机构的私钥对hash
值进行加密。验签:
hash
值。hash
函数生成一个hash
值。CA
机构的公钥解密证书中的加密的hash
值。hash
值是否相等。证书类型:
domain validated
:DV
证书DV
证书一般是免费的organization validated
:OV
证书OV
证书验证更为严格,一般是收费的extended validate
:EV
证书EV
证书最为严格,因此也是最贵的。从加密安全性上看,三类证书的保密性都是同样的,只有在站长的我的信息验证上有所不一样。
上面说到张三有两种办法能够拿到李四的公钥:
PKI
公钥基础设施拿到的。RSA
算法通常是第一种方法中用于CA
机构的身份验证上的。事实上RSA
算法用于第二种方法也是可行的。
举例:
张三与李四创建连接。李四用RSA算法生成一对公私钥,在握手中李四将公钥传递给张三。而后张三将对称加密的密钥用公钥进行加密后传递给李四,李四用私钥解密获得密钥。
就算第三方拿到公钥,没有私钥是没法解密密文的。
但这种方式有一个缺点:没有前向保密性。
也就是说当第三方将通信的报文所有保存下来后,在破解出私钥以后,就能知道全部密文内容。
而DH
密钥交换协议就解决了这个问题。它能够双方在彻底没有对方任何预先信息的条件下经过不安全信道建立起一个密钥。因此每一次通信中密钥都是实时生成的
具体流程:
DH
协议将对方的公钥和本身的私钥生成一个密钥。这两个密钥是彻底相同的。DH密钥交互协议的原理:
g
和p
,而后指定本身私钥a
,根据g
、p
和私钥a
生成公钥A
。g
和p
与本身公钥A
发送给张三。b
,而后基于公开数g
、p
和私钥b
生成公钥B
。B
发送给李四。K
。如图所示
DH
交换协议的问题:容易遭到中间人伪造攻击。
简单来讲:第三方伪装本身是张三向李四进行一次DH
密钥交换,而后又伪装李四向张三进行一个DH
密钥交换。就能够知道密钥K
。
解决这个方法很简单,就是使用PKI
公钥基础体系中的身份验证。第三方就没法伪装李四这个站长了。
从图中看出DH
协议也涉及到大量的大数乘法运算,速度也是很是慢的。而目前使用的DH
密钥交换协议是基于ECC
椭圆曲线加持过的,速度很是的快。称为ECDHE
密钥交换算法。具体细节能够本身去搜索查询。
TLS1.2
中常用的一个安全套件是:
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
具体说明一下:
参考文献:
分组密码工做模式--wiki
高级加密标准--wiki
RSA算法--wiki
DH密钥交换协议--wiki
《计算机网络:自顶向下方法》
Web协议详解与抓包实战--陶辉
更多文章请移步楼主github,若是喜欢请点一下star,对做者也是一种鼓励。