TLS协议tls握手协议过程是必然会被截到的吗?

收藏,1.3k 浏览
作者:drinkey
以前读RFC时总结的一篇文章,主要介绍了SSL/TLS协议的相关知识,包括协议本身以及简单的密码学概念,以及用实例解析了HTTP over SSL的协商过程,在最后简要列出了SSL的安全问题。
1. RFC documents about SSL/TLS
详细讲述了TLS1.0的协议,TLS协议提供了一种Internet安全通信方式,该协议允许客户端和服务端通信,并保证消息不被监听,篡改和伪造。
描述了如何使用TLS协议来保证HTTP通信的安全性
描述了TLS压缩的几种方式
EAP-TLS认证协议
TLS1.2协议文档,在RFC2246基础上有所发展
2. SSL/TLS简介
最初SSL协议是由netscape开发,并集成到浏览器中,用于保护HTTP传输安全性,作为在传输层和应用层之间的一层,对更多的需要保护数据安全性的协议进行封装。IETF以SSL协议为基础,提出了一种新的协议:TLS,建立在SSL V3.0的基础上,是SSL 3.0的后续版本,已经开始在实际应用中使用。
虽然TLS和SSL不能互操作,仅仅是因为他们使用的加密算法和MAC算法不同,协议本身差别非常细微。RFC-2246是IETF提出的第一个版本,被称作TLS v1.0,目前最新的版本是TLS v1.2,在RFC-5246中描述了其细节问题。
以下根据RFC5246,介绍SSL
3. SSL协议组成
协议由两层构成:TLS Record Protocol和TLS Handshake Protocol。
TLS Record Protocol处于较低的一层,基于一些可信任的协议,如TCP,为高层协议提供数据封装、压缩、加密等基本功能的支持。它保证了通信的两个基本安全属性:
1.保密连接。数据传输使用对称加密算法,如AES,RC4等,该对称加密算法的密钥对于每个连接是唯一的,基于密钥协商协议生成,比如TLS handshake protocol,Record Protocol也可以不使用加密。
2.可信连接。消息的传输包括了基于密钥的消息认证码(keyed MAC),使用安全Hash函数计算MAC,用于完整性检查。Record Protocol也可以不使用MAC,但是这种模式只用于安全参数协商时。
Record Protocol用于封装多种高层的协议,其中一个种就是TLS handshake protocol,这种协议允许客户与服务器相互认证,在应用程序通信前,协商加密算法和加密密钥。TLS handshake protocol保证了连接的三个基本安全属性:
1.两端的身份可以通过非对称或者公钥加密算法(DSA,RSA等)进行认证。认证过程是可选的,但至少要求一端被认证。
2.共享密钥的协商是安全的。密钥协商对于监听者和任何被认证的连接都是不可见的。
3.协商是可信的。攻击者无法修改协商信息。
TLS协议提供的服务主要有:
1)认证用户和服务器,确保数据发送到正确的客户机和服务器;
2)加密数据以防止数据中途被攻击者监听;
3)维护数据的完整性,确保数据在传输过程中不被攻击者篡改。
TLS协议在协议栈中如下图所示:
TLS协议对数据的封装如下图所示:
4. HTTP over SSL实例分析
为了便于更好的认识和理解SSL协议,这里着重介绍SSL协议的握手协议,支持SSL协议,以下结合实例,介绍SSL握手协议。数据包使用Wireshark抓取。对于文中提到的密码学术语,在文章第5节有简单解释,可对照阅读。
SSL 协议既用到了非对称公钥加密技术又用到了对称加密技术,对称加密技术使用于Record层,用于对传输的数据进行加密,公钥加密技术使用于Handshake协议,提供了身份认证的功能。
SSL 的握手协议非常有效的让客户和服务器之间完成相互之间的身份认证,本实例中只有客户端验证服务端,服务端并没有对客户端进行验证,一般相互进行身份认证的情况在登录银行系统时会用到。
下面根据抓取到的数据包,分析浏览器访问时使用SSL协议的过程:
①客户端的浏览器向服务器提出TCP连接请求,建立起TCP连接后,客户端向服务端发送Client Hello消息,传送客户端 SSL 协议的版本号,加密算法的种类,以及其他服务器和客户端之间通讯所需要的各种信息。Client Hello消息的内容如下图所示:
Cipher Specs字段是一个枚举类型,说明了客户端所支持算法,每个Cipher Spec指定了一个加密组合,从下图可以看出,SSL与TLS的很显著的区别就是,TLS支持了更多更先进更安全的加密组合,如下图所示:
②服务端收到建立SSL连接的请求后,向客户端传送 SSL 协议的版本号,加密算法的种类,随机数以及其他相关信息,同时服务器还将向客户端传送自己的证书。如下图所示:
Random是服务端产生的随机数,根据一个随机种子生成,这里的随机种子是gmt_unix_time,根据这个时间,使用伪随机数函数(PRF)生成一个32字节的random_bytes。
Session ID是一组任意字节数的序列,由server选出,用于识别连接是活动状态还是可恢复状态。
Cipher Suite指定了服务端选定的加密组合,这里选出的加密组合是TLS_RSA_WITH_AES_256_CBC_SHA,RSA作为认证算法,256位的AES分组加密算法作为Record层加密payload使用的算法,SHA作为消息认证码算法,用于保证消息的完整性,防止消息被篡改。
Compress Method表明了使用的压缩算法,Record层接收高层协议的数据时,会将数据进行分片,前面已经提到过,对于每个分片可以选择使用一定压缩算法来提高加密和传输效率,这里没有使用压缩算法,所以是null。
接着,服务端返回了证书,证书使用x.509格式,供客户端验证其身份,同时发送一个Server Hello Done消息。如下图所示:
③客户利用服务器传过来的信息验证服务器的合法性,服务器的合法性包括:证书是否过期,发行服务器证书的 CA 是否可靠,发行者证书的公钥能否正确解开服务器证书的“发行者的数字签名”,服务器证书上的域名是否和服务器的实际域名相匹配。如果合法性验证没有通过,通讯将断开;如果合法性验证通过,将继续进行第四步。
④用户端随机产生一个用于后面通讯的密钥,然后用服务器的公钥(服务器的公钥从步骤②中的服务器的证书中获得)对其加密,然后将加密后的“预主密钥”传给服务器(Client key exchange)。该过程内容如下图所示:
由于预主密钥的传输使用RSA进行了加密,所以无法在抓取的数据包中显示出来(在上图中的Encrypted Handshake Message),从而保证了握手过程的保密性。
⑤如果服务端要求客户的身份认证(在握手过程中为可选,本例中没有该步骤),用户可以建立一个随机数然后对其进行数据签名,将这个含有签名的随机数和客户自己的证书以及加密过的预主密码(Premaster secret)一起传给服务端。
⑥如果服务端要求客户的身份认证,服务端必须检验客户证书和签名随机数的合法性,具体的合法性验证过程包括:客户的证书使用日期是否有效,为客户提供证书的CA 是否可靠,发行CA 的公钥能否正确解开客户证书的发行 CA 的数字签名,检查客户的证书是否在证书废止列表(CRL)中。检验如果没有通过,通讯立刻中断;如果验证通过,服务端将用自己的私钥解开加密的预主密码,然后执行一系列步骤来产生主密钥(Master secret)(客户端也将通过同样的方法产生相同的主通讯密码)。
如果服务端没有进行步骤5,服务端端收到客户端发送的使用服务端公钥加密的预主密钥,用私钥解开加密的预主密钥,执行一系列函数,生成会话的主密钥,客户端也进行相同的操作生成主密钥。
⑦服务器和客户端拥有了相同的主密钥,双方使用之前协商的对称加密算法,并使用主密钥作为密钥,用于 SSL 协议的安全数据通讯的加解密通讯。同时在 SSL 通讯过程中还要维护数据通信的完整性,防止数据通讯中的任何变化,通过消息认证码来保证。
⑧客户端向服务器端发出信息(Change cipher spec),指明后面的数据通讯将使用的步骤⑦中的主密码为对称密钥,同时通知服务器客户端的握手过程结束。
⑨服务器向客户端发出信息(Change Cipher Spec),指明后面的数据通讯将使用的步骤⑦中的主密码为对称密钥,同时通知客户端服务器端的握手过程结束。
⑩SSL 的握手部分结束,SSL 安全通道的数据通讯开始,客户和服务器开始使用相同的对称密钥进行数据通讯,同时进行通讯完整性的检验。该过程的数据包如下图所示:
从此过程开始,TLS Record层使用Application Data Protocol通信,其Content-type字段变为HTTP,这个字段记录了上层协议的协议类型,以便数据提交到对方的TLS Record层后,对数据进行组装,并交付给上层协议处理。
5. 密码学知识简单介绍
以上详细阐述了基于TLS的HTTP协议(HTTPS)客户端与服务端建立连接和握手的过程,以下对一些用到的密码知识作为补充,进行简单的介绍:
PRF:伪随机数生成函数,用于生成任意大小的随机序列。一般使用时间作为初始化的随机种子,通过PRF生成随机序列,如果序列的长度不符合要求,则使用Hash函数对序列进行散列运算,经过几轮迭代知道序列长度满足要求为止。一个好的PRF可以保证序列的随机性最大化,防止猜测。
对称加密算法:如AES,DES,RC4。加密和解密的两个过程使用相同的密钥,通过加密和解密函数对数据进行操作,从而达到加密数据和解密数据的目的。
公钥加密算法:如DSA,RSA。通信双方共享各自的公钥,传输时使用对方的公钥对数据进行加密,接收方收到后,用自己的私钥对数据进行解密。公钥加密算法也被称为非对称加密算法,因为加密和解密使用不同的密钥。公钥算法的数学依据是大素数的分解问题,理论上很难分解一个足够大素数。常做认证和签字用。
分组密码:很多对称加密算法都是分组加密,先将需要加密的数据进行分组和填充,再将每个分组使用加密函数进行加密,经过一些置换和迭代,得到固定长度的输出。
Hash函数:如SHA,MD5。散列函数,具有单向性。散列函数对消息进行摘要,并经过迭代,得到固定长度的输出。消息的一个字节的变化对Hash函数的输出都会有很大的影响。
MAC:消息认证码,由Hash函数对消息进行摘要得到,由于Hash函数的特性,可以提供对消息完整性的验证,一般随消息一起发出。
TLS协议大量的使用了以上密码算法,从而保证了数据的完整性和保密性,密码学是TLS协议安全的基础,任何一种使用到的密码算法被破解,将直接影响TLS协议的安全性。
6. SSL/TLS Security Issues
TLS协议并不是牢不可破的,使用了TLS的HTTP协议不一定安全。由于TLS协议中有很多可选项,甚至可以选择Record层是否使用加密,如果没有很好的配置,那么TLS也不能保证传输的安全性。
2009 blackhat con中Marsh Ray提到了Renegotiating TLS attack,由于TLS renegotiating的逻辑漏洞,造成在理想环境下,可以实施中间人攻击,这个攻击是非常巧妙的,主要是利用了TLS/SSL 3.0重置加密算法机制和HTTP协议请求头的key、value结构,实现了多次数据的组合以完成自己想要的请求。
主要步骤如下:
1). 攻击者连接目标站点完成SSL握手称为session 1,并发送GET /adduser.jsp?u=test&passwd=123 HTTP/1.1\r\nFVCK: 之类的数据包。
2). 攻击者劫持被攻击者访问目标站点的数据,在session 1中转发被攻击者与目标服务器之间的SSL握手,被攻击者和目标服务器完成握手称为session 2。
3). 目标站点和被攻击者通过攻击者的转发完成握手,在session 2中被攻击者发送自己的请求数据到目标服务器,类似于GET / HTTP/1.1\r\nHost: \r\nAccept: */*\r\nCookie: admin=1\r\n\r\n之类的数据。
4). 目标站点在一个SSL Session 1中接收到一个新的SSL Client Hello时,会认为客户端是在要求重新生成密钥,因为在目标服务器看来session 2也是攻击者发过来的,而且是相同的TCP session中。最终导致目标服务器认为session 2是session 1密钥重置之后的延续,会将两次的数据组合到一起。
5). 最终数据如下:GET /adduser.jsp?u=test&passwd=123 HTTP/1.1\r\nFVCK: GET / HTTP/1.1\r\nHost: \r\nAccept: */*\r\nCookie: admin=1\r\n\r\n。FVCK字段服务器不认识,真实请求GET / HTTP/1.1当成了FVCK字段的值,一起被忽略掉,攻击者成功的执行了添加WEB系统用户的操作
详细介绍参照Marsh Ray的原作:
文档的最后展示了中间人攻击的结果,成功获得了TLS协议上层协议的内容。
2014年Google公布了SSLv3的漏洞,CVE--,代号POODLE(Padding Oracle On Downgraded Legacy Encryption),目前只有通过服务端禁用SSLv3.0协议来防止此攻击的发生。
知名的开源安全软件OpenSSL同样在2014年同样也爆出了Heart bleed漏洞,造成攻击者可以直接读取内存中的数据。
你可能感兴趣的文章
4 收藏,825 浏览
本文隶属于专栏
关于IT技术的点点滴滴
分享到微博?
与我们一起探索更多的未知
专业的开发者技术社区,为用户提供多样化的线上知识交流,丰富的线下活动及给力的工作机会
加入只需一步
举报理由:
推广(招聘、广告、SEO 等)方面的内容
带有人身攻击、辱骂、仇恨等违反条款的内容
与已有问题重复(请编辑该提问指向已有相同问题)
不友善内容
答非所问,不符合答题要求
其他原因(请补充说明)
补充说明:
扫扫下载 App
SegmentFault
一起探索更多未知您所在位置: &
&nbsp&&nbsp&nbsp&&nbsp
SSLv3TLS网络安全协议研究与实现.pdf74页
本文档一共被下载:
次 ,您可免费全文在线阅读后下载本文档
文档加载中...广告还剩秒
需要金币:200 &&
优秀硕士毕业论文,完美PDF格式,可在线免费浏览全文和下载,支持复制编辑,
可为大学生本专业本院系本科专科大专和研究生学士硕士相关类学生提供毕业
论文范文范例指导,也可为要代写发表职称论文的提供参考!!
你可能关注的文档:
··········
··········
电子科技大学硕士论文
随着网络技术的高速发展,计算机网络获得了广泛的应用,如何解决信息安
个问题成为网络应用的关键性技术问题。在电子商务应用中,要求网络通信的双
方必须能够了解对方的身份,并确认信息在通信过程中未被篡改,同时需要防止
其它人窃取通信的内容。数据加密与身份认证是目前解决信息安全最有效的技术
手段,两者的结合就构成完整的安全传输协议,可以实现数据保密、身份认证等
SSLv3 SecureSocketLayer3.0 /TLS TransportLayerSecurity 协议就是一种
实现以上功能的典型的网络安全传输协议。SSLv3/TLS协议实现的功能包括对通
信双方的身份认证、对数据加密和对数据的完整性保护。SSLv3/TLS协议通过通
信双方交换握手报文的方式,协商在通信中使用的加密、签名算法和加密密钥,
并实现双方的身份认证。
本文一首先详细分析了SSLv3/TLS协议的编码方式、交换报文的格式、运行
流程以及协议定义的算法簇以及SSLv3与TLS协议的差异。确定了实现协议的
方式和目标。随后定义了协议运行的状态及状态机,并设计出一个基于事件驱动
的实现框架,并对协议实现中使用的数据结构进行了完整描述。最后给出了从功
能,性能以及兼容性三方面对协议实现进行测试的结果。
关键字:SSLv3,TLS,信息安全
电子科技人学硕士论文
Withtherapidevolutionofcomputernetworkingtechnolodyanditsapplications
inmanyareas,informationsecurityhasbecomethekeytechnicalissuefornetworking
applications.Inthee-commerceapplications,thecommunicatorswanttoknowwith
正在加载中,请稍后... 上传我的文档
 下载
 收藏
