时间:2022-10-17 08:35:22
序论:在您撰写数据加密技术时,参考他人的优秀作品可以开阔视野,小编为您整理的7篇范文,希望这些建议能够激发您的创作热情,引导您走向新的创作高度。
一:数据加密方法
在传统上,我们有几种方法来加密数据流。所有这些方法都可以用软件很容易的实现,但是当我们只知道密文的时候,是不容易破译这些加密算法的(当同时有原文和密文时,破译加密算法虽然也不是很容易,但已经是可能的了)。最好的加密算法对系统性能几乎没有影响,并且还可以带来其他内在的优点。例如,大家都知道的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 ./pgpi.com/
cyber knights(new link) members.tripod.com/cyberkt/
(old link: netnet.net/~merlin/knights/)
2 . crypto chamber jyu.fi/~paasivir/crypt/
3 . ssh cryptograph a-z (includes info on ssl and https) 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
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/
8 . rsa data security (why not include them too!) rsa.com/
一:数据加密方法
在传统上,我们有几种方法来加密数据流。所有这些方法都可以用软件很容易的实现,但是当我们只知道密文的时候,是不容易破译这些加密算法的(当同时有原文和密文时,破译加密算法虽然也不是很容易,但已经是可能的了)。最好的加密算法对系统性能几乎没有影响,并且还可以带来其他内在的优点。例如,大家都知道的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 . pgp! pgpi.com/
cyber knights(new link) members.tripod.com/cyberkt/
(old link: netnet.com/~merlin/knights/ )
2 . crypto chamber jyu.fi/~paasivir/crypt/
3 . ssh cryptograph a-z (includes info on ssl and https) ssh.fi/tech/crypto/
[关键字] 信息 数据加密 对称密钥加密技术 非对称密钥加密技术
随着全球经济一体化的到来,信息技术的快速发展和信息交换的大量增加给整个社会带来了新的驱动力和创新意识。信息技术的高速度发展,信息传输的安全日益引起人们的关注。世界各个国家分别从法律上、管理上加强了对数据的安全保护,而从技术上采取措施才是有效手段,技术上的措施分别可以从软件和硬件两方面入手。随着对信息数据安全的要求的提高,数据加密技术和物理防范技术也在不断的发展。数据加密是防止数据在数据存储和和传输中失密的有效手段。信息数据加密技术是利用数学或物理手段,对电子信息在传输过程中和存储体内进行保护,以防止泄漏的技术。信息数据加密与解密从宏观上讲是非常简单的,很容易掌握,可以很方便的对机密数据进行加密和解密。从而实现对数据的安全保障。
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.
[3]浅析信息加密技术 张岭松 《科技信息》 2010年33期.
常永亮 (飞行试验研究院测试所 陕西西安 710089)
论文关键词:数据库,加密,安全
一、数据库加密应满足的要求
由于数据库具有数据复杂、数据的查询操作非常频繁且数据存储时限相对较长等特点,所以应用于数据库的加、解密算法及相应的密钥管理机制应满足以下要求:
(1)数据库加密系统应满足的首要条件是保证数据的安全性。在此方面要求加密算法保证数据的保密性和完整性,防止未授权的数据访问和修改。
(2)数据库中存在大量的查询操作,因此加解密效率要求较高,不能引起数据库系统的性能大幅度下降。
(3)数据库组织结构对于数据库管理系统而言不能有太大的变动,应尽可能做到明文和密文长度相等或至少相当。
(4)由于时限较长和密钥的复杂,密钥管理机制应更加安全、灵活和坚固。
二、数据库加密的常用办法
数据加密技术按照实现的方法可划分为静态加密和动态加密,从实现的层次上则可分为文件级加密和存储设备级加密。
(1)静态加密与动态加密
静态加密是指在加密期间,待加密的数据处于未使用状态,这些数据一旦加密,在使用前,需首先通过静态解密得到明文,然后才能使用。目前市场上许多加密软件产品就属于这种加密方式。
与静态加密不同,动态加密是指数据在使用过程中自动对数据进行加密或解密操作,无需用户的干预,合法用户在使用加密的文件前,也不需要进行解密操作即可使用,表面看来,访问加密的文件和访问未加密的文件基本相同,对合法用户来说,这些加密文件是“透明的”,即好像没有加密一样,但对于没有访问权限的用户,即使通过其它非常规手段得到了这些文件,由于文件是加密的,因此也无法使用。由于动态加密技术不仅不改变用户的使用习惯,而且无需用户太多的干预操作即可实现文档的安全,因而近年来得到了广泛的应用。
由于动态加密要实时加密数据,必须动态跟踪需要加密的数据流,而且其实现的层次一般位于系统内核中,因此,从实现的技术角度看,实现动态加密要比静态加密难的多,需要解决的技术难点也远远超过静态加密。
(2)文件级动态加解密技术
在文件系统层,不仅能够获得文件的各种信息,而且能够获得访问这些文件的进程信息和用户信息等,因此,可以研制出功能非常强大的文档安全产品。就动态加解密产品而言,有些文件系统自身就支持文件的动态加解密,如Windows系统中的NTFS文件系统,其本身就提供了EFS支持,但作为一种通用的系统,虽然提供了细粒度的控制能力(如可以控制到每个文件),但在实际应用中,其加密对象一般以分区或目录为单位,难以做到满足各种用户个性化的要求,如自动加密某些类型文件等。虽然有某些不足,但支持动态加密的文件系统在某种程度上可以提供和磁盘级加密技术相匹敌的安全性。由于文件系统提供的动态加密技术难以满足用户的个性化需求,因此,为第三方提供动态加解密安全产品提供了足够的空间。
要研发在文件级的动态加解密安全产品,虽然与具体的操作系统有关,但仍有多种方法可供选择,一般可通过Hook或过滤驱动等方式嵌入到文件系统中,使其成为文件系统的一部分,从某种意义上来说,第三方的动态加解密产品可以看作是文件系统的一个功能扩展,这种扩展往往以模块化的形式出现,能够根据需要进行挂接或卸载,从而能够满足用户的各种需求,这是作为文件系统内嵌的动态加密系统难以做到的。
三、数据库加密对数据库的影响
数据加密是通过对明文进行复杂的加密操作,进而无法发现明文和密文之间、密文和密钥之间的内在关系,也就是说经过加密的数据经得起来自操作系统和数据库管理系统的攻击。但在数据库中以密文形式存在的敏感数据无法使用数据库管理系统的一些功能。数据库管理系统的功能比较完备,然而数据库数据加密以后,数据库管理系统一些功能将无法直接使用。
1、加密字段不能实现索引功能。
为了达到迅速查询的目的,数据库文件需要建立一些索引。索引建立和应用必须是明文状态,否则将失去索引的作用。有的DBMS中可以建立索引,这类索引也需要在明文状态下建立、维护和使用。
2、表间的连接码字段不能加密。
数据模型规范化以后,数据库表之间存在着密切的联系,这种相关性往往是通过局部编码联系的,这些编码若加密就无法进行表与表之间的连接运算。
3、无法实现对数据制约因素的定义。
数据库管理系统定义了数据之间的制约规则。数据一旦加密,DBMS将无法实现这一功能,而且,值域的定义也无法进行。
4、密文数据无法实现SQL的排序、分组和分类功能。
SELECT语句中的Group、Orderby、Having子句分别完成分组、排序、分类等操作。这些子句的操作对象如果是加密数据,那么解密后的明文数据将失去原语句的分组、排序、分类作用,显然这不是用户所需要的。
5、SQL语言中的内部函数将对加密数据失去作用。
6、BDMS对各种类型数据均提供了一些内部函数,这些函数不能直接作用于加密数据。
7、BDMS的一些应用开发工具的使用受到限制。
DBMS的一些应用开发工具不能直接对加密数据进行操作,因而它们的使用会受到限制。
数据库加密影响了一些数据库管理系统的功能,如阅读语句中的函数、排序、分组等,但可以通过组件技术来实现这些功能,如可采用SQL解释器。所以说数据库加密以后,DBMS的一些功能将无法直接使用,但可以在DBMS外层的SMS(安全管理系统)中增加组件来实现这些功能。
四、结束语
数据库是数据管理的最新技术,是计算机科学的重要分支。建立一个满足各级部门信息处理要求的、行之有效的信息系统,也成为一个企业或组织生存和发展的重要条件。因此,作为信息系统核心和基础的数据库技术得到越来越广泛的应用,数据库技术因现实的需求迅速发展。通过研究,人们认识到数据库安全与保密这一领域研究的重要性和迫切性。在数据库安全和加密技术的研究方面,只是做了一些尝试性的工作,许多细节有待于进一步深入。
参考文献
[1] 张敏等.数据库安全[M].北京:科学出版社,2005
[2] 刘启军.数据库与信息系统安全[M].北京:电子工业出版社,2001
关键词:数据库 加密 安全
中图分类号:TP309.7 文献标识码:A 文章编号:1007-9416(2016)05-0000-00
1 数据库加密技术的要求
鉴于数据库所存储的数据具有一定的复杂性、执行查询操作的频繁性、数据存储的长期性等特征,对于数据库的加解密算法及对应的密钥管理机制要具备以下几点:
(1)数据库加密系统要充分保证数据的安全性,这点体现在加密算法对于数据的保密性及完整性的要求,它有效的防止了对未授权数据的访问和修改。(2)应用数据库时频繁的查询操作,需要具备高强度的解密效率,避免造成数据库系统性能的大幅度下降。(3)明文与密文的长度要尽可能的做到相等或相当,相对于数据库管理系统而言数据库结构的变动差异不可过大。(4)数据存储时间久且密钥又较为复杂,这需要更为坚固、灵活且安全的密钥管理机制。
2 数据库加密的方法
(1)静态加密技术。静态加密是指实施加密时待加密文件已存在但未使用,通过密码、密钥证书或数字签名的方式进行加密,实施加密后使用时必须先通过解密取得明文方可使用的加密方法。此种方式一般应用于应用系统或软件加密当中。(2)动态加密技术。动态加密是指动态的跟踪数据流,对相关的数据自动进行时时加解密操作,无需人工参与亦不会对用户有任何影响,有权限的用户在使用已加密文件时,无需先取得明文解密即可直接使用。所以对于有权限的用户来讲,动态加密操作是透明的,访问未加密或加密文件基本感觉不到区别。反之,对于没有访问权限的用户来讲,即便通过非法手段取得了加密文件,也无法识别,只是得到乱码而已,更谈不到获取有效信息了。近年来,动态加密技术因其便捷的使用方法得到广泛的应用。(3)文件级动态加解密技术。在文件系统层当中,既能获取到文件自身的详细信息,又能获取到用户信息及访问此种文件的进程等各类相关信息,因文件系统层其特有的属性可以开发出功能极其强大的文档安全产品。在动态加解密的产品中,其部分文件系统自身就支持文件的动态加解密,而在实际操作当中,加密文件一般以分区或目录为单位,对于用户的个性化需求是难以满足的,即使存在诸多不足之处,文件级动态加解密技术的安全性依然可以与磁盘级加密技术相匹敌。但鉴于文件级动态加解密技术对于用户个性化需求的不足,也为第三方提供了动态加解密安全产品提供了足够的发展空间。
在不同的操作系统中要研发的文件级动态加解密安全产品也各不相同,有多种方法可供选择,可利用过滤驱动或Hook等方法将其转化为文件系统的一个组成部分,即将嵌入到文件系统中。从某个角度上讲,可以将第三方动态加解密产品近似于文件系统的一种功能扩展,这种功能扩展是通过模块化的形式根据客户需求进行挂接或载操作来完成的,而这是作为文件系统内嵌的动态加密系统难以实现的。
3 数据库加密技术对数据库造成的影响
所谓数据加密即是对明文进行一系列较为复杂的加密操作,使明文和密文、密文和密钥间的内在联系不被发现,从而使加密过的数据经得住数据库管理系统和操作系统的攻击。数据库管理系统的功能一般情况下是较为完备的,但针对数据库中以密文形式存在的敏感性数据是无法应用其部分功能的,且当数据库的数据加密后,数据库管理系统部分功能将无法直接应用。
(1)加密字段不能实现索引功能。在数据库当中为了查询和检索的快速及便捷,常常要建立一些索引。而索引要发挥其作用必须使其建立和应用在明文的状态下,且某些数据库管理系统中所建立的索引也必须在明文的状态下建立、维护和使用,否则索引将失去作用。(2)加密功能不能用于表间的连接码字段。数据模型构建后,数据库表之间的相关性是通过局部编码进行关联的,如若对这些局部编码进行加密操作,则将无法进行数据表之间的连接运算。(3)加密后无法进行数据约束的定义。数据库管理系统通常会定义数据约束,如若此类数据一旦进行了加密操作,数据库管理系统将无法实现数据约束功能,且值域也无法进行定义。(4)密文数据不能应用于数据库的排序、分组和分类功能。SQL的Select语句中分组、排序、分类等操作分别通过Group、Orderby、Having子句来实现,如若将此类子句的操作对象设为加密数据,将无满足用户的需求,因为即使明文数据进行了解密操作也失去了原有语句的分组、排序、分类等作用。(5)加密数据无法被SQL语言中的内部函数所应用。(6)加密数据无法直接应用于数据库管理系统为各类数据所提供的某些内部函数上。(7)加密数据将使数据库管理系统的某些应用开发工具使用受限。数据库管理系统的某些应用开发工具不能对加密数据进行直接操作,因此在对其应用时会受限。由此可见,对数据库进行加密操作会影响到部分数据库管理系统的功能,好比阅读语句中的函数、排序、分组等,如想应用此类功能亦可通过组件技术来实现,如利用SQL的解释器。所以当数据库加密后致使数据库管理系统部分功能无法直接使用时,可以通过在数据库管理系统的安全管理系统中增加组件来实现这部分功能的应用。
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] 黄玉蕾.数据库加密算法的分析与比较[J].科技情报开发与经济,2008,18(2):159-161.