2007年8月19日星期日

加密技术及流行加密算法

深入浅出谈加密

  加密技术已经渗透进了整个信息时代,任何人都不可避免地要接触到——即使你根本不知道“加密”是什么。银行卡、登录计算机的口令、电子邮件的账号密码……无一例外地跟加密技术紧紧联系在一起。

  任何一个安全专家提起如今信息技术的安全保护措施,都不可避免要涉及一个词:加密(encrypt)。的确,纵观当今信息世界,加密离我们并不遥远,从小小的个人密码,到重要机密文件,无一不是经过加密后的产物。

  许多人一提起“加密”,都会有一种畏惧心理,以为加密技术绝对是“新手勿近”的尖端科技。其实不然,加密实际上一直陪伴在你一生的成长之中,回 忆一下小时候很多人都玩过的智力游戏:007收到遇害同事的字条,上面写着4FEFKKILJK81IP,根据事先约定,已知C=3、Q=H,问该同事要 传递什么信息给007?如果把这道题目放到信息技术领域来看待,就是一条经过简单替换字符算法加密的字符串,它把原始字符改为使用相对应的数字排序来替 代,从而产生了一组“没有意义”的字符组合,但是因为我们知道C=3等若干条件,所以稍加排序即可得到这样的句子:Do not trust Hary,这个过程也被称为“解密”(decrypt)。

  有些读者也许会不屑一顾,就这么简单的游戏也算加密?别忘了,我们是在已经知道“C=3”的前提下完成“解密”的,换句话说,也就是已经知道了“算法”,否则光凭以上一组不知所云的字符串,谁能解开其中的秘密?

  加密和解密

  “就不让你直接看到信息”——将与之相似的思路加以扩充,便成了“加密”的来由;而拓展“我偏要看到你不想让我看的信息”的思想,则发展出了“解密”技术。加密和解密从诞生之日起,就是一对不可分割的难兄难弟。

  加密作为保障数据安全的一种方式,很早就出现在人类的信息传递中,从远古时代开始,人们就已经在采用一种如今称为“编码”(Code)的方法用 于保护文字信息。最早影响全世界的加密技术诞生于战争年代,由德国人发明,用于传递情报信息;而最早影响全世界的解密技术,也诞生于战争年代,由英美人开 发出来用于破译德国人的情报信息。正是战争让加解密技术不断改进发展,直到现在,加密技术仍然在为信息时代的数据安全服务。

  说了这么多,也该为加密技术做一个较为准确而科学的概念了,所谓“加密”,就是对原内容为明文的文件或数据按某种算法进行处理,使其成为不可读 的代码,经过这样处理的数据通常称为“密文”,密文只能在经过相对应的反向算法处理后才能恢复原来的内容,通过这样的途径来达到保护数据不被非法窃取、阅 读的目的,而将该编码信息转化为其原来数据的过程,就是“解密”。

  无论哪一个国家,都会有专家专注于加密技术的研究,因此也就出现了形形色色的加密算法,这些加密算法按照生物界“弱肉强食”的定律发展并完善 着。其中,强度高(不容易被破解)的算法得以保留和继续发展,强度低的算法最终被时间淘汰。除了一些公开的加密算法之外,也存在着一部分未公开的私人加密 算法。通常我们提及加密技术时所说的“MD5加密”、“SHA-1加密”、“RSA加密”等,其实就是在说它们所采用的算法。

  算法:关键的抉择

  “我想要葡萄,还想要橙子,可是我只能选择其中一样,我该选哪个?”如果要为自己的数据加密,我们就不得不面对这样一个选择,因为世界上的算法 不止一个,究竟什么算法才是最适合的呢?于是,我们逐渐陷入一个选择的泥潭中。其实,在选择使用哪种算法作为你的加密基础前,如果能对各种常见算法的原理 有个大概的了解,相信你就不会感到那么迷茫了。

  基于“消息摘要”的算法

  “消息摘要”(Message Digest)是一种能产生特殊输出格式的算法,这种加密算法的特点是:无论用户输入什么长度的原始数据,经过计算后输出的密文都是固定长度的,这种算法 的原理是根据一定的运算规则对原数据进行某种形式的提取,这种提取就是“摘要”,被“摘要”的数据内容与原数据有密切联系,只要原数据稍有改变,输出的 “摘要”便完全不同,因此,基于这种原理的算法便能对数据完整性提供较为健全的保障。但是,由于输出的密文是提取原数据经过处理的定长值,所以它已经不能 还原为原数据,即消息摘要算法是“不可逆”的,理论上无法通过反向运算取得原数据内容,因此它通常只能被用来做数据完整性验证,而不能作为原数据内容的加 密方案使用,否则谁也无法还原。尽管如此,“消息摘要”算法还是为密码学提供了健全的防御体系,因为连专家也无法根据拦截到的密文还原出原来的内容。

  如今常用的“消息摘要”算法经历了多年验证发展而保留下来的算法已经不多,这其中包括MD2、MD4、MD5、SHA、SHA-1/256/383/512等,其中最广泛应用的是基于MD4发展而来的MD5算法。

  MD5算法

  MD5算法的全称是“消息摘要算法5”(Message-Digest Algorithm version.5),它是当前公认的强度最高的加密算法。出现在MD5之前的是MD2和MD4,虽然这三者的算法结构多少有点相似,但是由于MD2诞生 于8位计算的时代,因此它的设计与后来出现的MD4、MD5完全不同,因此不能进行简单的替代。然而,无论是MD2、MD4还是MD5,它们都是在获得一 个随机长度信息的基础上产生一个128位信息摘要的算法。

  MD2算法是Rivest在1989年开发的,它很慢(因为是为8位机器设计的),但相当安全。在这个算法中,首先要对信息进行数据补位,使信 息的字节长度是16的倍数。然后,以一个16位的检验和追加到信息末尾,并且根据这个新产生的信息计算出散列值(Hash),最终运算结果即为类似于 “d41d8cd98f00b204e9800998ecf8427e”的摘要,而且这个值是惟一的。

  为了加强算法的安全性,Rivest在1990年又开发出MD4算法。MD4算法同样需要填补信息以确保信息的字节长度加上448后能被512整除(信息字节长度除以512的余数为448)。然后,一个以64位二进制表示的信息的最初长度被添加进来。

没有评论: