天空之城
new,think,program,happy to live
posts - 39,comments - 39,trackbacks - 0
公共密钥:   (也常被译为公开密钥)  
          "密码"已经是一个老少皆知的词,想从银行里把钱取出来吗?没密码可万万不行。不知从什么时候开始,这么一个军事级的词汇已经走进了千家万户,妇孺皆知。不过知道“密钥”这个词的人就少多了,知道“公共密钥”的人就更少了,不但知道而且了解其原理的人则少之又少,当然,如果你以前不清楚的话,那么你即将加入这少之又少的行列:)  
          long   long   ago,随着军事的日益发展,情报的重要性日益提高,如何获得准确的情报成为军事上的一大重点,伴随而来的另一个问题则是如何尽量保证自己的情报在被敌人截获后(这总是无可避免的)敌人依然无法获得该情报的信息,防止情报外泄。不妨让我们以今人的智慧来设身处地的想一想,有什么好的解决方法。首先想到的当然是用密文不要用明文,把明文按某种规则打乱为密文、或者让明文与密文有某种一一对应的规则   ,这样即使密文泄露,只要敌人不知道我的明文与密文之间转换的规则,它将一无所获。这是一种简单且行之有效的方法,即便到了近代一战二战中,还被广泛使用着,当然它的这个规则往往是动态的,甚至可能相当复杂。然而这样的方案在理论上有一个重大的缺陷,那就是你如何安全地传递“规则”?两地之间要确保能互相将密文变成明文,必须有共同的规则,那么就至少需要"一次"安全地将“规则”从一地传到另一地,这在理论上是无法保证的,所以整个的安全体系也就无法让人完全地放心,一旦规则泄露,对密文体系的打击则是致命的。有没有什么更好的办法呢?嗯,如果你以前没有接触过的话,我估计你是想不出了。解决的方法正是公共密钥体系。  
          让我们再回头来看一看我们是如何将明文变成密文的,最简单的是将它重新打乱,或者进行某种线性或非线性变换,立刻就让人难以阅读,但这也是最容易破译的,因为这种自身的变换在数学上相对容易求解,在现在的计算机的帮助下,通过一定量密文明文的统计分析,很容易找到其变化的规则。高级一点的,可以再用一组密码(可以是动态改变的,譬如随日期而改变),让明文与这组密码进行某种组合变化,从而得到一组密文,这样,由于这个“组合变化”可能是非常复杂的一种数学变换,仅通过密文或者加上一定量的明文也很难找出这组密码以及这个“组合变化”的规则。这就是目前绝大多数加/解密的根本原理。而这里的这组密码,我们就把它称作密钥。  
          但是这只是提高了获得密文者的对密文的破译难度,并没有解决我们前面提出的问题。现在就要来看看“共公(共开)”的含义了。在数学上有一种运算是单向的(在数学理论上截止目前为止),从一个方向算过去很简单,但是它的逆运算当缺少正向运算时加入的一些信息时,就会变得几乎不可能。这就构成了我们的“共公密钥”的理论基础。具体使用如下:我们首先产生一对密钥,一把称为加密密钥,一把称为解密密钥,它们是相关但不相同的。加密时我们把明文与加密密钥一起采取“不可逆”数学运算进行“组合变化”,形成密文,解密时把密文与解密密钥一起采取类似的运算进行解密,注意,这处因为加密密钥与解密密钥产生时即是相关连的,所以解密密钥也能够完成这样一个“逆运算”。同时,解密密钥也可以用来加密,相应的,加密密解也可以用来解“用解密密钥加密的密文”。使用的时候很简单,把加密密钥当作公共密钥,分发给任何想要获取的人,解密密钥由自己妥善保管作为私钥。当拥有加密密钥的人要传递密文给自己时,他只要使用自由获取的我的公共密钥来加密该明文即可,当然,他加密以后他自己也是不能解的,但是传到我手里以后,我则可以用解密密钥来解密,这样就很好地解决了前面提出的无法安全传输“规则”的问题,现在我的公共密钥是公开的,你要拿就拿去好了:)   而私钥我自己好好保存,不用把它放出来。  
          公共密钥另一个重要作用就是用来签名。我使用私钥对自己的文件加密后,你来使用我发放的公钥来解密,如果解密成功,则可证明这的确是我发出来的文件。  
          在现在网络安全信息常常使用的证书体系中,“证书”的背后其实也是这样的一种公共密钥体系。
posted on 2006-05-14 13:03 太极虎~宏 阅读(328) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理