加密算法常识及密码学基本知识.txt我是天使,回不去天堂是因为体重的原因。别人装处,我只好装经验丰富。泡妞就像挂QQ,每天哄她2个小时,很快就可以太阳了。标题:加密算法的一些常识admin等级:管理员文章:94积分:493门派:无门无派注册:2002年5月19日楼主--------------------------------------------------------------------------------加密算法的一些常识加密算法很容易理解啦,就是把明文变成人家看不懂的东西,然后送给自己想要的送到的地方,接收方用配套的解密算法又把密文解开成明文,这样就不怕在路世上如果密文给人家截获而泄密。加密算法有俩大类,第一种是不基于KEY的,举个简单的例子,我要加密fordesign这么一串字符,就把每个字符都变成它的后一个字符,那么就是gpseftjhm了,这样的东西人家当然看不明白,接收方用相反的方法就可以得到原文。当然这只是个例子,现在应该没人用这么搞笑的加密算法了吧。不基于KEY的加密算法好象一直用到了计算机出现。我记得古中国军事机密都是用这种方式加密的。打战的时候好象军队那些电报员也要带着密码本,也应该是用这种方式加密的。这种算法的安全性以保持算法的保密为前提。这种加密算法的缺点太明显了,就是一旦你的加密算法给人家知道,就肯定挂。日本中途岛惨败好象就是密码给老米破了。设计一种算法是很麻烦的,一旦给人破了就没用了,这也忑浪费。我们现在使用的加密算法一般是基于key的,也就是说在加密过程中需要一个key,用这个key来对明文进行加密。这样的算法即使一次被破,下次改个key,还可以继续用。key是一个什么东西呢?随便你,可以是一个随机产生的数字,或者一个单词,啥都行,只要你用的算法认为你选来做key的那玩意合法就行。这样的算法最重要的是:其安全性取决于key,一般来说取决于key的长度。也就是说应该保证人家在知道这个算法而不知道key的情况下,破解也相当困难。其实现在常用的基于KEY的加密算法在网络上都可以找到,很多革命同志(都是老外)都在想办法破解基于key的加密算法又包括俩类:对称加密和不对称加密。对称加密指的是双方使用完全相同的key,最常见的是DES.DES3,RC4等。对称加密算法的原理很容易理解,通信一方用KEK加密明文,另一方收到之后用同样的KEY来解密就可以得到明文。不对称加密指双方用不同的KEY加密和解密明文,通信双方都要有自己的公共密钥和私有密钥。举个例子比较容易理解,我们们假设通信双方分别是A,B.A,拥有KEY_A1,KEY_A2,其中KEY_A1是A的私有密钥,KEY_A2是A的公共密钥。B,拥有KEY_B1,KEY_B2,其中KEY_B1是B的私有密钥,KEY_B2是B的公共密钥。公共密钥和私有密钥的特点是,经过其中任何一把加密过的明文,只能用另外一把才能够解开。也就是说经过KEY_A1加密过的明文,只有KEY_A2才能够解密,反之亦然。通信过程如下:A--------KEY_A2------------BA--------KEY_B2------------A这个过程叫做公共密钥交换,老外管这叫keyexchange.之后A和B就分别用对方的公共密钥加密,用自己的私有密钥解密。一般公共密钥是要发布出去的,然后你通过自己的私有密钥加密明文,人家用你的公共密钥解密,如果能解开,那么说明你是加密人,这就是SSL使用的验证机制。常用的不对称加密一般有RSA,DSA,DH等。我们一般使用RSA.数字签名也是不对称加密算法的一个重要应用,理解它对于理解SSL很重要的,放在这里一起介绍一下。签名是什么大家都很熟悉吧?证明该东西是你写的,是你发布的,你就用签名搞定。看看那些重要文件都要头头签名。数字签名就是数字化的签名了。记得公用密钥和私有密钥的特征吗?只有你一个人有你自己的私有密钥。而你的公用密钥是其他人都知道的了。那么你在写完一封邮件之后,用自己的私有密钥加密自己的名字,接收人用你的公共密钥解开一看,哦,是你发的。这就是你的数字签名过程了。上面的解释是很简化的了,其实数字签名比这个复杂多了,但我们没有了解的必要,知道数字签名是这么一回事就可以了。还有一种我们需要知道的加密算法,其实我不觉得那是加密算法,应该叫哈希算法,英文是messagedigest,是用来把任何长度的一串明文以一定规则变成固定长度的一串字符串。它在SSL中的作用也很重要,以后会慢慢提及的。一般使用的是MD5,SHA.base64不是加密算法,但也是SSL经常使用的一种算法,它是编码方式,用来把asc码和二进制码转来转去的。具体的加密解密过程我们不需要了解,因为SSL根本不关心。但了解加密算法的一些基本原理是必要的,否则很难理解SSL。对加密算法的细节有兴趣的同志,可以去网络上找这些加密算法的原理的文章和实现的程序来研究,不过先学数论吧。不懂数论看那玩意还是一头雾水。2003-10-291:42:45=====================================================================================标题:密码学基本知识(一)admin等级:管理员文章:94积分:493门派:无门无派注册:2002年5月19日楼主--------------------------------------------------------------------------------密码学基本知识(一)1.传统的加密方法传统的加密方法也称为密钥或对称加密,加密和解密过程使用同一个密钥.数据加密标准(DES)是传统加密方法的一个实例现在被(老美的)联邦政府广泛使用.传统加密方法的一个极简单的例子是置换密码(substitutioncipher).就是用一种信息替换另一种信息.常见的用法是将字母在字母表中偏移位置.朱利叶.凯撒并不相信自己的信使,他把给前线将领文书中的A全部替换成D,B全部替换成E,用这样的方法来加密文书.以今天的标准来看这种方法太简单了,但这对凯撒很实用.这个例子描述了传统加密方法的原理.1.1密钥管理和传统的加密方法传统加密方法是有优势的.它的速度很快,而且特别适用于不需要移动的数据.然而,由于安全地发布密钥非常困难,单独使用传统加密方法来安全传输数据的代价是非常昂贵的.在间谍影片中常可以看到这样的情节,特工将一个密码箱用手铐和自己的手腕铐在一起.密码箱中有什么呢?多数情况下里面不是导弹发射密码,不是化学公式,也不是入侵计划,而是用来解密的密钥.对于使用传统加密方法进行安全通讯的手法双方来说,他们必须拥有相同的密钥而且不能让别人知道.如果他们处在不同的物理位置,必须相信信使,加密电话或者其他的安全通讯介质,防止在传输过程中泄露密钥.在传输过程中,偷听或截获到密钥的任何人,就能够阅读,修改和伪造用这个密钥加密或认证的所有信息.无论DES还是凯撒,传统加密方法的永恒问题就是密钥的发布,怎样才能使接收者得到密钥而不被其他人截获呢?2.公开密钥加密法公开密钥加密法可以解决密钥发布的问题,公开密钥的概念由WhitfieldDiffie&MartinHellman在1975年提出.(现在有证据表明英国情报机关先于Diffie&Hellman几年发明了这种方法,但是却作为军事秘密,而且在这方面的工作什么也没做)公开密钥加密法是一种使用一对密钥的非对称加密手段.公钥用于加密,私钥用于解密公钥可以让所有人知道,而私钥却必须保密.任何人(甚至是你从未见过的人)用你的公钥加密的信息只有你可以看懂.想从公钥推导出私钥在计算上是不可行的.拥有公钥的人可以加密信息却不能将其解密,只有拥有对应私钥的人才能解密信息.公钥加密法的主要优势在于可以让事先没有安全通道的人安全地交换信息.收发双方通过安全通道共享密钥的前提条件不存在了.所有的通讯中只包含了公钥,私钥是不会传输或共享的.下面是一些公钥密码系统的例子:Elgamal以其发明者TaherElgamal的名字命名RSA发明者RonRivest,AdiShamir,andLeonardAdlemanDiffie-Hellman以发明者的名字命名DSADigitalSignatureAlgorithm(数字签名算法)发明者DavidKravitz由于传统的加密方法曾经是传送秘密信息的唯一手段,保持安全通道和发布密钥的高昂费用将其应用范围限制在能够负担得起这些费用的用户中,比如政府或者大银行.公钥加密法是加密技术的革命,它可以为普通人提供强加密手段.还记得将密码箱铐在自己手腕上的特工信使吗,公钥加密法会使他失去工作(他自己可能很高兴这样)3.PGP如何工作PGP综合了传统加密方法和公开密钥加密方法的优点,是一种杂交的方法.当用户使用PGP来加密明文时,PGP首先压缩明文.数据压缩可以节省modem的传输时间和磁盘空间.更重要的是,压缩可以加强密文的安全性.绝大多数密码分析技术利用在明文中发现的模式(pattern)来破解密码.压缩可以减少明文中的模式,因此极大增强了对密码分析的抵抗力.(太短或不能被很好压缩的文件就不进行压缩)PGP接着生成一个会话钥(sessionkey),这是一个一次性的密钥.会话钥是从用户鼠标的随机移动和击键中产生的一个随机数.会话钥和一个非常安全而快速的传统加密算法共同加密明文,结果就是密文.一旦数据被加密之后,就用接收者的公钥来加密会话钥.被公钥加密后的会话钥连同密文一起传送给接收者.解密工作与此相反.接收者的PGP工具使用他(她)自己的私钥来恢复临时的会话钥,然后PGP使用该会话钥来解密传统方法加密的密文.两种加密方法的组合既保留了传统方法的速度优势,又拥有公开密钥方法的方便性.传统加密方法的速度大约是公开密钥方法的1000倍,反过来公开密钥方法解决了密钥发布和数据传输的问题.二者结合起来,在没有牺牲任何安全性的情况下,性能和密钥发布都得到了提高.4.密钥(key)密钥是一个数值,它和加密算法一起生成特别的密文.密钥本质上是非常非常大的数.密钥的尺寸用位(bit)来衡量,1024位密钥代表的数是非常巨大的.在公开密钥加密方法中,密钥的尺寸越大,密文就越安全.然而,公钥的尺寸和传统加密方法中密钥的尺寸是不相关的.传统80位密钥的强度等同于1024位的公钥,传统128位密钥的强度等同于3000位的公钥.在同种加密算法中,密钥越大越安全.但是传统方法和公开密钥方法所用的加密算法不一样,因此它们的密钥尺寸不能直接比较.公钥和私钥是算术相关的,仅凭公钥推算出私钥是非常困难的.然而如果有足够的时间和计算能力,总是可能导出私钥的.这使得选择合适尺寸的密钥变得非常重要.为了安全需要足够大的密钥,为了速度有要足够小的密钥.而且,要考虑是谁想要读取你的文件,他有多大的决心,多少时间和多少可以利用的资源.长的密钥会在很长一段时间内是安全的.如果想保密许多年,应该选择非常长的密钥.当然,谁也不知道使用未来速度更快更有效的计算机来测定你的密钥会花费多长时间.曾经有一段时间人们认为56位的对称密钥是非常安全的.密钥以加密后的形式保存.PGP在硬盘的两个文件中保存密钥,一个文件保存公钥,另一个保存私钥.这两个文件称为钥匙环(keyrings).在使用PGP时,用户会经常向公钥环中加入接收者的公钥.用户自己的私钥保存在私钥环上.如果丢失了私钥环,就无法解密依赖于该环的加密信息.2003-10-170:31:47=====================================================================================密码学基本知识(二)5.数字签名公开密钥加密方法的一个主要优点是提供了数字签名的实现手段.数字签名使得信息的接收者能够验证信息来源的真实性,还能够验证信息是否完整.因此,公钥数字签名可以提供身份验证和数据完整性保证.数字签名还提供了不可抵赖的特性,该特性能