咨询热线:400-000-3720 中文 | English
您现在的位置: 安腾软件 >> ITEN博客 >> 正文

安全小知识:加密原理

1 数据加密原理与实现方法
无论是网络传输中使用的安全传输协议,还是安全手段或安全措施,它们都需要使用加密算法和相应的解密算法。不了解与此相关的加密原理和算法,就很难深刻地认识各种安全传输协议,以及实现网络安全所采用的数字凭证、数字签名等技术,所以我们在本节集中介绍一下。


1.1 基本概念
加密方法属于计算机密码学范畴。长久以来,计算机密码学作为一门研究计算机数据加密、解密及其变换的艰深的学科,鲜为普通用户所了解。过去只有间谍及军事人员对加密技术感兴趣,并投入了大量人力、物力和财力进行秘密研究。直到 近十几年,随着计算机网络及通信技术的民用化发展,尤其是商业和金融事务的介入,密码学的研究才得到了前所未有的广泛重视。密码学涉及到很多高深的数学理论,很难在一节内容中进行比较全面的论述。这里我们仅介绍一些基础知识,让读者了解网络信息加密及数字签名、数字凭证的实现原理,并对常用加密方法的优缺点有一些基本认识。


所谓加密,就是把数据信息即明文转换为不可辨识的形式即密文的过程,目的是使不应了解该数据信息的人不能够知道和识别。将密文转变为明文的过程就是解密。加密和解密过程形成加密系统,明文与密文统称为报文。任何加密系统,不论形式如何复杂,实现的算法如何不同,但其基本组成部分是相同的,通常都包括如下4个部分:


(1) 需要加密的报文,也称为明文;


(2) 加密以后形成的报文,也称为密文;


(3) 加密、解密的装置或算法;


(4) 用于加密和解密的钥匙,称为密钥。密钥可以是数字、词汇或者语句。


报文加密后,发送方就要将密文通过通信渠道传输给接收方。传输过程中,即密文在通信渠道传输过程中是不安全的,可能被非法用户即第三方截取和窃听,但由于是密文,只要第三方没有密钥,只能得到一些无法理解其真实意义的密文信息,从而达到保密的目的。整个过程如图12.1所示。



1.2加密与解密过程


长久以来,人们发明了各种各样的加密方法,为便于研究,通常把这些方法分为传统加密方法和现代加密方法两大类。前者的共同特点是采用单钥技术,即加密和解密过程中使用同一密钥,所以它也称为对称式加密方法;而后者的共同特点是采用双钥技术,也就是加密和解密过程中使用两个不同的密钥,它也称为非对称式加密方法。下面就简单介绍一下这些加密方法。


1.2.1 基于单钥技术的传统加密方法
这类方法主要包括代码加密法、替换加密法、变位加密法和一次性密码簿加密法等。


(1) 代码加密法。通信双方使用预先设定的一组代码表达特定的意义,而实现的一种 简单的加密方法。代码可以是日常词汇、专用名词,也可以是某些特殊用语。例如:


密文:姥姥家的黄狗三天后下崽。


明文:县城鬼子三天后出城扫荡。


这种方法简单好用,但通常一次只能传送一组预先约定的信息,而且重复使用时是不安全的,因为那样的话窃密者会逐渐明白代码含义。


(2) 替换加密法。这种方法是制定一种规则,将明文中的每个字母或每组字母替换成另一个或一组字母。例如,下面的这组字母对应关系就构成了一个替换加密器:


明文字母:A B C D E F……


密文字母:K U P S W B……


虽然说替换加密法比代码加密法应用的范围要广,但使用得多了,窃密者就可以从多次搜集的密文中发现其中的规律,破解加密方法。


(3) 变位加密法。与前两种加密方法不同,变位加密法不隐藏原来明文的字符,而是将字符重新排序。比如,加密方首先选择一个用数字表示的密钥,写成一行,然后把明文逐行写在数字下。按照密钥中数字指示的顺序,将原文重新抄写,就形成密文。例如:


密钥:6835490271


明文:小赵拿走黑皮包交给李


密文:包李交拿黑走小给赵皮


(4) 一次性密码簿加密法。这种方法要先制定出一个密码薄,该薄每一页都是不同的代码表。加密时,使用一页上的代码加密一些词,用后撕掉或烧毁该页;然后再用另一页上的代码加密另一些词,直到全部的明文都加密成为密文。破译密文的唯一办法就是获得一份相同的密码簿。


计算机出现以后,密码簿就无需使用纸张而使用计算机和一系列数字来制作。加密时,根据密码簿里的数字对报文中的字母进行移位操作或进行按位的异或计算,以加密报文。解密时,接收方需要根据持有的密码簿,将密文的字母反向移位,或再次作异或计算,以求出明文。


数论中的“异或”规则是这样的:1^1=0,0^0=0;1^0=1,0^1=1。下面就是一个按位进行异或计算的加密和解密实例:


加密过程中明文与密码按位异或计算,求出密文:


明文:101101011011


密码:011010101001


密文:110111110010


解密过程中密文与密码按位异或计算,求出明文:


密文:110111110010


密码:011010101001


明文:101101011011


顾名思义,一次性密码簿只能使用一次,以保证信息加密的安全性。但由于解密时需要密码薄,所以想要加密一段报文,发送方必须首先安全地护送密码簿到接受方(这一过程常称为“密钥分发”过程)。如果双方相隔较远,如从美国五角大楼到英国中央情报局,则使用一次性密码簿的代价是很大的。这也是限制这种加密方法实用化和推广的 大障碍,因为既然有能力把密码簿安全地护送到接受方,那为什么不直接把报文本身安全地护送到目的地呢?


