数据加密技术汇总十篇

时间:2023-03-14 14:48:56

数据加密技术

数据加密技术篇(1)

我们经常需要一种措施来保护我们的数据,防止被一些怀有不良用心的人所看到或者破坏。在信息时代,信息可以帮助团体或个人,使他们受益,同样,信息也可以用来对他们构成威胁,造成破坏。在竞争激烈的大公司中,工业间谍经常会获取对方的情报。因此,在客观上就需要一种强有力的安全措施来保护机密数据不被窃取或篡改。数据加密与解密从宏观上讲是非常简单的,很容易理解。加密与解密的一些方法是非常直接的,很容易掌握,可以很方便的对机密数据进行加密和解密。

一:数据加密方法

在传统上,我们有几种方法来加密数据流。所有这些方法都可以用软件很容易的实现,但是当我们只知道密文的时候,是不容易破译这些加密算法的(当同时有原文和密文时,破译加密算法虽然也不是很容易,但已经是可能的了)。最好的加密算法对系统性能几乎没有影响,并且还可以带来其他内在的优点。例如,大家都知道的pkzip,它既压缩数据又加密数据。又如,dbms的一些软件包总是包含一些加密方法以使复制文件这一功能对一些敏感数据是无效的,或者需要用户的密码。所有这些加密算法都要有高效的加密和解密能力。

幸运的是,在所有的加密算法中最简单的一种就是“置换表”算法,这种算法也能很好达到加密的需要。每一个数据段(总是一个字节)对应着“置换表”中的一个偏移量,偏移量所对应的值就输出成为加密后的文件。加密程序和解密程序都需要一个这样的“置换表”。事实上,80x86 cpu系列就有一个指令‘xlat’在硬件级来完成这样的工作。这种加密算法比较简单,加密解密速度都很快,但是一旦这个“置换表”被对方获得,那这个加密方案就完全被识破了。更进一步讲,这种加密算法对于黑客破译来讲是相当直接的,只要找到一个“置换表”就可以了。这种方法在计算机出现之前就已经被广泛的使用。 对这种“置换表”方式的一个改进就是使用2个或者更多的“置换表”,这些表都是基于数据流中字节的位置的,或者基于数据流本身。这时,破译变的更加困难,因为黑客必须正确的做几次变换。通过使用更多的“置换表”,并且按伪随机的方式使用每个表,这种改进的加密方法已经变的很难破译。比如,我们可以对所有的偶数位置的数据使用a表,对所有的奇数位置使用b表,即使黑客获得了明文和密文,他想破译这个加密方案也是非常困难的,除非黑客确切的知道用了两张表。

    与使用“置换表”相类似,“变换数据位置”也在计算机加密中使用。但是,这需要更多的执行时间。从输入中读入明文放到一个buffer中,再在buffer中对他们重排序,然后按这个顺序再输出。解密程序按相反的顺序还原数据。这种方法总是和一些别的加密算法混合使用,这就使得破译变的特别的困难,几乎有些不可能了。例如,有这样一个词,变换起字母的顺序,slient 可以变为listen,但所有的字母都没有变化,没有增加也没有减少,但是字母之间的顺序已经变化了。

但是,还有一种更好的加密算法,只有计算机可以做,就是字/字节循环移位和xor操作。如果我们把一个字或字节在一个数据流内做循环移位,使用多个或变化的方向(左移或右移),就可以迅速的产生一个加密的数据流。这种方法是很好的,破译它就更加困难!而且,更进一步的是,如果再使用xor操作,按位做异或操作,就就使破译密码更加困难了。如果再使用伪随机的方法,这涉及到要产生一系列的数字,我们可以使用fibbonaci数列。对数列所产生的数做模运算(例如模3),得到一个结果,然后循环移位这个结果的次数,将使破译次密码变的几乎不可能!但是,使用fibbonaci数列这种伪随机的方式所产生的密码对我们的解密程序来讲是非常容易的。 在一些情况下,我们想能够知道数据是否已经被篡改了或被破坏了,这时就需要产生一些校验码,并且把这些校验码插入到数据流中。这样做对数据的防伪与程序本身都是有好处的。但是感染计算机程序的病毒才不会在意这些数据或程序是否加过密,是否有数字签名。所以,加密程序在每次load到内存要开始执行时,都要检查一下本身是否被病毒感染,对与需要加、解密的文件都要做这种检查!很自然,这样一种方法体制应该保密的,因为病毒程序的编写者将会利用这些来破坏别人的程序或数据。因此,在一些反病毒或杀病毒软件中一定要使用加密技术。 循环冗余校验是一种典型的校验数据的方法。对于每一个数据块,它使用位循环移位和xor操作来产生一个16位或32位的校验和 ,这使得丢失一位或两个位的错误一定会导致校验和出错。这种方式很久以来就应用于文件的传输,例如 xmodem-crc。 这是方法已经成为标准,而且有详细的文档。但是,基于标准crc算法的一种修改算法对于发现加密数据块中的错误和文件是否被病毒感染是很有效的。

二.基于公钥的加密算法

一个好的加密算法的重要特点之一是具有这种能力:可以指定一个密码或密钥,并用它来加密明文,不同的密码或密钥产生不同的密文。这又分为两种方式:对称密钥算法和非对称密钥算法。所谓对称密钥算法就是加密解密都使用相同的密钥,非对称密钥算法就是加密解密使用不同的密钥。非常著名的pgp公钥加密以及rsa加密方法都是非对称加密算法。

    加密密钥,即公钥,与解密密钥,即私钥,是非常的不同的。从数学理论上讲,几乎没有真正不可逆的算法存在。例如,对于一个输入‘a’执行一个操作得到结果‘b’,那么我们可以基于‘b’,做一个相对应的操作,导出输入‘a’。在一些情况下,对于每一种操作,我们可以得到一个确定的值,或者该操作没有定义(比如,除数为0)。对于一个没有定义的操作来讲,基于加密算法,可以成功地防止把一个公钥变换成为私钥。因此,要想破译非对称加密算法,找到那个唯一的密钥,唯一的方法只能是反复的试验,而这需要大量的处理时间。 rsa加密算法使用了两个非常大的素数来产生公钥和私钥。即使从一个公钥中通过因数分解可以得到私钥,但这个运算所包含的计算量是非常巨大的,以至于在现实上是不可行的。加密算法本身也是很慢的,这使得使用rsa算法加密大量的数据变的有些不可行。这就使得一些现实中加密算法都基于rsa加密算法。pgp算法(以及大多数基于rsa算法的加密方法)使用公钥来加密一个对称加密算法的密钥,然后再利用一个 快速的对称加密算法来加密数据。这个对称算法的密钥是随机产生的,是保密的,因此,得到这个密钥的唯一方法就是使用私钥来解密。 我们举一个例子:假定现在要加密一些数据使用密钥‘12345’。利用rsa公钥,使用rsa算法加密这个密钥‘12345’,并把它放在要加密的数据的前面(可能后面跟着一个分割符或文件长度,以区分数据和密钥),然后,使用对称加密算法加密正文,使用的密钥就是‘12345’。当对方收到时,解密程序找到加密过的密钥,并利用rsa私钥解密出来,然后再确定出数据的开始位置,利用密钥‘12345’来解密数据。这样就使得一个可靠的经过高效加密的数据安全地传输和解密。

三.一个崭新的多步加密算法

    现在又出现了一种新的加密算法,据说是几乎不可能被破译的。这个算法在1998年6月1日才正式公布的。下面详细的介绍这个算法: 使用一系列的数字(比如说128位密钥),来产生一个可重复的但高度随机化的伪随机的数字的序列。一次使用256个表项,使用随机数序列来产生密码转表,如下所示: 把256个随机数放在一个距阵中,然后对他们进行排序,使用这样一种方式(我们要记住最初的位置)使用最初的位置来产生一个表,随意排序的表,表中的数字在0到255之间。如果不是很明白如何来做,就可以不管它。但是,下面也提供了一些原码(在下面)是我们明白是如何来做的。现在,产生了一个具体的256字节的表。让这个随机数产生器接着来产生这个表中的其余的数,以至于每个表是不同的。下一步,使用""shotgun technique""技术来产生解码表。基本上说,如果 a映射到b,那么b一定可以映射到a,所以b - arandom);

} ...

数据加密技术篇(2)

在传统上,我们有几种方法来加密数据流。所有这些方法都可以用软件很容易的实现,但是当我们只知道密文的时候,是不容易破译这些加密算法的(当同时有原文和密文时,破译加密算法虽然也不是很容易,但已经是可能的了)。最好的加密算法对系统性能几乎没有影响,并且还可以带来其他内在的优点。例如,大家都知道的pkzip,它既压缩数据又加密数据。又如,dbms的一些软件包总是包含一些加密方法以使复制文件这一功能对一些敏感数据是无效的,或者需要用户的密码。所有这些加密算法都要有高效的加密和解密能力。

幸运的是,在所有的加密算法中最简单的一种就是“置换表”算法,这种算法也能很好达到加密的需要。每一个数据段(总是一个字节)对应着“置换表”中的一个偏移量,偏移量所对应的值就输出成为加密后的文件。加密程序和解密程序都需要一个这样的“置换表”。事实上,80x86 cpu系列就有一个指令‘xlat’在硬件级来完成这样的工作。这种加密算法比较简单,加密解密速度都很快,但是一旦这个“置换表”被对方获得,那这个加密方案就完全被识破了。更进一步讲,这种加密算法对于黑客破译来讲是相当直接的,只要找到一个“置换表”就可以了。这种方法在计算机出现之前就已经被广泛的使用。

对这种“置换表”方式的一个改进就是使用2个或者更多的“置换表”,这些表都是基于数据流中字节的位置的,或者基于数据流本身。这时,破译变的更加困难,因为黑客必须正确的做几次变换。通过使用更多的“置换表”,并且按伪随机的方式使用每个表,这种改进的加密方法已经变的很难破译。比如,我们可以对所有的偶数位置的数据使用a表,对所有的奇数位置使用b表,即使黑客获得了明文和密文,他想破译这个加密方案也是非常困难的,除非黑客确切的知道用了两张表。

与使用“置换表”相类似,“变换数据位置”也在计算机加密中使用。但是,这需要更多的执行时间。从输入中读入明文放到一个buffer中,再在buffer中对他们重排序,然后按这个顺序再输出。解密程序按相反的顺序还原数据。这种方法总是和一些别的加密算法混合使用,这就使得破译变的特别的困难,几乎有些不可能了。例如,有这样一个词,变换起字母的顺序,slient 可以变为listen,但所有的字母都没有变化,没有增加也没有减少,但是字母之间的顺序已经变化了。

但是,还有一种更好的加密算法,只有计算机可以做,就是字/字节循环移位和xor操作。如果我们把一个字或字节在一个数据流内做循环移位,使用多个或变化的方向(左移或右移),就可以迅速的产生一个加密的数据流。这种方法是很好的,破译它就更加困难!而且,更进一步的是,如果再使用xor操作,按位做异或操作,就就使破译密码更加困难了。如果再使用伪随机的方法,这涉及到要产生一系列的数字,我们可以使用fibbonaci数列。对数列所产生的数做模运算(例如模3),得到一个结果,然后循环移位这个结果的次数,将使破译次密码变的几乎不可能!但是,使用fibbonaci数列这种伪随机的方式所产生的密码对我们的解密程序来讲是非常容易的。

在一些情况下,我们想能够知道数据是否已经被篡改了或被破坏了,这时就需要产生一些校验码,并且把这些校验码插入到数据流中。这样做对数据的防伪与程序本身都是有好处的。但是感染计算机程序的病毒才不会在意这些数据或程序是否加过密,是否有数字签名。所以,加密程序在每次load到内存要开始执行时,都要检查一下本身是否被病毒感染,对与需要加、解密的文件都要做这种检查!很自然,这样一种方法体制应该保密的,因为病毒程序的编写者将会利用这些来破坏别人的程序或数据。因此,在一些反病毒或杀病毒软件中一定要使用加密技术。

