隨著Internet用戶的激增,世界正步入網(wǎng)絡(luò)經(jīng)濟(jì)的新時(shí)代。如網(wǎng)上購物、網(wǎng)上銀行、網(wǎng)上證券等。然而,有一些人利用利用他們所掌握的技術(shù)非法侵入他人的計(jì)算機(jī)系統(tǒng),竊取、篡改、破壞一些重要的數(shù)據(jù),給社會(huì)造成巨大的損失。密碼技術(shù)的發(fā)展與應(yīng)用,對(duì)解決信息交換的安全問題,保障數(shù)據(jù)信息的安全,起著不可忽視的作用。
所謂密碼技術(shù),就是針對(duì)信息進(jìn)行重新編碼,從而達(dá)到隱藏信息的內(nèi)容,使非法用戶無法獲取信息真實(shí)內(nèi)容的一種手段。目前在網(wǎng)絡(luò)中,一般采用兩種密碼體制:對(duì)稱密鑰體制和非對(duì)稱密鑰體制。對(duì)稱密鑰體制中的加密密鑰和解秘密鑰是相同的,所以又稱密秘密鑰密碼體制。對(duì)稱密鑰算法運(yùn)算效率高、使用方便、加密效率高,在處理大量數(shù)據(jù)時(shí)被廣泛使用,但其關(guān)鍵是要保證密鑰的安全,為安全起見,密鑰要定期改變,所以,對(duì)稱密鑰就存在一個(gè)如何安全管理密鑰的問題。與對(duì)稱密鑰體制相對(duì)應(yīng)的非對(duì)稱密鑰體制又稱為公開密鑰密碼體制,它是在1976 年由Diffe 和Hellman 發(fā)表的《密碼學(xué)的新方向》一文中提出的,從此打破了長期使用單密鑰體制的束縛。自此提出公約密碼思想以后,涌現(xiàn)出很多的公約密鑰算法體系,經(jīng)過20多年的實(shí)踐檢驗(yàn),公約系統(tǒng)的應(yīng)用技術(shù)日趨完善,應(yīng)用領(lǐng)域日趨廣泛。公開密鑰密碼體制,加密密鑰和解秘密鑰是分開采用一對(duì)不同的密鑰進(jìn)行的,分別存在一個(gè)公鑰和私鑰,公鑰公開,私鑰保密,并且知道其中一個(gè)時(shí)并不能從中推出另一個(gè)。其典型的算法有背包密碼、RSA等。 其中RSA公約算法系統(tǒng)因?yàn)槠淇煽堪踩裕子趯?shí)現(xiàn)性,更是受大家的認(rèn)可和歡迎。
RSA加密算法的最大優(yōu)點(diǎn)就是不需要對(duì)密鑰通信進(jìn)行保密,所需傳輸?shù)闹挥泄_密鑰,這樣就省去了一條開銷很大的密鑰傳輸信道。其保密性強(qiáng),密鑰管理方便,并且具有數(shù)字簽名、認(rèn)證和簽別等多種功能,特別適合于現(xiàn)代保密通信的需要。大多數(shù)使用公鑰密碼進(jìn)行加密和數(shù)字簽名的產(chǎn)品和標(biāo)準(zhǔn)使用的都是RSA算法。RSA的安全性是基于大數(shù)因子分解的困難性。目前一般認(rèn)為RSA需要1024位以上的字長才有安全保障。由于RSA所采用的模冪運(yùn)算耗時(shí)太多,因此它通常只能用于加密少量數(shù)據(jù)或者加密密鑰。需要注意的是,RSA的安全性只是一種計(jì)算安全性,絕對(duì)不是無條件的安全性,這是由它的理論基礎(chǔ)決定的。所以,在實(shí)現(xiàn)RSA算法的過程中,每一步都應(yīng)該盡量從安全性方面考慮。本文就RSA算法以及如何用Matlab語言實(shí)現(xiàn)給于了詳細(xì)的分析。
1 數(shù)據(jù)加密概述
密碼學(xué)是一門古老而深?yuàn)W的學(xué)科,它對(duì)一般人來說是陌生的,因?yàn)殚L期以來,它只在很少的范圍內(nèi),如軍事、外交、情報(bào)等部門使用。計(jì)算機(jī)密碼學(xué)是研究計(jì)算機(jī)信息加密、解密及其變換的科學(xué),是數(shù)學(xué)和計(jì)算機(jī)的交叉學(xué)科,也是一門新興的學(xué)科。隨著計(jì)算機(jī)網(wǎng)絡(luò)和計(jì)算機(jī)通訊技術(shù)的發(fā)展,計(jì)算機(jī)密碼學(xué)得到前所未有的重視并迅速普及和發(fā)展起來。在國外,它已成為計(jì)算機(jī)安全主要的研究方向,也是計(jì)算機(jī)安全課程教學(xué)中的主要內(nèi)容。
密碼是實(shí)現(xiàn)秘密通訊的主要手段,是隱蔽語言、文字、圖象的特種符號(hào)。凡是用特種符號(hào)按照通訊雙方約定的方法把電文的原形隱蔽起來,不為第三者所識(shí)別的通訊方式稱為密碼通訊。在計(jì)算機(jī)通訊中,采用密碼技術(shù)將信息隱蔽起來,再將隱蔽后的信息傳輸出去,使信息在傳輸過程中即使被竊取或載獲,竊取者也不能了解信息的內(nèi)容,從而保證信息傳輸?shù)陌踩?br />
任何一個(gè)加密系統(tǒng)至少包括下面四個(gè)組成部分:
(1)未加密的報(bào)文,也稱明文。
(2)加密后的報(bào)文,也稱密文。
(3)加密解密設(shè)備或算法。
(4)加密解密的密鑰。
發(fā)送方用加密密鑰,通過加密設(shè)備或算法,將信息加密后發(fā)送出去。接收方在收到密文后,用解密密鑰將密文解密,恢復(fù)為明文。如果傳輸中有人竊取,他只能得到無法理解的密文,從而對(duì)信息起到保密作用。
1.1 基本概念
數(shù)據(jù)加密技術(shù)就是指將一個(gè)信息或明文經(jīng)過加密鑰匙及加密函數(shù)轉(zhuǎn)換,變成無意義的密文,而接收方則將此密文經(jīng)過解密函數(shù).解密鑰匙還原成明文。加密技術(shù)是網(wǎng)絡(luò)安全技術(shù)的基石。
明文,即加密前的真實(shí)的數(shù)據(jù)或信息,它是可以被外界所識(shí)別,它指代的含義比較廣泛,比如用戶A要將一份文件發(fā)送給用戶B,那么我們就將用戶A手里所拿的那份文件稱之為明文。
密文,就是對(duì)信息經(jīng)過一定的處理,使它變成無意義的亂碼,非指定用戶無法對(duì)它進(jìn)行識(shí)別,例如A使用密鑰K加密消息并將其發(fā)送給B,B收到加密的消息后,使用密鑰K對(duì)其解密以恢復(fù)原始消息,那么在這一過程當(dāng)中A在途中發(fā)送給B的東西我們就叫它密文,因?yàn)檫@個(gè)文件除B外,其他人得到它也沒有任何意義,這就保證了信息傳送的保密性。
完成加密和解密的算法成為為密碼體制。人們一方面要把自己的信號(hào)隱蔽起來,另一方面則想把別人的隱蔽信息挖掘出來,于是就產(chǎn)生了密碼分析的逆科學(xué)——密碼分析。密碼分析研究的問題是如何把密文轉(zhuǎn)換成明文。把密文轉(zhuǎn)換成明文的過程稱為破譯。破譯也是進(jìn)行函數(shù)變換,變換過程中使用的參數(shù)也叫密鑰。
一般地,如果求解一個(gè)問題需要一定量的計(jì)算,但環(huán)境所能提供的實(shí)際資源卻無法實(shí)現(xiàn),則這種問題是計(jì)算上不可能的。如果一個(gè)密碼體制的破譯是計(jì)算上不可能的。則稱該密碼體制是計(jì)算上安全的。密碼體制必須滿足三個(gè)基本要求:
(1)對(duì)所有的密鑰、加密和解密都必須迅速有效;
(2)體制必須容易使用;
(3)體制的安全性必須只依賴于密鑰的保密性。密碼體制要實(shí)現(xiàn)的功能可分為保密性和真實(shí)性兩種。
保密性要求密碼分析員無法從截獲的密文中求出明文。一般情況下一個(gè)密碼體制的保密性包括兩項(xiàng)要求:
(1)即使截獲了一段密文C,甚至知道了與它對(duì)應(yīng)的明文M,密碼分析要從系統(tǒng)中求出解密變換,仍然是計(jì)算上不可行的。
(2)密碼分析員要由截獲的密文C中系統(tǒng)的求出明文M是計(jì)算上不可能的。
數(shù)據(jù)的真實(shí)性要求密碼分析員無法用虛假的密文代替真是密文而不被察覺,它也包括兩個(gè)要求:
(1)對(duì)于給定的C,即使密碼分析員知道了對(duì)應(yīng)于它的明文M,要系統(tǒng)的求出加密變換仍然是計(jì)算上不可能的。
(2)密碼分析員要系統(tǒng)地找到密文,使其是明文空間上有意義的明文,這在計(jì)算上是不可能的。
1.2 數(shù)據(jù)加密分類
專用密鑰:又稱為對(duì)稱密鑰或單密鑰,加密和解密時(shí)使用同一個(gè)密鑰,即同一個(gè)算法。如DES和MIT的Kerberos算法。單密鑰是最簡單方式,通信雙方必須交換彼此密鑰,當(dāng)需給對(duì)方發(fā)信息時(shí),用自己的加密密鑰進(jìn)行加密,而在接收方收到數(shù)據(jù)后,用對(duì)方所給的密鑰進(jìn)行解密。當(dāng)一個(gè)文本要加密傳送時(shí),該文本用密鑰加密構(gòu)成密文,密文在信道上傳送,收到密文后用同一個(gè)密鑰將密文解出來,形成普通文體供閱讀。在對(duì)稱密鑰中,密鑰的管理極為重要,一旦密鑰丟失,密文將無密可保。這種方式在與多方通信時(shí)因?yàn)樾枰4婧芏嗝荑而變得很復(fù)雜,而且密鑰本身的安全就是一個(gè)問題。
公開密鑰:又稱非對(duì)稱密鑰,加密和解密時(shí)使用不同的密鑰,即不同的算法,雖然兩者之間存在一定的關(guān)系,但不可能輕易地從一個(gè)推導(dǎo)出另一個(gè)。有一把公用的加密密鑰,有多把解密密鑰,如RSA算法。
非對(duì)稱密鑰由于兩個(gè)密鑰(加密密鑰和解密密鑰)各不相同,因而可以將一個(gè)密鑰公開,而將另一個(gè)密鑰保密,同樣可以起到加密的作用。
在這種編碼過程中,一個(gè)密碼用來加密消息,而另一個(gè)密碼用來解密消息。在兩個(gè)密鑰中有一種關(guān)系,通常是數(shù)學(xué)關(guān)系。公鑰和私鑰都是一組十分長的、數(shù)字上相關(guān)的素?cái)?shù)(是另一個(gè)大數(shù)字的因數(shù))。有一個(gè)密鑰不足以翻譯出消息,因?yàn)橛靡粋(gè)密鑰加密的消息只能用另一個(gè)密鑰才能解密。每個(gè)用戶可以得到唯一的一對(duì)密鑰,一個(gè)是公開的,另一個(gè)是保密的。公共密鑰保存在公共區(qū)域,可在用戶中傳遞,甚至可印在報(bào)紙上面。而私鑰必須存放在安全保密的地方。任何人都可以有你的公鑰,但是只有你一個(gè)人能有你的私鑰。它的工作過程是:“你要我聽你的嗎?除非你用我的公鑰加密該消息,我就可以聽你的,因?yàn)槲抑罌]有別人在偷聽。只有我的私鑰(其他人沒有)才能解密該消息,所以我知道沒有人能讀到這個(gè)消息。我不必?fù)?dān)心大家都有我的公鑰,因?yàn)樗荒苡脕斫饷茉撓ⅰ!?br />
公鑰加密體制具有以下優(yōu)點(diǎn):
(1) 密鑰分配簡單。
(2) 密鑰的保存量少。
(3) 可以滿足互不相識(shí)的人之間進(jìn)行私人談話時(shí)的保密性要求。
(4) 可以完成數(shù)字簽名和數(shù)字鑒別。
RSA算法的理論基礎(chǔ)是數(shù)論中的歐拉函數(shù),他的安全性基于大數(shù)分解的困難性,在理論上要計(jì)算兩個(gè)大素?cái)?shù)的乘積是容易的,但反過來要把一個(gè)大數(shù)分解成兩個(gè)素?cái)?shù)因子相乘的形式是很困難的,正是由于這個(gè)原因保證了此算法的安全性。
RSA的安全性依賴于大數(shù)分解。公鑰和私鑰都是兩個(gè)大素?cái)?shù) ( 大于 100個(gè)十進(jìn)制位)的函數(shù)。據(jù)猜測,從一個(gè)密鑰和密文推斷出明文的難度等同于分解兩個(gè)大素?cái)?shù)的積。
密鑰對(duì)的產(chǎn)生:選擇兩個(gè)大素?cái)?shù),p 和q 。計(jì)算:n = p * q 。然后隨機(jī)選擇加密密鑰e,要求 e 和 ( p - 1 ) * ( q - 1 ) 互質(zhì)。最后,利用Euclid 算法計(jì)算解密密鑰d, 滿足 e * d = 1 ( mod ( p - 1 ) * ( q - 1 ) ) 其中n和d也要互質(zhì)。數(shù)e和 n是公鑰,d是私鑰。兩個(gè)素?cái)?shù)p和q不再需要,應(yīng)該丟棄,不要讓任何人知道。 加密信息 m(二進(jìn)制表示)時(shí),首先把m分成等長數(shù)據(jù)塊 m1 ,m2,..., mi ,塊長s,其中 2^s <= n, s 盡可能的大。對(duì)應(yīng)的密文是:ci = mi^e ( mod n ) ( a ) 解密時(shí)作如下計(jì)算: mi = ci^d ( mod n ) ( b )
算法流程
(1). 產(chǎn)生密鑰
① 任意選取兩個(gè)不同的大質(zhì)數(shù)p和q,計(jì)算乘積n=p*q;
② 任意選取一個(gè)大整數(shù)e,e與(p-1)*(q-1)互素,整數(shù)e用做加密密鑰。注意:e的選取是很容易的,例如,所有大于p和q的素?cái)?shù)都可用。
③ 確定解密密鑰d: d * e = 1 mod(p - 1)*(q - 1)
根據(jù)e、p和q可以容易地計(jì)算出d。
④ 公開整數(shù)n和e,但是不公開d;
clc
clear
disp('產(chǎn)生密鑰對(duì):')
p=input('輸入第一個(gè)大素?cái)?shù):p=');
q=input('輸入第二個(gè)大素?cái)?shù):q=');
n=p*q
fain=(p-1)*(q-1)
e=floor(unifrnd(0,fain,1,1))
while(gcd(e,fain)~=1)|(e<2);
e=floor(unifrnd(0,fain,1,1))
end
%模n求逆函數(shù)
n1=fain;n2=e;b1=0;b2=1;
for i=1:1000
q1=floor(n1/n2);
r=n1-q1*n2;
if r~=0
n1=n2;
n2=r;
t=b2;
b2=b1-q1*b2;
b1=t;
else
break
end
end
if n2~=1
warning('所求的模逆不存在') ;
end
if n2==1
d=mod(b2,fain)
fid=input('輸入待加密的明文:','s');
f=abs(fid);
for i=1:length(f)
a=f(i);b=e;c=1;
for j=1:1000
if b==0
dashuchenmi=c;
end
if mod(b,2)~=0
b=b-1;
c=mod(c*a,n);
else
b=b/2;
a=mod(a*a,n);
end
end
dashuchenmi=c;
miwen(i)=setstr(dashuchenmi);
end
for i=1:length(f)
a2=miwen(i);b2=d;c2=1;
for j=1:1000
if b2==0
dashuchenmi2=c2;
end
if mod(b2,2)~=0
b2=b2-1;
c2=mod(c2*a2,n);
else
b2=b2/2;
a2=mod(a2*a2,n);
end
end
dashuchenmi2=c2;
mingwen(i)=setstr(dashuchenmi2);
end
end
disp('對(duì)所輸入的明文進(jìn)行加密后的密文:')
miwen
disp('經(jīng)過解密后恢復(fù)出的明文:')
mingwen
————————————————
聯(lián)系:highspeedlogic
QQ :1224848052
微信:HuangL1121
郵箱:1224848052@qq.com
網(wǎng)站:http://www.mat7lab.com/
網(wǎng)站:http://www.hslogic.com/
微信掃一掃: