http://www.zhlmmc.com (收藏,设为首页)
岂能尽如人意,但求无愧我心 (手机请访问 http://3g.dlog.cn/zhlmmc)

SSL与数字证书 - 第三章

2007年11月11日(Sunday) 02点39分 作者: 虫虫 天气: 心情: 一般

SSL与数字证书

by zhlmmc

 

<[if !supportLists]>第三章      <[endif]>加密与算法

加密是保护信息安全的常用手段之一。对信息的加密是需要加密算法的,如果加密算法被破解了,那么一切免谈。不过,基本上,要破解一个加密算法是非常非常困难的。至少,目前流行的加密算法还是安全的,所以我们也就不必考虑这个问题了。

 

第一节 散列(Hash

经常用bt下载的人应该很熟悉这个。这就是MD5~虽然Hash不只是MD5,常见的还有SHA1。不过MD5最流行所以一般大家说的hash就是它了。值得一提的是,山东大学的王小云在2005年的时候发了一篇“How to Break MD5 and Other Hash Functions”引起了信息安全界的轰动。虽然我没仔细研读过这篇paper,不过我相信按照paper里面的说法要破解MD5还是很费劲的,要不早就出乱子了。所以我们就不考虑这个问题了。那么究竟什么是MD5呢?我来简单解释一下。

 

Hash就是一个工具,能把任意大小的文档变成一个固定大小MD532个字符)的字符串。并且,这个过程是不可逆的,也就是说,没有任何办法从那个字符串得到原来那个文档。还有很重要的一点是,任意两个文档(哪怕极其相似)得到相同字符串的概率几乎等于0。现在你有一个10000字的文章,发给你的朋友,那你的朋友怎么判断他收到的文章一个标点符号都没有少呢?你在发送文章的同时把这个文章的Hash字符串也发过去,这样你的朋友收到文章以后,根据收到的文章重新计算一遍这个字符串,如果这个字符串和你发过去的一样,那就证明你朋友收到的文章是和你发送的一模一样。

 

第二节 对称加密(Symmetric Cryptography

所谓加密就是把一段能看懂的东西通过某种变换变成看不懂的东西。当然这种变换是可逆的,否则加密有什么用啊!这里所说的“变换”就是加密算法。目前我们所说的加密算法基本上都是基于密钥的。加密算法不能单独工作,必须有密钥配合。就像现实生活中的锁,同一型号的锁的原理都一样,但是没把锁都有各自的钥匙,用来开锁和关锁。加密的算法是公开的,但密钥是保密的。自己“发明”加密算法是很愚蠢的,除非你是密码学专家。历史上有很多使用自己发明的加密算法的笑话,往往你发明的算法都是自以为是,其实很容易破解的拉。而目前流行的加密算法都是经过时间和众人检验的,一般情况下,只要密钥不泄露,那就是安全的。有一点要说明的是,虽然我们平时一般说“加密算法”,但往往这个加密算法都包含解密算法的。 “对称加密”是指加密和解密的密钥是同一个。目前流行的对称加密算法有DESAESBlowfish等等。举个例子,你有一篇文章想要发给你朋友,但是你不想让别人看见这篇文章所以你选择AES加密。用的密钥是你和你朋友事先约定的,只有你们两个人知道。在发送之前,你用AES算法和约定好的密钥给文章加密,然后把加密过的文章发送给你的朋友。你朋友收到以后可以用AES算法和那个密钥解密而获得原始的那篇文章。对称加密算法的优点是速度快,缺点是密钥管理不方便,要求共享密钥。

 

第三节   非对称加密(Asymmetric Cryptography

如果你理解了上面讲的对称加密,那么这里的非对称加密就很简单了。从字面上理解就可以猜到,加密和解密不是用的同一个密钥,其中一个称为公钥(public key),另一个称为私钥(private key)。公钥就是公开的,大家都知道,而私钥只有你自己知道。这两个密钥在数学上是有联系的,用公钥加密的内容只能由相应的私钥来解密,反过来,用私钥加密的内容只能由相应的公钥来解密。另外很重要的一点是,不能从公钥推导出私钥,或者说很困难。常用的非对称加密算法有RSAECC等等。举个例子,你想要把一篇文章发送给你的朋友,但是不想让别人看到这篇文章。除了用上面讲的方法以外,你还可以用非对称加密来实现。在发送之前,你把文章用你朋友的公钥加密(公钥是公开的,每个人都知道),然后把加密过后的文章发送给你的朋友,你的朋友可以用他的私钥来解密。其他人获得了你传送的内容都是没有用的,因为只有你朋友有私钥可以解密。非对称加密算法的优点是密钥管理很方便,缺点是速度慢。

 

第四节 数字签名(Digital Signature

我们先来看看现实生活中的签名是如何实现的。比如为信用卡账单签名,商家会打印一张消费单子给你,你看过以后觉得没有问题,于是在这张纸上签上自己的大名,表示你承认了这笔消费,并同意商家从你的信用卡账户扣钱。而商家可以对比你的签名和信用卡背后的签名是否一致来验证你是否冒用别人的信用卡(事实上很多商家不看的哦)。这个流程是基于一个假设的:只有你自己能重现你的签名。虽然我们不能每次都签的一摸一样,但是通过笔迹鉴定,我们可以确定这个签名是否出自你手。分析一下,签名具有哪些特点呢?

<[if !supportLists]>1.       <[endif]>不可伪造 - 通过笔记鉴定来保证。

<[if !supportLists]>2.       <[endif]>不可移植,复制 - 复印,剪贴的签名当然无效咯!

<[if !supportLists]>3.       <[endif]>不可否认 因为不可伪造,不可移植,不可复制,所以不可否认。

相似的,在虚拟世界里,我们有数字签名来帮助证明某个文档是你创建的,或者是你认可的。数字签名所用的技术是散列和非对称加密。数字签名的假设是:只有你自己有你的私钥。根据前面对散列的介绍,我们先为你要签名的信息生成一个Hash字串,Hash1,然后用你的私钥加密得到Encrypted(Hash1),这就是你对这个文档的数字签名。当别人需要验证某个文档是否是你签名的时候,只需要用你的公钥解密你的签名得到Hash1,并和该文档计算出来的Hash2对比,查看是否一致。如果一致则说明你确实对该文档签过名,否则就是没有。下面来分析一下,数字签名是如何保证上面所讲的签名的特点的。

<[if !supportLists]>1.       <[endif]>不可伪造

因为只有你有你自己的私钥,所以任何其他人都无法产生用你的私钥加密过的Hash1

<[if !supportLists]>2.       <[endif]>不可移植,复制

你对文档A的签名不可能对文档B也有效,因为你对文档B的签名必然和对A的签名不一样,这是由Hash的唯一性保证的。拿你对A的签名去验证B是不可能通过的。

<[if !supportLists]>3.       <[endif]>不可否认

因为不可伪造,不可移植,不可复制,所以不可否认。

仔细想想数字签名和现实生活中的签名真的蛮像的,逻辑上是一样的。或许你在想,为什么要对Hash加密呢?我直接对文档用我的私钥加密不就完了嘛?对啊,效果是一样的,但是效率不一样哦~别忘了非对称算法是很慢的,加密一个100M的文件要算半天呢!

 

这里要顺便提一下消息认证码(Message Authentication Code)。它和数字签名很相似,只不过它是用对称加密的而数字签名用的是非对称加密

 

在现实生活中,各种加密手段往往是配合使用以达到最好的效果和效率。比如我将要介绍的SSL和数字证书,就是混合了各种的加密手段。
标签: SSL 数字证书 
姓名: 
邮箱:  {可选}
网址:  {可选} 此评论只有我和写日记的人查阅
校验码: ... <我看不清楚>
网记为您提供手机和互联网同步的个人主页,带给你不一样的体验