循环冗余校验是一种典型的校验数据的方法。对于每一个数据块,它使用位循环移位和xor操作来产生一个16位或32位的校验和 ,这使得丢失一位或两个位的错误一定会导致校验和出错。这种方式很久以来就应用于文件的传输,例如 xmodem-crc。 这是方法已经成为标准,而且有详细的文档。但是,基于标准crc算法的一种修改算法对于发现加密数据块中的错误和文件是否被病毒感染是很有效的。

二.基于公钥的加密算法

一个好的加密算法的重要特点之一是具有这种能力:可以指定一个密码或密钥,并用它来加密明文,不同的密码或密钥产生不同的密文。这又分为两种方式:对称密钥算法和非对称密钥算法。所谓对称密钥算法就是加密解密都使用相同的密钥,非对称密钥算法就是加密解密使用不同的密钥。非常著名的pgp公钥加密以及rsa加密方法都是非对称加密算法。加密密钥,即公钥,与解密密钥,即私钥,是非常的不同的。从数学理论上讲,几乎没有真正不可逆的算法存在。例如,对于一个输入‘a’执行一个操作得到结果‘b’,那么我们可以基于‘b’,做一个相对应的操作,导出输入‘a’。在一些情况下,对于每一种操作,我们可以得到一个确定的值,或者该操作没有定义(比如,除数为0)。对于一个没有定义的操作来讲,基于加密算法,可以成功地防止把一个公钥变换成为私钥。因此,要想破译非对称加密算法,找到那个唯一的密钥,唯一的方法只能是反复的试验,而这需要大量的处理时间。

rsa加密算法使用了两个非常大的素数来产生公钥和私钥。即使从一个公钥中通过因数分解可以得到私钥,但这个运算所包含的计算量是非常巨大的,以至于在现实上是不可行的。加密算法本身也是很慢的,这使得使用rsa算法加密大量的数据变的有些不可行。这就使得一些现实中加密算法都基于rsa加密算法。pgp算法(以及大多数基于rsa算法的加密方法)使用公钥来加密一个对称加密算法的密钥,然后再利用一个快速的对称加密算法来加密数据。这个对称算法的密钥是随机产生的,是保密的,因此,得到这个密钥的唯一方法就是使用私钥来解密。

我们举一个例子:假定现在要加密一些数据使用密钥‘12345’。利用rsa公钥,使用rsa算法加密这个密钥‘12345’,并把它放在要加密的数据的前面(可能后面跟着一个分割符或文件长度,以区分数据和密钥),然后,使用对称加密算法加密正文,使用的密钥就是‘12345’。当对方收到时,解密程序找到加密过的密钥,并利用rsa私钥解密出来,然后再确定出数据的开始位置,利用密钥‘12345’来解密数据。这样就使得一个可靠的经过高效加密的数据安全地传输和解密。

一些简单的基于rsa算法的加密算法可在下面的站点找到:

ftp://ftp.funet.fi/pub/crypt/cryptography/asymmetric/rsa

三.一个崭新的多步加密算法

现在又出现了一种新的加密算法,据说是几乎不可能被破译的。这个算法在1998年6月1日才正式公布的。下面详细的介绍这个算法:

使用一系列的数字(比如说128位密钥),来产生一个可重复的但高度随机化的伪随机的数字的序列。一次使用256个表项,使用随机数序列来产生密码转表,如下所示:

把256个随机数放在一个距阵中,然后对他们进行排序,使用这样一种方式(我们要记住最初的位置)使用最初的位置来产生一个表,随意排序的表,表中的数字在0到255之间。如果不是很明白如何来做,就可以不管它。但是,下面也提供了一些原码(在下面)是我们明白是如何来做的。现在,产生了一个具体的256字节的表。让这个随机数产生器接着来产生这个表中的其余的数,以至于每个表是不同的。下一步,使用"shotgun technique"技术来产生解码表。基本上说,如果 a映射到b,那么b一定可以映射到a,所以b[a[n]] = n.(n是一个在0到255之间的数)。在一个循环中赋值,使用一个256字节的解码表它对应于我们刚才在上一步产生的256字节的加密表。

使用这个方法,已经可以产生这样的一个表,表的顺序是随机,所以产生这256个字节的随机数使用的是二次伪随机,使用了两个额外的16位的密码.现在,已经有了两张转换表,基本的加密解密是如下这样工作的。前一个字节密文是这个256字节的表的索引。或者,为了提高加密效果,可以使用多余8位的值,甚至使用校验和或者crc算法来产生索引字节。假定这个表是256*256的数组,将会是下面的样子:

crypto1 = a[crypto0][value]

变量'crypto1'是加密后的数据,'crypto0'是前一个加密数据(或着是前面几个加密数据的一个函数值)。很自然的,第一个数据需要一个“种子”,这个“种子” 是我们必须记住的。如果使用256*256的表,这样做将会增加密文的长度。或者,可以使用你产生出随机数序列所用的密码,也可能是它的crc校验和。顺便提及的是曾作过这样一个测试: 使用16个字节来产生表的索引,以128位的密钥作为这16个字节的初始的"种子"。然后,在产生出这些随机数的表之后,就可以用来加密数据,速度达到每秒钟100k个字节。一定要保证在加密与解密时都使用加密的值作为表的索引,而且这两次一定要匹配。

加密时所产生的伪随机序列是很随意的,可以设计成想要的任何序列。没有关于这个随机序列的详细的信息,解密密文是不现实的。例如:一些ascii码的序列,如“eeeeeeee"可能被转化成一些随机的没有任何意义的乱码,每一个字节都依赖于其前一个字节的密文,而不是实际的值。对于任一个单个的字符的这种变换来说,隐藏了加密数据的有效的真正的长度。

如果确实不理解如何来产生一个随机数序列,就考虑fibbonacci数列,使用2个双字(64位)的数作为产生随机数的种子,再加上第三个双字来做xor操作。 这个算法产生了一系列的随机数。算法如下:

unsigned long dw1, dw2, dw3, dwmask;

int i1;

unsigned long arandom[256];

