`
holdbelief
  • 浏览: 707632 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

SSL原理解密

阅读更多

SSL原理解密

原地址连接:http://netsecurity.51cto.com/art/200511/12736.htm

 声明:由于最近对安全加密相关技术比较感兴趣,所以翻译了这篇SSL的工作原理。这是一篇比较好的文章,深入浅出的介绍了SSL -- 安全套接层的工作原理,但是由于本人的加密知识及英语水平所限,感觉很多地方翻译的不好,但是我相信大家还是能够看懂的。:-)还是那句老话,本文欢迎非商业性转载,但请保持文章完整性并注明出处!
密钥密码系统介绍
这篇文章向大家阐述了Netscape公司是如何使用RSA的公用密钥密码系统来实现因特网安全的。Netscape的安全套接层的实现就利用了这篇文章中所讨论的技术。
RSA的公用密钥密码系统广泛地应用于计算机工业的认证和加密方面。Netscape得到RSA数据安全公司的许可可以使用公用密钥密码系统以及其它产品,尤其是认证方面的产品。
公用密钥加密技术使用不对称的密钥来加密和解密,每对密钥包含一个公钥和一个私钥,公钥是公开,而且广泛分布的,而私钥从来不公开,只有自己知道。
用公钥加密的数据只有私钥才能解密,相反的,用私钥加密的数据只有公钥才能解密,正是这种不对称性才使得公用密钥密码系统那么有用。
使用公用密钥密码系统进行认证
认证是一个验证身份的过程,目的是使一个实体能够确信对方是他所声称的实体。下面的例子包括Alice和Bob,并且向我们演示了如何使用公用密钥密码系统来轻易的验证身份。下面的 {something}key 表示something 已经用密钥 key 加密或解密。
假设Alice要认证Bob,Bob有一个密钥对,即一个公钥和一个私钥,Bob透露给Alice他的公钥(至于他是怎么做的将在以后讨论)。然后Alice产生一段随机的消息,然后把它发给Bob。
A-->B random--message
Bob用自己的私钥来加密这段消息,然后把加密后的消息返回给Alice。
B-->A {random--message}bobs--private--key
Alice接到了这段消息,然后用Bob以前发过来的公钥来解密。她把解密后的消息和原始的消息做比较,如果匹配的话,她就知道自己正在和Bob通信。一个入侵者应该不知道Bob的私钥,因此就不能正确的加密那段Alice要检查的随机消息。
但是,等一下,还有......
除非你确切的知道你在加密什么,否则用你的私钥加密一些东西,然后发给别人永远不是一件好事。这是因为加密后的数据可能会背叛你(记住,只有你能加密,因为只有你才有密钥)。
所以,我们不加密Alice发送的原始消息,取而代之的是,由Bob构造一个消息摘要,然后加密它。消息摘要是从随机消息中以某种方式提取出来的,并且具有以下特点:
摘要很难逆转,任何假冒Bob的人不能从摘要得到原始消息
假冒者无法找到具有相同摘要的不同消息
通过使用摘要,Bob能够保护自己。他首先计算出Alice发给他的随机消息的摘要并加密,然后把加密后的摘要返回给Alice,Alice可以计算出相同的摘要,通过解密Bob的消息然后对比一下就可以认证Bob的身份。
近一点......
刚才描述的技术称为数字签名。Bob为Alice产生的消息签名,这样做其实和加密Alice产生的随机消息一样危险。因此我们的认证协议需要一次以上的变形。部分(或者全部)的数据需要由Bob产生。
A-->B hello,are you bob?
B-->A Alice,This Is bob{digest[Alice,This Is Bob]}bobs-private-key
当Bob使用这个协议的时候,他知道自己发给Alice的是什么消息,并且不介意签名。他首先发送没有加密的消息“Alice,This Is Bob。”然后发送加密的摘要。Alice能够轻易的判断Bob是Bob,并且Bob没有签任何他不愿意签的东西。
分发公钥
Bob如何以一种可信赖的方式分发他的公钥呢?我们假设认证协议是这个样子的:
A-->B hello
B-->A Hi, I'm Bob, bobs-public-key
A-->B prove it
B-->A Alice, This Is bob{ digest[Alice, This Is Bob] } bobs-private-key
如果使用这个协议的话,任何人都可以是Bob。你需要的只是一个公钥和私钥,你跟Alice慌称你是Bob,接着你用自己的公钥代替Bob的公钥,然后你通过用你的私钥加密的东西来证明,这样Alice就不能分辨出你不是Bob。
为了解决这个问题,标准化组织发明了一个叫做证书的东西,一个证书包括下面的一些内容:
证书发行者的名字
证书发送给的团体
主题的公钥
一些时间戳
证书是由证书发行者的私钥签名的,每个人都知道证书发行者的公钥(即证书发行者有一个证书,等等)。证书是一种把公钥绑定到名字的标准方式。
通过使用证书这种技术,每个人都可以通过检查Bob的证书来判断Bob是不是伪造的。假设Bob严格的控制着他的私钥,并且的确是Bob得到了他的证书,那么一切都好。下面是补偿协议:
A-->B hello
B-->A Hi, I'm Bob, bobs-certificate
A-->B prove it
B-->A Alice, This Is bob{ digest[Alice, This Is Bob] } bobs-private-key
当Alice收到Bob的第一条消息,她可以检查证书,核实签名(如上,使用摘要和公钥加密),然后,核实主题(Bob的名字)来判断那是不是真的Bob。这样她就相信公钥是Bob的公钥,然后要求Bob证明他的身份。Bob则重新进行一次上面的相同过程,计算消息的摘要,签名之后发给Alice,Alice可以用从证书得到的公钥检查Bob的消息摘要,从而判断Bob的身份。
一个坏家伙 - 我们不妨叫他Mallet - 可以做下面的事情:
A-->M hello
M-->A Hi, I'm Bob, bobs-certificate
A-->M prove it
M-->A ????
但是Mallet在最后的消息中不能满足Alice。Mallet没有Bob的私钥,所以他无法构造一条使Alice相信来自Bob的消息。
交换秘密
一旦Alice认证了Bob,她就可以做另外一件事-她能发给一条只有Bob才能解码的消息:
A-->B {secret}bobs-public-key
发现这个秘密的唯一方法就是用Bob的私钥来解密上面的消息,交换秘密是公用密钥密码系统的另一种强大的用法。即使Alice和Bob之间的通信被监视,除了Bob,也没有人能够得到秘密。
这项技术加强了因特网的安全性,它把这个密码当作另一个密钥,但是这时它是对称性密码系统算法的密钥(如DES,RC4,IDEA)。Alice知道这个秘密,因为这是自己在发送给Bob之前产生的。Bob知道这个秘密,因为Bob有私钥,能够解密Alice的消息。因为他们都知道这个秘密,所以他们就可以初始化一个对称的密码算法然后开始传输用它加密的消息。下面是订正的协议:
A-->B hello
B-->A Hi, I'm Bob, bobs-certificate
A-->B prove it
B-->A Alice, This Is bob{ digest[Alice, This Is Bob] } bobs-private-key
A-->B ok bob, here is a secret {secret} bobs-public-key
B-->A {some message}secret-key
secret-key 的计算取决于协议的定义,但是它可以简化成一个 secret 的副本。
你说什么?
Mallet的袋子里有很多诡计。虽然Mallet不能发现Alice和Bob交换的秘密,但是他可以干预并且破坏他们的对话。举例来说,如果Mallet位于Alice和Bob,他可以选择让大多数的消息返回以及向前继续传输没有改变,但是破坏了特定位的消息(这对他来说很容易,因为他知道Alice和Bob之间通信的协议)。
A-->M hello
M-->B hello
B-->M Hi, I'm Bob, bobs-certificate
M-->A Hi, I'm Bob, bobs-certificate
A-->M prove it
M-->B prove it
B-->M Alice, This Is bob{ digest[Alice, This Is Bob] } bobs-private-key
M-->A Alice, This Is bob{ digest[Alice, This Is Bob] } bobs-private-key
A-->M ok bob, here is a secret {secret} bobs-public-key
M-->B ok bob, here is a secret {secret} bobs-public-key
B-->M {some message}secret-key
M-->A Garble[ {some message}secret-key ]
Mallet一直让数据没有改变的通过,直到Alice和Bob分享一个秘密。然后Mallet通过改变Bob发送给Alice的消息来进入这个方式中。这时候Alice是相信Bob的,因此她就可能相信这个改变的消息,然后按照它来做。注意Mallet并不知道这个秘密-他能做的所有事就是破坏用这个秘密的密钥加密的数据。他可能不能利用这个协议制造出一条有效的消息,但是下一次,他可能幸运一点。
为了防止这种破坏,Alice和Bob在他们的协议中引入了一种消息认证码(MAC)。MAC是根据秘密的密钥和传输的数据计算出来的,上面描述的摘要算法的属性正好可以用于构造抵抗Mallet的MAC功能。
MAC := Digest[ some message, secret ]
因为Mallet不知道这个秘密的密钥,所以他无法计算出这个摘要的正确数值。即使Mallet随机的改变消息,如果摘要数据很大的话,他成功的可能性也很小。举例来说,通过使用MD5(RSA公司发明的一种很好的密码摘要算法),Alice和Bob能和他们的消息一起发送128位的MAC值。Mallet猜中这个正确的MAC值的几率是18,446,744,073,709,551,616 分之1-也就是从来也不会猜出来。
下面是样本协议,又订正了一次:
A-->B hello
B-->A Hi, I'm Bob, bobs-certificate
A-->B prove it
B-->A {digest[Alice, This Is Bob] } bobs-private-key
ok bob, here is a secret {secret} bobs-public-key
{some message,MAC}secret-key
Mallet现在有麻烦了,Mallet可以改变任何的消息,但是MAC的计算将揭露他的欺诈行为。Alice和Bob能发现伪造的MAC值并停止会话,Mallet就不能伪造Bob的消息了。
这是什么时候的事?
最后的,但是同样重要的是要防范Mallet鹦鹉学舌。如果Mallet记录了会话的过程,他虽然可能不知道会话的内容,但是他可以重放这些会话。实际上,Mallet能在Alice和Bob之间做一些真正龌龊的事。解决的办法就是从会话的双方因如随机因素。

分享到:
评论

相关推荐

    SSL工作原理详解

    SSL的工作原理涉及到多个关键概念和技术。 首先,SSL的核心在于加密,它使用了公钥加密算法,如RSA,这是一种非对称加密技术。在公钥密码系统中,每个用户有一对密钥:公钥和私钥。公钥是可以公开的,用于加密数据...

    SSL原理及应用

    这主要通过公钥和私钥加密技术实现,公钥用于加密,私钥用于解密,确保只有收发两端能读取信息。 在HTTPS(HTTP over SSL/TLS)中,SSL/TLS被用于HTTP协议,为网页浏览等应用提供安全的通信环境。HTTPS可以防止中间...

    php版ssl加密解密上传密钥

    首先,我们要理解SSL的基本原理。SSL是一种网络安全协议,用于建立安全的网络连接,保护数据传输不被窃听或篡改。它通过公钥和私钥机制实现非对称加密,同时使用哈希算法和数字签名确保数据完整性。公钥用于加密,...

    Python-ssllogger解密并记录进程的SSL流量

    `ssl_logger`的工作原理是利用Python的`ssl`模块和`socket`模块,它会拦截并替换目标进程中所有的SSL连接,以便在数据传输过程中进行解密。这个过程涉及到对系统调用的钩子,因此需要相应的权限,并且可能只在某些...

    ssl原理及应用实用.pdf

    SSL工作原理中,数据加密使用的是对称加密算法,如DES或RC4,而密钥交换和数字签名则依赖于非对称加密算法,如RSA。在SSL握手过程中,客户端首先发送其支持的加密算法列表,服务器则选择最安全的算法进行通信。在SSL...

    SSL证书原理及格式1.21

    SSL证书原理及格式1.21 SSL证书原理及格式的知识点可以概括为以下几个方面: 一、SSL证书的概念和作用 * SSL证书是用于验证服务器身份的数字证书 * SSL证书用于在客户端和服务端之间进行身份验证和加密通信 * SSL...

    安全套接字SSL协议的工作原理

    安全套接字层(SSL,Secure Socket Layer)协议是一种用于在Web浏览器和Web服务器之间建立安全连接的协议,由Netscape公司在1994年开发。SSL的主要目标是提供两个关键服务:身份鉴别和数据保密。它通过加密技术确保...

    SSL工作原理详解说明

    综上所述,SSL工作原理的核心是通过公钥/私钥加密技术,结合数字签名和证书机制,确保了网络通信的机密性、完整性和用户身份的真实性。这一技术对于保障在线交易、电子邮件等敏感信息的安全至关重要。

    基于SSL的身份认证和访问控制实现原理.pdf

    实现基于SSL的身份认证和访问控制的原理,实际上是建立在网络通信双方之间的安全信任机制之上。通过技术手段确保身份的真实性和信息传输的机密性、完整性和不可否认性,再通过不同的授权和认证方法实现细粒度的访问...

    Apache SSL Module 介绍,原理及安装.doc

    下面将详细介绍Apache SSL模块的基本原理、工作流程以及如何在Linux系统上安装和配置。 **基本原理** SSL是位于HTTP协议和TCP/IP协议之间的一个安全协议层。当用户通过HTTPS(HTTP over SSL)访问网站时,浏览器和...

    SSL&TLS认证原理详解

    本文将深入探讨SSL/TLS的认证原理,包括加密方式、SSL/TLS的作用以及历史发展。 首先,加密方式是理解SSL/TLS工作原理的基础。对称加密是一种高效且简单的加密手段,使用相同的密钥进行加密和解密,但因为密钥的...

    SSL证书在线生成系统源码

    SSL证书在线生成系统源码是实现网站安全的重要工具,它基于公钥基础设施(PKI)原理,用于在互联网上建立安全的数据传输通道。本系统允许用户通过在线方式申请并生成SSL证书,简化了传统SSL证书获取流程,提升了用户...

    SSL Digger 检查服务器支持的加密格式

    服务器拥有一个公钥和私钥,公钥用于加密数据,只有对应的私钥才能解密。这一过程确保了即使数据在传输中被截获,攻击者也无法读取内容。 3. **对称加密**:在公钥/私钥加密后,SSL/TLS会切换到更快速的对称加密来...

    15加解密原理CA SSL1

    2、发送方用自己的私钥加密这段特征码,并附加在数据尾部 3、发送生成一个对称密钥 4、用对称密钥加密数据和加密后特征码 5、发送方用接收方的公钥加密这个对称密钥

    TLSSSL协议详解

    #### 五、SSL相关的密码学原理 - **对称加密**:使用相同的密钥进行加密和解密的过程。这种方式简单高效,但密钥分发是个难题。 例如,一段明文`0010110111100101`和密钥`0111`,通过异或操作加密后变为`...

    本地ssl证书生成工具

    SSL证书包含一个公钥和一个私钥,其中公钥用于加密数据,私钥用于解密。当用户访问一个网站时,浏览器会验证服务器的SSL证书,确保其来自可信的CA,并且未过期。如果验证成功,浏览器和服务器之间就会建立一个安全...

    linux下用C写的基于SSL 的TCP例子代码!

    首先,我们需要了解SSL/TLS的基本工作原理。SSL/TLS协议主要由两部分组成:握手协议和记录协议。握手协议用于建立连接,包括身份验证、协商加密算法和交换会话密钥;记录协议则负责对数据进行加解密和完整性校验。 ...

    300种加解密算法和原理

    下面,我们将深入探讨一些常见的加解密算法及其原理。 1. 对称加密:这种类型的加密使用相同的密钥进行加密和解密。早期的对称加密算法有DES(Data Encryption Standard),由于其密钥长度较短,现在已经不太安全。...

Global site tag (gtag.js) - Google Analytics