時間: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之間。這樣一個數組是非常有用的,例如:對一個字節對字節的轉換表,就可以很容易并且非??煽康膩懋a生一個短的密鑰(經常作為一些隨機數的種子)。這樣一個表還有其他的用處,比如說:來產生一個隨機的字符,計算機游戲中一個物體的隨機的位置等等。上面的例子就其本身而言并沒有構成一個加密算法,只是加密算法一個組成部分。
作為一個測試,開發了一個應用程序來測試上面所描述的加密算法。程序本身都經過了幾次的優化和修改,來提高隨機數的真正的隨機性和防止會產生一些短的可重復的用于加密的隨機數。用這個程序來加密一個文件,破解這個文件可能會需要非常巨大的時間以至于在現實上是不可能的。
四.結論:
由于在現實生活中,我們要確保一些敏感的數據只能被有相應權限的人看到,要確保信息在傳輸的過程中不會被篡改,截取,這就需要很多的安全系統大量的應用于政府、大公司以及個人系統。數據加密是肯定可以被破解的,但我們所想要的是一個特定時期的安全,也就是說,密文的破解應該是足夠的困難,在現實上是不可能的,尤其是短時間內。
參考文獻
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之間。如果不是很明白如何來做,就可以不管它。但是,下面也提供了一些原碼(在下面)是我們明白是如何來做的?,F在,產生了一個具體的256字節的表。讓這個隨機數產生器接著來產生這個表中的其余的數,以至于每個表是不同的。下一步,使用"shotgun technique"技術來產生解碼表?;旧险f,如果 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之間。這樣一個數組是非常有用的,例如:對一個字節對字節的轉換表,就可以很容易并且非??煽康膩懋a生一個短的密鑰(經常作為一些隨機數的種子)。這樣一個表還有其他的用處,比如說:來產生一個隨機的字符,計算機游戲中一個物體的隨機的位置等等。上面的例子就其本身而言并沒有構成一個加密算法,只是加密算法一個組成部分。
作為一個測試,開發了一個應用程序來測試上面所描述的加密算法。程序本身都經過了幾次的優化和修改,來提高隨機數的真正的隨機性和防止會產生一些短的可重復的用于加密的隨機數。用這個程序來加密一個文件,破解這個文件可能會需要非常巨大的時間以至于在現實上是不可能的。
四.結論:
由于在現實生活中,我們要確保一些敏感的數據只能被有相應權限的人看到,要確保信息在傳輸的過程中不會被篡改,截取,這就需要很多的安全系統大量的應用于政府、大公司以及個人系統。數據加密是肯定可以被破解的,但我們所想要的是一個特定時期的安全,也就是說,密文的破解應該是足夠的困難,在現實上是不可能的,尤其是短時間內。
參考文獻:
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)混合加密
由于對稱加密算法更簡單,數據的加密和解密都使用同一個密鑰,所以比起非對稱加密,它的速度要快得多,適合大量數據的加密和解密;主要缺點也是由于使用相同的密鑰加密和解密數據引起的,所有的數據發送方和接收方都必須知道或可以訪問加密密鑰,必須將此加密密鑰發送給所有要求訪問加密數據的一方,所以在密鑰的生成、分發、備份、重新生成和生命周期等方面常存在安全問題。而公鑰加密屬于非對稱加密,不存在密鑰的分發問題,因此在多用戶和網絡系統中密鑰管理非常簡單,但由于它主要基于一些難解的數學問題,所以安全強度沒有對稱加密高,速度也比較慢。
為了充分發揮對稱加密與非對稱加密的優勢,混合加密方案被提出。在混合加密方案中,加密者首先利用一個隨機生成的密鑰和對稱加密算法加密數據,然后通過使用接收者的公鑰把隨機密鑰進行加密,并與密文一起傳送給接受者。接收者通過自己的私鑰首先解密隨機密鑰,再利用其解密密文。此方案既利用了對稱加密安全強度高、速度快的特點,也利用了非對稱加密密鑰管理簡單的特性?!耙淮我幻堋钡募用苁亲畎踩囊环N加密技術,加密者在每次加密時都使用與明文長度一樣的隨機密鑰,并且每個密鑰都不重復使用。但在數據庫加密中,由于密鑰的產生和保存都存在很大的困難,因此在實際應用中并不常用。
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.