dw1 = {seed #1};

dw2 = {seed #2};

dwmask = {seed #3};

// this gives you 3 32-bit "seeds", or 96 bits total

for(i1=0; i1 < 256; i1++)

{

dw3 = (dw1 + dw2) ^ dwmask;

arandom[i1] = dw3;

dw1 = dw2;

dw2 = dw3;

}

如果想产生一系列的随机数字,比如说,在0和列表中所有的随机数之间的一些数,就可以使用下面的方法:

int __cdecl mysortproc(void *p1, void *p2)

{

unsigned long **pp1 = (unsigned long **)p1;

unsigned long **pp2 = (unsigned long **)p2;

if(**pp1 < **pp2)

return(-1);

else if(**pp1 > *pp2)

return(1);

return(0);

}

...

int i1;

unsigned long *aprandom[256];

unsigned long arandom[256]; // same array as before, in this case

int aresult[256]; // results go here

for(i1=0; i1 < 256; i1++)

{

aprandom[i1] = arandom + i1;

}

// now sort it

qsort(aprandom, 256, sizeof(*aprandom), mysortproc);

// final step - offsets for pointers are placed into output array

for(i1=0; i1 < 256; i1++)

{

aresult[i1] = (int)(aprandom[i1] - arandom);

}

...

变量'aresult'中的值应该是一个排过序的唯一的一系列的整数的数组,整数的值的范围均在0到255之间。这样一个数组是非常有用的,例如:对一个字节对字节的转换表,就可以很容易并且非常可靠的来产生一个短的密钥(经常作为一些随机数的种子)。这样一个表还有其他的用处,比如说:来产生一个随机的字符,计算机游戏中一个物体的随机的位置等等。上面的例子就其本身而言并没有构成一个加密算法,只是加密算法一个组成部分。

作为一个测试,开发了一个应用程序来测试上面所描述的加密算法。程序本身都经过了几次的优化和修改,来提高随机数的真正的随机性和防止会产生一些短的可重复的用于加密的随机数。用这个程序来加密一个文件,破解这个文件可能会需要非常巨大的时间以至于在现实上是不可能的。

四.结论:

由于在现实生活中,我们要确保一些敏感的数据只能被有相应权限的人看到,要确保信息在传输的过程中不会被篡改,截取,这就需要很多的安全系统大量的应用于政府、大公司以及个人系统。数据加密是肯定可以被破解的,但我们所想要的是一个特定时期的安全,也就是说,密文的破解应该是足够的困难,在现实上是不可能的,尤其是短时间内。

参考文献:

1 ./www.pgpi.com/

cyber knights(new link) http://members.tripod.com/cyberkt/

(old link: http://netnet.net/~merlin/knights/)

2 . crypto chamber http://www.jyu.fi/~paasivir/crypt/

3 . ssh cryptograph a-z (includes info on ssl and https) http://www.ssh.fi/tech/crypto/

4 . funet' cryptology ftp (yet another finland resource) ftp://ftp.funet.fi/pub/crypt/

a great enigma article, how the code was broken by polish scientists

http://members.aol.com/nbrass/1enigma.htm

5 . ftp site in uk ftp://sable.ox.ac.uk/pub/crypto/

6 . australian ftp site ftp://ftp.psy.uq.oz.au/pub/

7 . replay associates ftp archive ftp://utopia.hacktic.nl/pub/replay/pub/crypto/

数据加密技术篇(3)

随着全球经济一体化的到来,信息技术的快速发展和信息交换的大量增加给整个社会带来了新的驱动力和创新意识。信息技术的高速度发展,信息传输的安全日益引起人们的关注。世界各个国家分别从法律上、管理上加强了对数据的安全保护,而从技术上采取措施才是有效手段,技术上的措施分别可以从软件和硬件两方面入手。随着对信息数据安全的要求的提高,数据加密技术和物理防范技术也在不断的发展。数据加密是防止数据在数据存储和和传输中失密的有效手段。信息数据加密技术是利用数学或物理手段,对电子信息在传输过程中和存储体内进行保护,以防止泄漏的技术。信息数据加密与解密从宏观上讲是非常简单的,很容易掌握,可以很方便的对机密数据进行加密和解密。从而实现对数据的安全保障。

1.信息数据加密技术的基本概念

信息数据加密就是通过信息的变换或编码,把原本一个较大范围的人(或者机器)都能够读懂、理解和识别的信息(这些信息可以是语音、文字、图像和符号等等)通过一定的方法(算法),使之成为难以读懂的乱码型的信息,从而达到保障信息安全,使其不被非法盗用或被非相关人员越权阅读的目的。在加密过程中原始信息被称为“明文”,明文经转换加密后得到的形式就是“密文”。那么由“明文”变成“密文”的过程称为“加密”,而把密文转变为明文的过程称为“解密”。

2. 信息数据加密技术分类

信息数据加密技术一般来说可以分为两种,对称密钥加密技术及非对称密钥加密技术。

2.1 对称密钥加密技术

对称密钥加密技术,又称专用密钥加密技术或单密钥加密技术。其加密和解密时使用同一个密钥,即同一个算法。对称密钥是一种比较传统的加密方式,是最简单方式。在进行对称密钥加密时,通信双方需要交换彼此密钥,当需要给对方发送信息数据时,用自己的加密密钥进行加密,而在需要接收方信息数据的时候,收到后用对方所给的密钥进行解密。在对称密钥中,密钥的管理极为重要,一旦密钥丢失,密文将公开于世。这种加密方式在与多方通信时变得很复杂,因为需要保存很多密钥,而且密钥本身的安全就是一个必须面对的大问题。

对称密钥加密算法主要包括:DES、3DES、IDEA、FEAL、BLOWFISH等。

DES 算法的数据分组长度为64 位,初始置换函数接受长度为64位的明文输入,密文分组长度也是64 位,末置换函数输出64位的密文;使用的密钥为64 位,有效密钥长度为56 位,有8 位用于奇偶校验。DES的解密算法与加密算法完全相同,但密钥的顺序正好相反。所以DES是一种对二元数据进行加密的算法。DES加密过程是:对给定的64 位比特的明文通过初始置换函数进行重新排列,产生一个输出;按照规则迭代,置换后的输出数据的位数要比迭代前输入的位数少;进行逆置换,得到密文。

DES 算法还是比别的加密算法具有更高的安全性,因为DES算法具有相当高的复杂性,特别是在一些保密性级别要求高的情况下使用三重DES 或3DES 系统较可靠。DES算法由于其便于掌握,经济有效,使其应用范围更为广泛。目前除了用穷举搜索法可以对DES 算法进行有效地攻击之外, 还没有发现其它有效的攻击办法。

IDEA算法1990年由瑞士联邦技术协会的Xuejia Lai和James Massey开发的。经历了大量的详细审查,对密码分析具有很强的抵抗能力,在多种商业产品中被使用。IDEA以64位大小的数据块加密的明文块进行分组,密匙长度为128位,它基于“相异代数群上的混合运算”设计思想算法用硬件和软件实现都很容易且比DES在实现上快的多。

IDEA算法输入的64位数据分组一般被分成4个16位子分组:A1,A2,A3和A4。这4个子分组成为算法输入的第一轮数据,总共有8轮。在每一轮中,这4个子分组相互相异或,相加,相乘,且与6个16位子密钥相异或,相加,相乘。在轮与轮间,第二和第三个子分组交换。最后在输出变换中4个子分组与4个子密钥进行运算。

FEAL算法不适用于较小的系统,它的提出是着眼于当时的DES只用硬件去实现,FEAL算法是一套类似美国DES的分组加密算法。但FEAL在每一轮的安全强度都比DES高,是比较适合通过软件来实现的。FEAL没有使用置换函数来混淆加密或解密过程中的数据。FEAL使用了异或(XOR)、旋转(Rotation)、加法与模(Modulus)运算,FEAL中子密钥的生成使用了8轮迭代循环,每轮循环产生2个16bit的子密钥,共产生16个子密钥运用于加密算法中。

2.2 非对称密钥加密技术

非对称密钥加密技术又称公开密钥加密,即非对称加密算法需要两个密钥,公开密钥和私有密钥。有一把公用的加密密钥,有多把解密密钥,加密和解密时使用不同的密钥,即不同的算法,虽然两者之间存在一定的关系,但不可能轻易地从一个推导出另一个。使用私有密钥对数据信息进行加密,必须使用对应的公开密钥才能解密,而 公开密钥对数据信息进行加密,只有对应的私有密钥才能解密。在非对称密钥加密技术中公开密钥和私有密钥都是一组长度很大、数字上具有相关性的素数。其中的一个密钥不可能翻译出信息数据,只有使用另一个密钥才能解密,每个用户只能得到唯一的一对密钥,一个是公开密钥,一个是私有密钥,公开密钥保存在公共区域,可在用户中传递,而私有密钥则必须放在安全的地方。

非对称密钥加密技术的典型算法是RSA算法。RSA算法是世界上第一个既能用于数据加密也能用于数字签名的非对称性加密算法,RSA算法是1977年由Ron Rivest、Adi Shamirh和LenAdleman在(美国麻省理工学院)开发的。RSA是目前最有影响力的公钥加密算法,它能够抵抗到目前为止已知的所有密码攻击,已被ISO推荐为公钥数据加密标准。

RSA算法的安全性依赖于大数分解,但现在还没有证明破解RSA就一定需要作大数分解。所以是否等同于大数分解一直没有理论证明的支持。由于RSA算法进行的都是大数计算,所以无论是在软件还是硬件方面实现相对于DES算法RSA算法最快的情况也会慢上好几倍。速度一直是RSA算法的缺陷。

3.总结

随着计算机网络的飞速发展,在实现资源共享、信息海量的同时,信息安全达到了前所未有的需要程度,信息加密技术也凸显了其必不可少的地位,同时也加密技术带来了前所未有的发展需求,加密技术发展空间无限。

参考文献:

[1] IDEA算法 中国信息安全组织 2004-07-17.

[2] baike.省略/view/1364549.htm.

数据加密技术篇(4)

中图分类号:TP311.13 文献标识码:A 文章编号:1009-3044(2008)18-20ppp-0c

Discuss About Database Encryption Technology

QIN Xiao-xia, LI Wen-hua, LUO Jian-fen

(College of Computer Science, Yangtze University, Jingzhou 434023, China)

Abstract: Begins with requirement of the database security , it proposes an aim of the database encryption ,and then analyzes several key technologies in the database encryption technology, and compares them. Finally the influence of encryption system will be summarized.

Key words: Database security; Database encryption; Encryption granularity; Encryption algorithm

1 引言

随着网络技术的不断发展及信息处理的不断增多,巨量级数据扑面而来。数据库系统担负着集中存储和处理大量信息的任务,从而使数据安全问题变得也非常显著。传统地,物理安全和操作系统安全机制为数据库提供了一定的安全措施和技术,但并不能全部满足数据库安全的需求,特别是无法保证一些重要部门如政府、金融、国防和一些敏感数据如信用卡、身份证、个人的医疗信息的安全,因此对数据库加密是提高数据库安全的最重要的手段之一,也成了数据库安全研究的一个焦点。

2 数据库安全概述

数据库在信息系统中的核心地位使得数据库面临着严重的安全威胁,根据数据库受到的威胁和可能的攻击,数据库的安全性要求着重在几方面:

(1)物理上的数据完整性。预防数据库数据物理方面的问题,如掉电,以及灾害破坏后的恢复、重构数据库。

(2)逻辑上的数据完整性。保持数据的结构。

(3)元素的完整性。包含在每个元素中的数据是准确的。

(4)可审计性。能追踪到谁访问或修改过数据库中的元素。

(5)访问控制。确保用户只能访问授权数据,限制用户访问模式。

(6)用户认证。用户除提供用户名、口令外,还可按照系统安全要求提供其它相关安全凭证。系统可以选择使用终端密钥、用户USB Key等来增强身份认证的安全性。

(7)可获用性。用户能够对数据库进行授权的访问。

3 数据库加密要实现的目标

与一般的数据加密和文件加密相比,由于数据库中数据有很强的相关性,并且数据量大,因此对它加密要比普通数据加密和文件加密有更大的难度,密钥管理更加困难。数据加密是防止数据库中数据在存储和传输中失密的有效手段。数据加密的过程实际上就是根据一定的算法将原始数据变换为不可直接识别的格式,从而使得不知道解密算法的人无法获知数据的内容,而仅允许经过授权的人员访问和读取数据,从而确保数据的保密性,是一种有助于保护数据的机制。

因此,数据库加密要求做到:

(1)数据库中信息保存时间比较长,采用合适的加密方式,从根本上达到不可破译;

(2)加密后,加密数据占用的存储空间不宜明显增大;

(3)加密/解密速度要快,尤其是解密速度,要使用户感觉不到加密/解密过程中产生的时延,以及系统性能的变化;

(4)授权机制要尽可能灵活。在多用户环境中使用数据库系统,每个用户只用到其中一小部分数据。所以,系统应有比较强的访问控制机制,再加上灵活的授权机制配合起来对数据库数据进行保护。这样既增加了系统的安全性,又方便了用户的使用;

(5)提供一套安全的、灵活的密钥管理机制;

(6)不影响数据库系统的原有功能,保持对数据库操作(如查询,检索,修改,更新)的灵活性和简便性;

(7)加密后仍能满足用户对数据库不同的粒度进行访问。

4 数据库加密技术中的关键问题

数据库加密需要考虑几个重要问题:是在数据库引擎内或产生数据的应用程序中或是在硬件设备上进行加密/解密?加密数据粒度基于数据库、表还是字段?加密效果与其对性能的影响如何?

针对上述几个问题,结合数据库数据存储时间长、共享性高等特点,在数据库加密技术中,重点是要选择合适的加密执行层次、加密粒度和加密算法,并且要与实际的安全需求紧密结合起来。

4.1 加密执行层次

对数据库的数据进行加密主要是通过操作系统层加密、DBMS内核层(服务器端)加密和DBMS外层(客户端)加密三个不同层次实现的;DBMS内核层、外层加密分别如图1、图2所示:

(1)在OS层

在操作系统(OS)层执行加密/解密,数据库元素以及各元素之间的关系无法辨认,所以无法产生合理的密钥。一般在OS层,针对数据库文件要么不加密,要么对整个数据库文件进行加密,加密/解密不能合理执行。尤其对于大型数据库来说,在操作系统层次实现数据库的加密/解密,目前还难做到有效保证数据库的安全,因此一般不采用在OS层进行数据库加密。

(2)在DBMS内核层执行加密/解密

在内核层执行加密解密有如下特点:

加密/解密执行时间:在数据存入数据库或从数据库中取出时,即在物理数据存取之前;

加密/解密执行主体:在DBMS内核层,由用户定制的或者DBMS提供的存储过程函数执行;

加密/解密过程:在存储数据时,通过触发器调用加密存储过程对数据加密,然后将密文数据存入数据库在读取数据时,触发器调用相应存储过程解密数据,然后读出结果;

加密/解密算法:由DBMS系统提供。多数不提供添加自己算法的接口,因此算法选择比较受限制。

在DBMS内核层实现加密需要对数据库管理系统本身进行操作,这种加密是指数据在物理存取之前完成加密/解密工作。优点是加密功能强,并且加密功能几乎不会影响DBMS的功能,可以实现加密功能与数据库管理系统之间的无缝耦合。由于与DBMS系统结合紧密,可以提供对各种粒度加密的灵活性,灵活的加密配合DBMS的访问控制、授权控制,不失是一种有效的数据库数据保护方案。另外,这种层次的加密对于应用程序来说是透明的。其缺点是加密运算在服务器端进行,加重了服务器的负载,而且DBMS和加密器之间的接口需要DBMS开发商的支持。

(3)在DBMS外层执行加密/解密

在DBMS外层执行加密/解密包含两种实现方式:第一种方式如图2(a)所示,是在应用程序中实现,加密时调用应用程序中的加密模块来完成数据的加密工作,然后把密文数据传送到DBMS存储;解密时把密文数据取出到应用程序中,然后由应用程序中的解密模块将数据解密并给出结果。第二种方式如图2(b)所示,是直接利用操作系统提供的功能实现加密,这种加密方式是在文件级别上的加密,直接加密数据库文件。

在DBMS外层实现加密的好处是不会加重数据库服务器的负载, 采用这种加密方式进行加密,加解密运算可在客户端进行,它的优点是不会加重数据库服务器的负载并且可以实现网上传输的加密,缺点是加密功能会受到一些限制,与数据库管理系统之间的耦合性稍差。

(4)不同层次实现数据库加密效果比较

在DBMS内核层和DBMS外层加密的特点如表1所示:

由表可知:在DBMS内核层执行加密/解密,不会增加额外的处理负担,对本身性能影响小;实现了密钥与密文的分离,安全程度相对较高;算法由应用程序提供,选择性大。

DBMS外层加密主要存在着可用性与安全性的矛盾;加密粒度受DBMS接口支持的限制,灵活性不够强;安全升级时,应用程序改动比较大;对于密文数据,DBMS本身的一些功能会受到影响。

4.2 加密粒度选择

数据库的加密粒度指的是数据加密的最小单位,主要有表、字段、数据元素等。数据库中执行加密,加密粒度越小,则可以选择加密数据的灵活性就越大,但是产生的密钥数量也大,带来管理方面问题。数据库中加密粒度的选择要根据需要,充分衡量安全性和灵活性等需求。选择的过程中,由于数据库中存储的数据包括非敏感数据,因此,可以只选择敏感数据部分进行加密,从而加密粒度越小,加密执行消耗资源就少,投入费用就少。

4.3 算法选择

数据库加密技术的安全很大程度上取决于加密算法的强度,加密算法直接影响到数据库加密的安全和性能。因此,加密算法的选择在数据库加密方案中也显得举足轻重。传统的数据加密技术包括以下三种:

(1)对称加密

也称为共享密钥加密。对称加密算法是应用较早的加密算法,在对称加密算法中,数据发信方将明文(原始数据)和加密密钥一起经过特殊加密算法处理后,使其变成复杂的加密密文发送出去。收信方若想解读原文,则需要使用加密用过的密钥及相同算法的逆算法对密文进行解密,才能使其恢复成可读明文。由于对称加密算法算法公开、计算量小、加密速度快、加密效率高,因此它是最常用的加密技术。主要的对称加密算法有DES、IDEA和AES。

(2)非对称加密

又称为公钥加密。非对称加密算法使用两把完全不同但又是完全匹配的一对钥匙――公钥和私钥。非对称加密算法的基本原理是,如果发信方想发送只有收信方才能解读的加密信息,发信方必须首先知道收信方的公钥,然后利用收信方的公钥来加密原文;收信方收到加密密文后,使用自己的私钥才能解密密文。显然,采用非对称加密算法,收发信双方在通信之前,收信方必须将自己早已随机生成的公钥送给发信方,而自己保留私钥。由于非对称算法拥有两个密钥,因而特别适用于分布式系统中的数据加密。常用的公钥加密算法是RSA,它不但可以用来加密数据,还可用来进行身份认证和数据完整性验证。

(3)混合加密

由于对称加密算法更简单,数据的加密和解密都使用同一个密钥,所以比起非对称加密,它的速度要快得多,适合大量数据的加密和解密;主要缺点也是由于使用相同的密钥加密和解密数据引起的,所有的数据发送方和接收方都必须知道或可以访问加密密钥,必须将此加密密钥发送给所有要求访问加密数据的一方,所以在密钥的生成、分发、备份、重新生成和生命周期等方面常存在安全问题。而公钥加密属于非对称加密,不存在密钥的分发问题,因此在多用户和网络系统中密钥管理非常简单,但由于它主要基于一些难解的数学问题,所以安全强度没有对称加密高,速度也比较慢。

为了充分发挥对称加密与非对称加密的优势,混合加密方案被提出。在混合加密方案中,加密者首先利用一个随机生成的密钥和对称加密算法加密数据,然后通过使用接收者的公钥把随机密钥进行加密,并与密文一起传送给接受者。接收者通过自己的私钥首先解密随机密钥,再利用其解密密文。此方案既利用了对称加密安全强度高、速度快的特点,也利用了非对称加密密钥管理简单的特性。“一次一密”的加密是最安全的一种加密技术,加密者在每次加密时都使用与明文长度一样的随机密钥,并且每个密钥都不重复使用。但在数据库加密中,由于密钥的产生和保存都存在很大的困难,因此在实际应用中并不常用。

5 数据库加密后对系统的影响

加密技术在保证数据库安全性的同时,也给数据库系统带来如下一些影响:

(1)性能下降:数据加密后,由于其失去了本身所固有的一些特性,如有序性,相似性和可比性,这样导致对加密数据的查询,往往需要对所有加密数据先进行解密,然后才能进行查询。而解密操作的代价往往很大,这样使得系统的性能急剧下降。

(2)索引字段的加密问题:索引的建立和应用必须在明文状态下进行,这样才能够保证索引文件中键的有序性,以便提高查询性能。否则,索引将失去作用。

(3)加密字符串的模糊匹配:对加密数据上的大量模糊查询,例如,当SQL条件语句包“Like”时,很难进行处理。

(4)加密数据库的完整性:当数据库加密后,实体完整性不会被破坏,而引用完整性难以维护。

(5)加密数据的存储空间增加问题:对数据库加密,通常采用分组加密算法,这有可能导致数据加密后的存储空间增加。

(6)密钥管理问题:在现代密码学中算法的安全性都是基于密钥的安全性,而不是基于算法的细节的安全性。对数据库采取加密技术来保证其安全性,但是在现实生活中,如何保证密钥本身的安全性又是一件非常困难的事情心。在数据库管理系统中,由于数据的共享性和存储数据的持久性等原因,要求更加灵活和安全的密钥管理机制。

参考文献:

[1] 万红艳.一种数据库加密系统的设计与实现[J].黄石理工学院学报,2007,23(3):27-29.

[2] 赵晓峰.几种数据库加密方法的研究与比较[J].计算机技术与发展,2007,17(2):219-222.

[3] 王正飞,施伯乐.数据库加密技术及其应用研究[D].上海:复旦大学,2005.

[4] 庄海燕,徐江峰.数据库加密技术及其在Oracle中的应用[D].郑州:郑州大学,2006.

数据加密技术篇(5)

中图分类号:TP309文献标识码:A文章编号:1009-3044(2010)20-5448-03

Data Encryption Technology Primary Research

ZHU Hai-yan, ZHAO Xin-ping

(Fenyang Normal Scholl of Lvliang University, Fenyang 032200, China)

Abstract: With the spectacularcarrying out of information technology and application, cornucopia information security attract more and more attention. All the sensitive information on the exchange and store is encrypted or mask, to ensure that secret message was not malicious alter or malicious use. To this a security vulnerability, there are many encryption algorithm is to bring up, modify, improve or denied. However, the research of data security area will be continued and profitability. To understand the more mature algorithm and to improvethe algorithm are similarly substantial.

Key words: data encryption; cryptology; encryption algorithm

计算机工业的飞速发展使得世界范围内人计算机用户不断增多,计算机网络进一步推动了信息时代的到来。人们在享受信息交流之方便的同时,也遇到层出不穷的安全问题。我们要给我们的数据穿上“防弹衣”,防止被别人看到或恶意利用。因此,就迫切需要安全有效地保护那些机密数据不被窃取或篡改。

1 加密技术

1.1 加密技术概述

20世纪70年代,密码学逐步形成一门新的学科, 它的理论基础可以追溯到1949年Shammon写的《保密通讯的信息理论》。“电子政务”和“电子商务”的提出推动了密码学的发展,使得密码学开始成为一些学科的基础理论。近代密码学的研究异常热火,也大大地推动了它的发展进程。

现代密码学已发展成为集信息论、数论、代数、概率论、混沌等理论于一体,并与通信技术、计算机网络技术和微电子技术等科学技术紧密结合的一门综合性学科。――密码编码学 (Cryptography)和密码分析学(Ccryptanalytic)是密码学(Cryptology)的两个相互对立的分支。前者的目标是找到安全性能较高的算法和协议,来满足对信息进行加密或认证的要求。而后者的目标是破译密码或者伪造认证信息,实现对机密信息的窃取从而进行破坏活动。

当前密码学的研究大致分成两类:一类是基于数学密码理论与技术,包括公钥密码、公钥基础设施(PKI)、密钥管理、分组密码、序列密码、数字标识、认证码、身份识别、数字签名、虚拟专用网(VPN)技术等;另一类是基于非数学的密码理论与技术,包括量子密码、基于光学的加密理论与技术、基于生物特征的识别理论与技术等。

数据加密的基本思想是通过改变信息的表示形式来伪装需要保护的信息,使非授权者不能了解被保护信息的内容。明文是那些需要被伪装的信息;加密即伪装的过程;密文是最终产生的结果;密码算法就是在加密时使用的信息变换规则;加密者是对明文加密的人,接收者是接收明文的人;而破译者则是那些利用各种手段劫取信息的人。图1是加密通信的模型的一般示意图。

1) 对一个良构的加密算法最基本的要求是“保密”,也就是说密文要具不可识别性,进一步讲,它要有较好的抗攻击性。第二个要求是简单的密钥和加密算法,还要求注意误差的扩散;最后要求密文不能比原来的明文更长。其实在设计加密系统时,加密算法是可以公开的,密钥才是真正需要保密的。公开了加密算法不会从根本上让攻击者有利可图。只要破译者没有掌握密钥,就不能有效地识别明文。密码算法是相对稳定的。从这个方面来说,密码算法就是一个常量,而密钥则是一个变量。从理论上来说,任何一个加密算法都是可以破译的,但是破译者也要衡量破译的代价是否过多,也就是说有效的密码破译算法能否在有限资源的条件下及有限的时间内找到。假如破译需要100年甚至几千年,这样的密码毋庸置疑在现实意义上来说是安全的。总而言之,一个相对来说安全的密码即它的破译算法所需要的计算时间和计算能力的总和超出现实的范围,也就是现实的范围不能满足破译算法所需的时间复杂度和空间复杂度。

2) 设计加密系统时又可分为两种方式――对称性密钥体制及非对称性密钥体制。所谓对称性密钥体制就是加密与解密时都使用相同的密钥,而非对称性密钥体制则是加密与解密时使用不同的密钥。非对称性加密体制的典型代表是PGP公钥加密与RSA加密算法。对一个加密系统来说加密密钥(公钥)与解密密钥(私钥)是两个非相关性的概念。从数学理论范围来讲,任何算法都是可逆的,也就是说可以从算法结果导出源数据。除了那些没有意义的操作(如除法运算时除数为0的操作)则每一步操作的结果值都是确定。应用于加密系统的设计时的意义是设计的一个加密算法,它是应用无意义的操作的,则把公钥变换成为私钥的操作是相当困难的。因此,想要破译这样的非对称性的加密算法,找到唯一的密钥,只能用穷举法了。一个加密体制中的密钥可以看作是密码算法中的可变参数。从数学的角度来看,改变了密钥,实际上也就改变了明文与密文之间等价的数学函数关系,以此保证不同的密码对应不同的密文。

1.2 传统的加密算法

简单的,我们可能用一些带加密功能的软件来加密数据。虽然我们同时掌握原文和密文的时候,可能破译该加密算法,但也不是很轻松的;如果只知道密文则破译者是很难识别出明文的。 计算机系统性能对一个好的加密算法来说是不会有影响的,而且我们还能利用它的优势。例如, DBMS的软件包通常应用加密体制以禁用“复制”功能,从而保护用户的一些敏感数据;或者需要提供用户密码才能使用“复制”功能。另外,PKZIP软件不仅有压缩数据的功能还有加密数据的功能,这些功能无疑对用户是有好处的。

“置换表”算法是能满足加密需求的最简单一的种加密算法。每个数据段(通常是一个字节)对应着“置换表”中的一个值,密文就是由这些对应值组成的。加密和解密时都要用到这年表。80x86 系列CPU 中的“XLAT”的指令就是一个专门在硬件级来完成这种转换工作的指令。这是一个加密解密速度都很快的简单算法,它的致命弱点是这个“置换表”的安全问题,一旦这个表被破译者劫获,那这个加密方案就完全失败了。其实这种方法在计算机出现之前就已经被广泛的使用。如在电视剧《潜伏》中传递情报时所用的“密码册”,也就是我们说的“置换表”。这个“密码册”是一定要保管好的,否则后果不堪设想。

对原来的加密算法改进的方案是我们可以按伪随机的方式使用两个甚至更多的“置换表”来加密。这时,劫获者必须做若干回正确的变换才能破译密文,这将会增加破译的难度。比如,我们可以使用A表来置换明文中所有在奇数位置的数据,使用B表来置换所有在偶数位置的数据。除非劫获者确切地知道是用了几张表来转换的,否则即便他劫获密文,也很难破译它。

另一种经常在计算机加密中使用的方案是变换数据位置。但是,这样做的代价是执行时间的增加。这个算法的基本思想是在缓冲区中将读入的明文重新排序再输出就得到密文。还原明文的解密程序则做逆运算就可以了。一般情况下,我们会混合使用这个方法会和一些别的加密算法,这样就将大大增加破译难度,几乎不可能破译。举个简单的例子,通过变换字母顺序,listen 就变为silent,组成单词的字母既没增加也没减少,数据长度也没变,显然这是一个成功地满足加密要求的转换。

设计加密算法时可以利用计算机做字/字节循环移位和异或操作,这会进一步加大破译难度。把一个字或字节在一个数据段内左移或右移,通过这种循环移位的方法对明文加密的效率特别高。如果再使用XOR操作,即按位做异或操作,这样会使破译密码更加困难。

某些时候,我们需要确切地知道自己的数据是否被破坏或篡改了,这时就要用到校验码技术。将这些选定的校验码插入到数据段中。但是每次开始执行已加载到内存中的加密程序前,必须检查是否已被病毒感染,也要检查所有需要加密解密的文件!显然,这种工作流程是要秘密执行的,否则将会被病毒程序的编写者利用。所以,杀病毒软件中必须应用加密算法。

一种比较典型的校验数据方法就是循环冗余校验。它的工作原理是以数据块为单位,按位做循环移位和异或操作,等到一个16位或32位的校验和,如果在传输过程中如果丢失一位或两位数据,那校验和一定会出错。这种方式在文件的传输中已经应用了很久,如 XMODEM-CRC。 这种循环冗余校验方法已经成为标准,而且有详细的文档。

1.3DES加密算法

1977 年美国国家标准局公布了IBM 公司的一种数据加密算法,定名为DES( Data Encryption Standard数据加密标准)。

DES是一种分组密码。其主要思想是:

假设明文P 是 由0、1代码组成的长度为64 比特的符号串,密钥k 也是64 比特的0,1代码 。记

P=P1P2P3……P64

k=k1k2k3……k64

其中

Pi,ki=0 或1 (其中i=1,2,……,64)

DES 加密过程表达如下:

DES ( P ) =W -1. T16 . T15…… T1. W (P)

W 是初始变换, W -1是它的逆变换,

T16 , T15 ,……, T1是变换。

DES 解密过程表达如下:

DES =W.T1.T2……T16 .W

可以证明这两个式子是成立的:

DES-1(DES(P))=P

DES(DES-1 (P))=P

如:

明文: computer

密钥: program

用ASCII码表示为:

P=01100011 01101111 01101101 01110000

01110101 01110100 01100101 01110010

k =01110000 01110010 01101111 01100111

01110010 01100001 01101101

最后结果, 密文

01011000 10101000 00000110 10111000

01101001 111111110 10101110 00110011

(以上详细计算过程请参考相关书籍)

DES 加密方法最大特点是加密密钥与解密密钥是相同。显然, 密钥必须通过秘密的方式传递,存储时也需要特别注意安全问题。在实际过程中,这会带来很多的问题。如, 假设现有n 个用户, 则他们所需要的密钥个数是:C(n,2)=n/2*(n-1)

当 n=1000 时,C(1000,2)约500000(50 万)。

这么多的密钥,管理起来是很麻烦的。

1.4 RSA加密算法

目前,RSA加密体制是理论上最为成熟的一种公钥密码体制。广泛应用于数字签名、密钥管理和认证等方面。

RSA加密体制的核心思想是公钥和私钥的产生要借助于两个较大的素数。劫获公钥后想通过因数分解得到私钥的破译算法,运算复杂度超出现实范围,是不可行的。运行RSA加密算法本身也需要很长的时间,因此,RSA算法不适合加密大量的数据段。 通常现实中的加密算法都是基于RSA加密算法的。如用对称加密算法来加密数据,用RSA算法加密密钥。只要这个密钥是随机产生的,而且没有泄密出去,如果想得到这个密钥,只能通过私钥来解密。

假设现在要使用密钥“secret”加密一些数据。使用RSA公钥加密这个密钥,并把它放在明文中。为了区分数据和密钥,通常要加上特殊的符号。然后,加密正文使用的是对称加密算法,密钥就是“secret”。当接收者收到密文时,解密程序要先从密文中提取出密钥,然后用RSA私钥将它解密,接下来就可用密钥“secret”来解密数据了。数据这样通过可靠高效的加密之后就能进行安全地传输和解密。

可利用下面的站点参考一些简单的基于RSA算法的加密算法:

ftp://ftp.funet.fi/pub/crypt/cryptography/asymmetric/rsa

1.5 多步加密算法

大约10年前公布的一种新的加密算法――多步加密算法,安全级别很高。

这个算法的基本过程是,第一步用一个128位的密钥生成一个随机数字序列,使用这个随机数序列来生成密码转换表。由于开始时的数字序列具有重复和随机的特点,可以保证这个转换表的随机性,表中是256个介于0~255之间的数字。第二步在一个矩阵把256个随机数进行排序。这个表中其余的数是由随机数产生器来生成的,这样得到不同的多张表。然后利用“shotgun technique”技术来生成解码表。

显然,开始的那个数据需要一个“种子”才能正常进行加密,而这个“种子”将会使密文的长度增加。或者,可以那个128位的密码,或是它的CRC校验和。

加密时可以使用Fibonacci数列来产生伪随机序列,而种子是一个64位的数,与第三个双字做异或操作。

这种多步加密算法每一步加密都与上一步的数据有关,这样会增加密文的长度。另外,加密时所用的第一个“种子”对整个解密过程是相当重要的,要保管好。

1.6 其它加密算法

近年来,混沌理论的应用和生物学理论的发展,产生了混沌密码学及基于生物特征的人工神经网络加密方法。

混沌密码学是一个交叉学科的研究领域,它综合应用了混沌理论、密码学、通信工程等方面的理论。混沌密码学具体的研究有混沌信号的状态空间重构、混沌序列的频谱分析、混沌吸引子维数的提取、李雅普诺夫指数的算法等研究;同时也有直接服务于混沌密码学的应用研究,如混沌生成及其模型的建立、混沌信号的处理以及混沌信号在工程中的应用。这些研究内容相互联系,相互支持,混沌算法理论方面的研究为应用研究提供理论基础,而服务于应用的研究又对混沌算法理论方面不断地提出研究课题,从而对其起到巨大的推动作用。

基于生物特征的人工神经网络方法在数据加密中的应用已初见端倪。利用人体在身材、指纹、唇印、口音、脚步声、体味、视网膜、血型、遗传因子、笔迹等方面的唯一性来确保身份的唯一性。

这种新型的数据加密方法有如下几个特点:1) 范围广泛:能快速实现任何的非线性变换来满足各种加密算法。2) 较高的灵活度:可以灵活地选择密钥及密锁。3) 安全级别高:要破解具有极高复杂性的密锁与密钥,所需的计算空间复杂度和时间复杂度相当可观,故具有较高的安全级别。

