-
版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
http://uestcguagua.blogbus.com/logs/42635436.html
我们在访问一般的静态网页(这里的一般是指不包含机密内容)的时候是不需要验证与加密的,比如wikipedia,服务器并不关心访问者是谁,只负责将请求的网页发送给请求人。而在访问一些动态网站,如邮箱,校内,购物网站等需要知道访问者的身份的时候,我们开始接触到验证。
最简单也最常用的验证方法就是输入用户名与密码,再由服务器中的程序访问数据库来验证。对这种验证方式的攻击有强力破解(brute force attack),就是用程序把用户名和密码都试一遍,或聪明点的词典式攻击(Dictionary attack)。与强力破解相区分的是,词典式攻击只使用用户自定义词典中的单词或短语,这个词典记录着较常出现的密码。
这种验证方式很简单,也很危险,因为密码在网络中的传输可能是以自己定义的某种简单的加密方法甚至是明码传输。下面这个图就是我在使用一个网站的验证的时候,用ethereal抓自己包的时候看到的,我的用户名和密码都裸奔。

这种情况下,如果网络被监听了,用户名和密码也直接被盗了。
而到了对加密要求更为严格的场合,像网络购物,交易等,这种方式明显不行。这就到了安全套接字层SSL(Secure socket layer)和加密技术(Cryptopraphy)出场的时候了。
SSL是位于TCP/IP模型中传输层与应用层之间的层,作用是建立安全的传输通道。下面分别说说私钥加密(对称加密),公钥加密(非对称加密),电子签名,电子证书和SSL的握手过程。
私钥加密(对称加密)中传输方与接收方使用同一个密钥进行加密与解密。对于这种加密方式而言,密钥是两个人之间共享的,这就要求两个人在传输内容之前要商定好一个密码,而这个密码显然也是不能裸奔的。这是个先有鸡还有先有蛋的问题(要注意双方的距离非常远)。

所以为了保证远距离通信的安全性,公钥加密技术产生了。公钥加密是用公钥(公开的密钥)加密,用私钥解密,或者用私钥加密用公钥解密。即发送方在传输数据之前用接收方的公钥加密,接收方再用自己的私钥解密。

上面两图引用自:http://docs.sun.com/source/817-5215/ax_crypt.html。
电子签名是根据原文生成一个哈希,再用自己的私钥加密得到的。发送方发送原文的时候也发送自己的电子签名,接收方收到以后,根据原文生成哈希,同时用发送方的公钥对电子签名进行解密,将两个哈希比较,如果一样就说明这是的确是发送方(拥有私钥的人)发送的,而原文也没有在中途被篡改。

在公钥体系中存在一个问题,就是发送方如何确定接收到的公钥是接收方的,而不是伪装成接收方的第三者的?也就是说要有个方法验证接收方的身份,因此要使用到电子证书。
电子证书是由证书发行机构授予的,上面包含了证书拥有者的公钥,证书发行机构的电子签名等信息。在firefox中,我们可以右键->查看页面信息->安全->查看证书来查看网站的证书。以https://开头的URL表示内容是经过加密传输的。

要证明证书可信,就要证明证书发行机构的电子签名是正确的,因此又要证明证书发行机构的证书是有效的。这就形成了一个验证链,直到确认根证书是可信的为止。而在浏览器中内嵌了很多证书,这些证书都被认为是可信的。在firefox中打开工具->高级->查看证书,就可以看到这些证书,也可以对证书进行管理。

下面是一个SSL单向验证的握手过程

1. 客户端向服务器商发送请求,同时发送自己的SSL版本号,编码设置和随机生成的数据。
2. 服务器将自己的SSL版本号,编码设置,随机生成的数据和电子证书发给客户端。
3. 客户端验证服务器的证书,根据之前双方随机生成的数据生成预主密,用服务器证书的公钥对预主密加密,将加密后的预主密发送给服务器。服务器根据收到的预主密生成主密,再生成会话密钥,也就是用于对会话内容加密的一个对称密钥。
4. 同时客户端也根据预主密按相同的方式生成主密,再生成会话密钥。密钥生成完毕后,给服务器发送用会话密钥加密的表示连接建立完毕的消息。
5. 服务器接收到客户端发送的消息后,再向客户端发送加密的表示连接建立完毕的消息。随机文章:
Java奇怪的数组 2009-07-22英语搭配 2008-08-27色彩混合(加色法与减色法) 2008-07-04本校图书馆数据库资源总结(英文数据库部分) 2008-06-15K-means算法 2008-01-08
收藏到:Del.icio.us
引用地址:









评论