本文内容分两部分:
第一部分含有1.2.3.4点,简单总结网页上的一些基本知识
第二部分针对握手协议附上自己的阅读的理解,非常有助于理解知识点和疑问
1. ssl协议体系结构含有两部分:记录协议和握手协议
2. SSL工作过程:
接收方:
(1)接受数据
(2)数据分段
(3)压缩数据(可选)
(4)生成MAC
(5)数据加密
(6)添加SSL记录协议头,发送数据
3.一般我们浏览网页用的是http协议,http协议之间传输数据是明文,这样对于一些敏感信息传送不安全,容易被窃取.网景公司设计了ssl协议,用于对http协议传输的数据进行加密.于是就有了https.最新版本为ssl3.0之后就升级为TLS.
https在传输数据之前要求客户端(浏览器)与服务端之间完成一次握手.在这个过程中确定以后数据传输的密码信息.握手过程中主要用到了非对称加密算法,对称加密算法和HASH算法.
SSL握手协议简要过程:
(1)客户端明文发送自己支持的加密算法集合,SSL最高协议版本号和压缩方法给服务器;
(2)服务器从中挑选一组加密算法和HASH算法,并将自己证书发送给客户端.通常证书包含域名信息,证书颁发机构和加密公钥等.
(3)客户端取得证书后做以下几件事:
(a)验证证书合法性(如:证书颁发机构是否可信,证书中的域名和正在访问的域名是否一致等),如果证书可信,则会在网址旁边出现一把锁,否则给出证书不受信任提示.
(b)浏览器随机生成一个随机数,构成信息内容用(2)中的公钥对其进行加密.
(c)使用约定好的HASH算法对信息内容生成摘要,用自己的私钥对其进行加密,生成签名.同(b)的信息放一起,生成最后的信息一起发给服务器
(4)服务器接受到这些信息如下操作:
使用自己的私钥将信息解密取出秘钥种子(对称算法生成的通信秘钥),用client证书中的给公钥解密签名,取得摘要,使用hash函数对上述信息进行处理得到摘要与刚才的摘要对比,一致则说明没有第三方篡改过.
做了这么多的操作,主要为了确认双方都获得了相同的密码,并且可以成功地加密解密,为后续的数据传输做好一次测试.
简要介绍一下非对称加密算法,对称加密算法和HASH算法.
非对称加密算法用于加密客户端生成的随机密码,因为这个密码是Https数据传输的关键,所以使用了这种加密算法.非对称加密算法会生成公钥和私钥.公钥用于加密数据,因此可以随意传输.公钥用于解密数据,由服务端保管,不可泄露.
对称加密算法用于对真正传输的数据进行加密
HASH算法用于验证数据的完整性.
4.证书
数字证书有很多种:
(1)SSL证书,用于加密HTTP协议,也就是HTTPS.这是一种PKI(公钥基础结构)证书
(2)代码签名证书,用于签名二进制文件,比如内核驱动,Fire'fox插件,java代码签名
(3)客户端证书,用于加密邮件
(4)双因素证书,网银专业版使用的USB Key里面用的就是这种类型证书
-------------------------------------------------------------
我自己的理解:参考博文
A=Client ;B=server
A给B发送加密请求
B收到请求后给A发送加密用的公钥
如何确保A接受到的公钥就是B的呢,有可能被篡改,这时就用到数字证书,由CA颁发的数字证书中含有B的公钥等信息,同时CA用自己的私钥对B的公钥进行加密,这样在A收到数字证书后,用CA的公钥解密,就可以确定收到的公钥确实是B的.
A收到公钥后对信息进行加密,并发送给B
B收到信息后用私钥解密,得到信息
还有一个问题,如何确保发送的信息没有被改动过呢?这里用到数字签名;
数字签名的原理是:首先通过hash函数对信息进行处理得到,摘要,然后A通过自己的本地私钥对摘要加密,生成数字签名,然后发送给B,B在收到A的信息后,使用公钥对数字签名解密,得到摘要,这里也可以证明是A发送的,即身份验证了,然后B也通过HASH函数对信息处理得到摘要,与前面传过来的摘要进行对比,两者一致则证明信息没有被动过.
注释:
(1)这里已经假设B有A的公钥,实际上B也是通过发送双向验证请求,得到A的数字证书,才拿到A的公钥的,所以说数字证书是好东西.同理B也是可以对自己发送的信息进行数字签名的,以确保自己发送的信息没有被改动过.
(2)以上说的公钥,私钥加密都属于非对称加密算法,对称加密算法方式是用来对后面的传送数据进行加密的;可以这样理解:之所以叫非对称是因为,私钥只有自己才有,对方是没有的.对称加密算法是双方都有的解密方式.
(3)Hash算法是用来保证数据的完整性.
以上说的是SSL协议的握手协议,SSL协议体系结构还有一个记录协议......
记录协议用于交换应用层数据.应用程序消息被分割成可管理的数据块,进行压缩.并附上一个MAC(消息认证代码);然后结果进行加密传输.接受方接受数据后,对它进行解密,之后校验MAC,解压.最后重新组合,还原成信息.最后把数据提交给应用层协议..从这里可以看出SSL协议在TCP/IP网络协议栈的位置..它是夹在应用层协议(Http/Ftp/NNTp)和TCP协议之间的..
-------------------------------------------------------------
下面简要介绍一下各种加密算法:
首先明确使用密码学可以达成以下目的:
数据保密性:防止用户的表示或数据被读取
数据完整性:防止数据被更改
身份验证:确保数据发自特定的一方
(1)对称加密
DES:数据加密标准,速度较快.适用于加密大量数据的场合
3DES:是基于DES,对一块数据用三个不同的秘钥进行三次加密,强度更高(是不是那个三个随机数????)
AES:高级加密标准,是下一代的加密算法标准,速度快,安全级别高’
AES算法原理:
AES算法基于排列和置换运算.排列是对数据进行重新排列,置换是将一个数据单元替换为另一个.其实一种迭代的,对称密码.可以使用128/192/256秘钥..
(2)非对称加密
RSA:是一个支持变长密钥的公共密钥算法,需要加密的文件块的长度是可变的;
DSA:数字签名算法,是一种标准的DSS(数字签名标准);
ECC:椭圆曲线密码编码
1976年,Diffie和Hellman发表一篇文章<<密码学新动向>>,介绍了公钥和私钥概念.后来就提出RSA算法.
后来出现椭圆曲线用于算法.具体的算法内容请查看网址:
http://www.willrey.com/support/ssl_DES.html
ECC和RSA相比,在许多方面都有绝对优势,主要体现在下一方面:
l 抗攻击性强
l 计算量小,处理速度快.ECC总的速度比RSA/DSA要快的多
l 存储空间小
l 宽带要求低.对短消息时,ECC带宽要求却低很多.这使得ECC在无线网络领域具有广泛的应用前景.
下面介绍一下数字签名:
介绍之前.先引入散列的概念
散列是信息的提炼,长度比信息小的多,为固定长度.
散列特性:
(1)不可逆性.指通过散列结果无法推出任何原始信息
(2)雪崩效应.原始信息哪怕变化一位,也会导致散列结果的明显变化.
(3)防冲突.即找不出具有相同散列结果的两条信息.
具备以上特性的散列结果可以用于验证信息是否被修改.
常见散列函数有:
l MD5
l SHA(secure hash algorihtm) 可以对任意长度的数据运算生成一个160位的数值.
可以使用命令行计算文件的MD和SHA值
# MD5 digest
> openssl dgst -md5 filename
# SHA1 digest
> openssl dgst -sha1 filename
通过散列算法可实现数字签名实现,数字签名的原理是将要传送的明文通过一种函数运算(Hash)转换成报文摘要(不同的明文对应不同的报文摘要),报文摘要加密后与明文一起传送给接受方,接受方将接受的明文产生新的报文摘要与发送方的发来报文摘要解密比较,比较结果一致表示明文未被改动,如果不一致表示明文已被篡改。
MAC(信息认证代码)就是一个散列结果,其中部分输入信息是密码,只有知道这个密码的参与者才能再次计算和验证MAC的合法性.
加密算法的选择
前面的章节已经介绍了对称解密算法和非对称加密算法,有很多人疑惑:那我们在实际使用的过程中究竟该使用哪一种比较好呢?
我们应该根据自己的使用特点来确定,由于非对称加密算法的运行速度比对称加密算法的速度慢很多,当我们需要加密大量的数据时,建议采用对称加密算法,提高加解密速度。
对称加密算法不能实现签名,因此签名只能非对称算法。
由于对称加密算法的密钥管理是一个复杂的过程,密钥的管理直接决定着他的安全性,因此当数据量很小时,我们可以考虑采用非对称加密算法。
在实际的操作过程中,我们通常采用的方式是:采用非对称加密算法管理对称算法的密钥,然后用对称加密算法加密数据,这样我们就集成了两类加密算法的优点,既实现了加密速度快的优点,又实现了安全方便管理密钥的优点。
如果在选定了加密算法后,那采用多少位的密钥呢?一般来说,密钥越长,运行的速度就越慢,应该根据的我们实际需要的安全级别来选择,一般来说,RSA建议采用1024位的数字,ECC建议采用160位,AES采用128为即可..
http://www.ruanyifeng.com/blog/2011/08/what_is_a_digital_signature.html
http://www.ruanyifeng.com/blog/2014/02/ssl_tls.html
http://www.ruanyifeng.com/blog/2014/09/illustration-ssl.html
阮一峰老师的讲解
该篇文章介绍了握手协议的理解,下一篇文章重点介绍如何在linux下创建自己的CA证书,以及如何利用根CA证书签署中间CA证书,最后使用中间证书签署其他client证书请求文件