2 结论

在现实生活中,信息作为一种资源,在社会生产、生活中的作用日益显著,信息安全问题已成为信息化社会的焦点与难点,而数据加密技术则是信息安全的一个核心问题。随着计算机科学技术的发展,信息和信息技术对密码学提出了越来越高的要求,各种加密算法陆续的被提出、应用、否定和改进。

数据加密领域的研究将会不断更新和改进的。

参考文献:

[1] 胡予濮,张玉清,肖国镇.对称密码学[M].北京:机械工业出版社,2002.

[2] 冯登国.密码分析学[M].北京:清华大学出版社,2000.

数据加密技术篇(6)

中图分类号:TP309文献标识码:A文章编号:1009-3044(2007)15-30696-01

On the Data Encryption Technology

YANG Jin-hua

(Xi'an Railway Vocational and Technical College of Computer Studies,Xi'an 710014,China)

Abstract:This paper introduced a data encryption method and the general public key encryption algorithm based on the method, introduced a multi-step encryption algorithm.

Key words:encryption, decryption, algorithm, multi-step encryption

1 引言

随着网络技术的发展,网络安全也就成为当今网络社会关注的焦点,病毒、黑客程序、邮件炸弹、远程侦听等这一切都无不让人胆战心惊,谈网色变,无所适从。 现代电脑的数据加密技术就是适应了网络安全的需要而应运产生的,它为我们进行一般的电子商务活动提供了安全保障。

