安全聊天系統(tǒng)的設(shè)計與實(shí)現(xiàn)_第1頁
安全聊天系統(tǒng)的設(shè)計與實(shí)現(xiàn)_第2頁
安全聊天系統(tǒng)的設(shè)計與實(shí)現(xiàn)_第3頁
安全聊天系統(tǒng)的設(shè)計與實(shí)現(xiàn)_第4頁
安全聊天系統(tǒng)的設(shè)計與實(shí)現(xiàn)_第5頁
已閱讀5頁,還剩32頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、TheDesignandimplementationofsafechatsystem陳繁星安全聊天系統(tǒng)的設(shè)計與實(shí)現(xiàn)第1頁共32頁安全聊天系統(tǒng)的設(shè)計與實(shí)現(xiàn)學(xué)生姓名:XXX指導(dǎo)老師:XXX摘要隨著計算機(jī)的不斷普及和互聯(lián)網(wǎng)技術(shù)在全球領(lǐng)域的高速發(fā)展。越來越多的人使用到了聊天程序。聊天程序給人們帶來通信便利的同時也存在著一些安全隱患,傳統(tǒng)的聊天程序以明文方式傳送聊天內(nèi)容,這樣就給一些用心不良的人大開方便之門。本系統(tǒng)正是基于以上原因而設(shè)計的加密聊天程序。聊天程序采用服務(wù)器/客戶端模式。在Linux環(huán)境下采用socket套接口編程,服務(wù)器程序以創(chuàng)建線程池的方式為每一個客戶服務(wù)。聊天內(nèi)容由服務(wù)器轉(zhuǎn)發(fā)。在聊天程

2、序中加入了對稱加密算法DES和非對稱加密算法RSA。其基本實(shí)現(xiàn)是由服務(wù)器端生成RSA的公鑰和私鑰,由客戶端生成DES對稱密鑰,服務(wù)器端傳送公鑰至客戶端加密DES密鑰之后回傳服務(wù)器,服務(wù)器再用本地的私鑰解密獲得DES密鑰。此后雙方的通信由DES密鑰加密后傳送,這樣既能高效的加密明文又能在信道上安全的傳送密鑰使得密鑰間的共享成為現(xiàn)實(shí)。關(guān)鍵詞對稱加密算法;非對稱加密算法;聊天系統(tǒng)Studentname:CHENFan-xingAdvisor:ZHOUShu-renAbstractAlongwithComputerbecomingmoreandmorepopularandInternettechnol

3、ogydevelopingrapidly,alotofPeoplebegantousetheIM(chatprogram).Chatprogrambringspeoplemoreconvenience,butatthesametime,securityproblemexisted.Thetraditionalchatprogramsendsthemessagebyplaintext,whichopenthedoorforthebadman.Thisencryptedchatsystemisrightbasedonthepoint.ThesystemisinC/Sarchitectureusin

4、gsocketbasedonLinux.Theserverprogramserveseachclientinthewayofestablishingthreadandisresponsibletotransfermessage.TheDESalgorithmandRSAalgorithmareusedtoencryptinthisprogram.ThebasicprincipleisthattheservergeneratesRSApublickeyandprivatekeyandclientgeneratesDESsymmetricalsecretkey.Firstly,theservers

5、endsthepublickeytoclient,andthenclientsendsitbackafterencryptingDESsecretkey.Secondly,theServeruseslocalprivatekeytodecodetoobtaintheDESprivatekey.陳繁星安全聊天系統(tǒng)的設(shè)計與實(shí)現(xiàn)第2頁共32頁Afterthen,themessageissentafterencryptedbyDESsecretkey.Sotheplaintextcanbeencryptedeffectivelyandsentinchannelinsecurity.Keywordssy

6、mmetryencryptingprogram;unsymmetricalencryptingprogram;chatsystem陳繁星安全聊天系統(tǒng)的設(shè)計與實(shí)現(xiàn)第3頁共32頁1引言課題背景自從TCP/IP協(xié)議族成為計算機(jī)通信的主要網(wǎng)絡(luò)協(xié)議,基于該協(xié)議族開發(fā)的網(wǎng)絡(luò)應(yīng)用程序數(shù)不勝數(shù)。聊天程序便是其中之一。聊天程序使人們可以通過互聯(lián)網(wǎng)及時傳送消息,讓遠(yuǎn)在千里之外的人們暢所欲言。傳統(tǒng)的聊天程序在給人們帶來方便的同時也逐漸暴露出一些安全隱患。前不久網(wǎng)上登出了這樣一則新聞:上海某銀行的白領(lǐng)麗人,因?yàn)榱奶斐绦蚴鼙O(jiān)控被同事知道了個人隱私,被迫辭去了月薪三萬余元的工作。于是聊天程序的安全性受到了人們的廣泛關(guān)注。

7、國內(nèi)外研究現(xiàn)狀從國內(nèi)外對聊天程序的加密情況看,大多數(shù)處理方式是在現(xiàn)有的聊天程序基礎(chǔ)之上添加相應(yīng)的加密插件來實(shí)現(xiàn)加密。比較典型的例子是Linux平臺下的多集成聊天程序Gaim,其中集成了ICQ、MSN、QQ等現(xiàn)今主流國內(nèi)外聊天程序。普遍的聊天程序沒有經(jīng)過加密而直接傳輸聊天明文。Gaim通過添加插件程序?qū)ξ醇用艿牧奶斐绦蜻M(jìn)行加密傳輸,通信雙方需要只要同時安裝加密插件就可以順利的對聊天內(nèi)容進(jìn)行加密解密。這其中存在一個現(xiàn)而易見的問題:要是一方加入了加密插件而另一方卻沒有相應(yīng)的解密程序顯然雙方不能正確通信。本課題研究的意義聊天程序是否加密關(guān)系著用戶的切身利用。為了保衛(wèi)公民隱私權(quán)不受到網(wǎng)絡(luò)黑客的不法侵犯,

8、開發(fā)加密傳輸信息的聊天程序有著重大意義。聊天程序的加密特性對用戶應(yīng)該是透明的。正如前面分析,如果以安裝插件的方式加密聊天程序很可能造成通信雙方加密不一致的情況。因此將加密算法內(nèi)嵌入聊天程序可以保證通信雙方均能正常通信。傳統(tǒng)的對稱加密算法如DES雖然可以快速的加密和解密明文,然而其密鑰難以分配和管理。如果讓通信雙方相互約定密鑰顯然是不合適的,因此最好的方式是由一方產(chǎn)生密鑰然后傳送給另一方?;诠€的非對稱加密體制的引入正是用于解決對稱加密算法在密鑰管理上的不足,但是非對稱加密算法如RSA存在運(yùn)算強(qiáng)度過大、費(fèi)時較長等問題。如果直接用于加密聊天程序,其生成密鑰和加密解密所需時間是人們在通信過程中所不

9、能容忍的,采取將兩種加密算法相結(jié)合的方式可以很好的解決以上問題,從而達(dá)到安全快速的加密數(shù)據(jù)。陳繁星安全聊天系統(tǒng)的設(shè)計與實(shí)現(xiàn)第4頁共32頁2所采用技術(shù)的先進(jìn)性分析2.1DES算法DES是DataEncryptionStandard(數(shù)據(jù)加密標(biāo)準(zhǔn))的縮寫。它是由IBM公司研制的一種加密算法,美國國家標(biāo)準(zhǔn)局于1977年公布把它作為非機(jī)要部門使用的數(shù)據(jù)加密標(biāo)準(zhǔn),二十年來,它一直活躍在國際保密通信的舞臺上,扮演了十分重要的角色。DES是一個分組加密算法,它以64位為分組對數(shù)據(jù)加密。同時DES也是一個對稱算法:加密和解密用的是同一個算法。它的密鑰長度是56位(因?yàn)槊總€第8位都用作奇偶校驗(yàn)),密鑰也可以是任

10、意的56位數(shù),而且可以任意時候改變。其中有極少量的數(shù)被認(rèn)為是弱密鑰,但是很容易避開它們。所以保密性依賴于密鑰。RSA算法1978年,美國麻省理工學(xué)院(MIT)的研究小組成員RonaldLRivest、AdiShamir、LeonardAdleman提出了一種基于公開密鑰密碼體制的優(yōu)秀加密算法-RSA算法。RSA的取名就是來自這三位發(fā)明者姓氏的第一個字母。該算法以其較高的保密強(qiáng)度逐漸成為一種廣為接受的公鑰密碼體制算法。RSA算法是一種分組密碼體制算法,它的保密強(qiáng)度是建立在具有大素數(shù)因子的合數(shù),其因子分解NP(NondeterministicPolynomial)完全問題這一數(shù)學(xué)難題的基礎(chǔ)上的,因

11、此RSA算法具有很強(qiáng)的保密性。RSA算法研制的最初目標(biāo)是解決DES算法秘密密鑰利用公開信道傳輸分發(fā)困難的難題,而實(shí)際結(jié)果不但很好地解決了這個難題;還可利用RSA來完成對消息的數(shù)字簽名以防對消息的抵賴;同時還可以利用數(shù)字簽名發(fā)現(xiàn)攻擊者對消息的非法篡改,以保護(hù)數(shù)據(jù)信息的完整性。RSA算法是第一個能同時用于加密和數(shù)字簽名的算法,也易于理解和操作。RSA是被研究得最廣泛的公鑰算法,普遍認(rèn)為是目前最優(yōu)秀的公鑰方案之一。RSA得到了世界上的最廣泛的應(yīng)用,并于1992年ISO國際標(biāo)準(zhǔn)化組織在其頒發(fā)的國際標(biāo)準(zhǔn)X.509中,將RSA算法正式納入國際標(biāo)準(zhǔn)。線程池在傳統(tǒng)的UNIX模型中,當(dāng)一個進(jìn)程需要另一個實(shí)體來完

12、成某事時,它就fork一個子進(jìn)程并讓子進(jìn)程去執(zhí)行處理oUnix上的大多數(shù)網(wǎng)絡(luò)服務(wù)器程序就是這么編寫的,父進(jìn)程accept一個連接,fork一個子進(jìn)程,該子進(jìn)程處理與該連接對端的客戶之間的通信。盡管這種范式多少年來一直良好地服務(wù)著,fork調(diào)用卻存在一些問題:1陳繁星安全聊天系統(tǒng)的設(shè)計與實(shí)現(xiàn)第5頁共32頁fork是昂貴的。fork要把父進(jìn)程的內(nèi)存映象拷貝到子進(jìn)程,并在子進(jìn)程中復(fù)制所有描述字,如此等等。2fork返回之后父進(jìn)程之間信息的傳遞需要進(jìn)程間通信(IPC)機(jī)制。調(diào)用fork之前父進(jìn)程向尚存在的子進(jìn)程傳遞信息相當(dāng)容易。因?yàn)樽舆M(jìn)程將從父進(jìn)程數(shù)據(jù)空間及所有描述字的一個拷貝開始運(yùn)行。然而從子進(jìn)程往

13、父進(jìn)程返回信息卻比較費(fèi)力。線程有助于解決這兩個問題。線程有時稱為輕權(quán)進(jìn)程(lightweightprocess),因?yàn)榫€程比進(jìn)程“權(quán)重輕些”也就是說,線程的創(chuàng)建可能比進(jìn)程的創(chuàng)建快10100倍。線程池是指在服務(wù)器啟動階段預(yù)先創(chuàng)建一系列線程阻塞于accept調(diào)用,每個客戶由當(dāng)前可用線程池中的某個(閑置)線程處理。這種處理方式比通常的客戶連接到來時臨時創(chuàng)建線程為其服務(wù)要快得多??梢垣@得很好的性能加速。陳繁星安全聊天系統(tǒng)的設(shè)計與實(shí)現(xiàn)第6頁共32頁系統(tǒng)需求分析聊天程序功能分析注冊功能通常聊天程序需要用戶名和密碼才能使用,所以需要實(shí)現(xiàn)web注冊功能,這樣用戶可以很方便的通過web網(wǎng)站注冊自己的用戶名并取得

14、密碼,還可以在服務(wù)器上存儲個人相關(guān)信息以便他人查看。登陸功能用戶在聊天之前需要輸入用戶名和密碼進(jìn)行登陸以便獲取自身相關(guān)信息和好友相關(guān)信息,故登陸過程中服務(wù)器需對用戶名和密碼進(jìn)行必要的核對。聊天功能這是聊天程序的主要功能。用戶之間的相互通信必須及時快速的由服務(wù)器轉(zhuǎn)發(fā)。加密算法由于是加密聊天程序,故對聊天明文的加密算法應(yīng)選取加密速度相對較快的對稱加密算法(如:DES),又由于DES的加密密鑰是不能公開的秘密密鑰,故對DES的密鑰應(yīng)加密傳送,所以應(yīng)采用非對稱的公鑰加密算法(如RSA)用以分發(fā)DES密鑰。DES加密算法:作為對稱加密算法中的DES加密算法由于其加密過程是固定不變的,故應(yīng)考慮其密鑰的生成

15、。由于弱密鑰存在的可能性,還應(yīng)該考慮如何避免生成弱密鑰。因?yàn)椴罘址治龇ǖ奶岢隹梢钥焖俚钠平馍儆?6輪迭代的DES算法,故應(yīng)保證其迭代次數(shù)至少為16輪。RSA加密算法:由于RSA是基于大素數(shù)因子分解這一數(shù)學(xué)難題提出的,故RSA中公鑰和私鑰的產(chǎn)生應(yīng)重點(diǎn)考慮。又由于RSA的運(yùn)算強(qiáng)度較大,故還應(yīng)考慮如何加速其運(yùn)算速度。陳繁星安全聊天系統(tǒng)的設(shè)計與實(shí)現(xiàn)第7頁共32頁系統(tǒng)總體設(shè)計和模塊劃分4.1系統(tǒng)總體設(shè)計已b服務(wù)器客戶端A.客戶端B圖4.1系統(tǒng)設(shè)計如圖4.1所示,本系統(tǒng)采用C/S模式。用戶通過web應(yīng)用程序注冊帳號,然后用注冊的帳號登陸聊天程序服務(wù)TO器??蛻舳水a(chǎn)生生成DES密鑰,服務(wù)器端在啟動時初始化產(chǎn)

16、生RSA公鑰和私鑰。當(dāng)客戶端向服務(wù)器發(fā)起連接時,服務(wù)器送出RSA公鑰,客戶端用取得的公鑰加密產(chǎn)生的DES私鑰回傳服務(wù)器。最后服務(wù)器與客戶端雙方的通信均由DES加密算法加密通信明文。4.2模塊劃分4.2.1DES算法模塊加密算法3個主要步驟第一步,初始置換IP585042342618102605244362820124625446383022146645648403224168574941332517g1595143352719113615345372921135635547393123157圖4.2初始置換表IP圖4.2為初始置換表IP,64bit輸入明文經(jīng)過該表完成初始置換。圖4.316輪迭

17、代圖4.3為DES16輪迭代,將經(jīng)過初始置換的數(shù)據(jù)分成Li和Ri兩部分。將Ri直接交換為Li+1,Li與Ri經(jīng)過f函數(shù)處理后的數(shù)據(jù)相異或得Ri+1,最后一輪不做交換。第三步,逆置換40848165624643239747155523633138646145422623037545135321612936444125220602835343115119592734242105018582633141949175725陳繁星安全聊天系統(tǒng)的設(shè)計與實(shí)現(xiàn)第8頁共32頁第二步,16輪迭代陳繁星安全聊天系統(tǒng)的設(shè)計與實(shí)現(xiàn)第9頁共32頁圖4.4逆置換表(IP-1)圖4.4為逆置換表(IP-1),經(jīng)過16輪迭代后

18、通過該表置換得到輸出的密文。2子密鑰的產(chǎn)生co玉LSIClLS202VPC-1DOLSIDILS2D2PC-2.Kl(48比持)PC-2.K2(48比特)圖4.二生成子圖4.5為子密鑰生成過程,將64git初始密鑰經(jīng)過PC-1表置換為56bit輸入,分為Ci,Di兩組分別進(jìn)行LS循環(huán)左移,再經(jīng)過PC-2表壓縮為48bit子密鑰。如此循環(huán)16輪生成16組子密鑰4.2.2RSA算法模塊1大數(shù)的運(yùn)算加法運(yùn)算:設(shè)定相應(yīng)的進(jìn)位變量m(m為權(quán)值),c送1,ri減法運(yùn)算:設(shè)定相應(yīng)的借位變量c送m(m為權(quán)值),還要將ai高一位減1,如過高位連續(xù)為0則依次置m-1,一直到第一個非0位并將其減1,否則c送0。乘法

19、運(yùn)算:設(shè)定相應(yīng)的進(jìn)位變量c,和一個取當(dāng)前結(jié)果位值變量d,雙重循環(huán)。外層循LS16c,c,(PC-?1kKI6(48比特)按位相加,如ri=ai+bi+c,當(dāng)ai+bi+c(ai+bi+c)modm,否則c送0。按位相減,如ri=ai-bi+c當(dāng)aim(m位權(quán)值),c送ri/m(m為權(quán)值),d為從對應(yīng)的內(nèi)外循環(huán)位之和(i+j)對應(yīng)的結(jié)果位上取得的值。r(i+j)暫時存入陳繁星安全聊天系統(tǒng)的設(shè)計與實(shí)現(xiàn)第10頁共32頁對應(yīng)的結(jié)果位。除法運(yùn)算:假設(shè)A為被除數(shù),B為除數(shù)。當(dāng)AB,將B擴(kuò)大到A相同位數(shù),循環(huán)做A=A-Bk(擴(kuò)充后的B),商位qi=qi+1,最后A為余數(shù)。取余運(yùn)算:依除法運(yùn)算輸出余數(shù)A。乘方

20、運(yùn)算:與乘法運(yùn)算一樣設(shè)有進(jìn)位變量c和取當(dāng)前結(jié)果位值變量d。依然分內(nèi)外兩層循環(huán)。外層循環(huán)中d=r(2*i),r(2*i)=d+ai*ai,在此僅計算相同位ai的乘積存入結(jié)果位r(2*i)中。內(nèi)層循環(huán)d=r(i+j),r(i+j)=d+2*ai*aj+,c這里由于乘數(shù)A和被乘數(shù)B相等,故可以采用2*ai*aj,這種方式提前運(yùn)算對應(yīng)位??梢钥闯鲞@種預(yù)處理方式加快了運(yùn)算速度。模冪運(yùn)算:將模幕運(yùn)算轉(zhuǎn)化為乘模運(yùn)算。定理:(a*b)modn=(amodn)*(bmodn)modn。計算Ammodn:令c=1,如果m=m%2=0循環(huán)計算A=(A*A)modn否則m=m-1,c=(A*c)modn。最后輸出c。

21、選取P,Q先以生成隨機(jī)數(shù)的方式生成隨機(jī)奇數(shù)A、B。再讓A、B依次通過Miller-Rabin素性測試。Miller-Rabin素性測試:先計算出m、j,使得n-1=m*2j,其中m是正奇數(shù),j是非負(fù)整數(shù),隨機(jī)取一個b,2b)r=amodb,a=b,b=r循環(huán)以上三步直到r=0,則a為所求最小公因數(shù)。r=amodb=x*a+y*b=r。x稱為a的逆元。在每步循環(huán)過程中將前一步中的r代入下一步中合并后可求得逆元x。423DES和RSA安全性討論弱密鑰所謂的弱密鑰是指在所有可能的密鑰中,有某幾個特別的密鑰,會降低DES的安全性,所以使用者一定要避免使用這幾個弱密鑰。而弱密鑰產(chǎn)生的原因是由于子密鑰產(chǎn)生

22、過程的設(shè)計不當(dāng)所導(dǎo)致的。由子密鑰產(chǎn)生的過程來看,假設(shè)有某個初始密鑰經(jīng)過密鑰初始置換表置換,陳繁星安全聊天系統(tǒng)的設(shè)計與實(shí)現(xiàn)第11頁共32頁使得寄存器C0與D0的內(nèi)容成為全是“0”或全是“1”的數(shù)據(jù)。如此一來,不管以后的每一輪中之循環(huán)左移函數(shù)是如何地變化,Ci與Di的內(nèi)容并不會有所改變的。換句話說,這樣的初始密鑰,將會產(chǎn)生16個一摸一樣的子密鑰。如此來將大大地降低DES的安全性。弱密鑰有另外一個特性對弱密鑰而言,其加密與解密的過程是完全一樣的。我們知道DES的加密與解密過程中,唯一的不同在于子密鑰的使用順序是相反的。然而對弱密鑰而言,因?yàn)槠渌苌?6個子密鑰是完全相同的,故子密鑰之間也就毫無順序

23、之分了。半弱密鑰除了上述的弱密鑰之外,還有另外一種稱之為半弱密鑰的初始密鑰。其特性是此類初始密鑰所產(chǎn)生的子密鑰,只有兩種可能。而每一種可能的子密鑰,剛好各出現(xiàn)8次。假設(shè)現(xiàn)在有兩個位串:A=01010101,與B=10101010,那么無論如何對A做循環(huán)左移動作,其結(jié)果不是A就是B。當(dāng)然對B做循環(huán)左移動作也會得到一樣的結(jié)果。如果對某個弱密鑰而言,它滿足以下兩個條件,那么它就屬于以上所謂的半弱密鑰了。(1)子密鑰排列中的C(或D)寄存器只含有0101,0101或1010,1010這兩種形式的數(shù)據(jù)。(2)另一個寄存器D(或C)含有0000,,0000,1111,,1111,0101,,0101或10

24、10,1010任何一種形式的數(shù)據(jù)。差分分析法差分分析法基本上是屬于選擇明文攻擊法。但在某些特定的情形下,也可用于已知明文攻擊。這個方法簡單地說,就是分析特殊明文配對(PlaintextPair)的差值相對應(yīng)的密文配對(CiphertextPair)的差值所產(chǎn)生的影響。這里所謂的差值是指兩個明文(或密文)之間做異或(XOR)所得到的值。這個做法的主要概念在于差值的運(yùn)算會使得DES變得簡單許多。我們知道DES可看做一部非常復(fù)雜的非線性機(jī)器,即使知道某一明文對應(yīng)的密文,若無法得知密鑰,也很難去推導(dǎo)出這一部機(jī)內(nèi)部的數(shù)據(jù)流。當(dāng)在差值的概念下,就有機(jī)可趁了。對DES中的某個差值而言,最多的可以有2的64次

25、方個明文(或密文)配對與之對應(yīng)。差分密碼分析法所在乎的是差值本身,而非其所對應(yīng)的明文(或密文)配對。而某些特殊的差分密碼分析法就是選取許多擁有相同特征值的明文配對,加密后得到相對應(yīng)的密文配對,再借著特征值與這些密文配對推導(dǎo)出一些可能的密鑰,并附與可能的概率,最后再選出最有可能者。陳繁星安全聊天系統(tǒng)的設(shè)計與實(shí)現(xiàn)第12頁共32頁B.RSA安全性討論不可使用公共的模N在某些情況下,我們假設(shè)有一密鑰產(chǎn)生中心(KeyGenerationCenter,KGC),利用RSA系統(tǒng)產(chǎn)生一公共模N二pq。此中心接著產(chǎn)生許多對的加密與解密密鑰ei,di,并將解密密鑰di秘密傳送給使用者i,且公布ei為使用者i的公開

26、密鑰。此系統(tǒng)的優(yōu)點(diǎn)為密鑰管理非常簡單,因?yàn)橄到y(tǒng)中使用公共的模(N),不會有Reblocking問題產(chǎn)生,且可節(jié)省公開密鑰的存儲空間。不過,RSA系統(tǒng)使用公共的模,卻可能招致下列三個主要的問題,使得此系統(tǒng)并不安全。1若相同的明文m分送給兩個不同的使用者,則此系統(tǒng)可能變得不安全設(shè)預(yù)將明文m加密后分送給使用者i及j,則其密文分別為Ci=meimodN及Cj=mejmodN。若使用者i與j的公開密鑰ei與ej互素,則由歐幾里德算法可求得兩整數(shù)r及s使得rei+sej=1。很明顯地,r或s一定有一個為負(fù)數(shù),即r=-|r|。若Ci與N互素(若不是的互,則我們可利用最大公因子方法求出p或q,盡而分解N),則

