协议森林17 我和你的悄悄话 (SSL/TLS协议)

做者:Vamei 出处:http://www.cnblogs.com/vamei 严禁任何形式转载。html

 

TLS名为传输层安全协议(Transport Layer Security Protocol),这个协议是一套加密的通讯协议。它的前身是SSL协议(安全套接层协议,Secure Sockets Layer)。这两个协议的工做方式相似,但TLS协议针对SSL协议进行了一些改善。SSL/TLS协议利用加密的方式,在开放的互联网环境中实现了加密通讯,让通讯的双方能够安心的说悄悄话。。算法

 

加密 

SSL协议的基础是加密技术。加密和解密是自古就有技术了。好比说古代的男女偷偷发生私情,不能被相互之间有血海深仇的两个家族知道。男孩问女孩要不要一块儿私奔。女孩次日传来答复,上面写着:浏览器

K FQ安全

男孩拿着这串字符翻来覆去想了半天,没明白女孩的意思,就觉得女孩不肯放弃优渥的生活和他私奔。直到十年后,男孩突然灵光一闪,发现若是把每一个字母都替换成字母表上提早两个的字母的话,这三个字符就变成了:服务器

I DOdom

 

这种加密方法是将原来的某种信息按照某个规律打乱。打乱的方式称为加密算法,而打乱过程当中的参数就叫作密钥(cipher code)。上面女孩的加密方式是把原字母替换为字母表上后固定位的字母。而密钥就是固定的位数2了。发出信息的人根据密钥来给信息加密,而接收信息的人利用相同的密钥,来给信息解密。就好像一个带锁的盒子。发送信息的人将信息放到盒子里,用钥匙锁上。而接受信息的人则用相同的钥匙打开。加密和解密用的是同一个密钥,这种加密称为对称加密(symmetric encryption)。函数

 

若是一对一的话,那么两人须要交换一个密钥。理论上,若是密钥绝对安全,并且加密算法绝对复杂的话,对称加密是很难破解的。但通讯双方很难绝对保证密钥的安全。一旦有其余人窃取到密钥,那么全部通讯都变得不安全了。特别在一对多的话,若是共用同一套密钥,那么某一方通讯的破解就意味着全部通讯的破解。二战中盟军的情报战成果,不少都来自于破获这种对称加密的密钥。盟军破解了某个德国特工的加密手法,那么也就了解到纳粹总部的加密手法了。post

二战中德军的传奇加密机:Enigma网站

 

对称加密的薄弱之处在于给了太多人的钥匙。若是换一种思路,只给特工锁,而总部保有钥匙,那就容易了。特工将信息用锁锁到盒子里,谁也打不开,除非到总部用惟一的一把钥匙打开。只是这样的话,特工每次出门都要带上许多锁,太容易被识破身份了。总部老大想了想,干脆就把造锁的技术公开了。特工,或者任何其它人,能够就地取材,按照图纸造锁,但没法根据图纸造出钥匙。钥匙只有总部的那一把。上面的关键是锁和钥匙工艺不一样。知道了锁,并不能知道钥匙。这样,总部能够将“造锁”的方法公布给全部用户。每一个用户能够用锁来加密本身的信用卡信息。即便被别人窃听到,也不用担忧:只有总部才有钥匙呢!非对称加密中,给全部人用的锁被称为公钥(public key),总部本身保留的钥匙被称为私钥(private key)。这样一种钥匙和锁分离的加密算法就叫作非对称加密(asymmetric encryption)。加密

 

非对称加密

对称加密的原理相对比较直观,而非对称加密听起来就有些神奇。通过非对称加密产生的密文,就算知道加密的方法,也没法获知原文。实现了非对称加密的经典算法是RSA算法。它来自于数论与计算机计数的奇妙结合。咱们从下面的情境中体验一下RSA算法的妙处。

 

我是潜伏在龙凤大酒楼的卧底。想让下面信息以加密的方式发送到总部:

A CHEF HIDE A BED

厨子藏起来了一张床!这是如此的重要,须要当即通知总部。千万重要的是,不能让反革命的厨子知道。

 

第一步是转码,也就是将英文转换成某个对应的数字。这个对应很容易创建,好比:

A B C D E F G H I
1 2 3 4 5 6 7 8 9

 

将上面的信息转码,得到下面的数字序列:


A CHEF HIDE A BED 1 3856 8945 1 254