2 常见的数据加密算法

最好的加密算法不仅对系统性能几乎没有影响,并且还可以产生其他内在的优点。例如,我们在压缩、解压文件时用的pkzip软件,它既压缩数据又加密数据。又如,数据库管理系统的一些软件包也包含一些加密方法以使复制文件这一功能对一些敏感数据是无效的,需要用户的密码方可复制。所有这些加密算法都要有高效的加密和解密能力。

在所有的加密算法中最简单的一种就是“转换表”算法。每一个数据段(总是一个字节)对应着“转换表”中的一个偏移量,偏移量所对应的值就是加密后输出的数据。加密程序和解密程序都需要一个这样的“置换表”。这种加密算法比较简单,加密解密速度都很快,但是如果这个“转换表”一旦被对方获得,那么这个加密方案就完全被识破了。对这种“转换表”方式的一个改进,就是使用两个或者更多的“转换表”,这些表都是基于数据流中字节的位置,或者基于数据流本身。我们或者通过使用更多的“转换表”,并且按伪随机的方式使用每个表,或者对所有的偶数位置的数据使用一张表,对所有的奇数位置使用另一张表,即使黑客获得了明文和密文,破译这个加密方案也是非常困难的。

与使用“置换表”相类似,“变换数据位置”也在计算机加密中使用。但是,这需要更多的执行时间。从输入中读入明文放到一个数据缓冲存贮器中,再在数据缓冲存贮器中对他们重排序,然后按这个顺序再输出。解密程序按相反的顺序还原数据。这种方法总是和一些别的加密算法混合使用,这就使得破译变的特别的困难,几乎有些不可能了。例如,有这样一个词slient,变换起字母的顺序,可以变为listen,但所有的字母都没有变化,但是字母之间的顺序已经变化了。

还有一种只有计算机可以做的加密算法,就是字/字节循环移位和异或操作。如果我们把一个字/字节在一个数据流内做循环移位,使用多次的左移或右移,就可以迅速的产生一个加密的数据流。这种方法是很好的。如果再使用异或操作,按位做异或操作,就使破译密码更加困难了。如果再使用伪随机的方法,即首先使用fibbonaci数列,对数列所产生的数做模运算,得到一个结果,然后再循环移位n次。将使破译密码变的几乎不可能!

3 使用公钥、私钥概念的加密算法

还可以借助密码或密钥的概念,来加密明文,不同的密码或密钥产生不同的密文。加密密钥,即公钥,与解密密钥,即私钥,是不同的。从数学理论上讲,几乎没有真正不可逆的算法存在。例如,对于一个输入‘a’,执行一个操作得到结果‘b’,那么我们可以基于‘b’,做一个相对应的操作,导出输入‘a’。在一些情况下,对于每一种操作,我们可以得到一个确定的值,或者该操作没有定义(比如,除数为0)。对于一个没有定义的操作来说,基于加密算法,找到那个唯一的密钥,唯一的方法只能是反复的试验,而这需要大量的处理时间。

Rsa加密算法,使用了两个非常大的素数来产生公钥和私钥。即使从一个公钥中通过因数分解可以得到私钥,但这个运算所包含的计算量是非常巨大的,以至于在现实上是不可行的。加密算法本身也是很慢的,这使得使用Rsa算法加密大量的数据变的有些不可行。现实中一些加密算法都是基于Rsa加密算法。Pgp算法(以及大多数基于rsa算法的加密方法)使用公钥来加密一个对称加密算法的密钥,然后再利用一个快速的对称加密算法来加密数据。这个对称算法的密钥是随机产生的,是保密的。因此,得到这个密钥的唯一方法就是使用私钥来解密。我们举一个例子:假定现在要加密一些数据使用密钥‘abc’。当对方收到时,解密程序找到加密过的密钥,并利用Rsa私钥解密出来,然后再确定出数据的开始位置,利用密钥‘abc’来解密数据。这样就使得一个可靠的经过高效加密的数据安全传输和解密。

4 新的多步加密算法

1998年6月1日正式公布了一种新的多步加密算法。其算法是,假设我们用128位密钥,首先产生一个可重复的但高度随机化的伪随机的数字的序列来做为“种子”。然后再用随机数产生器产生256个随机数放在一个距阵中,表中的数字在0到255之间,使用最初的位置来产生一个表,再对他们进行随意排序又产生一个表,下一步使用“shortgun technique”技术来产生解码表。由于第一个“种子”是随机数,第二步产生的256个字节的随机数使用的是二次伪随机,同时还获得了两张转换表。基本的加密解密是如下这样工作是,前一个字节密文是这个256字节的表的索引。如果想提高加密效果,还可以使用多余8位的值,甚至使用校验和或者crc算法来产生索引字节。假定这个表是256*256的数组,将会是下面的样子:crypto1=a[crypto0][value],变量‘crypto1’是加密后的数据,‘crypto0’是前一个加密数据(或者是前面几个加密数据的一个函数值)。据说这种加密算法几乎是不可能被破译的。

5 结论

数据加密肯定是可以被破解的,但需要一定的时间。只要做

到在一个特定时间段内的安全就行。也就是说,密文的破解应该做到足够的困难,尤其是短时间内。这样就确保重要数据只能被有相应权限的人看到,并且要确保数据在传输的过程中不会被篡改,截取。

参考文献:

数据加密技术篇(7)

 

【摘要】该文简要介绍了数据加密的一般方法及基于公钥加密算法的方法与步骤,较为详细介绍了多步加密算法的原理与算法。

【关键词】加密算法    密钥    多步加密

 

A New Data Encryption TechniquesPan xiaozhong  Yang xiaoyuan  Wang faneng  Sun jun

