在学习TLS的握手过程之前,先复习一些基础知识。
基础知识
对称加密算法
对称加密算法的特点是加密密钥和解密密钥是同一把密钥K,且加解密速度快,典型的对称加密算法有DES、AES等
非对称加密算法
非对称加密算法的特点是使用一对可互为加解密的密钥。
一个自己保留,不能让其他人知道,叫私钥。
一个可以公开,叫公钥
加密密钥(即公钥)PK是公开信息,而解密密钥(即私钥)SK是需要保密的。加密算法E和解密算法D也都是公开的。虽然解密密钥SK是由公开密钥PK决定的,但却不能根据PK计算出SK 。
典型的非对称加密算法有RSA、DSA等。
若欲RSA原理的,请参考如下两篇网络上比较好的讲解
https://www.ruanyifeng.com/blog/2013/06/rsa_algorithm_part_one.html
http://www.ruanyifeng.com/blog/2013/07/rsa_algorithm_part_two.html
摘要算法
摘要算法又称哈希算法、散列算法。它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符串表示)。
F(M) = D
F是单向散列函数:即如果已知x,很容易计算F(x),但已知F(x),却很难算出x。
常见的摘要算法,如 MD5,SHA1,SHA512 等等。
MD5即Message-Digest Algorithm 5(信息-摘要算法),属于摘要算法,是一个不可逆过程,就是无论多大数据,经过算法运算后都是生成固定长度的数据,结果使用16进制进行显示的128bit的二进制串。通常表示为32个十六进制数连成的字符串。
数字签名
数字签名就是用私钥将摘要加密的结果,这样能够保证数据的完整性,防篡改。
E(D)=S
校验数据的完整性
Bob 把要发送的明文生成摘要,摘要生成签名。Bob把明文和摘要一并发送给Alice。
Alice收到邮差送来的消息包,如何验证消息是完整的,未受篡改的呢?
Alice 需要做的是
- 明文算出摘要
- 通过Bob的公钥和签名反算出被Bob签名的Hash值
若两个值相等,则说明Alice拿到的原文的内容和Bob算hash值的时候的原文内容是一致的,也就是原文没有被篡改。
签名加密,与解密验签流程
若是Bob想要把机密文件加密发给Alice, 并且还要防止被人篡改, Bob需要将原文签名,并将原文和签名一并加密,然后将加密后的密文发出给Alice。
实际通信中,非对称加密由于效率低的原因往往仅仅用来协商生成对称密钥。在双方协商出对称密钥后,原文和签名将使用对称密钥加密。
Bob:
* 将原文生成摘要
* 将摘要生成签名
* 将原文和签名一并加密
最终生成的密文发出
Alice在收到密文后,
* 使用协商的对称密钥解密
* 将原文内容算出摘要
* 将签名内容通过验签算法算出被签名前的值 (即Bob算出的摘要值)
Alice需要对比第二步和第三步中算出的值,若相等,则说明数据是完整的,未被篡改的。
那么:
对称密钥是如何安全传递给通信双方的?
签名和验签的原理是什么?
答案在 ECDH,ECDHE, ECDHA
个人用于学习交流的公众号