这串数字彻底没有什么秘密可言。厨子发现了这串数字以后,很容易根据数字顺序,对应字母表猜出来。

 

为了和狡猾的厨子斗智斗勇,咱们须要对这串数字进一步加密。使用总部发给咱们的锁,两个数字:3和10。咱们分为两步处理。第一步是求乘方。第一个数字是3,也就是说,总部指示咱们,求上面数字串的3次方:

原字符串: 1   3   8   5   6   8   9   4   5   1   2   5   4

三次乘方: 1  27 512 125 216 512 729  64 125   1   8 125  64

第二步是求余数。第二个上锁的数字是10,将上面每一个三次乘方除以10,得到其他数:

余数: 1 7 2 5 6 2 9 4 5 1 8 5 4

 

将这串数字发回总部。中途被厨子偷看到,但一时不能了解其中的意思。若是仍是像刚才同样对应字母表的话,信息是:

AGBEFBIDEAHED

这串字母彻底不包含正常的单词。

 

信息到了总部。总部开始用神奇的钥匙来解读。这个钥匙是3。在这个简单的粒子里,钥匙不当心和以前锁中的一个数字相同。但这只是巧合。复杂的状况下很容易让锁和钥匙不一样。解锁过程也是两步。第一步求钥匙次的乘方,即3次方。第二步求它们除以10(锁之一)的余数。

加密信息:1   7   2   5   6   2   9   4   5   1   8   5   4

三次乘方:1 343   8 125 216   8 729  64 125   1 512 125  64 (这里用的是钥匙的“3”)

除十得余:1   3   8   5   6   8   9   4   5   1   2   5   4

正是咱们发送的信息。对应字母表,总部能够当即知道原来的信息。就此,咱们简单的体验了RSA算法的使用过程。鉴于这里篇幅有限,这里再也不详细解释RSA算法的原理。若是有兴趣,能够参考个人另外一篇文章:“不给力啊,老湿!”:RSA加密与破解

 

SSL协议

能够看到,非对称加密从安全性上要强过对称加密。但天下没有免费的午饭。非对称加密的运算成本一样也比较高。为了兼顾效率和安全,SSL协议同时使用了非对称和对称加密。它用对称加密算法来加密信息自己。但对于安全性比较脆弱的对称加密密钥,则采用非对称加密的方式来传输。

 

SSL协议分为客户端和服务器端。通讯的核心步骤很简单:

1. 双方利用明文通讯的方式确立使用的加密算法。

2. 利用非对称算法通讯,交换一个密钥。

3. 该密钥用于对称加密算法,加密接下来的通讯正文。

 

能够看到,SSL协议的关键是用一个很是安全的方式来交换一个对称密钥。交换的过程会比上面的描述更加复杂一些。

1. 客户发起请求时,除了说明本身支持的非对称加密算法,还会附加一个客户端随机数(client random)。

2. 服务器回复请求时,会肯定非对称加密算法和哈希函数,并附上公钥。此外,服务器端还会在这次通讯中附加一个服务器端随机数(server random)。

3. 客户端会产生第三个随机数(Premaster secret),而后利用服务器肯定的非对称加密算法和公钥来加密这个随机数,再发送给服务器端。

4. 客户端用本身的私钥解密第三个随机数。

4. 这样,客户端和服务器端都知道了三个随机数。双方各自用商量好的哈希函数从三个随机数得到对称加密的密钥。

即便明文通讯的时候,某些信息被窃听,但第三步的非对称加密通讯部分能够保证窃听者没法完整的得到三个随机数。这样,窃听者仍是不知道对称加密的密钥是什么。这样,对称加密的密钥就在一个安全的环境中得到了。为了进一步安全,服务器的公钥会包含在一个数字证书中发送给客户。这样,客户还能够经过数字证书来验证服务器的身份,以避免服务器自己出现问题。 

 

今年来使用愈来愈普遍的HTTPS协议就是在SSL/TLS协议的基础上进行通讯。HTTP协议在通讯过程当中要通过多重路由,很容易被窃听。通过SSL协议加密的信息就算被窃听,也只能被通讯目的地的人解读,从而保证了信息的安全。因此,若是所访问的网站没有使用HTTPS协议,那么在输入银行帐号和密码之类的敏感信息时,就要三思然后行了。

 

当浏览器出现锁的符号时,说明访问的资源使用了HTTPS通讯

相关文章
相关标签/搜索