(Electronic Technology Department, Engineering College of

Armed Police Force  Xi’an   710086) 

【abstract】The general method about date encryption is introduced in this paper as well as method and steps based on public key encrypted algorithm. The principle and algorithm of multi-step encrypted algorithm is detailedly introduced too. And an applied program about the multi-step encrypted algorithm is given out in this paper.

【key word】encrypted algorithm    secret key   multi-step encryption

 

我们处在一个信息时代,人们需要一种强有力的安全措施来保护机密数据不被他人窃取或篡改。数据加密与解密从宏观上讲是非常简单的。加密与解密的一些方法是非常直接的,很容易掌握。因此,可以很方便地对机密数据进行加密和解密。

 

1、数据加密方法

   在传统上,我们有几种方法来加密数据流。所有这些方法都可以用软件很容易的实现,但是当我们只知道密文的时候,是不容易破译这些加密算法的(当同时有原文和密文时,破译加密算法虽然也不是很容易,但已经是可能的了)。最好的加密算法对系统性能几乎没有影响,并且还可以带来其他内在的优点。例如,大家都知道的pkzip,它既压缩数据又加密数据。又如,dbms的一些软件包总是包含一些加密方法以使复制文件这一功能对一些敏感数据是无效的,或者需要用户的密码。所有这些加密算法都要有高效的加密和解密能力。

    在所有的加密算法中最简单的一种就是“置换表”算法,这种算法也能很好达到加密的需要。每一个数据段(总是一个字节)对应着“置换表”中的一个偏移量,偏移量所对应的值就输出成为加密后的文件。加密程序和解密程序都需要一个这样的“置换表”。事实上,80x86 cpu系列就有一个指令‘xlat’在硬件级来完成这样的工作。这种加密算法比较简单,加密解密速度都很快,但是一旦这个“置换表”被对方获得,那这个加密方案就完全被识破了。更进一步讲,这种加密算法对于黑客破译来讲是相当直接的,只要找到一个“置换表”就可以了。这种方法在计算机出现之前就已经被广泛地使用。

    对这种“置换表”方式的一个改进就是使用2个或者更多的“置换表”,这些表都是基于数据流中字节的位置的,或者基于数据流本身。这时,破译变得更加困难,因为黑客必须正确地做几次变换。通过使用更多的“置换表”,并且按伪随机的方式使用每个表,这种改进的加密方法已经变的很难破译。比如,我们可以对所有的偶数位置的数据使用a表,对所有的奇数位置使用b表,即使黑客获得了明文和密文,他想破译这个加密方案也是非常困难的,除非黑客确切的知道用了两张表。

   与使用“置换表”相类似,“变换数据位置”也在计算机加密中使用。但是,这需要更多的执行时间。从输入中读入明文放到一个buffer中,再在buffer中对他们重排序,然后按这个顺序再输出。解密程序按相反的顺序还原数据。这种方法总是和一些别的加密算法混合使用,这就使得破译变得特别的困难,几乎有些不可能了。例如,有这样一个词,变换其字母的顺序,slient 可以变为listen,但所有的字母都没有变化,没有增加也没有减少,但是字母之间的顺序已经变化了。

   但是,还有一种更好的加密算法,只有计算机可以做,就是字/字节循环移位和xor操作。如果我们把一个字或字节在一个数据流内做循环移位,使用多个或变化的方向(左移或右移),就可以迅速的产生一个加密的数据流。这种方法是很好的,破译它就更加困难。而且,更进一步的是,如果再使用xor操作,按位做异或操作,就使破译密码更加困难了。如果再使用伪随机的方法,这涉及到要产生一系列的数字,我们可以使用fibbonaci数列。对数列所产生的数做模运算(例如模3),得到一个结果,然后循环移位这个结果的次数,将使破译次密码变得几乎不可能!但是,使用fibbonaci数列这种伪随机的方式所产生的密码对我们的解密程序来讲是非常容易的。

    在一些情况下,我们想能够知道数据是否已经被篡改了或被破坏了,这时就需要产生一些校验码,并且把这些校验码插入到数据流中。这样做对数据的防伪与程序本身都是有好处的。但是感染计算机程序的病毒才不会在意这些数据或程序是否加过密,是否有数字签名。所以,加密程序在每次load到内存要开始执行时,都要检查一下本身是否被病毒感染,对与需要加、解密的文件都要做这种检查!很自然,这样一种方法体制应该保密的,因为病毒程序的编写者将会利用这些来破坏别人的程序或数据。因此,在一些反病毒或杀病毒软件中一定要使用加密技术。

循环冗余校验是一种典型的校验数据的方法。对于每一个数据块,它使用位循环移位和xor操作来产生一个16位或32位的校验和 ,这使得丢失一位或两个位的错误一定会导致校验和出错。这种方式很久以来就应用于文件的传输,例如 xmodem-crc。 这是方法已经成为标准,而且有详细的文档。但是,基于标准crc算法的一种修改算法对于发现加密数据块中的错误和文件是否被病毒感染是很有效的。

 

数据加密技术篇(8)

在传统上,我们有几种方法来加密数据流。所有这些方法都可以用软件很容易的实现,但是当我们只知道密文的时候,是不容易破译这些加密算法的(当同时有原文和密文时,破译加密算法虽然也不是很容易,但已经是可能的了)。最好的加密算法对系统性能几乎没有影响,并且还可以带来其他内在的优点。例如,大家都知道的pkzip,它既压缩数据又加密数据。又如,dbms的一些软件包总是包含一些加密方法以使复制文件这一功能对一些敏感数据是无效的,或者需要用户的密码。所有这些加密算法都要有高效的加密和解密能力。

幸运的是,在所有的加密算法中最简单的一种就是“置换表”算法,这种算法也能很好达到加密的需要。每一个数据段(总是一个字节)对应着“置换表”中的一个偏移量,偏移量所对应的值就输出成为加密后的文件。加密程序和解密程序都需要一个这样的“置换表”。事实上,80x86cpu系列就有一个指令‘xlat’在硬件级来完成这样的工作。这种加密算法比较简单,加密解密速度都很快,但是一旦这个“置换表”被对方获得,那这个加密方案就完全被识破了。更进一步讲,这种加密算法对于黑客破译来讲是相当直接的,只要找到一个“置换表”就可以了。这种方法在计算机出现之前就已经被广泛的使用。

对这种“置换表”方式的一个改进就是使用2个或者更多的“置换表”,这些表都是基于数据流中字节的位置的,或者基于数据流本身。这时,破译变的更加困难,因为黑客必须正确的做几次变换。通过使用更多的“置换表”,并且按伪随机的方式使用每个表,这种改进的加密方法已经变的很难破译。比如,我们可以对所有的偶数位置的数据使用a表,对所有的奇数位置使用b表,即使黑客获得了明文和密文,他想破译这个加密方案也是非常困难的,除非黑客确切的知道用了两张表。

与使用“置换表”相类似,“变换数据位置”也在计算机加密中使用。但是,这需要更多的执行时间。从输入中读入明文放到一个buffer中,再在buffer中对他们重排序,然后按这个顺序再输出。解密程序按相反的顺序还原数据。这种方法总是和一些别的加密算法混合使用,这就使得破译变的特别的困难,几乎有些不可能了。例如,有这样一个词,变换起字母的顺序,slient可以变为listen,但所有的字母都没有变化,没有增加也没有减少,但是字母之间的顺序已经变化了。

但是,还有一种更好的加密算法,只有计算机可以做,就是字/字节循环移位和xor操作。如果我们把一个字或字节在一个数据流内做循环移位,使用多个或变化的方向(左移或右移),就可以迅速的产生一个加密的数据流。这种方法是很好的,破译它就更加困难!而且,更进一步的是,如果再使用xor操作,按位做异或操作,就就使破译密码更加困难了。如果再使用伪随机的方法,这涉及到要产生一系列的数字,我们可以使用fibbonaci数列。对数列所产生的数做模运算(例如模3),得到一个结果,然后循环移位这个结果的次数,将使破译次密码变的几乎不可能!但是,使用fibbonaci数列这种伪随机的方式所产生的密码对我们的解密程序来讲是非常容易的。

在一些情况下,我们想能够知道数据是否已经被篡改了或被破坏了,这时就需要产生一些校验码,并且把这些校验码插入到数据流中。这样做对数据的防伪与程序本身都是有好处的。但是感染计算机程序的病毒才不会在意这些数据或程序是否加过密,是否有数字签名。所以,加密程序在每次load到内存要开始执行时,都要检查一下本身是否被病毒感染,对与需要加、解密的文件都要做这种检查!很自然,这样一种方法体制应该保密的,因为病毒程序的编写者将会利用这些来破坏别人的程序或数据。因此,在一些反病毒或杀病毒软件中一定要使用加密技术。

循环冗余校验是一种典型的校验数据的方法。对于每一个数据块,它使用位循环移位和xor操作来产生一个16位或32位的校验和,这使得丢失一位或两个位的错误一定会导致校验和出错。这种方式很久以来就应用于文件的传输,例如xmodem-crc。这是方法已经成为标准,而且有详细的文档。但是,基于标准crc算法的一种修改算法对于发现加密数据块中的错误和文件是否被病毒感染是很有效的。二.基于公钥的加密算法

一个好的加密算法的重要特点之一是具有这种能力:可以指定一个密码或密钥,并用它来加密明文,不同的密码或密钥产生不同的密文。这又分为两种方式:对称密钥算法和非对称密钥算法。所谓对称密钥算法就是加密解密都使用相同的密钥,非对称密钥算法就是加密解密使用不同的密钥。非常著名的pgp公钥加密以及rsa加密方法都是非对称加密算法。加密密钥,即公钥,与解密密钥,即私钥,是非常的不同的。从数学理论上讲,几乎没有真正不可逆的算法存在。例如,对于一个输入‘a’执行一个操作得到结果‘b’,那么我们可以基于‘b’,做一个相对应的操作,导出输入‘a’。在一些情况下,对于每一种操作,我们可以得到一个确定的值,或者该操作没有定义(比如,除数为0)。对于一个没有定义的操作来讲,基于加密算法,可以成功地防止把一个公钥变换成为私钥。因此,要想破译非对称加密算法,找到那个唯一的密钥,唯一的方法只能是反复的试验,而这需要大量的处理时间。

rsa加密算法使用了两个非常大的素数来产生公钥和私钥。即使从一个公钥中通过因数分解可以得到私钥,但这个运算所包含的计算量是非常巨大的,以至于在现实上是不可行的。加密算法本身也是很慢的,这使得使用rsa算法加密大量的数据变的有些不可行。这就使得一些现实中加密算法都基于rsa加密算法。pgp算法(以及大多数基于rsa算法的加密方法)使用公钥来加密一个对称加密算法的密钥,然后再利用一个快速的对称加密算法来加密数据。这个对称算法的密钥是随机产生的,是保密的,因此,得到这个密钥的唯一方法就是使用私钥来解密。

我们举一个例子:假定现在要加密一些数据使用密钥‘12345’。利用rsa公钥,使用rsa算法加密这个密钥‘12345’,并把它放在要加密的数据的前面(可能后面跟着一个分割符或文件长度,以区分数据和密钥),然后,使用对称加密算法加密正文,使用的密钥就是‘12345’。当对方收到时,解密程序找到加密过的密钥,并利用rsa私钥解密出来,然后再确定出数据的开始位置,利用密钥‘12345’来解密数据。这样就使得一个可靠的经过高效加密的数据安全地传输和解密。

一些简单的基于rsa算法的加密算法可在下面的站点找到:

ftp://ftp.funet.fi/pub/crypt/cryptography/asymmetric/rsa

三.一个崭新的多步加密算法

现在又出现了一种新的加密算法,据说是几乎不可能被破译的。这个算法在1998年6月1日才正式公布的。下面详细的介绍这个算法:

使用一系列的数字(比如说128位密钥),来产生一个可重复的但高度随机化的伪随机的数字的序列。一次使用256个表项,使用随机数序列来产生密码转表,如下所示:

