SSL原理笔记

标签: ssl 原理 笔记 | 发表时间:2012-01-11 15:04 | 作者:yangjun2
出处:http://blog.csdn.net
搜索SSL握手的原理,最多是网上转载的Alice和Bob的对话。用生动、形象的场景说明了一个复杂SSL握手原理。


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


认证
是一个验证身份的过程,目的是使一个实体能够确信对方是他所声称的实体。下面的例子包括Alice和Bob,并且向我们演示了如何使用公用密钥密码系统来轻易的验证身份。下面的 {something}key 表示something 已经用密钥 key 加密或解密。
1.简单方式
  A-->B random--message
  Bob用自己的私钥来加密这段消息,然后把加密后的消息返回给Alice。
  B-->A {random--message}bobs--private--key  //
  Alice接到了这段消息,然后用Bob以前发过来的公钥来解密。她把解密后的消息和原始的消息做比较,如果匹配的话,她就知道自己正在和Bob通信。
风险:使用私钥加密的random--message后传递,数据量大,增加破解的几率.


2.增加摘要的方式
  A-->B hello,are you bob?
  B-->A Alice,This Is bob{digest[Alice,This Is Bob]}bobs-private-key


分发公钥


Bob如何以一种可信赖的方式分发他的公钥呢?假设认证协议是这个样子的:
1.简单方式
  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。


所以为了解决这个问题,标准化组织发明了一个叫做证书的东西,一个证书包括下面的一些内容:
  证书发行者的名字
  证书发送给的团体
  主题的公钥
  一些时间戳
  证书是由证书发行者的私钥签名的,每个人都知道证书发行者的公钥(即证书发行者有一个证书,等等)。证书是一种把公钥绑定到名字的标准方式。
2.证书方式
  A-->B hello
  B-->A Hi, I'm Bob, bobs-certificate
  Alice可以检查证书,核实签名(如上,公钥加密解密得到摘要,对证书的某些身份信息进行摘要,比较摘要),然后核实主题(Bob的名字)来判断那是不是真的Bob。
  A-->B prove it
  B-->A Alice, This Is bob{ digest[Alice, This Is Bob] } bobs-private-key
 
一个坏家伙 - 我们不妨叫他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的消息。因为他们都知道这个秘密,所以他们就可以初始化一个对称的密码算法然后开始传输用它加密的消息。
1.简单方式
下面是订正的协议:


  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


风险: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并不知道这个秘密-他能做的所有事就是破坏用这个秘密的密钥加密的数据。他可能不能利用这个协议制造出一条有效的消息,但是下一次,他可能幸运一点。


2.增加MAC方式,防止数据篡改
MAC是根据秘密的密钥和传输的数据计算出来的,上面描述的摘要算法的属性正好可以用于构造抵抗Mallet的MAC功能。MAC := Digest[ some message, secret ]
   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
  A-->B ok bob, here is a secret {secret} bobs-public-key
  B-->A {some message,MAC}secret-key
 
  Mallet现在有麻烦了,Mallet可以改变任何的消息,但是MAC的计算将揭露他的欺诈行为。Alice和Bob能发现伪造的MAC值并停止会话,Mallet就不能伪造Bob的消息了。


参考资料
公开密钥加密技术 http://baike.baidu.com/view/1519114.htm
数字证书 http://baike.baidu.com/view/16501.htm
作者:yangjun2 发表于2012-1-11 23:04:35 原文链接
阅读:64 评论:1 查看评论

相关 [ssl 原理 笔记] 推荐:

SSL原理笔记

- - CSDN博客推荐文章
搜索SSL握手的原理,最多是网上转载的Alice和Bob的对话. 用生动、形象的场景说明了一个复杂SSL握手原理. 用公钥加密的数据只有私钥才能解密,相反的,用私钥加密的数据只有公钥才能解密,正是这种不对称性才使得公用密钥密码系统那么有用. 是一个验证身份的过程,目的是使一个实体能够确信对方是他所声称的实体.

