`

SSL原理工作流程(转)

    博客分类:
  • pki
阅读更多

声明:由于最近对安全加密相关技术比较感兴趣,所以翻译了这篇SSL的工作原理。这是一篇比较好的文章,深入浅出的介绍了SSL -- 安全套接层 的工作原理,但是由于本人的加密知识及英语水平所限,感觉很多地方翻译的不好,但是我相信大家还是能够看懂的。:-)还是那句老话,本文欢迎非商业性转 载,但请保持文章完整性并注明出处!

 

  密钥密码系统介绍

  这篇文章向大家阐述了Netscape公司是如何使用RSA的公用密钥密码系统来实现因特网安全的。Netscape的安全套接层的实现就利用了这篇文章中所讨论的技术。

  RSA的公用密钥密码系统广泛地应用于计算机工业的认证和加密方面。Netscape得到RSA数据安全公司的许可可以使用公用密钥密码系统以及其它产品,尤其是认证方面的产品。

  公用密钥加密技术使用不对称的密钥来加密和解密,每对密钥包含一个公钥和一个私钥,公钥是公开,而且广泛分布的,而私钥从来不公开,只有自己知道。

  用公钥加密的数据只有私钥才能解密,相反的,用私钥加密的数据只有公钥才能解密,正是这种不对称性才使得公用密钥密码系统那么有用。

 

  使用公用密钥密码系统进行认证

  认证是一个验证身份的过程,目的是使一个实体能够确信对方是他所声称的实体。下面的例子包括Alice和Bob,并且向我们演示了如何使用公用 密钥密码系统来轻易的验证身份。下面的 {something}key 表示something 已经用密钥 key 加密或解密。

 

1.  假设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要检查的随机消息。

 

2.  但是,等一下,还有......

  除非你确切的知道你在加密什么,否则用你的私钥加密一些东西,然后发给别人永远不是一件好事。这是因为加密后的数据可能会背叛你(记住,只有你能加密,因为只有你才有密钥)。

  所以,我们不加密Alice发送的原始消息,取而代之的是,由Bob构造一个消息摘要,然后加密它。消息摘要是从随机消息中以某种方式提取出来的,并且具有以下特点:

  摘要很难逆转,任何假冒Bob的人不能从摘要得到原始消息
假冒者无法找到具有相同摘要的不同消息
通过使用摘要,Bob能够保护自己。他首先计算出Alice发给他的随机消息的摘要并加密,然后把加密后的摘要返回给Alice,Alice可以计算出相同的摘要,通过解密Bob的消息然后对比一下就可以认证Bob的身份。

 

3.  近一点......

  刚才描述的技术称为数字签名。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。

  为了解决这个问题,标准化组织发明了一个叫做证书的东西,一个证书包括下面的一些内容:

1.证书发行者的名字
2.证书发送给的团体
3.主题的公钥
4.一些时间戳
      证书是由证书发行者的私钥签名的,每个人都知道证书发行者的公钥(即证书发行者有一个证书,等等)。证书是一种把公钥绑定到名字的标准方式。

  通过使用证书这种技术,每个人都可以通过检查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

分享到:
评论

相关推荐

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

    SSL协议的工作流程包括三个主要部分:握手协议、记录协议和警报协议。握手协议负责初始化安全连接,包括交换证书、协商加密算法和建立会话密钥。记录协议则负责将应用层的数据分割成块,进行加密和MAC(Message ...

    SSL工作原理详解说明

    SSL的工作流程通常涉及以下几个步骤: 1. **握手阶段**:当客户端(如浏览器)尝试连接到服务器时,服务器会提供其SSL证书,其中包含了服务器的公钥。这个证书通常由受信任的证书颁发机构(CA)签名,以验证服务器...

    Android SSL证书验证原理

    本篇文章将深入探讨Android平台上的SSL证书验证原理,包括SSL证书交换流程、SSL握手与验证过程以及数字证书、公钥和密钥的管理。 #### 二、SSL证书交换流程 当Android应用尝试访问一个HTTPS站点时,会发起一个SSL...

    ssl 协议简介 原理 过程

    #### 四、SSL协议的工作流程 1. **握手阶段:** 客户端与服务器通过握手协议交换证书、协商加密算法和密钥等信息,确保双方使用相同的加密算法和密钥进行后续通信。 2. **密钥交换:** 双方基于协商好的算法生成...

    SSL证书原理及格式1.21

    二、SSL证书的生成和使用流程 * 生成密钥对文件(私钥和公钥) * 将公钥取出并添加一些网站信息 * 可信的CA使用私钥对公钥和相关信息进行签名,生成SSL证书 * 服务端部署SSL证书 * 客户端请求SSL连接时,服务端将...

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

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

    SSL证书在线生成系统源码

    SSL证书在线生成系统源码是实现网站安全的重要工具,它基于公钥基础设施(PKI)原理,用于在互联网上建立安全的...对于开发者来说,理解这些知识点并熟悉系统的工作流程,将有助于构建或优化自己的SSL证书管理平台。

    SSL双向验证范例

    SSL(Secure Sockets Layer)是互联网上用于保护通信安全的一种技术,主要负责加密传输数据,确保数据在客户端和...同时,了解这些设置对于理解SSL/TLS协议的工作原理以及如何在实际项目中应用它们是非常有帮助的。

    ssl通讯流程

    在实际应用中,`web安全通信.vsd`可能是一个Visio绘图文件,它可能详细展示了SSL通讯流程的各个步骤,包括上述的握手过程、密钥交换和加密通讯等环节,帮助理解SSL协议的工作原理。通过这样的图形化工具,开发者可以...

    SSL加密技术学习总结

    三、SSL工作流程 1. 握手阶段:客户端发起请求,服务器响应并发送SSL证书。客户端验证证书的有效性,如果通过,则生成随机数作为预主密钥。 2. 密钥交换:客户端使用服务器的公钥加密预主密钥并发送给服务器。...

    ssl_java.zip

    首先,了解SSL的工作流程。SSL握手过程通常包括以下步骤: 1. 客户端发送一个“ClientHello”消息,包含所支持的SSL/TLS版本、加密套件和随机数。 2. 服务器回应“ServerHello”,选择最优的版本和加密套件,并发送...

    ssl.zip_ssl_ssl linux

    这个“ssl.zip”压缩包包含了“SSL安全协议(中文版).doc”,这是一份关于SSL协议的详细中文文档,对理解SSL的工作原理和实现方式非常有帮助。 SSL协议的主要目的是为网络通信提供机密性和完整性。它主要由以下几个...

    SSL代理客户端.rar

    SSL代理客户端的核心工作流程通常包括以下步骤: 1. **连接建立**:客户端首先会尝试与SSL代理服务器建立TCP连接。这通常涉及发送一个HTTP请求到代理服务器,请求中包含目标服务器的URL和所需使用的SSL端口。 2. *...

    SSL.gz_ssl_ssl java_ssl证书

    在学习和使用这些文件时,开发者应该理解SSL/TLS的基本原理,包括公钥和私钥的概念,以及握手协议的工作流程。同时,要了解如何处理证书验证问题,如自签名证书的接受,以及处理可能出现的安全异常。通过实践,...

    ApacheFtpServer之ssl配置

    FTPS作为一种成熟且广泛采用的技术,能够在不改变原有FTP工作流程的前提下,有效提升安全性。此外,还可以进一步探索更高级的SSL/TLS配置选项,如支持不同的密码套件、调整证书有效期等,以满足特定的安全需求。

    SSL高级编程程序源代码

    本资源包含的是SSL高级编程的源代码,这对于理解SSL的工作原理、进行自定义实现或优化现有系统非常有价值。 首先,SSL主要由以下组件构成: 1. **握手协议**:建立安全连接的流程,包括客户端和服务器的身份验证、...

    ssl and tls essentials

    本文将详细介绍SSL与TLS的基本概念、工作原理、发展历程以及在实际应用中的配置方法。 #### 二、SSL概述 **1. 定义** - SSL协议是一种用于提供互联网上数据加密的技术标准,由网景公司(Netscape)于1994年首次...

    SSL交互和握手过程

    本文将详细介绍SSL握手过程中的关键步骤及其背后的技术原理。 #### 二、SSL握手过程详解 ##### 1. ClientHello 客户端首先向服务器发起连接请求,发送一条`ClientHello`消息。该消息包含客户端支持的各种安全设置...

    Java中SSLSocket应用教程和代码

    本教程将深入探讨Java中的SSLSocket应用,包括其基本概念、工作原理以及如何通过代码实现安全连接。 1. **SSL/TLS协议概述** SSL(Secure Sockets Layer)最初由 Netscape 设计,后来被TLS(Transport Layer ...

Global site tag (gtag.js) - Google Analytics