




已閱讀5頁(yè),還剩23頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
目錄第一章 引言.1第二章 網(wǎng)絡(luò)安全.2第三章 加密技術(shù).5第四章 MD5工作原理.8第五章 MD5算法.10結(jié)束語(yǔ)13致謝14參考文獻(xiàn)15附錄 源代碼.16WEB上用戶口令安全傳輸?shù)难芯颗c實(shí)現(xiàn)數(shù)學(xué)計(jì)算機(jī)科學(xué)學(xué)院摘 要:主要闡述利用MD5加密算法來(lái)保證WEB上用戶口令的安全傳輸。首先利用MD5對(duì)用戶口令進(jìn)行一次加密,然后再利用MD5對(duì)該密文和一個(gè)隨機(jī)數(shù)組成的信息進(jìn)行加密,形成網(wǎng)絡(luò)上傳輸?shù)挠脩艨诹睿苊庥脩艨诹钜悦魑牡男问皆赪EB上進(jìn)行傳輸,從而有效地提高認(rèn)證系統(tǒng)中口令傳輸?shù)陌踩?。關(guān)鍵詞:口令;MD5算法;網(wǎng)絡(luò)安全The study and implementation of the Secure Transfer of Users Password on WEBSchool of Mathematics and Computer ScienceAbstract: In this paper,we mainly expound how to transfer our password in security on WEB by means of MD5.Firstly,we encrypt the password with MD5 and add a random number to the encrypted password to form a new message. Then encrypt the message with MD5 again to have a new encrypted password that is to be transferred on WEB. Enhances the security of authentication system based on WEB effectively.Key words: password;MD5 algorithm ;network security第一章 引言 隨著計(jì)算機(jī)網(wǎng)絡(luò)的發(fā)展,網(wǎng)絡(luò)安全問(wèn)題受到越來(lái)越大的關(guān)注。網(wǎng)絡(luò)安全一直是Internet的一個(gè)薄弱環(huán)節(jié),因?yàn)楫?dāng)初設(shè)計(jì)TCP/IP時(shí)并沒(méi)有考慮網(wǎng)絡(luò)的安全機(jī)制。如Telnet、Ftp、Email和基于WEB的應(yīng)用系統(tǒng)等都是明文方式傳輸數(shù)據(jù)包,其中就有用戶的帳號(hào)和口令等非常重要的數(shù)據(jù)。而這些數(shù)據(jù)包很容易被人通過(guò)特定的軟件或硬件工具截取,通過(guò)分析數(shù)據(jù)包的內(nèi)容,從而可以獲得用戶的帳號(hào)和口令,然后進(jìn)行一些非法的活動(dòng)。因此,用戶ID和口令的安全傳輸?shù)膯?wèn)題越來(lái)越受到人們的關(guān)注。 Web程序使用一種稱為會(huì)話狀態(tài)管理(session state management)的技術(shù)來(lái)跟蹤瀏覽器與服務(wù)器之間的交互,正如超文本傳輸協(xié)議所規(guī)定的那樣,每個(gè)瀏覽器的請(qǐng)求都獨(dú)立于其他瀏覽器,一個(gè)Web程序必須使用一些技巧,如cookie,隱藏的表格字段,或URL重寫(xiě),來(lái)識(shí)別其與特定的瀏覽器的特定的會(huì)話。大多數(shù)服務(wù)器端開(kāi)發(fā)環(huán)境如ASP,PHP,ColdFusion等使用cookie。使用會(huì)話狀態(tài)管理的問(wèn)題是從根本上說(shuō)它是不安全的,一個(gè)黑客可以在服務(wù)器和用戶瀏覽器之間截取用來(lái)管理會(huì)話狀態(tài)的cookie,表格字段值,或是URL,一旦得手,他就可以利用這些信息來(lái)接管用戶的會(huì)話。大多數(shù)服務(wù)器端的腳本開(kāi)發(fā)環(huán)境允許你減少這種危險(xiǎn),例如你可以指定cookie的極短失效時(shí)間,使用難預(yù)測(cè)的會(huì)話狀態(tài)信息。然而最安全的還是使用安全套接層(SSL),購(gòu)買它后,你就可以不僅保護(hù)用戶口令,還可以保護(hù)會(huì)話狀態(tài)管理信息。如果你不使用SSL,讓用戶在你的程序中的安全敏感頁(yè)面中每次都重新認(rèn)證是個(gè)好主意,但是從用戶角度出發(fā),這實(shí)在是太麻煩了。最后,你必須考慮你和你的用戶究竟愿意承擔(dān)多大的風(fēng)險(xiǎn)。如果密碼口令被曝光的危險(xiǎn)很高,還是用SSL來(lái)構(gòu)建你的程序吧,如果你不能使用SSL,那么就使用基于MD5的登陸過(guò)程。這至少能保護(hù)你的用戶的口令。此外,選擇一種允許保護(hù)會(huì)話狀態(tài)信息的服務(wù)器端腳本技術(shù)。通常,當(dāng)用戶不使用SSL(即普通HTTP)登陸時(shí),他(她)的口令從離開(kāi)瀏覽器起至到達(dá)服務(wù)器為止始終是以明文狀態(tài)暴露的。然而,利用一種稱為單向函數(shù)的數(shù)學(xué)函數(shù)的幫助,我們可以設(shè)計(jì)一種并不暴露用戶口令的登陸計(jì)劃。一個(gè)函數(shù)是一種將集合A的元素映射到集合B的方法,每個(gè)集合A中的元素都對(duì)應(yīng)于集合B中的一個(gè)確定元素。而一個(gè)單向函數(shù)的作用就是使逆向的推算非常困難,即,給定集合B的一個(gè)元素,很難從集合A中決定哪個(gè)元素(如果存在的話)是映射到B集合中的這個(gè)元素的。用戶試圖登陸到一個(gè)Web應(yīng)用程序時(shí),服務(wù)器端腳本提供用戶一個(gè)包含有從數(shù)十億可能值中產(chǎn)生的隨機(jī)數(shù)的表格,當(dāng)用戶在此登陸表格中輸入她們的ID和口令,客戶端的腳本將這個(gè)隨機(jī)數(shù)值添加到口令后并加以MD5單向運(yùn)算。通過(guò)MD5算法對(duì)用戶口令進(jìn)行加密,可以有效提高用戶口令在WEB上傳輸?shù)陌踩?。第二?網(wǎng)絡(luò)安全2.1網(wǎng)絡(luò)安全原則最初的計(jì)算機(jī)應(yīng)用程序通常沒(méi)有或很少安全性,這種情況一直持續(xù)了多年,知道人們真正認(rèn)識(shí)到數(shù)據(jù)的重要性之前,人們雖然知道計(jì)算機(jī)數(shù)據(jù)有用,卻沒(méi)有加以保護(hù)。開(kāi)發(fā)處理財(cái)務(wù)和個(gè)人數(shù)據(jù)的計(jì)算機(jī)應(yīng)用程序時(shí),對(duì)安全性產(chǎn)生了前所未有的需求。人們認(rèn)識(shí)到,計(jì)算機(jī)數(shù)據(jù)是現(xiàn)代生活的重要方面。因此,安全的不同領(lǐng)域開(kāi)始受到重視。網(wǎng)絡(luò)安全原則包括保密性、完整性、鑒別、不可抵賴、訪問(wèn)控制和可用性等原則。保密性原則要求做到只有發(fā)送人和所有的接收人才能訪問(wèn)消息內(nèi)容。如果非法人員能夠訪問(wèn)消息內(nèi)容,則破壞了保密性原則。鑒別機(jī)制可以建立身份證明,鑒別過(guò)程保證正確標(biāo)識(shí)電子消息或文檔來(lái)源。消息內(nèi)容在發(fā)送方發(fā)出后和到達(dá)所有接受方之前發(fā)生改變時(shí),就會(huì)失去消息的完整性。不可抵賴性是不允許發(fā)送消息者拒絕承認(rèn)發(fā)送消息。訪問(wèn)控制原則確定誰(shuí)能訪問(wèn)什么??尚行栽瓌t指定要隨時(shí)向授權(quán)方提供資源。2.2 網(wǎng)絡(luò)面臨的安全威脅計(jì)算機(jī)網(wǎng)絡(luò)上的通信面臨以下的4種威脅:(1) 截獲:攻擊者從網(wǎng)絡(luò)上竊聽(tīng)聽(tīng)人的通信內(nèi)容。(2) 中斷:攻擊者有意中斷他人在網(wǎng)絡(luò)上的通信。(3) 篡改:攻擊者故意篡改網(wǎng)絡(luò)上傳送的報(bào)文。(4) 偽造:攻擊者偽造信息在網(wǎng)絡(luò)上傳送。 這些攻擊又分為主動(dòng)攻擊和被動(dòng)攻擊。1. 被動(dòng)攻擊 被動(dòng)攻擊的攻擊者只是竊聽(tīng)或監(jiān)視數(shù)據(jù)傳輸,即取得中途的信息。這里的被動(dòng)攻擊者不對(duì)數(shù)據(jù)進(jìn)行任何修改。事實(shí)上,這也使被動(dòng)攻擊很難被發(fā)現(xiàn)。因此,處理被動(dòng)攻擊的一般方法是防止而不是探測(cè)與糾正。 圖2.1又把被動(dòng)攻擊分成兩類,分別是消息內(nèi)容泄露和通信量分析。 被動(dòng)攻擊(截獲) 通信量分析 消息內(nèi)容泄露圖2.1 被動(dòng)攻擊消息內(nèi)容泄露很容易理解。當(dāng)發(fā)送保密電子郵件消息時(shí),我們只希望對(duì)方才能訪問(wèn),否則消息內(nèi)容會(huì)被別人看到。利用某種安全機(jī)制,可以防止消息內(nèi)容泄露。但是,如果傳遞許多這類消息,則攻擊者可以猜出某種模式的相似性,從而猜出消息內(nèi)容。2. 主動(dòng)攻擊與被動(dòng)攻擊不同的是,主動(dòng)攻擊以某種方式修改消息內(nèi)容或生成假消息。這些攻擊很難防止。但是,這時(shí)可以發(fā)現(xiàn)和恢復(fù)的。這些攻擊包括中斷、修改和偽造。在主動(dòng)攻擊中,會(huì)以某種方式修改消息內(nèi)容。 中斷攻擊又稱為偽裝攻擊。 修改攻擊又可以分為重放攻擊和改變消息。 偽造會(huì)產(chǎn)生拒絕服務(wù)。圖2.2顯示了這個(gè)分類。 主動(dòng)攻擊 偽造(拒絕服務(wù)) 修改 中斷(偽裝) 重放攻擊 改變消息攻擊圖2.2 主動(dòng)攻擊2.3 口令安全性分析口令攻擊是一個(gè)一般性的術(shù)語(yǔ),它描述各種行為,包括任何解密、破譯以及刪除口令的行為,或者任何繞道口令安全機(jī)制的其他方法。在計(jì)算機(jī)的安全行方面,口令攻擊時(shí)比較原始的。事實(shí)上,口令解密是任何電腦網(wǎng)絡(luò)攻擊者新手和解密者首先要學(xué)習(xí)的內(nèi)容,這主要是因?yàn)榭诹罱饷苤恍枰苌俚募夹g(shù)和經(jīng)驗(yàn)。在大多數(shù)情況下,一個(gè)脆弱的口令安全機(jī)制會(huì)危及整個(gè)系統(tǒng)的安全。攻擊在開(kāi)始時(shí)只獲得有限次的訪問(wèn)權(quán),通過(guò)攻擊不弱的口令安全機(jī)制,所獲得的訪問(wèn)權(quán)迅速擴(kuò)大。通常情況下,僅僅通過(guò)口令的攻擊,攻擊者就可以獲得登錄的訪問(wèn)權(quán),并且?jiàn)Z得對(duì)多個(gè)主機(jī)的控制權(quán)。網(wǎng)絡(luò)攻擊者為了獲得目標(biāo)系統(tǒng)的口令文件,試圖以離線的方式破解口令。他們首先猜一個(gè)口令,然后,用于源文件系統(tǒng)中一樣的加密算法來(lái)加密此口令,將加密的結(jié)果與文件中的加密口令比較,若相同則猜對(duì)了。因?yàn)楹苌儆杏脩羰褂秒S即組合的數(shù)字和字母來(lái)做口令,許多用戶使用的口令都可在 一個(gè)特殊的黑字典中找到。在這種口令攻擊中,入侵者并不窮舉所有的字母數(shù)字的排列組合來(lái)猜測(cè)口令,而僅僅用網(wǎng)絡(luò)攻擊者字典中的單詞來(lái)嘗試。網(wǎng)絡(luò)攻擊者們已經(jīng)構(gòu)造了這樣的字典,不僅包括了英語(yǔ)或其他語(yǔ)言中的常見(jiàn)單詞,還包括了網(wǎng)絡(luò)攻擊者詞語(yǔ)、拼寫(xiě)有誤的單詞和一些人名。已有的網(wǎng)絡(luò)攻擊字典包括了大約200000多個(gè)單詞,用來(lái)猜測(cè)口令非常成功,而對(duì)現(xiàn)代的計(jì)算機(jī)來(lái)說(shuō),嘗試所有200000多個(gè)單詞是很輕松的事。網(wǎng)絡(luò)攻擊者只要獲得一個(gè)用戶的口令,尤其是特權(quán)用戶的口令,就可以為所欲為了。防范的方法很簡(jiǎn)單,只要是自己的口令不在英語(yǔ)字典中,且不可能被別人猜測(cè)出就可以了。2.4 口令攻擊手段口令安全是保衛(wèi)自己系統(tǒng)安全的第一道防線。人們總是試圖通過(guò)猜測(cè)合法用戶的口令來(lái)獲得沒(méi)有授權(quán)的訪問(wèn)。兩個(gè)通行的做法,一是從存放了許多常用口令的數(shù)據(jù)庫(kù)中選取一些“口令”來(lái)嘗試,另一個(gè)做法是設(shè)法偷走口令文件,然后通過(guò)口令翻譯工具來(lái)破譯這些加密的口令。通常情況下,網(wǎng)絡(luò)攻擊者都喜歡等到一個(gè)系統(tǒng)的口令文件。在許多UNIX系統(tǒng)中,要得到口令文件并不是那么容易,因?yàn)榭诹钗募挥谐?jí)用戶可以讀寫(xiě)。因此,口令文件如果能夠被盜走,在絕大多數(shù)情況下,說(shuō)明系統(tǒng)的超級(jí)用戶的權(quán)限,在某種特定情況下,可以被攻擊者直接或者地行使。攻擊者之所以想到的系統(tǒng)存放口令的文件,是因?yàn)樗麄兛梢詮目诹钗募?,破譯出一些口令來(lái),以便以后能夠以合法的用戶訪問(wèn)這臺(tái)機(jī)器。因此,當(dāng)超級(jí)用戶發(fā)現(xiàn)系統(tǒng)中的口令文件被非法訪問(wèn)過(guò)時(shí),一定要更換所有的用戶的口令。當(dāng)一個(gè)攻擊者得到了初始的訪問(wèn)權(quán)時(shí),就會(huì)到處查看,尋找系統(tǒng)中的其他安全漏洞,希望得到進(jìn)一步的特權(quán)。因此,使系統(tǒng)安全的第一步便是是那些未被授權(quán)的用戶不能進(jìn)入系統(tǒng)。這就要教育用戶懂得什么事口令安全并遵守安全規(guī)定。防止入侵者讀取口令文件,可以減少他們登錄進(jìn)入系統(tǒng)的可能性。這需要人們知道的是,取得口令文件并不一定要登錄進(jìn)系統(tǒng),而沒(méi)有登錄進(jìn)系統(tǒng)照樣可以進(jìn)行許多攻擊活動(dòng)。口令攻擊的主要有以下幾種手段。1、社會(huì)工程學(xué)(Social Engineering),通過(guò)人際交往這一非技術(shù)手段以欺騙、套取的方式來(lái)獲得口令。避免此類攻擊的對(duì)策是加強(qiáng)用戶意識(shí)。2、猜測(cè)攻擊。首先使用口令猜測(cè)程序進(jìn)行攻擊??诹畈聹y(cè)程序往往根據(jù)用戶定義口令的習(xí)慣猜測(cè)用戶口令,像名字縮寫(xiě)、生日、寵物名、部門名等。在詳細(xì)了解用戶的社會(huì)背景之后,黑客可以列舉出幾百種可能的口令,并在很短的時(shí)間內(nèi)就可以完成猜測(cè)攻擊。3、字典攻擊。如果猜測(cè)攻擊不成功,入侵者會(huì)繼續(xù)擴(kuò)大攻擊范圍,對(duì)所有英文單詞進(jìn)行嘗試,程序?qū)葱蛉〕鲆粋€(gè)又一個(gè)的單詞,進(jìn)行一次又一次嘗試,直到成功。據(jù)有的傳媒報(bào)導(dǎo),對(duì)于一個(gè)有8萬(wàn)個(gè)英文單詞的集合來(lái)說(shuō),入侵者不到一分半鐘就可試完。所以,如果用戶的口令不太長(zhǎng)或是單詞、短語(yǔ),那么很快就會(huì)被破譯出來(lái)。4、窮舉攻擊。如果字典攻擊仍然不能夠成功,入侵者會(huì)采取窮舉攻擊。一般從長(zhǎng)度為1的口令開(kāi)始,按長(zhǎng)度遞增進(jìn)行嘗試攻擊。由于人們往往偏愛(ài)簡(jiǎn)單易記的口令,窮舉攻擊的成功率很高。如果每千分之一秒檢查一個(gè)口令,那么86%的口令可以在一周內(nèi)破譯出來(lái)。5、混合攻擊,結(jié)合了字典攻擊和窮舉攻擊,先字典攻擊,再暴力攻擊。第三章 加密技術(shù)3.1幾種常見(jiàn)的加密技術(shù)加密技術(shù)包括兩個(gè)元素:算法和密鑰。算法是將普通的文本(或者可以理解的信息)與一串?dāng)?shù)字(密鑰)的結(jié)合,產(chǎn)生不可理解的密文的步驟,密鑰是用來(lái)對(duì)數(shù)據(jù)進(jìn)行編碼和解碼的一種算法。在安全保密中,可通過(guò)適當(dāng)?shù)拿荑€加密技術(shù)和管理機(jī)制來(lái)保證網(wǎng)絡(luò)的信息通訊安全。密鑰加密技術(shù)的密碼體制分為對(duì)稱密鑰體制和非對(duì)稱密鑰體制兩種。相應(yīng)地,對(duì)數(shù)據(jù)加密的技術(shù)分為兩類,即對(duì)稱加密(私人密鑰加密)和非對(duì)稱加密(公開(kāi)密鑰加密)。對(duì)稱加密以數(shù)據(jù)加密標(biāo)準(zhǔn)算法為典型代表,非對(duì)稱加密通常以RSA(Rivest Shamir Ad1eman)算法為代表。對(duì)稱加密的加密密鑰和解密密鑰相同,而非對(duì)稱加密的加密密鑰和解密密鑰不同,加密密鑰可以公開(kāi)而解密密鑰需要保密。1.計(jì)算機(jī)對(duì)稱密鑰加密算法對(duì)稱加密(也叫私鑰加密)指加密和解密使用相同密鑰的加密算法。有時(shí)又稱為傳統(tǒng)密碼算法,就是加密密鑰能夠從解密密鑰中推算出來(lái),同時(shí)解密密鑰也可以從加密密鑰中推算出來(lái)。而在大多數(shù)的對(duì)稱算法中,加密密鑰和解密密鑰是相同的,所以也稱這種加密算法為秘密密鑰算法或單密鑰算法。它要求發(fā)送方和接收方在安全通信之前,商定一個(gè)密鑰。對(duì)稱算法的安全性依賴于密鑰,泄漏密鑰就意味著任何人都可以對(duì)他們發(fā)送或接收的消息解密,所以密鑰的保密性對(duì)通信性至關(guān)重要。幾種常見(jiàn)的對(duì)稱密鑰加密算法:DES、IDEA、RC5、Blowfish等。以上幾種算法的具體工作原理本文就不作詳細(xì)解析了。2.計(jì)算機(jī)非對(duì)稱密鑰加密算法與對(duì)稱加密算法不同,非對(duì)稱加密算法需要兩個(gè)密鑰:公開(kāi)密鑰(publickey)和私有密鑰(privatekey)。公開(kāi)密鑰與私有密鑰是一對(duì),如果用公開(kāi)密鑰對(duì)數(shù)據(jù)進(jìn)行加密,只有用對(duì)應(yīng)的私有密鑰才能解密;如果用私有密鑰對(duì)數(shù)據(jù)進(jìn)行加密,那么只有用對(duì)應(yīng)的公開(kāi)密鑰才能解密。因?yàn)榧用芎徒饷苁褂玫氖莾蓚€(gè)不同的密鑰,所以這種算法叫作非對(duì)稱加密算法。非對(duì)稱密鑰加密的工作原理如下:(1) A將這A要給B發(fā)消息時(shí),A用B的公鑰加密信息,因?yàn)锳知道B的公鑰。(2) A將這個(gè)信息發(fā)給B(已經(jīng)用B的公鑰加密信息)(3) 用自己的私鑰解密的信息。注意,只有知道自己的私鑰。另外,這個(gè)消息只能用的私鑰解密,而不能用別的密鑰解密。因此,別人都無(wú)法看懂這個(gè)信息,即使他能夠截獲這個(gè)信息。這是因?yàn)槿肭终卟恢赖乃借€,而這個(gè)信息只能用的私鑰解密。幾種常見(jiàn)的非對(duì)稱密鑰加密算法:RSA、Elgamal、背包算法、Rabin、D-H、ECC。下面來(lái)具體介紹RSA算法。RSA算法基于這樣的數(shù)學(xué)事實(shí):兩個(gè)大素?cái)?shù)很容易相乘,而得到的積因子則很難。RSA中的私鑰和公鑰基于大素?cái)?shù)(100位以上),算法本身很簡(jiǎn)單,但實(shí)際難度在于RSA選擇和生成私鑰和公鑰。下面看看如何生成私鑰和公鑰,如何用其進(jìn)行加密和解密。整個(gè)過(guò)程如圖3.1所示。(1) 選擇兩個(gè)大素?cái)?shù)P、Q(2) 計(jì)算NPQ(3) 選擇一個(gè)公鑰(即加密密鑰)E,使其不是(P-1)與(Q-1)的因子(4) 選擇私鑰(即解密密鑰)D,滿足下列條件:(DE)mod(P-1)(Q-1)1(5) 加密時(shí),從明文PT計(jì)算密文CT如下:CTPTE mod N(6) 將密文CT發(fā)送給接收方。(7) 解密時(shí),從密文CT計(jì)算明文PT如下PTCTD mod N圖3.1 RSA算法3.2 消息摘要消息摘要也成為散列,是指消息的指印或匯總,類似于縱向冗余校驗(yàn)和循環(huán)冗余校驗(yàn)。用于驗(yàn)證數(shù)據(jù)完整性(即保證信息在發(fā)送之后和接受之前沒(méi)有被篡改)。下面舉一個(gè)LRC示例。圖3.2顯示了發(fā)送方的LRC計(jì)算,縱向冗余校驗(yàn)將位塊組成列表(行)。例如,如果要發(fā)送32位,則把其排成四行,然后計(jì)算每個(gè)列(共8列)有多少個(gè)1位(如果1位為奇數(shù),則顯示奇性,在陰影LRC行中用一個(gè)1位表示;相反,如果1位為偶數(shù),則成為偶性,在陰影LRC行中用一個(gè)0位表示)。例如,第一列有兩個(gè)1,表示偶性,因此第一列的陰影中LRC行為0;同樣,最后一列有三個(gè)1,表示奇性,因此陰影LRC行為1.這樣每列計(jì)算奇偶位,生成一個(gè)新行,共八個(gè)奇偶行,成為整個(gè)塊的奇偶位。這樣,LRC實(shí)際上市原消息的指印。 原始數(shù)據(jù) 原始數(shù)據(jù)排列成行 LRC 原始數(shù)據(jù)和LRC 11100100 11011101 00111001 00101001111001001101110100111000100101001 00101001 11100100 11011101 00111001 00101001 00101001圖3.2 縱向冗余校驗(yàn)3.3 MD5簡(jiǎn)介MD5消息摘要算法是Ron Rivest開(kāi)發(fā)的。MD5實(shí)際上根源于一系列消息摘要算法,都是由Ron Rivest開(kāi)發(fā)的。原先的消息摘要算法成為MD,很快進(jìn)入下一版MD2,是Ron Rivest的,但很脆弱。因此,Ron Rivest開(kāi)始開(kāi)發(fā)MD3,結(jié)果失敗了。后來(lái),Ron Rivest開(kāi)發(fā)了MD4,但很快發(fā)現(xiàn)其還是不理想,因此最終推出了MD5.MD5速度很快,產(chǎn)生128位消息摘要。多年來(lái),研究人員發(fā)現(xiàn)了MD5的弱點(diǎn),但是MD5成功克服了沖突,不過(guò)今后情況還很難說(shuō)。經(jīng)過(guò)初試處理后,輸入文本變成512位塊(進(jìn)一步分為16個(gè)32位塊)。這個(gè)算法的輸入是四個(gè)32位塊構(gòu)成的集合,形成128位消息摘要。由于MD5算法的可靠性,被廣泛用于雜湊資料正確性驗(yàn)證。經(jīng)過(guò)許多程序員的努力,MD5算法已經(jīng)被各種語(yǔ)言實(shí)現(xiàn),.asp,.php,.java ,c,c#,vb,vc+,delphi等語(yǔ)言。MD5算法以16個(gè)32位子分組即512位分組來(lái)提供數(shù)據(jù)雜湊,經(jīng)過(guò)程序流程,生成四個(gè)32位數(shù)據(jù),最后聯(lián)合起來(lái)成為一個(gè)128位散列?;痉绞綖椋笥?、取余、調(diào)整長(zhǎng)度、與鏈接變量進(jìn)行循環(huán)運(yùn)算。得出結(jié)果。 MD5由MD4、MD3、MD2改進(jìn)而來(lái),主要是增加了算法難度和不可逆性。 用戶的口令在在進(jìn)行傳輸?shù)臅r(shí)候,可以利用MD5算法對(duì)口令進(jìn)行加密,這樣就可以避免了口令明文在傳輸,從而保證用戶口令的安全性。下面來(lái)介紹MD5算法及其工作原理。第四章 MD5工作原理第一步:填充MD5的第一步是在原消息中增加填充位,目的是使原消息長(zhǎng)度等于一個(gè)值,即比512的倍數(shù)少64位。例如,如果原消息長(zhǎng)度為1000位,則要填充472位,使消息長(zhǎng)度為1472位,因?yàn)?4+1427=1536,是512的倍數(shù)。第二步:添加長(zhǎng)度增加填充為位后,下一步要計(jì)算消息原長(zhǎng),將其加進(jìn)填充后的消息末尾。第三步:將輸入分成512位的塊計(jì)算原始消息的長(zhǎng)度(除去填充部分),并附加到消息與填充位的后面。該長(zhǎng)度用64位表示。如果該消息的長(zhǎng)度超過(guò)64位,那么就只使用后64位。添加完成后,它就是最終的消息了。第四步:初始化鏈接變量第四步要初始化四個(gè)鏈接變量,分別稱為A,B,C,D,都是32位的數(shù)字。這些鏈接變量的初始十六進(jìn)制值如下表4-1所示。表4-1 鏈接變量A十六進(jìn)制01234567B十六進(jìn)制89ABCDEFC十六進(jìn)制FEDCBA98D十六進(jìn)制76543210第五步:處理塊初始化之后,就要開(kāi)始實(shí)際算法了。5.1步:將四個(gè)鏈接變量復(fù)制到四個(gè)變量a,b,c,d中,使a=A,b=B,c=C,d=D,如圖4.2所示。 A B C D a b c d圖4.2 將四個(gè)鏈接變量復(fù)制到四個(gè)變量中去5.2步:將當(dāng)前512位塊分解成16個(gè)子塊,每個(gè)子塊32位,如圖4.3所示。 。 32位 32位 。 32位 塊1(512位) 子塊1 子塊2 子塊16圖4.3 將當(dāng)前512位分解為16個(gè)子塊5.3步:這時(shí)有四輪,每一輪處理一個(gè)塊中的16個(gè)子塊。每一輪的鍵入如下:(a)16個(gè)子塊;(b)變量a、b、c、d;(c)常量t,如圖4.4所示。 16個(gè)子塊 16個(gè)子塊 一輪 a b cd圖4.4 每一輪處理 每一輪有16個(gè)輸入子塊M0,M1,.,M15,或表示位Mi,其中i為125。我們知道,每個(gè)子塊位32位 t是一個(gè)常量數(shù)組,包含64個(gè)元素,每個(gè)元素為32位。我們把數(shù)組t的元素表示為t1,t2,t64,或tk,其中k為164。由于有四輪,因此每一輪用64位個(gè)t只中的16個(gè)。第五章 MD5算法對(duì)MD5算法簡(jiǎn)要的敘述可以為:MD5以512位分組來(lái)處理輸入的信息,且每一分組又被劃分為16個(gè)32位子分組,經(jīng)過(guò)了一系列的處理后,算法的輸出由四個(gè)32位分組組成,將這四個(gè)32位分組級(jí)聯(lián)后將生成一個(gè)128位散列值。在MD5算法中,首先需要對(duì)信息進(jìn)行填充,使其字節(jié)長(zhǎng)度對(duì)512求余的結(jié)果等于448。因此,信息的字節(jié)長(zhǎng)度(Bits Length)將被擴(kuò)展至N*512+448,即N*64+56個(gè)字節(jié)(Bytes),N為一個(gè)正整數(shù)。填充的方法如下,在信息的后面填充一個(gè)1和無(wú)數(shù)個(gè)0,直到滿足上面的條件時(shí)才停止用0對(duì)信息的填充。然后,在在這個(gè)結(jié)果后面附加一個(gè)以64位二進(jìn)制表示的填充前信息長(zhǎng)度。經(jīng)過(guò)這兩步的處理,現(xiàn)在的信息字節(jié)長(zhǎng)度=N*512+448+64=(N+1)*512,即長(zhǎng)度恰好是512的整數(shù)倍。這樣做的原因是為滿足后面處理中對(duì)信息長(zhǎng)度的要求。MD5中有四個(gè)32位被稱作鏈接變量(Chaining Variable)的整數(shù)參數(shù),他們分別為:A=0x01234567,B=0x89abcdef,C=0xfedcba98,D=0x76543210。當(dāng)設(shè)置好這四個(gè)鏈接變量后,就開(kāi)始進(jìn)入算法的四輪循環(huán)運(yùn)算。循環(huán)的次數(shù)是信息中512位信息分組的數(shù)目將上面四個(gè)鏈接變量復(fù)制到另外四個(gè)變量中:A到a,B到b,C到c,D到d。主循環(huán)有四輪(MD4只有三輪),每輪循環(huán)都很相似。第一輪進(jìn)行16次操作。每次操作對(duì)a、b、c和d中的其中三個(gè)作一次非線性函數(shù)運(yùn)算,然后將所得結(jié)果加上第四個(gè)變量,文本的一個(gè)子分組和一個(gè)常數(shù)。再將所得結(jié)果向右環(huán)移一個(gè)不定的數(shù),并加上a、b、c或d中之一。最后用該結(jié)果取代a、b、c或d中之一。以一下是每次操作中用到的四個(gè)非線性函數(shù)(每輪一個(gè))。F(X,Y,Z) =(X&Y)|(X)&Z)G(X,Y,Z) =(X&Z)|(Y&(Z)H(X,Y,Z) =XYZI(X,Y,Z)=Y(X|(Z)(&是與,|是或,是非,是異或)這四個(gè)函數(shù)的說(shuō)明:如果X、Y和Z的對(duì)應(yīng)位是獨(dú)立和均勻的,那么結(jié)果的每一位也應(yīng)是獨(dú)立和均勻的。F是一個(gè)逐位運(yùn)算的函數(shù)。即,如果X,那么Y,否則Z。函數(shù)H是逐位奇偶操作符。假設(shè)Mj表示消息的第j個(gè)子分組(從0到15),F(xiàn)F(a,b,c,d,Mj,s,ti)表示a=b+(a+(F(b,c,d)+Mj+ti) GG(a,b,c,d,Mj,s,ti)表示a=b+(a+(G(b,c,d)+Mj+ti) HH(a,b,c,d,Mj,s,ti)表示a=b+(a+(H(b,c,d)+Mj+ti) II(a,b,c,d,Mj,s,ti)表示a=b+(a+(I(b,c,d)+Mj+ti)這四輪(64步)是:第一輪FF(a,b,c,d,M0,7,0xd76aa478)FF(d,a,b,c,M1,12,0xe8c7b756)FF(c,d,a,b,M2,17,0x242070db) FF(b,c,d,a,M3,22,0xc1bdceee)FF(a,b,c,d,M4,7,0xf57c0faf)FF(d,a,b,c,M5,12,0x4787c62a)FF(c,d,a,b,M6,17,0xa8304613)FF(b,c,d,a,M7,22,0xfd469501)FF(a,b,c,d,M8,7,0x698098d8)FF(d,a,b,c,M9,12,0x8b44f7af)FF(c,d,a,b,M10,17,0xffff5bb1)FF(b,c,d,a,M11,22,0x895cd7be)FF(a,b,c,d,M12,7,0x6b901122)FF(d,a,b,c,M13,12,0xfd987193)FF(c,d,a,b,M14,17,0xa679438e)FF(b,c,d,a,M15,22,0x49b40821)第二輪GG(a,b,c,d,M1,5,0xf61e2562)GG(d,a,b,c,M6,9,0xc040b340)GG(c,d,a,b,M11,14,0x265e5a51)GG(b,c,d,a,M0,20,0xe9b6c7aa)GG(a,b,c,d,M5,5,0xd62f105d)GG(d,a,b,c,M10,9,0x02441453)GG(c,d,a,b,M15,14,0xd8a1e681)GG(b,c,d,a,M4,20,0xe7d3fbc8)GG(a,b,c,d,M9,5,0x21e1cde6)GG(d,a,b,c,M14,9,0xc33707d6)GG(c,d,a,b,M3,14,0xf4d50d87)GG(b,c,d,a,M8,20,0x455a14ed)GG(a,b,c,d,M13,5,0xa9e3e905)GG(d,a,b,c,M2,9,0xfcefa3f8)GG(c,d,a,b,M7,14,0x676f02d9)GG(b,c,d,a,M12,20,0x8d2a4c8a)第三輪HH(a,b,c,d,M5,4,0xfffa3942)HH(d,a,b,c,M8,11,0x8771f681)HH(c,d,a,b,M11,16,0x6d9d6122)HH(b,c,d,a,M14,23,0xfde5380c)HH(a,b,c,d,M1,4,0xa4beea44)HH(d,a,b,c,M4,11,0x4bdecfa9)HH(c,d,a,b,M7,16,0xf6bb4b60)HH(b,c,d,a,M10,23,0xbebfbc70)HH(a,b,c,d,M13,4,0x289b7ec6)HH(d,a,b,c,M0,11,0xeaa127fa)HH(c,d,a,b,M3,16,0xd4ef3085)HH(b,c,d,a,M6,23,0x04881d05)HH(a,b,c,d,M9,4,0xd9d4d039)HH(d,a,b,c,M12,11,0xe6db99e5)HH(c,d,a,b,M15,16,0x1fa27cf8)HH(b,c,d,a,M2,23,0xc4ac5665)第四輪II(a,b,c,d,M0,6,0xf4292244)II(d,a,b,c,M7,10,0x432aff97)II(c,d,a,b,M14,15,0xab9423a7)II(b,c,d,a,M5,21,0xfc93a039)II(a,b,c,d,M12,6,0x655b59c3)II(d,a,b,c,M3,10,0x8f0ccc92)II(c,d,a,b,M10,15,0xffeff47d)II(b,c,d,a,M1,21,0x85845dd1)II(a,b,c,d,M8,6,0x6fa87e4f)II(d,a,b,c,M15,10,0xfe2ce6e0)II(c,d,a,b,M6,15,0xa3014314)II(b,c,d,a,M13,21,0x4e0811a1)II(a,b,c,d,M4,6,0xf7537e82)II(d,a,b,c,M11,10,0xbd3af235)II(c,d,a,b,M2,15,0x2ad7d2bb)II(b,c,d,a,M9,21,0xeb86d391)常數(shù)ti可以如下選擇:在第i步中,ti是4294967296*abs(sin(i)的整數(shù)部分,i的單位是弧度。(4294967296等于2的32次方)所有這些完成之后,將A、B、C、D分別加上a、b、c、d。然后用下一分組數(shù)據(jù)繼續(xù)運(yùn)行算法,最后的輸出是A、B、C和D的級(jí)聯(lián)。結(jié)束語(yǔ) Internet的迅速增長(zhǎng)帶來(lái)了無(wú)窮的計(jì)算機(jī)會(huì),但是同時(shí)也帶來(lái)了全新的問(wèn)題和擔(dān)心,特別是信息交換的安全性。利用WEB密碼安全傳輸只是網(wǎng)絡(luò)安全的措施之一。如今,新的信息威脅與攻擊不斷出現(xiàn)。在技術(shù)人員找到針對(duì)這些攻擊的保護(hù)方法的同時(shí),而攻擊者則在不斷尋找新的攻擊辦法。這種情況必將繼續(xù)下去。因此,網(wǎng)絡(luò)安全的道路任重而道遠(yuǎn)。致謝本文是在董尼老師的悉心指導(dǎo)下完成的。從畢業(yè)設(shè)計(jì)題目的選擇、到選到課題的研究和論證,再到本畢業(yè)設(shè)計(jì)的編寫(xiě)、修改,每一步都有董尼老師的細(xì)心指導(dǎo)和認(rèn)真的解析。在董老師的指導(dǎo)下,我在各方面都有所提高,老師以嚴(yán)謹(jǐn)求實(shí),一絲不茍的治學(xué)態(tài)度和勤勉的工作態(tài)度深深感染了我,給我巨大的啟迪,鼓舞和鞭策,并成為我人生路上值得學(xué)習(xí)的榜樣。使我的知識(shí)層次又有所提高。同時(shí)感謝所有教育過(guò)我的專業(yè)老師,你們傳授的專業(yè)知識(shí)是我不斷成長(zhǎng)的源泉也是完成本論文的基礎(chǔ)。也感謝我同一組的組員和班里的同學(xué)是你們?cè)谖矣龅诫y題是幫我找到大量資料,解決難題。再次真誠(chéng)感謝所有幫助過(guò)我的老師同學(xué)。通過(guò)這次畢業(yè)設(shè)計(jì)不僅提高了我獨(dú)立思考問(wèn)題解決問(wèn)題的能力而且培養(yǎng)了認(rèn)真嚴(yán)謹(jǐn),一絲不茍的學(xué)習(xí)態(tài)度。由于經(jīng)驗(yàn)匱乏,能力有限,設(shè)計(jì)中難免有許多考慮不周全的地方,希望各位老師多加指教。 參考文獻(xiàn)1邱仲潘等.密碼學(xué)與網(wǎng)絡(luò)安全.清華大學(xué)出版社2李澤林,蘇淑靖.安全技術(shù).國(guó)防工業(yè)出版社3胡建偉,馬建峰.網(wǎng)絡(luò)安全與保密.西安電子科技大學(xué)出版社4謝希仁.計(jì)算機(jī)網(wǎng)絡(luò)(第五版).電子工業(yè)出版社5許曉東,荊繼武,阮耀平.一種混合密碼體制的認(rèn)證協(xié)議及分析.計(jì)算機(jī)工程6馮登國(guó),斐定.密碼學(xué)引導(dǎo).北京:科學(xué)出版社7劉成勇,劉明剛,王明舉.Internet防火墻與網(wǎng)絡(luò)安全.北京:機(jī)械工業(yè)出版社附錄 源代碼 利用JavaScript和ASP來(lái)實(shí)現(xiàn)WEB上的用戶口令的加密傳輸,首先JavaScript腳本編寫(xiě)MD5函數(shù),實(shí)現(xiàn)MD5加密算法。在服務(wù)器端利用ASP的腳本產(chǎn)生一隨機(jī)數(shù)供客戶端使用。代碼:/* * md5.jvs 1.0b 27/06/96 * * Javascript implementation of the RSA Data Security, Inc. MD5 * Message-Digest Algorithm. * * Copyright (c) 1996 Henri Torgemane. All Rights Reserved. * * Permission to use, copy, modify, and distribute this software * and its documentation for any purposes and without* fee is hereby granted provided that this copyright notice* appears in all copies. * * Of course, this soft is provided as is without express or implied * warranty of any kind. * * $Id: md5.js,v 2000/04/17 16:40:07 kk Exp $ * */ function array(n) for(i=0;in;i+) this=0; this.length=n; /* Some basic logical functions had to be rewritten because of a bug in * Javascript. Just try to compute 0xffffffff 4 with it. * Of course, these functions are slower than the original would be, but * at least, they work! */ function integer(n) return n%(0xffffffff+1); function shr(a,b) a=integer(a); b=integer(b); if (a-0x80000000=0) a=a%0x80000000; a=b; a+=0x40000000(b-1); else a=b; return a; function shl1(a) a=a%0x80000000; if (a&0x40000000=0x40000000) a-=0x40000000; a*=2; a+=0x80000000; else a*=2; return a; function shl(a,b) a=integer(a); b=integer(b); for (var i=0;i=0) if (t2=0) eturn (t1&t2)+0x80000000); else return (t1&b); else if (t2=0) return (a&t2); else return (a&b); function or(a,b) a=integer(a); b=integer(b); var t1=(a-0x80000000); var t2=(b-0x80000000); if (t1=0) if (t2=0) return (t1|t2)+0x80000000); else return (t1|b)+0x80000000); else if (t2=0) return (a|t2)+0x80000000); else return (a|b); function xor(a,b) a=integer(a); b=integer(b); var t1=(a-0x80000000); var t2=(b-0x80000000); if (t1=0)if (t2=0) return (t1t2); else return (t1b)+0x80000000); else if (t2=0) return (at2)+0x80000000); else return (ab); function not(a) a=integer(a); return (0xffffffff-a); /* Here begin the real algorithm */ var state = new array(4); var count = new array(2); count0 = 0; count1 = 0; var buffer = new array(64); var transformBuffer = new array(16); var digestBits = new array(16); var S11 = 7; var S12 = 12; var S13 = 17; var S14 = 22; var S21 = 5; var S22 = 9; var S23 = 14; var S24 = 20; var S31 = 4; var S32 = 11; var S33 = 16; var S34 = 23; var S41 = 6; var S42 = 10; var S43 = 15; var S44 = 21; function F(x,y,z) return or(and(x,y),and(not(x),z); function G(x,y,z) return or(and(x,z),and(y,not(z); function H(x,y,z) return xor(xor(x,y),z); function I(x,y,z) return xor(y ,or(x , not(z); function rotateLeft(a,n) return or(shl(a, n),(shr(a,(32 - n); function FF(a,b,c,d,x,s,ac) a = a+F(b, c, d) + x + ac; a = rotateLeft(a, s); a = a+b; return a; unction GG(a,b,c,d,x,s,ac) a = a+G(b, c, d) +x + ac; a = rotateLeft(a, s); a = a+b; return a; function HH(a,b,c,d,x,s,ac) a = a+H(b, c, d) + x + ac; a = rotateLeft(a, s); a = a+b; return a; function II(a,b,c,d,x,s,ac) a = a+I(b, c, d) + x + ac; a = rotateLeft(a, s); a = a+b; return a; function transform(buf,offset) var a=0, b=0, c=0, d=0; ar x = transformBuffer; a = state0; b = state1; c = state2; d = state3; for (i = 0; i 16; i+) x = and(bufi*4+offset,0xff); for (j = 1; j 4; j+) x+=shl(and(bufi*4+j+offset ,0xff), j * 8); /* Round 1 */ a = FF ( a, b, c, d, x 0, S11, 0xd76aa478); /* 1 */ d = FF ( d, a, b, c, x 1, S12, 0xe8c7b756); /* 2 */ c = FF ( c, d, a, b, x 2, S13, 0x242070db); /* 3 */ b = FF ( b, c, d, a, x 3, S14, 0xc1bdceee); /* 4 */ a = FF ( a, b, c, d, x 4, S11, 0xf57c0faf); /* 5 */ d = FF ( d, a, b, c, x 5, S12, 0x4787c62a); /* 6 */ c = FF ( c, d, a, b, x 6, S13, 0xa8304613); /* 7 */ b = FF ( b, c, d, a, x 7, S14, 0xfd469501); /* 8 */ a = FF ( a, b, c, d, x 8, S11, 0x698098d8); /* 9 */ d = FF ( d, a, b, c, x 9, S12, 0x8b44f7af); /* 10 */ c = FF ( c, d,
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 動(dòng)漫速寫(xiě)基礎(chǔ)-課件 第4章動(dòng)態(tài)人物速寫(xiě)
- 互聯(lián)網(wǎng)公司的背景意義及必要性
- 強(qiáng)化企業(yè)文化建設(shè)提升團(tuán)隊(duì)協(xié)作效能
- 老舊廠房改造的現(xiàn)狀及總體形勢(shì)
- 瓦工承包合同范本(18篇)
- 學(xué)年期末自我鑒定(5篇)
- 儲(chǔ)能電站生產(chǎn)線項(xiàng)目可行性研究報(bào)告
- 環(huán)境實(shí)驗(yàn)員考試題及答案
- 電能表考試題及答案
- 智商測(cè)試題及答案數(shù)字
- 2024年全縣金融工作會(huì)議講話材料例文(5篇)
- 跨學(xué)科實(shí)踐:制作望遠(yuǎn)鏡教學(xué)設(shè)計(jì)
- 委托監(jiān)護(hù)協(xié)議書(shū)格式
- 2024年保密培訓(xùn)課件:?jiǎn)T工保密知識(shí)要點(diǎn)
- 上海市安裝工程預(yù)算定額(2000)工程量計(jì)算規(guī)則
- 區(qū)塊鏈技術(shù)在供應(yīng)鏈金融領(lǐng)域的應(yīng)用指南
- GB/T 7247.1-2024激光產(chǎn)品的安全第1部分:設(shè)備分類和要求
- 物業(yè)管理公司品質(zhì)管理手冊(cè)
- 唐宋名家詩(shī)詞鑒賞學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 儲(chǔ)備土地管護(hù)巡查方案
- 電子政務(wù)概論-形考任務(wù)5(在線測(cè)試權(quán)重20%)-國(guó)開(kāi)-參考資料
評(píng)論
0/150
提交評(píng)論