基于RSA的網(wǎng)絡(luò)密碼數(shù)據(jù)加密算法的優(yōu)化與設(shè)計(jì)
目前,網(wǎng)絡(luò)環(huán)境下運(yùn)行的軟件系統(tǒng)出于對(duì)安全的考慮,大都需要在網(wǎng)絡(luò)中頻繁傳遞密碼數(shù)據(jù)。因此,這些密碼自身的安全一直倍受關(guān)注。RSA公鑰加密系統(tǒng)是目前最有影響的公鑰加密算法之一,它能夠抵抗到目前為止已知的所有密碼攻擊。
從RSA公鑰加密系統(tǒng)特點(diǎn)上看,它非常適合對(duì)網(wǎng)絡(luò)中傳遞的密碼數(shù)據(jù)進(jìn)行加密。但隨著計(jì)算機(jī)技術(shù)的發(fā)展,破解RSA的風(fēng)險(xiǎn)正在加大,而RSA為保證自身的安全,其密鑰長度在不斷地增長,加密計(jì)算量也隨之增加,這使得RSA加密速度越趨緩慢。我們?cè)赗SA公鑰加密系統(tǒng)的基礎(chǔ)上,針對(duì)網(wǎng)絡(luò)密碼數(shù)據(jù)提出了一種加密算法的優(yōu)化方案,有效地提高了RSA的安全性,同
時(shí)也提高了其加密速度。
一、 RSA公鑰加密系統(tǒng)
RSA加密算法基于一個(gè)十分簡(jiǎn)單的數(shù)論事實(shí),將兩個(gè)大素?cái)?shù)相乘十分容易,但是想分解它們的乘積卻極端困難,因此可以將乘積公開作為加密密鑰。整個(gè)RSA加密算法的結(jié)構(gòu)可以描述如下:
(1)選取兩個(gè)大素?cái)?shù)p和q(保密);
(2)計(jì)算n,使得n=pq,并公開n;
(3)隨機(jī)選取正整數(shù)e,使得e與y= (p-1)(q-1)互素,公開e;
(4)計(jì)算d,使得e×d mod y=l,d保密;
(5)加密;c=memod n;
(6)解密;m=Cd mod n;
(注:m是明文,c是m對(duì)應(yīng)的密文。)
以上實(shí)現(xiàn)過程是:A欲傳遞密碼給B,B則需要持有密鑰d,并公開e和n,A用e和n對(duì)密碼數(shù)據(jù)進(jìn)行加密后傳給B,B得到密碼后用d和n進(jìn)行解密。
RSA加密算法中,其安全性取決于p、q兩個(gè)大素?cái)?shù)的取值,且p、q取值越大,分解越困難,被破解的可能性就越小,但其加密的計(jì)算量也隨之增大,加解密速度也隨之變慢。
二、基于RSA的網(wǎng)絡(luò)密碼數(shù)據(jù)加密算法的優(yōu)化與設(shè)計(jì)思路
1、動(dòng)態(tài)加密
從前面敘述可知,RSA加密算法的安全性及計(jì)算速度都與p.q兩個(gè)大素?cái)?shù)的取值有著直接的關(guān)系。因此,把優(yōu)化重點(diǎn)可放在p、q的取值上。為了能得到較為理想的運(yùn)算速度,對(duì)p、q的取值不宜太大,能保證短時(shí)間不會(huì)被破解即可。在一定的素?cái)?shù)生成周期T和動(dòng)態(tài)范圍(X,Y)內(nèi)產(chǎn)生一系列的素?cái)?shù),并從中隨機(jī)抽取p、q值,使得每次加解密所用的n、e、d均不同,以實(shí)現(xiàn)動(dòng)態(tài)加密。p、q的取值長度和范圍(X,Y)由周期T決定,原則是保證在NT(N∈Z,Z>0)時(shí)間內(nèi)不會(huì)被破解。
2、動(dòng)態(tài)密碼數(shù)據(jù)
事實(shí)上,僅實(shí)現(xiàn)動(dòng)態(tài)加密還不足以保證密碼數(shù)據(jù)的安全。因?yàn)槠平庹咧恍璜@得一次加密信息,不管破解時(shí)間多長,只要破解成功同樣獲得正確的密碼數(shù)據(jù)。因此,必須對(duì)密碼數(shù)據(jù)限定一定的有效期,即實(shí)現(xiàn)動(dòng)態(tài)的密碼數(shù)據(jù)。
3、 實(shí)現(xiàn)簽名機(jī)制
攻擊RSA方法主要有選擇密文攻擊和公共模數(shù)攻擊兩種,對(duì)選擇密文攻擊的解決辦法有:
(1)不對(duì)自己一無所知的信息簽名。
(2)不對(duì)陌生人送來的隨機(jī)文檔簽名。
而對(duì)公共模數(shù)攻擊的解決辦法只有一個(gè),那就是不要共享模數(shù)n。在RSA中疊加MD5簽證機(jī)制無疑是解決擇密文攻擊的有效方法。而對(duì)于公共模數(shù)攻擊,動(dòng)態(tài)加密過程實(shí)際上已實(shí)現(xiàn)了不共享模數(shù)的過程。
三、 動(dòng)態(tài)生成素?cái)?shù)的算法
要實(shí)現(xiàn)上述的優(yōu)化與設(shè)計(jì)思路,最主要是要解決動(dòng)態(tài)生成素?cái)?shù)的問題。需要在一定的素?cái)?shù)生成周期T和動(dòng)態(tài)范圍(X,Y)內(nèi)生成一系列的素?cái)?shù),并從中隨機(jī)抽取p、q。
1、 素?cái)?shù)選取條件
首先,p、q的選取條件必須滿足:
n=pq,T(n)=
(T(n)為計(jì)算n的時(shí)間復(fù)雜度);
則必須滿足NT<T(n) (N∈Z,Z>O)。
2、生成素?cái)?shù)序列算法
可以在動(dòng)態(tài)范圍(X,Y)內(nèi)得到整數(shù)集合,然后逐個(gè)進(jìn)行素?cái)?shù)判別。以往判斷一個(gè)數(shù)S是否為素?cái)?shù)時(shí),一般采用求距離S最近的質(zhì)數(shù)β,β滿足≤S。其求解方法可以采用8不被小于佰任何數(shù)整除(不含1)來測(cè)試,測(cè)試首數(shù)從S開始。但是該加密算法的時(shí)間復(fù)雜度為0(根號(hào)s),當(dāng)S較大時(shí)計(jì)算時(shí)間很長。雖然前面提出不需要很大的素?cái)?shù),但從網(wǎng)絡(luò)安全上考慮,所需要的素?cái)?shù)位數(shù)也不能太小。因此,該判斷素?cái)?shù)的加密算法不能在此適用。
在此,我們采用Miller Rabin概率測(cè)試算法來判斷素?cái)?shù)。為了使整個(gè)素?cái)?shù)判斷過程更快,先用“篩選”法,將偶數(shù)和最后一位為5的數(shù)全部去掉,再用剩下的數(shù)進(jìn)行Miller Rabin概率測(cè)試。其測(cè)試的計(jì)算機(jī)實(shí)現(xiàn)過程如下:
(1)假設(shè)測(cè)試數(shù)為n,找出整數(shù)k、q,使得n-1=(2-k)*q,其中k>0,q是奇數(shù);
(2)隨機(jī)選取整數(shù)a,2<a<n-1;
(3)z-a-m mod n;
(4)如果z=1或z= n-1,則n可能為素?cái)?shù),否則為合數(shù);
(5)進(jìn)行j=0到k-1的循環(huán);
(6)如果a^((2^j)*q)mod n=n-1,則n可能為素?cái)?shù),否則為合數(shù);
(7)j=j+1,如果j≤k-1,則轉(zhuǎn)到(5)執(zhí)行,否則跳出循環(huán)。
由于a是隨機(jī)抽取,n通過測(cè)試但并不能確定它一定是素?cái)?shù),因此需要進(jìn)行多次這樣的測(cè)試,以確保得到的是一個(gè)素?cái)?shù)(DDS的標(biāo)準(zhǔn)是要經(jīng)過50次測(cè)試)。
3、隨機(jī)數(shù)產(chǎn)生算法
解決素?cái)?shù)生成問題后,還需要產(chǎn)生2個(gè)隨機(jī)數(shù),以實(shí)現(xiàn)動(dòng)態(tài)生成p、q兩個(gè)大素?cái)?shù)。事實(shí)上本文所提到的加密算法安全主要是依賴動(dòng)態(tài)方式來實(shí)現(xiàn),如動(dòng)態(tài)素?cái)?shù)、動(dòng)態(tài)密碼等,以此來降低對(duì)p、q兩個(gè)大素?cái)?shù)位數(shù)的要求,以提高整個(gè)運(yùn)算速度。同樣,這里也可以降低隨機(jī)數(shù)的產(chǎn)生質(zhì)量來換取速度上的需求。
BBS隨機(jī)數(shù)產(chǎn)生器雖然隨機(jī)數(shù)的產(chǎn)生質(zhì)量很好,但其運(yùn)算復(fù)雜,速度較慢,因此可以采用線性同余算法來產(chǎn)生隨機(jī)數(shù),其隨機(jī)數(shù)序列{Xn}由方程:Xn+1= (aXn+c) mod m得到,其中模數(shù)m>0,乘數(shù)a滿足0≤a<m,增量c滿足0≤c<m,初始值O≤XO<m。當(dāng)m、a、c、XO都是整數(shù)時(shí),通過這個(gè)方程就能產(chǎn)生一系列[O,m]范圍內(nèi)的整數(shù)了。
4、 動(dòng)態(tài)密碼的產(chǎn)生
事實(shí)上,動(dòng)態(tài)密碼產(chǎn)生的方法很多,比如可以利用本地硬件序列號(hào)(如CPU、硬盤等)、本地時(shí)間(或服務(wù)器時(shí)間)等參數(shù)來設(shè)計(jì)動(dòng)態(tài)生成密碼的加密算法,這些參數(shù)可隨公模傳送或密碼傳送一起進(jìn)行傳送。
四、 疊加MD5簽名機(jī)制
從上述分析中可以知道,選擇密文攻擊對(duì)RSA公鑰加密系統(tǒng)造成的威脅是致命的。為了防止此類攻擊,需要對(duì)所傳送的信息實(shí)行簽名機(jī)制,這樣可以實(shí)現(xiàn)不對(duì)自己一無所知的信息簽名,也不對(duì)陌生人送來的隨機(jī)文檔簽名。
MD5是一種用于產(chǎn)生數(shù)字簽名的單項(xiàng)散列加密算法,它的作用是讓大容量信息在用數(shù)字簽名軟件簽私人密匙前被“壓縮”成一種保密的格式。不管字符信息容量多大,經(jīng)MD5換算后都會(huì)輸出一個(gè)128bit的大整數(shù),該大整數(shù)對(duì)原字符信息中的每個(gè)字符都很敏感,原字符信息中的一個(gè)字符改變都會(huì)改變大整數(shù)的值。重要的是MD5是不可逆的,無法將一個(gè)MD5的值變換成原字符信息。很顯然,在RSA中疊加MD5加密算法無疑大大增加了密碼數(shù)據(jù)的安全性。
RSA疊加MD5過程如下:
(1)A請(qǐng)求給B傳送密碼數(shù)據(jù)。
(2)B隨機(jī)計(jì)算出公鑰和私鑰,并將公鑰傳送給A。
(3)A拿到公鑰后將密碼文件加密成M,將M進(jìn)行MD5換算,并得到一個(gè)128bit的大整數(shù)N。
(4)將M、N傳送給B。
(5)B先進(jìn)行MD5驗(yàn)證,通過驗(yàn)證后再用私鑰解密。
本文所述加密算法的核心思想在于動(dòng)態(tài)加密和動(dòng)態(tài)產(chǎn)生密碼,即保證在密碼可能被破解的時(shí)間內(nèi)改變加密密鑰和密碼數(shù)據(jù)的內(nèi)容,以此來提高密碼數(shù)據(jù)的安全性。
小知識(shí)之動(dòng)態(tài)密碼
動(dòng)態(tài)密碼是根據(jù)專門的算法產(chǎn)生變化的隨機(jī)數(shù)字組合,主流產(chǎn)生形式有手機(jī)短信、硬件令牌、手機(jī)令牌,動(dòng)態(tài)密碼優(yōu)點(diǎn)在于使用便捷且與平臺(tái)無關(guān)性,通過電腦、手機(jī)、IPAD都可以順暢使用,廣泛應(yīng)用于網(wǎng)銀、網(wǎng)游、電信領(lǐng)域。










