基于RSA加密算法身份認證方案的設(shè)計
眾所周知,計算機網(wǎng)絡(luò)系統(tǒng)的安全性常取決于能否正確地驗證通信或終端用戶的個人身份。如機要部門或地區(qū)的進入、自動出納機提款以及各種計算機資源系統(tǒng)的接入等都需要對用戶的個人身份進行識別認可,為此,我們提出了一種基于RSA加密算法的身份認證方案。
一、 RSA加密體制及身份認證
由于計算機網(wǎng)絡(luò)通信和各類應用業(yè)務的需求,要求相應的數(shù)據(jù)文件加密方法應具有靈活性和快速的特點。
RSA加密體制是1978年提出來的,它是第一個理論上最為成功的公開密鑰加密體制,它的安全性基于數(shù)論中的Euler定理和計算復雜性理論中的下述論斷:求兩個大素數(shù)的乘積是很容易計算的,但要分解兩個大素數(shù)的乘積,求出它們的素數(shù)因子卻是非常困難的,它屬于NP完全類,是一種冪模運算的加密體制。除了用于數(shù)據(jù)文件加密外,它還能用于數(shù)字簽字和身份認證。要構(gòu)造RSA加密算法和解密算法中的公鑰和私鑰,必須首先構(gòu)造兩個大素數(shù),RSA加密算法和解密算法的安全性與所使用的大素數(shù)有密切關(guān)系。因此。研究RSA公鑰加密體制中的大素數(shù)生成,構(gòu)造符合RSA安全體系要求的強素數(shù),是RSA加密算法算法實用化的基礎(chǔ)。
身份認證可以防止非法人員進入系統(tǒng),防止非法人員通過違法操作獲取不正當利益、訪問受控信息和惡意破壞系統(tǒng)數(shù)據(jù)完整性的情況發(fā)生。同時,在一些需要具有較高安全性的系統(tǒng)中,通過用戶身份的唯一性,系統(tǒng)可以自動記錄用戶所做的操作,進行有效的核查。在一個有競爭和爭斗的現(xiàn)實社會中,身份欺詐是不可避免的,因此常常需要證明個人的身份。通信和數(shù)據(jù)系統(tǒng)的安全性也取決于能否正確驗證用戶或終端的個人身份。對于計算機的訪問和使用、安全地區(qū)的出入也都是以精確的身份驗證為基礎(chǔ)的。網(wǎng)絡(luò)中的各種應用和計算機系統(tǒng)都需要身份認證來確認一個用戶的合法性,然后確定這個用戶的個人數(shù)據(jù)和特定權(quán)限。
二、 基于RSA加密算法身份認證方案的設(shè)計
1、 數(shù)字證書
數(shù)字證書建立在公開密鑰和數(shù)字簽名技術(shù)基礎(chǔ)上,其主要作用是將持有人的身份與其公鑰綁定在一起。數(shù)字證書由可信賴的而且獨立的第三方認證中心(CA)頒發(fā)。證書的內(nèi)容包括一個公開密鑰、擁有該證書實體的身份信息以及CA中心對這些內(nèi)容的數(shù)字簽名,CA對數(shù)字證書的簽名確保了該證書內(nèi)容的完整性和真實性,CA不僅負責產(chǎn)生數(shù)字證書,而且承擔對證書的管理、存檔、發(fā)放以及作廢等任務。基于公開密鑰加密體制RSA的認證系統(tǒng)中,通信各方首先要獲得數(shù)字證書,數(shù)字證書是通過管理仲裁機構(gòu)建立的。
參加通信的所有各方事先自己生成一對密鑰,將其中公開密鑰部分作為申請書的一部分交給一個管理仲裁機構(gòu)。仲裁機構(gòu)對該用戶及其公鑰進行審查,認為其可以參加通信后,由該仲裁機構(gòu)用自己的秘密密鑰對一條信息進行數(shù)字簽名,該信息包括該參加者的公開密鑰和其他附加信息。仲裁機構(gòu)將簽名后的信息交給參加者,此信息就是證書(Certificate)。通信各方通過某種途徑獲得對方的數(shù)字證書后,用仲裁者的公開密鑰驗證證書的合法性,同時獲得該用戶的公開密鑰。
2、用戶間身份認證的設(shè)計思想
假設(shè)需要認證雙方為A和B,A和B在通信前需要進行身份認證,以下是本文設(shè)計的身份認證思想。
(1)A將自己的身份IDA傳遞給B,但是B不能確定此信息是來自A還是竊密者C。
(2)B收到IDA后,產(chǎn)生一個隨機的消息RB,用A的公鑰PA加密IDA和RB得到y(tǒng)1=EPA(IDA+RB),并用自己的私鑰SB做y2=DSB(EPA(IDA+RB))運算即簽名,將結(jié)果EPA(IDA+RB)和DSB(EPA(IDA+RB))傳送給A。
(3)A收到消息后用B的公鑰PB對DSB(EPA(IDA+RB))進行驗證,驗證原理是根據(jù)EPB(DSB(EPA(RB))=EPA(RB)。由于只有合法的B才擁有公鑰SB,因此可以通過將計算結(jié)果與EPA(RB)比較,A就可以確認通信對方是否是B。如果驗證通過,A就可以確認通信對方的確是B,并且對EPA(IDA+RB)進行解密,解密的原理是DSA(EPA(IDA+RB))=IDA+RB。通過解密得到IDA+RB,分離IDA和RB。
(4)A將求得的RB用B的公鑰PB加密傳送給B,因為只有合法的A可以求得RB從而可以得到正確的EPB(RB);B只需用自己的私鑰SB解密(EPB(RB))即可得到DSB(EPB(RB))=RB,將此RB與原來的RB對比就可以確認對方是否是A。
三、基于RSA加密算法身份認證方案的實現(xiàn)
為了實現(xiàn)信息的網(wǎng)絡(luò)化管理,系統(tǒng)采用了VC.NET結(jié)合SQLServer2000數(shù)據(jù)庫的解決方案,即將用戶數(shù)字證書等有關(guān)信息存放在SQLServer數(shù)據(jù)庫中。選用SQLServer2000作為后臺數(shù)據(jù)庫是因為該系統(tǒng)數(shù)據(jù)量大,系統(tǒng)的安全性較高,而且SQLServer2000在構(gòu)造、部署和管理大中型的Web應用方面,有它獨一無二的優(yōu)點。利用VC.NET通過ADO.NET對學生選課數(shù)據(jù)庫進行管理,ADO.NET是Mi2crosoft的數(shù)據(jù)訪問框架,其核心采用了非連接數(shù)據(jù)的概念,而用于Internet通信的HTTP協(xié)議沒有包含維護請求間狀態(tài)機制,這樣使得系統(tǒng)數(shù)據(jù)處理通過Internet進行非常順利。
1、基于RSA加密算法身份認證方案的體系結(jié)構(gòu)
系統(tǒng)采用了B/S(Browser/Server)三層體系結(jié)構(gòu),即表示層(Browser)、功能層(WebService)和數(shù)據(jù)服務層(DataBaseService);IIS架設(shè)Web站點;VC.NET通過ADO.NET訪問數(shù)據(jù)庫。方案的體系結(jié)構(gòu)圖如圖1所示。

對數(shù)據(jù)庫的訪問在Web服務器端完成??蛻舳藷o須安裝任何專門軟件,通過瀏覽器即可訪問Web服務器并運行其程序。采用了這種體系結(jié)構(gòu)的系統(tǒng)充分利用了服務器資源,提供了跨平臺、簡單一致的應用環(huán)境,實現(xiàn)了開發(fā)環(huán)境與應用環(huán)境的分離,減少了系統(tǒng)開發(fā)和維護的工作量,便于用戶群的擴展。
2、基于RSA加密算法身份認證方案的實現(xiàn)過程
(1)建立數(shù)字證書
選取兩個大素數(shù):p和q,并且兩數(shù)的長度相等,以獲取最大程度的安全性;計算兩數(shù)的乘積:n=p3q;隨機選取加密密鑰d,為滿足ed=1mod(p-1)(q-1),則d=e-1mod((p-1)(q-1)),d和n也互素;e是公鑰,d是私鑰,n是公開的。兩個素數(shù)p和q不再需要,可以被舍棄,但決不能泄露。這里我們假設(shè)生成了用戶A的密鑰對(eA,dA)和用戶B的密鑰對(eB,dB)。
用戶將私鑰d秘密保存,公鑰e交給一個管理仲裁機構(gòu)認證中心,獲得自己的數(shù)字證書,然后將數(shù)字證書保存在自己的機器上,同時認證中心將合法用戶的數(shù)字證書保存在數(shù)據(jù)庫中,以便用戶查詢。用戶當與網(wǎng)絡(luò)上某個用戶通信需要進行身份認證時,將自己的數(shù)字證書發(fā)送給通信的對方。對方收到數(shù)字證書后,首先通過認證中心驗證其合法性。如果是合法的,就可以從證書中獲得需要的用戶公鑰,然后利用該公鑰驗證對方的身份;如果不合法,就可以終止通信。
(2)進行身份認證
第一步:用戶A對用戶B的認證。
a、用戶A發(fā)送自己的身份IDA傳遞給B。
b、加密:當用戶B收到用戶A的通信標識符后產(chǎn)生一個隨機消息RB,用戶B把用戶A的標識符IDA和隨機數(shù)RB組合在一起,構(gòu)成明文m,然后把明文m進行分組。最后使用A的公鑰利用加密公式Ci=meA
i(modn),對每個分組mi進行加密。
c、簽名:用戶B用自己的私鑰dB把加密后的消息Ci簽名,公式為Si=CdBi(modn),用戶B把Ci和Si組合到一起組成C和S發(fā)給用戶A。
d、驗證:當用戶A收到用戶B發(fā)來的消息后首先對消息進行分離,分離出C和S,再將C和S分組為Ci和Si,用戶A使用用戶B的公鑰eB對用戶B的身份進行驗證,驗證公式為Vi=SeBi(modn),如果Vi和
Ci完全相等,就可以說明對方就是用戶B。
e、解密:用戶A再使用自己的私鑰dA對Ci進行解密,解密公式為mi=CdAi(modn),然后把mi整合后,分離出用戶A的標識符IDA′和隨機數(shù)RB′,用戶A把IDA′和自己的標識符IDA進行比較,如果相同則對方就是B。用戶A對用戶B的身份認證結(jié)束。
第二步:用戶B對用戶A的認證。
a、加密:用戶A把RB′用用戶B的公鑰eB進行加密,加密公式為y3=EeB(RB′),用戶A把加密后的消息發(fā)送給用戶B。
b、驗證:當用戶B收到消息后,使用自己的私鑰對消息進行解密,解密公式為RB″=DdB(y3)。
由于RB是用戶B產(chǎn)生的,如果RB″和RB相等,則說明對方就是用戶A。用戶B對用戶A的認證過程結(jié)束。
認證過程如圖2所示。

(3)基于RSA加密算法身份認證方案的實驗
a、運行環(huán)境:硬件與網(wǎng)絡(luò)環(huán)境:用服務器能運行WindowsXP、WindowsNT4.0+ServicePack6及以上操作系統(tǒng),建議使用586或以上的計算機,并配有10M以上的網(wǎng)卡一塊,如果采用電話線撥號上網(wǎng)的用戶需要配置一臺調(diào)制解調(diào)器。系統(tǒng)軟件:操作系統(tǒng)Windows2000、XP及以上版本,SQLServer2000。運行環(huán)境:MicrosoftVisualC++6.0,瀏覽器使用IE5.5和MDAC2.6及以上版本。
b、代碼實現(xiàn)
在認證過程使用的加密和解密算法相同,已利用VisualC++6.0實現(xiàn),另外簽名和驗證的算法也和加密算法相同,只是每次利用的秘鑰不同,這也是利用RSA加密算法進行認證的優(yōu)勢。這里只列出少數(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密鑰對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)造一個大數(shù)a
CHECK_MSG(BI.BuildBIFromByte(a,In,len)&&a.len<=n.len,“錯誤:RSA加密(解密)的內(nèi)容過長!”)//加密(解密)
CHECK(BI.PowMod(c,a,key,n))CGfL::HalfByteToByte(Out,c.bit,c.len);return(c.len+1)>>1;
}
本方案實現(xiàn)了一個基于RSA加密算法認證系統(tǒng),其中RSA密鑰長度最大可達600bits16進制數(shù)(約合720位10進制數(shù)),而且產(chǎn)生RSA密鑰對的速度非常快,一般在3s以內(nèi)完成.在認證過程中,加密(簽名)和解密(驗證)時可以從文件中導入密鑰,而且加密(簽名)和解密(驗證)速度也非???,一般在6s以內(nèi)完成。
小知識之Euler定理
在數(shù)學及許多分支中都可以見到很多以歐拉命名的常數(shù)、公式和定理。在數(shù)論中,歐拉定理(Euler Theorem,也稱費馬-歐拉定理或歐拉函數(shù)定理)是一個關(guān)于同余的性質(zhì)。歐拉定理得名于瑞士數(shù)學家萊昂哈德·歐拉,該定理被認為是數(shù)學世界中最美妙的定理之一。歐拉定理實際上是費馬小定理的推廣。此外還有平面幾何中的歐拉定理、多面體歐拉定理(在一凸多面體中,頂點數(shù)-棱邊數(shù)+面數(shù)=2)。西方經(jīng)濟學中歐拉定理又稱為產(chǎn)量分配凈盡定理,指在完全競爭的條件下,假設(shè)長期中規(guī)模收益不變,則全部產(chǎn)品正好足夠分配給各個要素。另有歐拉公式。