正因为传统加密方法在这方面的局限性,人们又想出了很多算法来加强和改进这些方法。下面我们就介绍几个比较著名的方法。


1.3 改进的传统加密方法
我们首先需要说明数据块和数据流加密的概念。数据块加密是指把数据划分为某一特定长度的数据块,再分别进行加密。数据块之间的加密是相互独立的,因此,如果内容相同的数据块重复出现,密文也会呈现出某种规律性,从而会降低破密的难度。数据流加密是指使用加密后的密文前面的部分,来参与报文后面部分的加密。这种方法的好处是数据块之间的加密不再独立,即使有相同的数据重复出现,密文也不会呈现出明显的规律性,从而提高破译的难度。改进的传统加密方法便是应用了这种思想,这类方法常划为使用传统加密技术的现代加密方法。


(1) 数据加密标准DES。DES(Data Encryption Standard)是美国政府1977年采用的加密标准, 初是由IBM公司在70年代初期开发的。美国政府在1981年又将DES进一步规定为ANSI标准。


DES是一个对称密钥系统,加密和解密使用相同的密钥。它通常选取一个64位(bit)的数据块,使用56位的密钥,在内部实现多次替换和变位操作来达到加密的目的。DES有ECB,CBC和CFB三种工作模式,其中ECB采用的是数据块加密模式,CBC与CFB采用的是数据流加密模式。


作为第一个公开的新式加密方法,DES的影响非常大。后来提出的许多密码方法都汲取了DES的思想和技术。但是,DES的缺点是它采用的密钥太短,只有56位,也就是说,所有可能的密钥只有256个。采用一些计算网络,若每秒钟测试5亿个密钥,则在4小时以内便可把所有可能的密钥都测试一遍。因此,随着计算机性能的提高,DES的破解难度已经降低,不太实用了。


(2) 三层DES(Triple-DES)。这种方法是DES的改进加密算法,它使用两把密钥对报文作三次DES加密,效果相当于将DES密钥的长度加倍。三层DES克服了DES的显著缺点,即其56位的短密钥。本来,三层DES是通过三次使用DES算法来对数据进行编码加密,在每一层上都使用不同的密钥,这样就可以用一个3×56=168位的密钥进行加密;但许多密码设计者认为168位的密钥已经超过实际需要了,所以便在第一层和第三层中使用相同的密钥,产生一个有效的112位的密钥长度。之所以没有直接采用两层DES,是因为第二层DES不是十分安全,它对一种称为“中间可遇”的密码分析攻击形式来说是极为脆弱的,所以还是采用了三层DES操作。


(3) RC2和RC4。RC指Rivest Code,它是以发明人美国麻省理工学院的Ron Rivest教授的姓氏命名的,由RSADSI公司发行,是不公开的专有算法。RC2和RC4使用可变长度(1至1024位)的密钥,实现不同级别的保密性。RC2采用的是数据块加密算法,RC4采用的是数据流加密算法。由于它们的具体算法不公开,所以没有人知道它们的可靠性到底能达到何种程度。有名的Netscape浏览器从2.0版就使用了RC2和RC4的加密算法。


(4) 数字摘要(Digital Digest)。该加密方法也是由Ron Rivest设计的,也被称为安全Hash编码法SHA(Secure Hash Algorithm)或MD5(MD Standards for Message Digest)。该编码法采用单向Hash函数[1]将需加密的明文“摘要”成一串128bit(位)的密文,这一串密文也称为数字指纹(Finger Print),它具有固定的长度。而且不同的明文摘要成密文时,其指纹结果也是不同的,而相同明文的摘要必定相同。这样,这串摘要便可以成为验证明文是否是“真身”的“指纹”了。SHA其实就是RC方法的一种实现。


(5) 国际数据加密算法IDEA。IDEA(International Data Encryption Algorithm)是1990年瑞士的James Massey,Xuejia Lai等人发表的一个数据块加密算法。该算法使用128位的密钥,能够有效地消除试图穷尽搜索密钥的可能攻击。IDEA看起来是一个较“强”的算法,但由于出现没多久,所以目前暂还没人知道它是否有漏洞。


(6) 基于硬件的加密。为克服软件加密算法在容易复制、容易尝试方面的不足,人们又开发了基于硬件的加密算法。如美国国家安全局为使用Clipper芯片,就秘密开发了一个民用加密算法SkipJack,采用80位的密钥,使得穷尽搜索密钥不可行。而且由于在Clipper芯片的硬件中人为地加进了一些“机关”设置,增加了破解难度。


虽然说传统的加密方法在军事、谍报、金融和其他商业领域曾一度得到了广泛应用,但它在密钥分发方面存在一些弊端,主要有下面3个方面:


其一,接收方必须有密钥才能解密,为此就需分发密钥,而安全送达密钥的代价往往很大。


其二,多人通信时密钥的组合数量往往很大,使得密钥选取和分发变得十分因难;例如,3个人两两通信时总共只需3把密钥,但若6人两两通信则总共需要15把密钥,n个人两两通信共需要密钥数为n(n-1)/2把;如果一个100多人的团体内部进行两两通信,则需要安全地分发近5000把密钥,代价实在太大。


其三,当通信人增多、密钥增多时,密钥的管理非常困难;因为密钥的管理人员和传送人员中,如果有人受贿或背叛,则密钥就可能被泄露,从而失去保密的意义。


这些弊端说明传统加密方法有很大的局限性,人们必须寻找其他的方法,实现更方便实用的加密目的,来保护网络通信信息和数据。公共密钥加密方法便是人们在传统加密方法的基础上,提出的一种更为有效的加密方法。