基于RSA加密算法身份認(rèn)證方案的設(shè)計(jì)

眾所周知,計(jì)算機(jī)網(wǎng)絡(luò)系統(tǒng)的安全性常取決于能否正確地驗(yàn)證通信或終端用戶的個(gè)人身份。如機(jī)要部門或地區(qū)的進(jìn)入、自動(dòng)出納機(jī)提款以及各種計(jì)算機(jī)資源系統(tǒng)的接入等都需要對(duì)用戶的個(gè)人身份進(jìn)行識(shí)別認(rèn)可,為此,我們提出了一種基于RSA加密算法的身份認(rèn)證方案。

一、 RSA加密體制及身份認(rèn)證

由于計(jì)算機(jī)網(wǎng)絡(luò)通信和各類應(yīng)用業(yè)務(wù)的需求,要求相應(yīng)的數(shù)據(jù)文件加密方法應(yīng)具有靈活性和快速的特點(diǎn)。

RSA加密體制是1978年提出來的,它是第一個(gè)理論上最為成功的公開密鑰加密體制,它的安全性基于數(shù)論中的Euler定理和計(jì)算復(fù)雜性理論中的下述論斷:求兩個(gè)大素?cái)?shù)的乘積是很容易計(jì)算的,但要分解兩個(gè)大素?cái)?shù)的乘積,求出它們的素?cái)?shù)因子卻是非常困難的,它屬于NP完全類,是一種冪模運(yùn)算的加密體制。除了用于數(shù)據(jù)文件加密外,它還能用于數(shù)字簽字和身份認(rèn)證。要構(gòu)造RSA加密算法和解密算法中的公鑰和私鑰,必須首先構(gòu)造兩個(gè)大素?cái)?shù),RSA加密算法和解密算法的安全性與所使用的大素?cái)?shù)有密切關(guān)系。因此。研究RSA公鑰加密體制中的大素?cái)?shù)生成,構(gòu)造符合RSA安全體系要求的強(qiáng)素?cái)?shù),是RSA加密算法算法實(shí)用化的基礎(chǔ)。

身份認(rèn)證可以防止非法人員進(jìn)入系統(tǒng),防止非法人員通過違法操作獲取不正當(dāng)利益、訪問受控信息和惡意破壞系統(tǒng)數(shù)據(jù)完整性的情況發(fā)生。同時(shí),在一些需要具有較高安全性的系統(tǒng)中,通過用戶身份的唯一性,系統(tǒng)可以自動(dòng)記錄用戶所做的操作,進(jìn)行有效的核查。在一個(gè)有競(jìng)爭(zhēng)和爭(zhēng)斗的現(xiàn)實(shí)社會(huì)中,身份欺詐是不可避免的,因此常常需要證明個(gè)人的身份。通信和數(shù)據(jù)系統(tǒng)的安全性也取決于能否正確驗(yàn)證用戶或終端的個(gè)人身份。對(duì)于計(jì)算機(jī)的訪問和使用、安全地區(qū)的出入也都是以精確的身份驗(yàn)證為基礎(chǔ)的。網(wǎng)絡(luò)中的各種應(yīng)用和計(jì)算機(jī)系統(tǒng)都需要身份認(rèn)證來確認(rèn)一個(gè)用戶的合法性,然后確定這個(gè)用戶的個(gè)人數(shù)據(jù)和特定權(quán)限。

二、 基于RSA加密算法身份認(rèn)證方案的設(shè)計(jì)

1、 數(shù)字證書

數(shù)字證書建立在公開密鑰和數(shù)字簽名技術(shù)基礎(chǔ)上,其主要作用是將持有人的身份與其公鑰綁定在一起。數(shù)字證書由可信賴的而且獨(dú)立的第三方認(rèn)證中心(CA)頒發(fā)。證書的內(nèi)容包括一個(gè)公開密鑰、擁有該證書實(shí)體的身份信息以及CA中心對(duì)這些內(nèi)容的數(shù)字簽名,CA對(duì)數(shù)字證書的簽名確保了該證書內(nèi)容的完整性和真實(shí)性,CA不僅負(fù)責(zé)產(chǎn)生數(shù)字證書,而且承擔(dān)對(duì)證書的管理、存檔、發(fā)放以及作廢等任務(wù)?;诠_密鑰加密體制RSA的認(rèn)證系統(tǒng)中,通信各方首先要獲得數(shù)字證書,數(shù)字證書是通過管理仲裁機(jī)構(gòu)建立的。

參加通信的所有各方事先自己生成一對(duì)密鑰,將其中公開密鑰部分作為申請(qǐng)書的一部分交給一個(gè)管理仲裁機(jī)構(gòu)。仲裁機(jī)構(gòu)對(duì)該用戶及其公鑰進(jìn)行審查,認(rèn)為其可以參加通信后,由該仲裁機(jī)構(gòu)用自己的秘密密鑰對(duì)一條信息進(jìn)行數(shù)字簽名,該信息包括該參加者的公開密鑰和其他附加信息。仲裁機(jī)構(gòu)將簽名后的信息交給參加者,此信息就是證書(Certificate)。通信各方通過某種途徑獲得對(duì)方的數(shù)字證書后,用仲裁者的公開密鑰驗(yàn)證證書的合法性,同時(shí)獲得該用戶的公開密鑰。

2、用戶間身份認(rèn)證的設(shè)計(jì)思想

假設(shè)需要認(rèn)證雙方為A和B,A和B在通信前需要進(jìn)行身份認(rèn)證,以下是本文設(shè)計(jì)的身份認(rèn)證思想。

(1)A將自己的身份IDA傳遞給B,但是B不能確定此信息是來自A還是竊密者C。

(2)B收到IDA后,產(chǎn)生一個(gè)隨機(jī)的消息RB,用A的公鑰PA加密IDA和RB得到y(tǒng)1=EPA(IDA+RB),并用自己的私鑰SB做y2=DSB(EPA(IDA+RB))運(yùn)算即簽名,將結(jié)果EPA(IDA+RB)和DSB(EPA(IDA+RB))傳送給A。

(3)A收到消息后用B的公鑰PB對(duì)DSB(EPA(IDA+RB))進(jìn)行驗(yàn)證,驗(yàn)證原理是根據(jù)EPB(DSB(EPA(RB))=EPA(RB)。由于只有合法的B才擁有公鑰SB,因此可以通過將計(jì)算結(jié)果與EPA(RB)比較,A就可以確認(rèn)通信對(duì)方是否是B。如果驗(yàn)證通過,A就可以確認(rèn)通信對(duì)方的確是B,并且對(duì)EPA(IDA+RB)進(jìn)行解密,解密的原理是DSA(EPA(IDA+RB))=IDA+RB。通過解密得到IDA+RB,分離IDA和RB。

(4)A將求得的RB用B的公鑰PB加密傳送給B,因?yàn)橹挥泻戏ǖ腁可以求得RB從而可以得到正確的EPB(RB);B只需用自己的私鑰SB解密(EPB(RB))即可得到DSB(EPB(RB))=RB,將此RB與原來的RB對(duì)比就可以確認(rèn)對(duì)方是否是A。

三、基于RSA加密算法身份認(rèn)證方案的實(shí)現(xiàn)

為了實(shí)現(xiàn)信息的網(wǎng)絡(luò)化管理,系統(tǒng)采用了VC.NET結(jié)合SQLServer2000數(shù)據(jù)庫的解決方案,即將用戶數(shù)字證書等有關(guān)信息存放在SQLServer數(shù)據(jù)庫中。選用SQLServer2000作為后臺(tái)數(shù)據(jù)庫是因?yàn)樵撓到y(tǒng)數(shù)據(jù)量大,系統(tǒng)的安全性較高,而且SQLServer2000在構(gòu)造、部署和管理大中型的Web應(yīng)用方面,有它獨(dú)一無二的優(yōu)點(diǎn)。利用VC.NET通過ADO.NET對(duì)學(xué)生選課數(shù)據(jù)庫進(jìn)行管理,ADO.NET是Mi2crosoft的數(shù)據(jù)訪問框架,其核心采用了非連接數(shù)據(jù)的概念,而用于Internet通信的HTTP協(xié)議沒有包含維護(hù)請(qǐng)求間狀態(tài)機(jī)制,這樣使得系統(tǒng)數(shù)據(jù)處理通過Internet進(jìn)行非常順利。

1、基于RSA加密算法身份認(rèn)證方案的體系結(jié)構(gòu)

系統(tǒng)采用了B/S(Browser/Server)三層體系結(jié)構(gòu),即表示層(Browser)、功能層(WebService)和數(shù)據(jù)服務(wù)層(DataBaseService);IIS架設(shè)Web站點(diǎn);VC.NET通過ADO.NET訪問數(shù)據(jù)庫。方案的體系結(jié)構(gòu)圖如圖1所示。

基于RSA加密算法身份認(rèn)證方案的設(shè)計(jì)

對(duì)數(shù)據(jù)庫的訪問在Web服務(wù)器端完成。客戶端無須安裝任何專門軟件,通過瀏覽器即可訪問Web服務(wù)器并運(yùn)行其程序。采用了這種體系結(jié)構(gòu)的系統(tǒng)充分利用了服務(wù)器資源,提供了跨平臺(tái)、簡(jiǎn)單一致的應(yīng)用環(huán)境,實(shí)現(xiàn)了開發(fā)環(huán)境與應(yīng)用環(huán)境的分離,減少了系統(tǒng)開發(fā)和維護(hù)的工作量,便于用戶群的擴(kuò)展。

2、基于RSA加密算法身份認(rèn)證方案的實(shí)現(xiàn)過程

(1)建立數(shù)字證書

選取兩個(gè)大素?cái)?shù):p和q,并且兩數(shù)的長(zhǎng)度相等,以獲取最大程度的安全性;計(jì)算兩數(shù)的乘積:n=p3q;隨機(jī)選取加密密鑰d,為滿足ed=1mod(p-1)(q-1),則d=e-1mod((p-1)(q-1)),d和n也互素;e是公鑰,d是私鑰,n是公開的。兩個(gè)素?cái)?shù)p和q不再需要,可以被舍棄,但決不能泄露。這里我們假設(shè)生成了用戶A的密鑰對(duì)(eA,dA)和用戶B的密鑰對(duì)(eB,dB)。

用戶將私鑰d秘密保存,公鑰e交給一個(gè)管理仲裁機(jī)構(gòu)認(rèn)證中心,獲得自己的數(shù)字證書,然后將數(shù)字證書保存在自己的機(jī)器上,同時(shí)認(rèn)證中心將合法用戶的數(shù)字證書保存在數(shù)據(jù)庫中,以便用戶查詢。用戶當(dāng)與網(wǎng)絡(luò)上某個(gè)用戶通信需要進(jìn)行身份認(rèn)證時(shí),將自己的數(shù)字證書發(fā)送給通信的對(duì)方。對(duì)方收到數(shù)字證書后,首先通過認(rèn)證中心驗(yàn)證其合法性。如果是合法的,就可以從證書中獲得需要的用戶公鑰,然后利用該公鑰驗(yàn)證對(duì)方的身份;如果不合法,就可以終止通信。

(2)進(jìn)行身份認(rèn)證

第一步:用戶A對(duì)用戶B的認(rèn)證。

a、用戶A發(fā)送自己的身份IDA傳遞給B。

b、加密:當(dāng)用戶B收到用戶A的通信標(biāo)識(shí)符后產(chǎn)生一個(gè)隨機(jī)消息RB,用戶B把用戶A的標(biāo)識(shí)符IDA和隨機(jī)數(shù)RB組合在一起,構(gòu)成明文m,然后把明文m進(jìn)行分組。最后使用A的公鑰利用加密公式Ci=meA
i(modn),對(duì)每個(gè)分組mi進(jìn)行加密。

c、簽名:用戶B用自己的私鑰dB把加密后的消息Ci簽名,公式為Si=CdBi(modn),用戶B把Ci和Si組合到一起組成C和S發(fā)給用戶A。

d、驗(yàn)證:當(dāng)用戶A收到用戶B發(fā)來的消息后首先對(duì)消息進(jìn)行分離,分離出C和S,再將C和S分組為Ci和Si,用戶A使用用戶B的公鑰eB對(duì)用戶B的身份進(jìn)行驗(yàn)證,驗(yàn)證公式為Vi=SeBi(modn),如果Vi和
Ci完全相等,就可以說明對(duì)方就是用戶B。

e、解密:用戶A再使用自己的私鑰dA對(duì)Ci進(jìn)行解密,解密公式為mi=CdAi(modn),然后把mi整合后,分離出用戶A的標(biāo)識(shí)符IDA′和隨機(jī)數(shù)RB′,用戶A把IDA′和自己的標(biāo)識(shí)符IDA進(jìn)行比較,如果相同則對(duì)方就是B。用戶A對(duì)用戶B的身份認(rèn)證結(jié)束。

第二步:用戶B對(duì)用戶A的認(rèn)證。

a、加密:用戶A把RB′用用戶B的公鑰eB進(jìn)行加密,加密公式為y3=EeB(RB′),用戶A把加密后的消息發(fā)送給用戶B。

b、驗(yàn)證:當(dāng)用戶B收到消息后,使用自己的私鑰對(duì)消息進(jìn)行解密,解密公式為RB″=DdB(y3)。

由于RB是用戶B產(chǎn)生的,如果RB″和RB相等,則說明對(duì)方就是用戶A。用戶B對(duì)用戶A的認(rèn)證過程結(jié)束。

認(rèn)證過程如圖2所示。

基于RSA加密算法身份認(rèn)證方案的設(shè)計(jì)

(3)基于RSA加密算法身份認(rèn)證方案的實(shí)驗(yàn)

a、運(yùn)行環(huán)境:硬件與網(wǎng)絡(luò)環(huán)境:用服務(wù)器能運(yùn)行WindowsXP、WindowsNT4.0+ServicePack6及以上操作系統(tǒng),建議使用586或以上的計(jì)算機(jī),并配有10M以上的網(wǎng)卡一塊,如果采用電話線撥號(hào)上網(wǎng)的用戶需要配置一臺(tái)調(diào)制解調(diào)器。系統(tǒng)軟件:操作系統(tǒng)Windows2000、XP及以上版本,SQLServer2000。運(yùn)行環(huán)境:MicrosoftVisualC++6.0,瀏覽器使用IE5.5和MDAC2.6及以上版本。

b、代碼實(shí)現(xiàn)

在認(rèn)證過程使用的加密和解密算法相同,已利用VisualC++6.0實(shí)現(xiàn),另外簽名和驗(yàn)證的算法也和加密算法相同,只是每次利用的秘鑰不同,這也是利用RSA加密算法進(jìn)行認(rèn)證的優(yōu)勢(shì)。這里只列出少數(shù)代碼:

classCRsa{public:

{

CRsa();

intEncrypt(char3Out,char3In,UINTlen,char3KeyStr,char3ModStr);

//加密intDecrypt(char3Out,char3In,UINTlen,char3KeyStr,char3ModStr)//解密

{returnEncrypt(Out,In,len,KeyStr,ModStr);}

boolGetKey(BigInt&p,BigInt&q,BigInt&e,BigInt&d,BigInt&n,UINTplen,UINTqlen,UINTelen);

//獲取RSA密鑰對(duì)boolSetKey(char3KeyStr,char3ModStr);

//由輸入密鑰串設(shè)置RSA密鑰和模nprivate:BigIntkey,n,Zero;

//密鑰,模n,常量0

CBigIntBI;

};

intCRsa::Encrypt(char3Out,char3In,UINTlen,char3KeyStr,char3ModStr)

{

staticBigInta,c;

CHECK(Out&&In&&len&&SetKey(KeyStr,ModStr))//由輸入構(gòu)造一個(gè)大數(shù)a

CHECK_MSG(BI.BuildBIFromByte(a,In,len)&&a.len<=n.len,“錯(cuò)誤:RSA加密(解密)的內(nèi)容過長(zhǎng)!”)//加密(解密)

CHECK(BI.PowMod(c,a,key,n))CGfL::HalfByteToByte(Out,c.bit,c.len);return(c.len+1)>>1;

}

本方案實(shí)現(xiàn)了一個(gè)基于RSA加密算法認(rèn)證系統(tǒng),其中RSA密鑰長(zhǎng)度最大可達(dá)600bits16進(jìn)制數(shù)(約合720位10進(jìn)制數(shù)),而且產(chǎn)生RSA密鑰對(duì)的速度非??欤话阍?s以內(nèi)完成.在認(rèn)證過程中,加密(簽名)和解密(驗(yàn)證)時(shí)可以從文件中導(dǎo)入密鑰,而且加密(簽名)和解密(驗(yàn)證)速度也非???,一般在6s以內(nèi)完成。

小知識(shí)之Euler定理

在數(shù)學(xué)及許多分支中都可以見到很多以歐拉命名的常數(shù)、公式和定理。在數(shù)論中,歐拉定理(Euler Theorem,也稱費(fèi)馬-歐拉定理或歐拉函數(shù)定理)是一個(gè)關(guān)于同余的性質(zhì)。歐拉定理得名于瑞士數(shù)學(xué)家萊昂哈德·歐拉,該定理被認(rèn)為是數(shù)學(xué)世界中最美妙的定理之一。歐拉定理實(shí)際上是費(fèi)馬小定理的推廣。此外還有平面幾何中的歐拉定理、多面體歐拉定理(在一凸多面體中,頂點(diǎn)數(shù)-棱邊數(shù)+面數(shù)=2)。西方經(jīng)濟(jì)學(xué)中歐拉定理又稱為產(chǎn)量分配凈盡定理,指在完全競(jìng)爭(zhēng)的條件下,假設(shè)長(zhǎng)期中規(guī)模收益不變,則全部產(chǎn)品正好足夠分配給各個(gè)要素。另有歐拉公式。