`
sunxboy
  • 浏览: 2869209 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

SSL是如何工作的?(转)

阅读更多

声明:由于最近对安全加密相关技术比较感兴趣,所以翻译了这篇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之间做一些真正龌龊的事。解决的办法就是从会话的双方因如随机因素。

 

 

 

 

 

 

 

0
0
分享到:
评论

相关推荐

    SSL and TLS Theory and Practice.pdf

    通过以上内容的介绍,可以看出《SSL与TLS理论与实践》不仅涵盖了SSL与TLS的基本概念和技术细节,还深入探讨了这些协议的安全性和应用情况,对于从事信息安全领域工作的专业人士来说,是一本非常有价值的参考书籍。

    java程序实现ssl

    - **创建SSLEngine**:SSLEngine是实际处理加密和解密的组件,它可以在非阻塞I/O模型中工作。 - **配置SSLEngine**:设置握手行为,如是否需要客户端认证等。 - **进行SSL握手**:在数据传输前,客户端和服务器...

    易语言TCP客户端模块 支持SSL

    7. **调试与TCP协议**:由于标签提到了“TCP调试”,这意味着开发者可能需要理解TCP协议的工作原理,包括端口号、数据段结构、序列号和确认应答等,以便在调试过程中定位问题。 8. **content.txt**:这个文件名可能...

    F5 v11 ssl证书卸载及http跳转

    在当今互联网安全日益重要的背景下,SSL/TLS证书的正确配置对于保护用户数据和提升网站信任度至关重要。本文将详细介绍如何在F5 v11版本中配置SSL证书卸载,以及实现从HTTP到HTTPS的自动跳转。通过这一系列步骤,...

    WebLogic 集群中SSL 配置说明

    #### 前提条件与准备工作 在进行SSL配置之前,需要准备以下文件: 1. **CA根证书**:例如`CA.cer`,这是由证书颁发机构签发的信任根证书。 2. **应用证书(Keystore)**:例如`OaServer.jks`,这是一份包含私钥...

    c++ smpt发送邮件类 ssl/tls

    描述 "c++ smpt发送邮件类 ssl/tls 转自codeproject" 提到这个实现可能来源于CodeProject,这是一个著名的程序员社区,其中包含了各种代码示例和项目。这意味着你可能找到了一个C++类库,该库专为通过SMTP发送邮件并...

    JDK生成ssl证书

    3. **了解基本概念**:对SSL证书及其工作原理有初步的认识。 #### 三、生成自签名证书 本节将详细介绍如何使用`keytool`命令为服务器生成自签名证书,并让客户端信任此证书的过程。 ##### 第一步:为服务器生成...

    Java中的SSL及HTTPS协议实例源码

    Java中的SSL(Secure Socket Layer)和HTTPS(Hypertext Transfer Protocol Secure)协议是网络通信安全的重要组成部分,...在实际工作中,务必注意更新SSL/TLS库,避免使用已知漏洞的老版本,以保障用户数据的安全。

    SSL_Channel_Chart - MetaTrader 5脚本.zip

    SSL_Channel_Chart是针对MetaTrader 5...通过解析ssl_channel_chart.mq5文件,交易者可以了解其内部工作原理,并根据自己的需求进行个性化定制。了解和掌握这款脚本的使用,无疑将提升交易者的市场分析能力和决策效率。

    生成SSL证书详细信息

    ### 生成SSL证书详细信息 #### 一、概述 本文主要介绍如何使用Java环境下的`keytool`工具来生成SSL证书。SSL(Secure Sockets Layer)证书是一种数字证书,用于在客户端与服务器之间建立安全连接,确保数据传输的...

    找不到资源string.Advanced_EnableSSL3Fallback.7z

    然而,由于其存在一些已知的安全漏洞,如POODLE攻击,现代浏览器和服务器已经逐渐弃用SSL3,转而使用更安全的TLS(Transport Layer Security)协议。"EnableSSL3Fallback"这个设置可能允许用户在TLS连接失败时回退到...

    SMTP发送邮件程序(支持SSL和TLS)

    如果它是源代码,用户或开发者可以查看和修改程序的工作方式;如果是可执行文件,用户可以直接运行发送邮件;如果是配置文件,可能包含SMTP服务器地址、端口、用户名和密码等信息。 总结来说,这个“SMTP发送邮件...

    weblogic配置ssl[参照].pdf

    2.2 **准备工作**:创建目录结构,准备配置文件和环境变量。 2.3 **创建自签名CA证书**: 1. 生成CA私钥:`openssl genrsa -out ca\ca-key.pem 1024` 2. 生成待签名证书请求:`openssl req -new -out ca\ca-req....

    ssl_decompose.zip_security vhdl_ssl

    SSL(Secure Sockets Layer)安全协议是互联网上广泛使用的安全通信标准,主要目的是为了保护网络数据传输的安全性...总的来说,这个压缩包提供的资源对于理解SSL协议的工作原理以及如何在VHDL中实现它具有很高的价值。

    易语言源码易语言SSL双向认证源码.rar

    通过学习这个源码,你可以深入理解SSL双向认证的工作原理,同时提升在易语言中进行网络通信安全编程的能力。这对于开发涉及敏感数据传输的应用,如在线支付、企业内部通讯等场景,是非常重要的。

    Windows +tomcat +SSL

    2. **SSL/TLS**:SSL(Secure Sockets Layer)与TLS(Transport Layer Security)都是用于在Internet上进行安全数据传输的协议。它们通过建立加密通道来保护数据免受窃听、篡改和伪造。 3. **数字证书**:一种用于...

    NXP-SSL2101可调光市电LED驱动解决方案.pdf

    NXP推出的SSL2101 IC是专门针对LED照明应用而设计的一款高效电源转换器,它整合了可调光能力,使LED照明在能效方面得到进一步改善。SSL2101是业内首款集成了这一能力的芯片,能够帮助LED灯设计师以更低成本和较小的...

    Tomcat9.0安装JKS格式SSL证书.rar

    5. **验证配置**:最后,你可以通过访问HTTPS URL来测试SSL证书是否正确配置并工作正常。 在提供的资源中,"web.xml"和"server.xml"可能已经包含了用于配置SSL证书的示例或者预设内容。你需要根据自己的实际情况,...

    nginx+tomcat8 ssl使用https访问

    - 配置包括设置ssl_certificate和ssl_certificate_key指向我们生成的证书和私钥文件,启用SSL选项如`ssl on`,以及设置安全的SSL配置,如`ssl_protocols`、`ssl_ciphers`等。 3. **配置Tomcat**: - Tomcat本身不...

Global site tag (gtag.js) - Google Analytics