该文档贡献者很忙,什么也没留下。
 下载此文档
正在努力加载中...
TLS协议在VPN中的应用研究
下载积分:1199
内容提示:TLS协议在VPN中的应用研究
文档格式:PDF|
浏览次数:11|
上传日期: 15:32:55|
文档星级:
该用户还上传了这些文档
TLS协议在VPN中的应用研究
官方公共微信当前访客身份:游客 [
Droid Sans Mono
:引用来自“小小贝”的评论#此处输入软件名#.......
:#此处输入软件名#
:引用来自“ccjiang”的评论一般吧。。好 一般也得...
:引用来自“wintersteng”的评论请问源码是哪一版...
:请问源码是哪一版本的?
:很好 谢谢
:引用来自“饥饿沉淀器”的评论 好东西啊,,, ...
:引用来自“饥饿沉淀器”的评论好东西啊,,, 天...
:好东西啊,,, 天启之门 ...
:不错,测试能用,谢谢
今日访问:12
昨日访问:262
本周访问:274
本月访问:4172
所有访问:105561
webservice ssl 1 SSL/TLS 协议入门
发表于4个月前( 11:35)&&
阅读(137)&|&评论()
0人收藏此文章,
SSL(Secure Sockets Layer,安全套接层),及其继任者 TLS(Transport Layer Security,传输层安全)是为网络通信提供安全及数据完整性的一种安全协议。TLS与SSL在传输层对网络连接进行加密。
为Netscape所研发,用以保障在Internet上数据传输之安全,利用数据加密(Encryption)技术,可确保数据在网络上之传输过程中不会被截取及窃听。
SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持。SSL协议可分为两层:
&&&&& SSL记录协议(SSL Record Protocol):它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。
&&&&& SSL握手协议(SSL Handshake Protocol):它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。
SSL协议提供的服务主要有:
  1)认证用户和服务器,确保数据发送到正确的客户机和服务器;
  2)加密数据以防止数据中途被窃取;
  3)维护数据的完整性,确保数据在传输过程中不被改变。
一、什么是SSL?
&&&&& SSL或者Secure Socket Layer,是一种允许web浏览器和web服务器通过一个安全的连接进行交流的技术。这意味着将被发送的数据在一端被翻译成密码,传送出去,然后在另一端解开密码,再进行处理。这是一个双向的过程,也就是浏览器和服务器都需要在发送数据之前对它们进行加密。
&&&&& SSL协定的另一个重要方面是认证(Authentication)。这就是说,在你开始试图通过一个安全连接与一个Web服务器交流的时候,这个服务器会要求你的浏览器出示一组证件,通过“鉴定”的方式来证明这就是你所声明的网站。在某些情况下,服务器还会要求你的web浏览器的认证书,证明你就是你所说的那个人。这就是所知的“客户认证”,尽管实际情况中,更多地用在商务-对-商务(B2B)交易,而不是对个人用户。大多数有SSL功能的web服务器不要求客户认证(Client Authentication)。
&二、证书:Certificate
&&& 为了能实施SSL,一个web服务器对每个接受安全连接的外部接口(IP地址)必须要有相应的认证书(Certificate)。关于这个设计的理论是一个服务器必须提供某种合理的保证以证明这个服务器的主人就是你所认为的那个人,特别是在接收任何敏感信息之前要这样做。关于Certificates的更广泛的解释超过了这个文档资料的范围,就把一个认证书当作一个英特网地址的“数码驾驶执照”。这个认证书要陈述与这个网站相关联的公司,以及这个网站的所有者或系统管理员的一些基本联系信息。
&&&& 这个"驾驶执照"由所有人以密码方式签字,其他人非常难伪造。对于进行电子商务 (e-commerce)的网站,或其他身份认证至关重要的任何商业交易,认证书要向大家所熟知的认证权威 (Certificate Authority (CA))如VeriSign或Thawte来购买。这样的认证书可用电子技术证明属实——实际上,认证权威单位会担保它发出的认证书的真实性,如果你信任发出认证书的认证权威单位的话,你就可以相信这个认证书是有效的。
&&&& 从技术上说,SSL 证书(也称为数字证书)将身份与一对可用于加密和签名数字信息的电子密钥绑定。SSL 证书能够实现对某人自称有权使用特定密钥的声明的验证,有助于防止有人使用欺骗性密钥来模拟其他用户。当与加密配合使用时,SSL 证书可提供完整的安全解决方案,可以保证参与事务的一方或各方的身份。
&&&& SSL 证书是由受信任的第三方(称为证书颁发机构 (CA))发放的。CA 的作用有些像护照办理处。CA 必须采取一些措施来确定要向其发放 ID 的人或组织的身份。一旦 CA 建立某个组织的身份后,就可以发出一个包含该组织的公钥的证书,并用 CA 的私钥对其签名。
&&&& 通过使用 SSL 证书,您就能在自己的站点上开展验证身份的、加密的在线商务活动。访问您站点的用户将可以向站点提交信用卡号或其他个人信息,从而保证他们真心实意与您进行业务交易(并非是骗子),并且他们发送给您的信息不会被目标接收者以外的任何人截取或解密。您的 SSL 证书将包含下列信息:
&&& 您的组织的公用名称(如 )
&&& 其它标识性信息(如 IP 和物理地址)
&&& 您的公钥
&&& 公钥的到期日期
&&& 发出此 ID 的 CA 的名称(如 VeriSign)
&&& 一个唯一的序列号
&&& VeriSign 的数字签名
&三、证书格式
主要的证书类型有: &&& PEM &&& DER &&& PKCS#12
PEM &&& 可以包括所有私钥(RSA 和 DSA)、公钥(RSA 和 DSA)和 (x509) 证书。它存储用 Base64 编码的 DER 格式数据,用 ascii 报头包围,因此适合系统之间的文本模式传输。
-----BEGIN CERTIFICATE----- MIICJjCCAdCgAwIBAgIBITANBgkqhkiG9w0BAQQFADCBqTELMAkGA1UEBhMCVVMx EzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBGcmFuY2lzY28xFTAT BgNVBAoTDEJFQSBXZWJMb2dpYzERMA8GA1UECxMIU2VjdXJpdHkxIzAhBgNVBAMT GkRlbW8gQ2VydGlmaWNhdGUgQXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9zdXBw b3J0QGJlYS5jb20wHhcNMDAwNTMwMjEzODAxWhcNMDQwNTEzMjEzODAxWjCBjDEL MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG cmFuY2lzY28xFTATBgNVBAoTDEJFQSBXZWJMb2dpYzEZMBcGA1UEAxMQd2VibG9n aWMuYmVhLmNvbTEeMBwGCSqGSIb3DQEJARYPc3VwcG9ydEBiZWEuY29tMFwwDQYJ KoZIhvcNAQEBBQADSwAwSAJBALdsXEHqKHgs6zj0hU5sXMAUHzoT8kgWXmNkKHXH 79qbPh6EfdlriW9G/AbRF/pKrCQu7hhllAxREbqTuSlf2EMCAwEAATANBgkqhkiG 9w0BAQQFAANBACgmqflL5m5LNeJGpWx9aIoABCiuDcpw1fFyegsqGX7CBhffcruS 1p8h5vkHVbMu1frD1UgGnPlOO/K7Ig/KrsU= -----END CERTIFICATE-----
DER &&& 辨别编码规则 (DER) 可包含所有私钥、公钥和证书。它是大多数浏览器的缺省格式,并按 ASN1 DER 格式存储。它是无报头的 - PEM 是用文本报头包围的 DER。
PKCS#12 &&& 公钥加密标准 #12 (PKCS#12) 可包含所有私钥、公钥和证书。其以二进制格式存储,也称为 PFX 文件。
四、加密算法
加密算法有俩大类,第一种是不基于KEY的,另一种是不基于KEY的。
&&& 基于KEY的,举个简单的例子,我要加密"fordesign"这么一串字符,就把每个字符都变成它的后一个字符,那么就是"gpseftjhm"了,这样的东西人家当然看不明白,接收方用相反的方法就可以得到原文。当然这只是个例子,现在应该没人用这么搞笑的加密算法了吧。
&&& 不基于KEY,好象一直用到了计算机出现。我记得古中国军事机密都是用这种方式加密的。打战的时候好象军队那些电报员也要带着密码本,也应该是用这种方式加密的。这种算法的安全性以保持算法的保密为前提。 &&& 这种加密算法的缺点太明显了,就是一旦你的加密算法给人家知道,就肯定挂。日本中途岛惨败好象就是密码给老米破了。设计一种算法是很麻烦的,一旦给人破了就没用了,这也忑浪费。
&&& 我们现在使用的加密算法一般是基于key的,也就是说在加密过程中需要一个key,用这个key来对明文进行加密。这样的算法即使一次被破,下次改个key,还可以继续用。key是一个什么东西呢?随便你,可以是一个随机产生的数字,或者一个单词,啥都行,只要你用的算法认为你选来做key的那玩意合法就行。
&&& 这样的算法最重要的是:其安全性取决于key,一般来说取决于key的长度。也就是说应该保证人家在知道这个算法而不知道key的情况下,破解也相当困难。其实现在常用的基于KEY的加密算法在网络上都可以找到。
基于key的加密算法又包括俩类:对称加密和不对称加密。
&&& 对称加密指的是双方使用完全相同的key, 最常见的是DES. DES3, RC4等。对称加密算法的原理很容易理解,通信一方用KEK加密明文,另一方收到之后用同样的KEY来解密就可以得到明文。
&&& 不对称加密指双方用不同的KEY加密和解密明文,通信双方都要有自己的公共密钥和私有密钥。
&&& 举个例子比较容易理解, 我们们假设通信双方分别是A、B。 &&& A 拥有 KEY_A1、KEY_A2, 其中KEY_A1是A的私有密钥,KEY_A2是A的公共密钥。 &&& B 拥有 KEY_B1、KEY_B2, 其中KEY_B1是B的私有密钥,KEY_B2是B的公共密钥。 &&& 公共密钥和私有密钥的特点是,经过其中任何一把加密过的明文,只能用另外一把才能够解开。也就是说经过KEY_A1加密过的明文,只有KEY_A2才能够解密,反之亦然。
通信过程如下:
&&& A--------&KEY_A2------------&B &&& A&--------KEY_B2&------------A && & &&& 这个过程叫做公共密钥交换,老外管这叫key exchange。 &&& 之后A和B就分别用对方的公共密钥加密,用自己的私有密钥解密。 &&& 一般公共密钥是要发布出去的,然后你通过自己的私有密钥加密明文,人家用你的公共密钥解密,如果能解开,那么说明你是加密人,这就是SSL使用的验证机制。
我如果要发给你,我就用你的公钥加密,这让只有你能用自己的私钥解密。如果我用自己的私钥加密,然后发布出去,这就不属于保密,而是属于认证,证明这条信息是我发的,而且我不能赖帐,因为私钥只有我自己知道。
常用的不对称加密一般有RSA、 DSA、 DH等。我们一般使用RSA。
五、数字签名
&&&& 数字签名也是不对称加密算法的一个重要应用,理解它对于理解SSL很重要的,放在这里一起介绍一下。
&&&& 签名是什么大家都很熟悉吧?证明该东西是你写的,是你发布的,你就用签名搞定。看看那些重要文件都要头头签名。数字签名就是数字化的签名了。记得公用密钥和私有密钥的特征吗?只有你一个人有你自己的私有密钥。而你的公用密钥是其他人都知道的 了。那么你在写完一封邮件之后,用自己的私有密钥加密自己的名字,接收人用你的公共密钥解开一看,哦,是你发的。这就是你的数字签名过程了。
&&&& 上面的解释是很简化的了,其实数字签名比这个复杂多了,但我们没有了解的必要,知道数字签名是这么一回事就可以了。
&&&&& 还有一种我们需要知道的加密算法,其实我不觉得那是加密算法 ,应该叫哈希算法,英文是message digest, 是用来把任何长度的一串明文以一定规则变成固定长度的一串字符串。它在SSL中的作用也很重要,以后会慢慢提及的。一般使用的是MD5、SHA、base64不是加密算法,但也是SSL经常使用的一种算法,它是编码方式,用来把asc码和二进制码转来转去的。
&&&& 具体的加密解密过程我们不需要了解,因为SSL根本不关心。但了解加密算法的一些基本原理是必要的,否则很难理解SSL。
更多开发者职位上
1)">1)">1" ng-class="{current:{{currentPage==page}}}" ng-repeat="page in pages"><li class='page' ng-if="(endIndex<li class='page next' ng-if="(currentPage
相关文章阅读

我要回帖

更多关于 tls协议详解 的文章

 

随机推荐