27、Ci的乘法逆元Ci-1存在,并可被輕易求出。由下式我們可以容易求出明文m:(Ci-1)Jr|(Cj廠s=(mei廠-|r|(mej廠s=m(rej+sej)=mmodN因此,若有相同的明文分送給兩個不同的使用者,且此二使用者的公開密鑰為互素,則此系統(tǒng)并不安全。2擁有一對的加密/解密密鑰就能因子分解NDelaurentis提出一種概率算法,使得擁有一對加/解密密鑰的人就能因子分解N。其基本概念為找出一整數(shù)b使得b2=1modNb!=+-1modN1bN由基本數(shù)論知,若N=pq,滿足上述條件的b共有兩個。若能找出任一個,則我們即可將N因子分解。因?yàn)閎2-1=0modN,則(b+1)(b-1)=0m

28、odN,所以(b+1)(b-1)=kN=kqp,其中k為整數(shù)。由于1bN,所以不等式0b-1b+1N=qp成立。因此p及q不能同時整除b-1或b+1,也即b-1與N必有一公因子p或q。利用歐幾里德算法,求GCD(b-1,N),即可求得p或q,因此可以將N因子分解。3擁有一對加/解密密鑰能在不必分解N情況下,求出另一對加解密密鑰。陳繁星安全聊天系統(tǒng)的設(shè)計與實(shí)現(xiàn)第13頁共32頁設(shè)已擁有一對加/解密密鑰e及d,則已給出一加密密鑰el(GCD(el,f(N)=1),即可在不需因子分解N情況下,求出其解密密鑰dl,滿足eldl=1modf(N)。利用歐幾里德算法求出el與ed-1的最大公因子go求出(e

29、d-1)/g=f。利用歐幾里德算法,求出兩整數(shù)r1及d1,使得r1f+d1e1=1。由于g整除ed-1,因此f必為整數(shù),且f必為f(N)的整數(shù)倍,這是由于f(N)整除ed-1,且g與f(N)互素。當(dāng)f求出后,第(3)步中,我們求出d1即滿足d1e1=1modf(N)。因?yàn)閒為f(N)的整數(shù)倍。4.2.4聊天程序模塊1、數(shù)據(jù)庫設(shè)計用戶信息表User_Infor(存儲注冊用戶的信息)CREATETABLEUser_Info(user_idINTEGERAUTO_INCREMENTPRIMARYKEY,user_nameVARCHAR(50)NOTNULL,user_passwdVARCHAR(10

30、)NOTNULL,user_sexVARCHAR(10),user_ageINTEGER,user_addressVARCHAR(100),INDEX(user_name)ENGINE=InnoDB;#指定存儲引擎好友關(guān)系表Friend_Index(記錄用戶添加的好友)CREATETABLEUser_Online(user_idINTEGERPRIMARYKEY,ip_addressVARCHAR(100)NOTNULL,conn_socketINTEGERNOTNULL,FOREIGNKEY(user_id)REFERENCESUser_Info(user_id)ENGINE=InnoDB;

31、在線用戶記錄表User_Online(記錄已登陸的在線用戶和與服務(wù)器建立的套接口)CREATETABLEUser_Online(陳繁星安全聊天系統(tǒng)的設(shè)計與實(shí)現(xiàn)第14頁共32頁user_idINTEGERPRIMARYKEY,conn_socketINTEGERNOTNULL,des_keyVARCHAR(30)NOTNULL,FOREIGNKEY(user_id)REFERENCESUser_Info(user_id)ENGINE=InnoDB;消息記錄表Messages(緩存發(fā)給離線用戶的消息)CREATETABLEMessages(message_idINTEGERAUTO_INCREME

32、NTPRIMARYKEY,from_idINTEGERNOTNULL,to_idINTEGERNOTNULL,bodyTEXTNOTNULL,date_postedTIMESTAMPNOTNULL,INDEX(to_id),FOREIGNKEY(from_id)REFERENCESUser_Info(user_id),FOREIGNKEY(to_id)REFERENCESUser_Info(user_id)ENGINE=InnoDB;2、Web注冊頁面模塊用戶管理:用于管理用戶的注冊和登陸。添加好友:查詢數(shù)據(jù)庫中注冊用戶,選擇要添加的好友插入數(shù)據(jù)庫。3、聊天程序服務(wù)器端初始化套接口,初始化RS

33、A算法生成公鑰和私鑰創(chuàng)建線程池等待連接送出RSA公鑰接收DES密鑰驗(yàn)證登陸信息服務(wù)登陸客戶負(fù)責(zé)消息轉(zhuǎn)發(fā)。4、聊天程序客戶端初始化套接口,生成DES密鑰,向服務(wù)器發(fā)起連接取得RSA公鑰加密DES密鑰后回傳服務(wù)器發(fā)送登陸信息接收好友信息創(chuàng)建發(fā)送消息線程和接收消息線程與好友通信。系統(tǒng)實(shí)現(xiàn)5.1DES核心代碼DES類聲明classDES陳繁星安全聊天系統(tǒng)的設(shè)計與實(shí)現(xiàn)第15頁共32頁public:DES(unsignedlonglong);/構(gòu)造函數(shù)僅傳入密鑰voidencrypting(unsignedlonglong&);/加密函數(shù)voiddecrypting(unsignedlonglong&);

34、/解密函數(shù)private:/明文處理=bitsetIP_permute(unsignedlonglong);/初始置換unsignedlonglongIP_1_permute(bitset);/逆置換/加密過程=bitsetE_permute(bitset);/E盒子置換unsignedlonglongb1b6(bitset,int,int);unsignedlonglongb2b3b4b5(bitset,int,int,int,int);bitsetSBox_Process(bitset);/S盒子置換voidP_permute(bitset&);/P置換bitsetf(bitset,bit

35、set);/f函數(shù)/子密鑰生成=bitsetPC_1_permute(unsignedlonglong);/PC-1置換voidLSi(bitset&,int);/循環(huán)左移bitsetPC_2_permute(bitset);/PC-2置換voidcreate_k(unsignedlonglong);bitsetk16;/子密鑰數(shù)組;子密鑰生成voidDES:create_k(unsignedlonglongkey)bitsetCiDi(0);CiDi=PC_1_permute(key);/PC-1置換bitsetCi(0),Di(0);for(inti=0;i56;i+)/將經(jīng)過PC-1置換

36、的數(shù)據(jù)分成左右28比特if(i28)Cii=CiDii;elseDii-28=CiDii;陳繁星安全聊天系統(tǒng)的設(shè)計與實(shí)現(xiàn)第16頁共32頁for(inti=0;i16;i+)/16輪循環(huán)LSi(Ci,LSIi);/LS循環(huán)左移LSi(Di,LSIi);/LS循環(huán)左移for(intj=0;j56;j+)/再將28比特數(shù)據(jù)合為56比特數(shù)據(jù)if(j28)CiDij=Cij;elseCiDij=Dij-28;ki=PC_2_permute(CiDi);/存入子密鑰數(shù)組加密算法voidDES:encrypting(unsignedlonglong&msg)bitsetip(0);bitsetLi(0),R

37、i(0),buf(0);ip=IP_permute(msg);/IP初始置換for(inti=0;i64;i+)/等分成左右32位數(shù)據(jù)if(i32)Lii=ipi;elseRii-32=ipi;for(inti=0;i16;i+)/16輪迭代if(i!=15)buf=Li;Li=Ri;/Li=Ri-1陳繁星安全聊天系統(tǒng)的設(shè)計與實(shí)現(xiàn)Ri=f(Ri,ki);f函數(shù)處理Ri-1RiA=buf;/Ri=f(Ri-1,ki)XORLi-1第17頁共32頁else/最后不再互換buf=Ri;Ri=f(Ri,ki);LiA=Ri;Ri=buf;for(inti=0;i64;i+)/將兩部分32數(shù)據(jù)組合回64

38、位數(shù)據(jù)if(i32)ipi=Lii;elseipi=Rii-32;msg=IP_1_permute(ip);/IP-1逆置換return;5.2RSA核心代碼大數(shù)類聲明classBigNumpublic:BigNum(char*a=NULL,unsignedlongn=0,Statuss=0);BigNum();BigNumabsadd(BigNum,BigNum);/絕對值相加BigNumabssub(BigNum,BigNum);/絕對值相減BigNumoperator+(BigNum);/加號重載BigNumoperator-(BigNum);/減號重載BigNumoperator*(B

39、igNum);/乘號重載BigNumoperator/(BigNum);/除號重載第18頁共32頁陳繁星安全聊天系統(tǒng)的設(shè)計與實(shí)現(xiàn)BigNumoperator%(BigNum);/取余重載BigNumsquare();/乘方運(yùn)算BigNum&operator=(unsignedlong);/循環(huán)右移friendbooloperator(BigNum,BigNum);/(BigNum,BigNum);/重載為友元friendbooloperator=(BigNum,BigNum);/=重載為友元friendbooloperator=(BigNum,BigNum);/=重載為友元friendbool

40、operator!=(BigNum,BigNum);/!=重載為友元voidprint();unsignedlonggetsize()return(size);char*getnum()return(num);private:charnumMAXNUM;unsignedlongsize;Statussymbol;/正數(shù)為1,零為0,負(fù)數(shù)為-1;模冪運(yùn)算BigNummodexp(BigNumx,BigNumr,BigNump)/依據(jù)定理(a*b)modn=(amodn)*(bmodn)modnBigNuma,b,c(1,1,1),one(1,1,1),zero(0,1,0),two(2,1,1)

41、;a=x;b=r;while(b!=zero)if(b%two=zero)/是否為偶數(shù)b=b/two;/降階a=a.square()%p;/乘方對p取余continue;b=b-one;c=(a*c)%p;/乘模運(yùn)算陳繁星安全聊天系統(tǒng)的設(shè)計與實(shí)現(xiàn)第19頁共32頁return(c);歐幾里德計算最大公因數(shù)和逆元BigNumRSA:gcd(BigNum&a,BigNum&b,BigNumx,BigNumy)/gcd(x,y)=gcd(y,xmody),對式子ax+by=r,每一步迭代中ai=ai-2q*ai-1,bi=bi-2q*bi-1/其中q為當(dāng)前這步的商BigNumzero(0,1,0);B

42、igNumq,r,ai_2(1,1,1),ai_1(0,1,0),bi_2(0,1,0),bi_1(1,1,1);if(xy)/x、y互換BigNumc=y;y=x;x=c;r=y;while(x%r)!=zero)/輾轉(zhuǎn)相除y=x;x=r;q=y/r;r=y%r;a=ai_2-(q*ai_1);迭代前兩步x,y逆元表達(dá)式系數(shù)b=bi_2-(q*bi_1);ai_2=ai_1;bi_2=bi_1;ai_1=a;bi_1=b;return(r);Miller-Rabin素性測試boolPrime_Num:Miller_Rabin(BigNumn,BigNumb)陳繁星安全聊天系統(tǒng)的設(shè)計與實(shí)現(xiàn)第2

43、0頁共32頁令n-1=2Alm,其中1是非負(fù)整數(shù),m是正奇數(shù)。若bAm=1(modn)或bA(2Aj)m=(n-1)modn0=i=j-1/則稱n通過以b為基的Mi11er-Rabin測試BigNumm,j(0,1,0),one(1,1,1),two(2,1,1),zero(0,1,0);BigNumv;m=n-one;whi1e(m%two)=zero)/將n-1處理為2的1次方乘以mm=m/two;j=j+one;if(btwo)coutERRORb!end1;exit(0);v=modexp(b,m,n);if(v=one)/若b的m次方對n取余等于1通過測試return(true);B

44、igNumi(0,1,0);whi1e(ij)if(v=(n-one)/滿足bA(2Aj)m=(n-1)(modn),測試結(jié)束return(true);v=v.square()%n;i=i+one;return(fa1se);5.3Web注冊頁面核心代碼用戶管理?phpc1assUserManager/用戶管理類,用于管理用戶賬戶陳繁星安全聊天系統(tǒng)的設(shè)計與實(shí)現(xiàn)第21頁共32頁function_construct()publicfunctionisValidUserid($in_userid)/驗(yàn)證用戶id的合法性if($in_userid=or$in_userid0)returnFALSE;r

45、eturnTRUE;publicfunctionisValidUserName($in_user_name)/用正則表達(dá)式檢測輸入名字的合法性if($in_user_name=or!ereg(:alnum:_-1,50,$in_user_name)returnFALSE;elsereturnTRUE;publicfunctionisValidPassWord($in_passwd)/檢測輸入密碼的合法性if($in_passwd=orstrlen($in_passwd)10)echopasswordlen.strlen($in_passwd);returnFALSE;elsereturnTRU

46、E;publicfunctioncreateAccount($in_uname,$in_pw,$in_sex,$in_age,$in_address)/創(chuàng)建賬戶,插入數(shù)據(jù)庫if(!$this-isValidUserName($in_uname)/檢查用戶名是否正確,如果錯誤給出相應(yīng)錯誤提示echoERROR陳繁星安全聊天系統(tǒng)的設(shè)計與實(shí)現(xiàn)第2頁共32頁Theusernameisnotrightorthelengthistoolong!Thepagewillgobackafter2seconds.ERROR;exit;if(!$this-isValidPassWord($in_pw)/檢查密碼是否

47、正確,如果錯誤給出相應(yīng)錯誤提示echoERRORThepasswordisnotrightorthelengthistoolong!Thepagewillgobackafter2seconds.ERROR;exit;$conn=$this-getConnection();/創(chuàng)建到數(shù)據(jù)庫的連接$conn-autocommit(FALSE);/關(guān)閉自動提交至數(shù)據(jù)庫為事務(wù)處理狀態(tài)$qstr=query($qstr);/執(zhí)行查詢語句if($result1=FALSE)$conn-rollback();/出錯后事務(wù)回滾echoInsertUser_Infofalse.message:.$conn-err

48、or;exit;陳繁星安全聊天系統(tǒng)的設(shè)計與實(shí)現(xiàn)第23頁共32頁$user_id=$conn-insert_id;$result2=$conn-commit();/提交查詢if($result2=FALSE)echoCommitInsertfalse.message:.$conn-error;exit;$conn-close();/關(guān)閉數(shù)據(jù)庫連接return$user_id;/返回用戶賬號publicfunctionuserLogin($user_id,$in_password)/處理用戶登錄$conn=$this-getConnection();/連接數(shù)據(jù)庫$check=query($chec

49、k);/執(zhí)行查詢語句if($result=FALSE)echoselectUser_Infofalse!message:.$conn-error;exit;if($row=$result-fetch_assoc()=NULL)/檢查登陸用戶信息是否正確,如果錯誤返回FALSE$conn-close();returnFALSE;$conn-close();return$row;privatefunctiongetConnection()/連接數(shù)據(jù)庫$conn=newmysqli(localhost,andy,andy2000,FreeChat);陳繁星安全聊天系統(tǒng)的設(shè)計與實(shí)現(xiàn)第24頁共32頁if

50、(mysqli_connect_errno()!=0)$errno=mysqli_connect_errno();/獲取數(shù)據(jù)庫連接錯誤號$errmsg=mysqli_connect_error();/獲取數(shù)據(jù)庫連接錯誤信息echoConnectdatabasefailedwith:($errno)$errmsg.;exit;return$conn;?5.4服務(wù)器端核心代碼h韻sariyadejbiijri:-SheLl-KoriEioLs會話編輯查看書簽設(shè)置幫助debian:/mnt/Tools/Work/Gr日duBticui-Dmgign/sru/server#./FremChmtSErv

51、mr初始化月艮芻器,諳等待片袞!1正在生成丈素數(shù)P,諳稍后正在生成丈素數(shù)A諳稍后ok購務(wù)器初始完畢,等待用戶登錄ServicEthreadid:3063012240扯鑰已送出!正在獲取des密鑰,諳稍后deskey:92618237290214S31345loginpasswdandy2GGG1No.Hi求登錄.半登錄成功!*Servicethreadid:3G54623632扯鑰已送出!iokf正在獲取des密鑰,諳稍后deskey:113G8413429395833612login卩asswdkakaNo.2ig求登錄.登錄成功!message:hello!writeok!:畫UShell

52、圖5.1服務(wù)器完成初始化圖5.1為服務(wù)器初始化過程和為已登錄用戶服務(wù)的過程。服務(wù)器先生成RSA算法所需的公鑰和私鑰,當(dāng)連接到來時服務(wù)器送出RSA公鑰并等待用戶回傳DES密鑰。當(dāng)用戶傳回DES密鑰后,服務(wù)器用RSA私鑰解密得到DES密鑰。此后用陳繁星安全聊天系統(tǒng)的設(shè)計與實(shí)現(xiàn)第25頁共32頁戶登錄信息由此DES密鑰解密,用戶發(fā)送的消息由服務(wù)器轉(zhuǎn)發(fā)。線程函數(shù),為登陸客戶服務(wù)voidservice(intconnfd,RSArsa)charbufMAXLINE;user_login*login;intn,check;unsignedlonglongkey;publickeypk;pk.e=rsa.e;

53、pk.n=rsa.n;send_rsa_publickey(connfd,pk);/發(fā)送RSA公鑰cout公鑰已送出!endl;cerr正在獲取des密鑰,請稍后ends;key=getdeskey(connfd,rsa);/獲取DES私鑰coutokendl;if(key=0)return;if(n=readn(connfd,(void*)buf,MAXLINE)0)/從套接口上讀取用戶登陸信息coutReadfromsocketconnfdfalse!message:strerror(errno)endl;exit(ERROR);elseif(n=0)coutTheclientcloses

54、ocket.password,16,key);bcopy(void*)data-Decrypting(),(void*)login-password,11);/解密用戶登陸口令陳繁星安全聊天系統(tǒng)的設(shè)計與實(shí)現(xiàn)第26頁共32頁coutNo.user_id請求登錄.endl;if(!(check=Attestation(connfd,login)/認(rèn)證用戶登陸消息coutWrongusernameorwrongpassword!endl;cout登錄失敗!endl;return;elseif(check0)return;cout登錄成功!user_id,key);/插入在線用戶表if(GetFrie

55、nds(connfd,login-user_id)user_id,key)user_id,key);/服務(wù)在線用戶,負(fù)責(zé)轉(zhuǎn)發(fā)消息return;發(fā)送RSA公鑰Statussend_rsa_publickey(intsockfd,publickeykey)/向客戶端發(fā)送RSA公鑰charbufMAXLINE;intn;bcopy(void*)&key,(void*)buf,sizeof(key);/將RSA公鑰拷貝到發(fā)送緩沖區(qū)if(n=writen(sockfd,buf,MAXLINE)0)/向套接口寫公鑰coutSendpublickeytosocketfalse!message:strerro

56、r(errno)endl;return(ERROR);return(OK);第2頁共32頁陳繁星安全聊天系統(tǒng)的設(shè)計與實(shí)現(xiàn)獲取DES密鑰unsignedlonglonggetdeskey(intsockfd,RSArsa)/從客戶端取得經(jīng)RSA加密后的DES密鑰并解密出來intn;charbufMAXLINE;unsignedlonglongdeskey;BigNumc,m;if(n=readn(sockfd,buf,MAXLINE)0)/從套接口讀取RSA加密后的DES密鑰coutReadfromsocketsockfdforgetkeyfalse!message:strerror(errno)endl;return(0);elseif(n=0)coutTheclientclosesocket.endl;return(0);bcopy(void*)buf,(void*)&c,sizeof(c);m=rsa.decrypting(c);/解密得DES密鑰str_to_longlong(m.getnum(),deskey);/將字符串型的DES密鑰轉(zhuǎn)換為longlong型return(deskey);5.5客戶端核心代碼陳繁星安全聊天系統(tǒng)的設(shè)計與實(shí)現(xiàn)第28頁共32頁圖5.2兩客戶端正常通信圖5.2為經(jīng)過DES正常加密解密的兩客戶端間的正常通信過程

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論