把256个随机数放在一个距阵中,然后对他们进行排序,使用这样一种方式(我们要记住最初的位置)使用最初的位置来产生一个表,随意排序的表,表中的数字在0到255之间。如果不是很明白如何来做,就可以不管它。但是,下面也提供了一些原码(在下面)是我们明白是如何来做的。现在,产生了一个具体的256字节的表。让这个随机数产生器接着来产生这个表中的其余的数,以至于每个表是不同的。下一步,使用"shotguntechnique"技术来产生解码表。基本上说,如果a映射到b,那么b一定可以映射到a,所以b[a[n]]=n.(n是一个在0到255之间的数)。在一个循环中赋值,使用一个256字节的解码表它对应于我们刚才在上一步产生的256字节的加密表。

使用这个方法,已经可以产生这样的一个表,表的顺序是随机,所以产生这256个字节的随机数使用的是二次伪随机,使用了两个额外的16位的密码.现在,已经有了两张转换表,基本的加密解密是如下这样工作的。前一个字节密文是这个256字节的表的索引。或者,为了提高加密效果,可以使用多余8位的值,甚至使用校验和或者crc算法来产生索引字节。假定这个表是256*256的数组,将会是下面的样子:crypto1=a[crypto0][value]

变量''''crypto1''''是加密后的数据,''''crypto0''''是前一个加密数据(或着是前面几个加密数据的一个函数值)。很自然的,第一个数据需要一个“种子”,这个“种子”是我们必须记住的。如果使用256*256的表,这样做将会增加密文的长度。或者,可以使用你产生出随机数序列所用的密码,也可能是它的crc校验和。顺便提及的是曾作过这样一个测试:使用16个字节来产生表的索引,以128位的密钥作为这16个字节的初始的"种子"。然后,在产生出这些随机数的表之后,就可以用来加密数据,速度达到每秒钟100k个字节。一定要保证在加密与解密时都使用加密的值作为表的索引,而且这两次一定要匹配。

加密时所产生的伪随机序列是很随意的,可以设计成想要的任何序列。没有关于这个随机序列的详细的信息,解密密文是不现实的。例如:一些ascii码的序列,如“eeeeeeee"可能被转化成一些随机的没有任何意义的乱码,每一个字节都依赖于其前一个字节的密文,而不是实际的值。对于任一个单个的字符的这种变换来说,隐藏了加密数据的有效的真正的长度。

如果确实不理解如何来产生一个随机数序列,就考虑fibbonacci数列,使用2个双字(64位)的数作为产生随机数的种子,再加上第三个双字来做xor操作。这个算法产生了一系列的随机数。算法如下:

unsignedlongdw1,dw2,dw3,dwmask;

inti1;

unsignedlongarandom[256];