SSL工作原理

- - 互联网 - ITeye博客
SSL 是一个安全协议,它提供使用 TCP/IP 的通信应用程序间的隐私与完整性. 超文本传输协议 (HTTP)使用 SSL 来实现安全的通信. 在客户端与服务器间传输的数据是通过使用对称算法(如 DES 或 RC4)进行加密的. 公用密钥算法(通常为 RSA)是用来获得加密密钥交换和数字签名的,此算法使用服务器的SSL数字证书中的公用密钥.

nginx配置ssl

- - 邢红瑞的blog
先生成网关证书 ,仿照CA模式.

JVM原理分析笔记

- - Java - 编程语言 - ITeye博客
1.Javac编译器的作用. 将符合Java语言规范的源代码转化成符合Java虚拟机规范的Java字节码. 2.编译器主要的几个处理阶段. 词法分析、语法分析、语义分析和代码生成,基于访问者模式来遍历语法树的过程. 二.ClassLoader. 将Class加载到JVM中,审查每个类应该由谁加载,将Class字节码重新解析成JVM统一要求的对象格式.

SSL窃听攻击实操

- snowflip - 狂人山庄 | Silence,声仔,吴洪声,奶罩
OK,我恶毒的心灵又开始蠢蠢欲动了. 今天带给大家的是SSL窃听攻击从理论到实际操作的成功例子. SSL窃听最主要的是你要有一张合法的SSL证书,并且证书名称必须和被攻击的网站域名一致. 目前各大CA都有很低廉价格的SSL证书申请,最低的价格只需要10美元不到,甚至还有一些域名注册商大批量采购这些证书,并且在你注册域名的时候免费送你一张.

Tomcat7配置双向SSL

- - CSDN博客推荐文章
//ca-cert.pem即为CA根证书,可将其下发到客户端,导入作为根证书.  如果按请求生成CA证书,由证书申请者生成请求文件certreq.txt. CA端执行签名,生成证书文件1.cer. 4.将证书导出成浏览器支持的.p12格式,密码changeit. 4.将证书导出成浏览器支持的.p12格式 :.

图解SSL/TLS协议

- - 阮一峰的网络日志
本周, CloudFlare宣布,开始提供Keyless服务,即你把网站放到它们的CDN上,不用提供自己的私钥,也能使用SSL加密链接. 我看了CloudFlare的说明( 这里和 这里),突然意识到这是绝好的例子,可以用来说明SSL/TLS协议的运行机制. 下面,我就用这些图片作为例子,配合我半年前写的 《SSL/TLS协议运行机制的概述》,来解释SSL协议.

SSL延迟有多大?

- - 阮一峰的网络日志
据说,Netscape公司当年设计 SSL协议的时候,有人提过,将互联网所有链接都变成HTTPs开头的加密链接. 这个建议没有得到采纳,原因之一是HTTPs链接比不加密的HTTP链接慢很多. (另一个原因好像是,HTTPs链接默认不能缓存. 自从我知道这个掌故以后,脑袋中就有一个观念:HTTPs链接很慢.

Netty SSL性能调优

- - ImportNew
嗯,这篇不长的文章,是一个晚上工作到三点的血泪加班史总结而成. 《 TLS协议分析 与 现代加密通信协议设计》 首先要感谢这篇文章,如果没有它,我可能还要花更多的时间才能完成. 文章有点长,能看多少是多少,每句都是收获. 目前(2015年)已经不安全,必须禁用. 互联网标准化组织ISOC接替NetScape公司,发布了SSL的升级版TLS 1.0版.

免费openssl 生成ssl证书[ssl证书生成]

- - 企业架构 - ITeye博客
[免费openssl生成ssl证书]. 1 概述 ............................................................................................................1. 2 什么是x509证书链 .....................................................................................1.