dw1={seed#1};

dw2={seed#2};

dwmask={seed#3};

//thisgivesyou332-bit"seeds",or96bitstotal

for(i1=0;i1<256;i1++)

{

dw3=(dw1+dw2)^dwmask;

arandom[i1]=dw3;

dw1=dw2;

dw2=dw3;

}

如果想产生一系列的随机数字,比如说,在0和列表中所有的随机数之间的一些数,就可以使用下面的方法:

int__cdeclmysortproc(void*p1,void*p2)

{

unsignedlong**pp1=(unsignedlong**)p1;

unsignedlong**pp2=(unsignedlong**)p2;

if(**pp1<**pp2)

return(-1);

elseif(**pp1>*pp2)

return(1);

return(0);

}

...

inti1;

unsignedlong*aprandom[256];

unsignedlongarandom[256];//samearrayasbefore,inthiscase

intaresult[256];//resultsgohere

for(i1=0;i1<256;i1++)

{

aprandom[i1]=arandom+i1;

}

//nowsortit

qsort(aprandom,256,sizeof(*aprandom),mysortproc);

//finalstep-offsetsforpointersareplacedintooutputarray

for(i1=0;i1<256;i1++)

{

aresult[i1]=(int)(aprandom[i1]-arandom);

}

...

变量''''aresult''''中的值应该是一个排过序的唯一的一系列的整数的数组,整数的值的范围均在0到255之间。这样一个数组是非常有用的,例如:对一个字节对字节的转换表,就可以很容易并且非常可靠的来产生一个短的密钥(经常作为一些随机数的种子)。这样一个表还有其他的用处,比如说:来产生一个随机的字符,计算机游戏中一个物体的随机的位置等等。上面的例子就其本身而言并没有构成一个加密算法,只是加密算法一个组成部分。

作为一个测试,开发了一个应用程序来测试上面所描述的加密算法。程序本身都经过了几次的优化和修改,来提高随机数的真正的随机性和防止会产生一些短的可重复的用于加密的随机数。用这个程序来加密一个文件,破解这个文件可能会需要非常巨大的时间以至于在现实上是不可能的。

四.结论:

由于在现实生活中,我们要确保一些敏感的数据只能被有相应权限的人看到,要确保信息在传输的过程中不会被篡改,截取,这就需要很多的安全系统大量的应用于政府、大公司以及个人系统。数据加密是肯定可以被破解的,但我们所想要的是一个特定时期的安全,也就是说,密文的破解应该是足够的困难,在现实上是不可能的,尤其是短时间内。

参考文献:

1.pgp!/

cyberknights(newlink)/cyberkt/

(oldlink:/~merlin/knights/)

2.cryptochamberjyu.fi/~paasivir/crypt/

3.sshcryptographa-z(includesinfoonsslandhttps)ssh.fi/tech/crypto/

4.funet''''cryptologyftp(yetanotherfinlandresource)ftp://ftp.funet.fi/pub/crypt/

agreatenigmaarticle,howthecodewasbrokenbypolishscientists

/nbrass/1enigma.htm

5.ftpsiteinukftp://sable.ox.ac.uk/pub/crypto/

6.australianftpsiteftp://ftp.psy.uq.oz.au/pub/

7.replayassociatesftparchiveftp://utopia.hacktic.nl/pub/replay/pub/crypto/

数据加密技术篇(9)

在传统上,我们有几种方法来加密数据流。所有这些方法都可以用软件很容易的实现,但是当我们只知道密文的时候,是不容易破译这些加密算法的(当同时有原文和密文时,破译加密算法虽然也不是很容易,但已经是可能的了)。最好的加密算法对系统性能几乎没有影响,并且还可以带来其他内在的优点。例如,大家都知道的pkzip,它既压缩数据又加密数据。又如,dbms的一些软件包总是包含一些加密方法以使复制文件这一功能对一些敏感数据是无效的,或者需要用户的密码。所有这些加密算法都要有高效的加密和解密能力。

幸运的是,在所有的加密算法中最简单的一种就是“置换表”算法,这种算法也能很好达到加密的需要。每一个数据段(总是一个字节)对应着“置换表”中的一个偏移量,偏移量所对应的值就输出成为加密后的文件。加密程序和解密程序都需要一个这样的“置换表”。事实上,80x86cpu系列就有一个指令‘xlat’在硬件级来完成这样的工作。这种加密算法比较简单,加密解密速度都很快,但是一旦这个“置换表”被对方获得,那这个加密方案就完全被识破了。更进一步讲,这种加密算法对于黑客破译来讲是相当直接的,只要找到一个“置换表”就可以了。这种方法在计算机出现之前就已经被广泛的使用。

对这种“置换表”方式的一个改进就是使用2个或者更多的“置换表”,这些表都是基于数据流中字节的位置的,或者基于数据流本身。这时,破译变的更加困难,因为黑客必须正确的做几次变换。通过使用更多的“置换表”,并且按伪随机的方式使用每个表,这种改进的加密方法已经变的很难破译。比如,我们可以对所有的偶数位置的数据使用a表,对所有的奇数位置使用b表,即使黑客获得了明文和密文,他想破译这个加密方案也是非常困难的,除非黑客确切的知道用了两张表。

与使用“置换表”相类似,“变换数据位置”也在计算机加密中使用。但是,这需要更多的执行时间。从输入中读入明文放到一个buffer中,再在buffer中对他们重排序,然后按这个顺序再输出。解密程序按相反的顺序还原数据。这种方法总是和一些别的加密算法混合使用,这就使得破译变的特别的困难,几乎有些不可能了。例如,有这样一个词,变换起字母的顺序,slient可以变为listen,但所有的字母都没有变化,没有增加也没有减少,但是字母之间的顺序已经变化了。

但是,还有一种更好的加密算法,只有计算机可以做,就是字/字节循环移位和xor操作。如果我们把一个字或字节在一个数据流内做循环移位,使用多个或变化的方向(左移或右移),就可以迅速的产生一个加密的数据流。这种方法是很好的,破译它就更加困难!而且,更进一步的是,如果再使用xor操作,按位做异或操作,就就使破译密码更加困难了。如果再使用伪随机的方法,这涉及到要产生一系列的数字,我们可以使用fibbonaci数列。对数列所产生的数做模运算(例如模3),得到一个结果,然后循环移位这个结果的次数,将使破译次密码变的几乎不可能!但是,使用fibbonaci数列这种伪随机的方式所产生的密码对我们的解密程序来讲是非常容易的。

在一些情况下,我们想能够知道数据是否已经被篡改了或被破坏了,这时就需要产生一些校验码,并且把这些校验码插入到数据流中。这样做对数据的防伪与程序本身都是有好处的。但是感染计算机程序的病毒才不会在意这些数据或程序是否加过密,是否有数字签名。所以,加密程序在每次load到内存要开始执行时,都要检查一下本身是否被病毒感染,对与需要加、解密的文件都要做这种检查!很自然,这样一种方法体制应该保密的,因为病毒程序的编写者将会利用这些来破坏别人的程序或数据。因此,在一些反病毒或杀病毒软件中一定要使用加密技术。

循环冗余校验是一种典型的校验数据的方法。对于每一个数据块,它使用位循环移位和xor操作来产生一个16位或32位的校验和,这使得丢失一位或两个位的错误一定会导致校验和出错。这种方式很久以来就应用于文件的传输,例如xmodem-crc。这是方法已经成为标准,而且有详细的文档。但是,基于标准crc算法的一种修改算法对于发现加密数据块中的错误和文件是否被病毒感染是很有效的。

二.基于公钥的加密算法

一个好的加密算法的重要特点之一是具有这种能力:可以指定一个密码或密钥,并用它来加密明文,不同的密码或密钥产生不同的密文。这又分为两种方式:对称密钥算法和非对称密钥算法。所谓对称密钥算法就是加密解密都使用相同的密钥,非对称密钥算法就是加密解密使用不同的密钥。非常著名的pgp公钥加密以及rsa加密方法都是非对称加密算法。加密密钥,即公钥,与解密密钥,即私钥,是非常的不同的。从数学理论上讲,几乎没有真正不可逆的算法存在。例如,对于一个输入‘a’执行一个操作得到结果‘b’,那么我们可以基于‘b’,做一个相对应的操作,导出输入‘a’。在一些情况下,对于每一种操作,我们可以得到一个确定的值,或者该操作没有定义(比如,除数为0)。对于一个没有定义的操作来讲,基于加密算法,可以成功地防止把一个公钥变换成为私钥。因此,要想破译非对称加密算法,找到那个唯一的密钥,唯一的方法只能是反复的试验,而这需要大量的处理时间。

rsa加密算法使用了两个非常大的素数来产生公钥和私钥。即使从一个公钥中通过因数分解可以得到私钥,但这个运算所包含的计算量是非常巨大的,以至于在现实上是不可行的。加密算法本身也是很慢的,这使得使用rsa算法加密大量的数据变的有些不可行。这就使得一些现实中加密算法都基于rsa加密算法。pgp算法(以及大多数基于rsa算法的加密方法)使用公钥来加密一个对称加密算法的密钥,然后再利用一个快速的对称加密算法来加密数据。这个对称算法的密钥是随机产生的,是保密的,因此,得到这个密钥的唯一方法就是使用私钥来解密。

我们举一个例子:假定现在要加密一些数据使用密钥‘12345’。利用rsa公钥,使用rsa算法加密这个密钥‘12345’,并把它放在要加密的数据的前面(可能后面跟着一个分割符或文件长度,以区分数据和密钥),然后,使用对称加密算法加密正文,使用的密钥就是‘12345’。当对方收到时,解密程序找到加密过的密钥,并利用rsa私钥解密出来,然后再确定出数据的开始位置,利用密钥‘12345’来解密数据。这样就使得一个可靠的经过高效加密的数据安全地传输和解密。

一些简单的基于rsa算法的加密算法可在下面的站点找到:

ftp://ftp.funet.fi/pub/crypt/cryptography/asymmetric/rsa

三.一个崭新的多步加密算法

现在又出现了一种新的加密算法,据说是几乎不可能被破译的。这个算法在1998年6月1日才正式公布的。下面详细的介绍这个算法:

使用一系列的数字(比如说128位密钥),来产生一个可重复的但高度随机化的伪随机的数字的序列。一次使用256个表项,使用随机数序列来产生密码转表,如下所示:

把256个随机数放在一个距阵中,然后对他们进行排序,使用这样一种方式(我们要记住最初的位置)使用最初的位置来产生一个表,随意排序的表,表中的数字在0到255之间。如果不是很明白如何来做,就可以不管它。但是,下面也提供了一些原码(在下面)是我们明白是如何来做的。现在,产生了一个具体的256字节的表。让这个随机数产生器接着来产生这个表中的其余的数,以至于每个表是不同的。下一步,使用"shotguntechnique"技术来产生解码表。基本上说,如果a映射到b,那么b一定可以映射到a,所以b[a[n]]=n.(n是一个在0到255之间的数)。在一个循环中赋值,使用一个256字节的解码表它对应于我们刚才在上一步产生的256字节的加密表。

使用这个方法,已经可以产生这样的一个表,表的顺序是随机,所以产生这256个字节的随机数使用的是二次伪随机,使用了两个额外的16位的密码.现在,已经有了两张转换表,基本的加密解密是如下这样工作的。前一个字节密文是这个256字节的表的索引。或者,为了提高加密效果,可以使用多余8位的值,甚至使用校验和或者crc算法来产生索引字节。假定这个表是256*256的数组,将会是下面的样子:

crypto1=a[crypto0][value]

变量''''crypto1''''是加密后的数据,''''crypto0''''是前一个加密数据(或着是前面几个加密数据的一个函数值)。很自然的,第一个数据需要一个“种子”,这个“种子”是我们必须记住的。如果使用256*256的表,这样做将会增加密文的长度。或者,可以使用你产生出随机数序列所用的密码,也可能是它的crc校验和。顺便提及的是曾作过这样一个测试:使用16个字节来产生表的索引,以128位的密钥作为这16个字节的初始的"种子"。然后,在产生出这些随机数的表之后,就可以用来加密数据,速度达到每秒钟100k个字节。一定要保证在加密与解密时都使用加密的值作为表的索引,而且这两次一定要匹配。

加密时所产生的伪随机序列是很随意的,可以设计成想要的任何序列。没有关于这个随机序列的详细的信息,解密密文是不现实的。例如:一些ascii码的序列,如“eeeeeeee"可能被转化成一些随机的没有任何意义的乱码,每一个字节都依赖于其前一个字节的密文,而不是实际的值。对于任一个单个的字符的这种变换来说,隐藏了加密数据的有效的真正的长度。

如果确实不理解如何来产生一个随机数序列,就考虑fibbonacci数列,使用2个双字(64位)的数作为产生随机数的种子,再加上第三个双字来做xor操作。这个算法产生了一系列的随机数。算法如下:

unsignedlongdw1,dw2,dw3,dwmask;

inti1;

unsignedlongarandom[256];

dw1={seed#1};

dw2={seed#2};

dwmask={seed#3};

//thisgivesyou332-bit"seeds",or96bitstotal

for(i1=0;i1<256;i1++)

{

dw3=(dw1+dw2)^dwmask;

arandom[i1]=dw3;

dw1=dw2;

dw2=dw3;

}

如果想产生一系列的随机数字,比如说,在0和列表中所有的随机数之间的一些数,就可以使用下面的方法:

int__cdeclmysortproc(void*p1,void*p2)

{

unsignedlong**pp1=(unsignedlong**)p1;

unsignedlong**pp2=(unsignedlong**)p2;

if(**pp1<**pp2)

return(-1);

elseif(**pp1>*pp2)

return(1);

return(0);

}

...

inti1;

unsignedlong*aprandom[256];

unsignedlongarandom[256];//samearrayasbefore,inthiscase

intaresult[256];//resultsgohere

for(i1=0;i1<256;i1++)

{

aprandom[i1]=arandom+i1;

}

//nowsortit

qsort(aprandom,256,sizeof(*aprandom),mysortproc);

//finalstep-offsetsforpointersareplacedintooutputarray

for(i1=0;i1<256;i1++)

{

aresult[i1]=(int)(aprandom[i1]-arandom);

}

...

变量''''aresult''''中的值应该是一个排过序的唯一的一系列的整数的数组,整数的值的范围均在0到255之间。这样一个数组是非常有用的,例如:对一个字节对字节的转换表,就可以很容易并且非常可靠的来产生一个短的密钥(经常作为一些随机数的种子)。这样一个表还有其他的用处,比如说:来产生一个随机的字符,计算机游戏中一个物体的随机的位置等等。上面的例子就其本身而言并没有构成一个加密算法,只是加密算法一个组成部分。

作为一个测试,开发了一个应用程序来测试上面所描述的加密算法。程序本身都经过了几次的优化和修改,来提高随机数的真正的随机性和防止会产生一些短的可重复的用于加密的随机数。用这个程序来加密一个文件,破解这个文件可能会需要非常巨大的时间以至于在现实上是不可能的。

四.结论:

由于在现实生活中,我们要确保一些敏感的数据只能被有相应权限的人看到,要确保信息在传输的过程中不会被篡改,截取,这就需要很多的安全系统大量的应用于政府、大公司以及个人系统。数据加密是肯定可以被破解的,但我们所想要的是一个特定时期的安全,也就是说,密文的破解应该是足够的困难,在现实上是不可能的,尤其是短时间内。

参考文献:

1.pgp!/

cyberknights(newlink)/cyberkt/

(oldlink:/~merlin/knights/)

2.cryptochamberjyu.fi/~paasivir/crypt/

3.sshcryptographa-z(includesinfoonsslandhttps)ssh.fi/tech/crypto/

4.funet''''cryptologyftp(yetanotherfinlandresource)ftp://ftp.funet.fi/pub/crypt/

agreatenigmaarticle,howthecodewasbrokenbypolishscientists

/nbrass/1enigma.htm

5.ftpsiteinukftp://sable.ox.ac.uk/pub/crypto/

6.australianftpsiteftp://ftp.psy.uq.oz.au/pub/

7.replayassociatesftparchiveftp://utopia.hacktic.nl/pub/replay/pub/crypto/

数据加密技术篇(10)

计算机已经成为人们日常生活的一部分,但计算机技术存在较大的安全隐患,已经严重影响了人们的正常生活。在此背景下,数据加密技术应运而生,能够提高各项数据信息的安全性,保证计算机使用者的利益不受侵犯。

1数据加密技术概述

1.1数据加密技术

数据加密技术主要通过一些特殊方式对数据信息进行加密,只有使用密钥才能获取数据信息,从而能够有效提高数据信息的安全性。对于数据加密技术来说,没有统一的标准,主要根据信息能否被轻易窃取来衡量数据加密技术的优劣。

1.2数据加密的重要性

计算机技术的应用为人们的生活提供了便利,但随着人们逐渐认识到数据安全的重要性,人们开始选择提高数字信息安全性的途径[1]。在数据信息传输的过程中,如果数字技术没有进行加密处理,那么一些不法分子就会截获重要的数据信息。同时,由于网络环境具有开放性,如果没有对数据进行加密处理,那么不法分子在入侵系统后,就会篡改某些重要信息,从而会给用户带来损失。还有一些不法分子在入侵计算机系统后,通过篡改信息冒充用户进入系统获取相应的数据信息。不法分子在入侵计算机系统后,会恶意破坏一些信息,导致数据无法正常使用。

2影响计算机安全的主要因素

2.1病毒入侵

随着计算机技术的不断发展,木马病毒也在不断创新,并且病毒的种类很多,传播速度较快,能够依附在某个程序上攻击计算机网络系统。另外,网络上存在一些病毒文件,一旦被打开,计算机就会感染病毒,并且病毒的传播速度非常快,会破坏系统以及数据信息[2]。

2.2服务器数据信息泄露

任何计算机服务器在设计中都会存在一定的缺陷,如果整个系统在运行中发生系统紊乱,导致系统不稳定,黑客就会利用系统存在的漏洞窃取相关数据信息,从而会影响计算机安全。

2.3非法入侵

在计算机信息安全管理中,所谓的非法入侵主要指采用一些不合法的方式入侵电脑系统,窃取用户口令,以合法的身份进入网络,获取相应的数据信息。

3数据加密技术在计算机安全管理中的应用

3.1明确加密目标

在计算机安全管理中,要想对相应的数据信息进行加密,应该确立加密目标,知道哪些数据需要进行加密。首先,工作人员应该对相应的数据信息进行分类,将一些机密信息进行标注。其次,还要明确机密信息的储存问题,并且确定文件的格式。再次,在数据传输的过程中,工作人员还要确定信息传输路径的安全性,保证文件在传输过程中不会被窃取。最后,在信息浏览的过程中,还应该及时检测是否存在机密信息。只有这样才能明确加密目标,为使用机密技术提供保障[3]。

3.2加密技术

目前,数据加密技术可以分为对称加密以及非对称加密。所谓对称加密主要指在整个加密过程中,相对应的密钥不会改变,只有持有密钥的人才能访问相关数据信息,并且为了保证数据信息的安全性,一般不会公开密钥。此种方式在应用过程中操作简单,并且运算速度较快,但是也存在明显的缺点,如果持有密钥的人不慎泄露密钥,就会威胁数据的安全性。非对称加密主要指数据密钥是公开的,任何人都能使用密钥,但不能解密数据信息,如果要对数据进行解密,必须使用私有的密钥,从而能够有效提高数据信息的安全性。

3.3数字加密技术的实现

3.3.1链路加密

此方式能够提高数据传输的安全性,链路加密方式主要以两个网络节点中间的某一次通信链路为基础,然后进行加密处理,从而能够保证数据信息传播的安全性。不同阶段都会采用同样的方式对接收到的信息进行解密处理,然后采用下一个链路的密钥再次对相关数据信息进行加密处理,最后才会开始传输工作。所传输的在被接收以前,每个信息都会经过多种通信链路进行加密处理,并且在数据传播的过程中,传输路径中的节点都会对数据信息进行解密及重新加密处理,甚至包含路由信息,链路中存在的所有数据都是以密文形式存在的,从而会掩盖传递信息的源点与终点[4-5]。

3.3.2节点加密技术

节点加密技术的应用,能够有效保证数据传输的安全性。节点加密技术所采用的加密方法和链路加密方式基本相似,也需要对通信链路的数据输出进行处理。节点加密在信息传递的过程中,会对所有信息进行加密处理,在此种环节中,计算机用户的相关信息是透明的。另外,节点加密的数据传输是以网络节点的方式存在。此技术在应用中先对接收到的信息进行解密,然后采用各种不同的密钥对信息进行二次加密处理,并且整个过程都是在节点安全的环境中进行的。

3.3.3端到端加密技术

端到端加密技术在使用过程中,从数据源点至数据终点,都是以密文的形式进行保存并且传输。端到端加密技术中的数据信息在到达传输终点以前,都是以密文形式存在于网络中。总的来说,端到端加密技术的安全性能较高,设计简洁,成本低,还能对数据进行有效保护。端到端加密技术中在应用的过程中,还能够有效避免其他加密技术存在的同步问题,主要是由于每个文件都是独立加密,在传输过程中,如果其中一个文件出现问题,数据传输措施或者数据泄露并不会对其他数据造成影响。

4数据加密技术的应用范围通常来说,数据加密技术可以应用在以下几个方面。

4.1网络数据库加密

网络数据库运行过程中存在很多危险因素,会对数据的安全性造成较大威胁,计算机储存系统都是十分脆弱的,十分容易受到攻击,因此也容易出现数据篡改或者数据失窃现象。数据加密技术能够对数据进行加密处理,并且设置相应的访问权限,保证了数据的安全。

4.2数据加密技术在电子商务中的应用

上一篇: 幼儿园表演活动总结 下一篇: 商品交易市场
相关精选
相关期刊