◆李可 石兆軍 周曉俊 郭珂琪
基于MD5加密的身份認(rèn)證系統(tǒng)研究
◆李可 石兆軍 周曉俊 郭珂琪
(北京計(jì)算機(jī)技術(shù)及應(yīng)用研究所 北京 100854)
近些年,信息化社會越來越發(fā)達(dá),上網(wǎng)已經(jīng)成為人們的日常。同時,網(wǎng)絡(luò)上傳輸?shù)男畔⒁苍絹碓蕉唷kS著信息泄露、信息被惡意篡改等網(wǎng)絡(luò)安全問題的暴露,人們對自身信息的安全保護(hù)需求更加強(qiáng)烈。如何確認(rèn)進(jìn)行交談的對象、保證密碼不被泄露是人們所擔(dān)心的問題,因此對密碼合理保存頗為重要,通常使用加密或者信息摘要的形式保存。本文介紹IntelliJ IDEA、Eclipse開發(fā)工具以及Mysql數(shù)據(jù)庫,并對MD5算法進(jìn)行介紹以及算法安全性分析,采用Hash函數(shù)MD5算法加密的方式與數(shù)據(jù)庫數(shù)據(jù)比較,進(jìn)行身份的驗(yàn)證,同時實(shí)現(xiàn)統(tǒng)一身份認(rèn)證。
MD5;身份認(rèn)證;單點(diǎn)登錄;Abstract
雖然近些年發(fā)展迅速,但是生活中依然能看到許多盜版網(wǎng)站,甚至包括即使有些正版官方網(wǎng)站都使用明文存儲密碼,貪圖方便,減少成本。一旦出現(xiàn)數(shù)據(jù)庫泄露等安全問題,會帶給用戶極大的損失。所以用戶密碼如何安全存儲,Hash函數(shù)作為密碼學(xué)中一個經(jīng)典的理論范疇,在實(shí)際生活中具有良好的應(yīng)用型優(yōu)勢。經(jīng)典算法包括MD系列和SHA系統(tǒng),而MD5算法是Hash函數(shù)中典型的算法之一,能將任意消息長度的信息轉(zhuǎn)為固定128bit長度的一個摘要。因此Hash算法在數(shù)據(jù)存儲方面具備得天獨(dú)厚的優(yōu)勢,并且在校驗(yàn)完整性以及數(shù)字簽名、身份認(rèn)證方面都發(fā)揮著不錯的效果。因此,對MD5算法的研究具有重大的借鑒意義。因此將Hash算法和CAS合理的結(jié)合起來,有利于人們在進(jìn)行身份認(rèn)證過程中更加安全也更加方便。相信隨著技術(shù)的再進(jìn)步,會有更多、更加優(yōu)秀的身份認(rèn)證方式出現(xiàn),給人們信息安全方面帶來更多福音。
近年來,隨著科技的高速發(fā)展,信息安全技術(shù)得到一定的進(jìn)步,在密碼學(xué)方面也有許多進(jìn)展。從最初二十世紀(jì)七十年代末,Hash函數(shù)在密碼學(xué)領(lǐng)域得到應(yīng)用,人們開始對Hash函數(shù)進(jìn)行研究。目前,對Hash函數(shù)的探索集中在兩個方面:一方面是對已有的Hash函數(shù)進(jìn)行攻擊的研究,另一個方面是如何設(shè)計(jì)出一個更加安全的Hash函數(shù)的研究。1992年,Rivest在MD4算法的基礎(chǔ)上設(shè)計(jì)出了MD5算法,MD5算法的安全性能比MD4算法的安全性高,該算法的Hash值的長度以及填充準(zhǔn)則與MD4算法是完全一樣的。因此,在那個計(jì)算機(jī)性能較差的時代,MD5可以稱得上值得信賴的算法之一。在那段時間內(nèi),有許多科學(xué)家研究員都希望能通過不斷的探索來對MD5進(jìn)行一個突破,找到相應(yīng)規(guī)律,對其實(shí)現(xiàn)破解。直到2004年,出身在中國的王小云提出了關(guān)于MD5算法碰撞的策略。這個策略方法經(jīng)過她與團(tuán)隊(duì)多年的努力,能在已知明文的情況下,更快、更有效的找到一個能與明文產(chǎn)生一模一樣Hash值的另一個不同的信息。這一發(fā)現(xiàn)徹底的說明了Hash函數(shù)MD5算法是存在一定的安全隱患的,也由于證明了MD5算法的抗弱碰撞性存在問題,NIST在2007年開始征集更加安全的Hash算法。雖然MD5算法被證明存在一定的安全問題,但是在之后出現(xiàn)的SHA系列等Hash函數(shù)均有MD5算法的影子。因此對MD5算法的研究更加重要。
現(xiàn)階段,各方提供了多種身份認(rèn)證方式與機(jī)制。在其中非常常見的幾種認(rèn)證方式有:生物特征識別、用戶名與密碼、短信密碼、數(shù)字簽名等。其中用得最多的還是屬于用戶名與密碼體系。如今,由于小程序以及網(wǎng)站的發(fā)展,各種系統(tǒng)層出不窮,其中有許多系統(tǒng)屬于同一公司、同一部門或者同一機(jī)構(gòu),它們有著不同的登錄系統(tǒng)界面,用戶每次進(jìn)行登錄時,通常需要多次輸入相同的用戶名與密碼,雖然在一定程度上提供了安全性,但這也帶給用戶不太好的體驗(yàn)和諸多不便。而統(tǒng)一身份認(rèn)證屬于身份認(rèn)證行列之一,提供了SSO(Single Sign On)單點(diǎn)登錄的功能,也就是說用戶在進(jìn)行了一次登錄之后,在有效期間內(nèi),無需重復(fù)認(rèn)證就能直接登錄相關(guān)的受信網(wǎng)站。這種方式能有效解決該問題。包括微軟的Passport,但是它的安全性沒有得到保證,并且因?yàn)榧夹g(shù)不公開,有一定的壟斷性。由于我國的IT技術(shù)在身份認(rèn)證領(lǐng)域發(fā)展起步晚,相對落后,導(dǎo)致現(xiàn)階段所用產(chǎn)品大多數(shù)都是國外的,國內(nèi)幾乎沒有比較成熟的產(chǎn)品出現(xiàn)。而其中比較典型的CAS框架因?yàn)楸旧砼渲煤唵?、開源、能實(shí)現(xiàn)跨域且安全性較好等特點(diǎn)受到廣泛的關(guān)注。
(1)IntelliJ IDEA:是一款以Java語言開發(fā)的集成環(huán)境,支持HTML、CSS、Mysql等。具有智能編碼、歷史記錄功能、靈活排版以及完全支持JSP等優(yōu)點(diǎn)。
(2)Eclipse:是一個開源的、基于Java的可擴(kuò)展平臺。支持許多插件,其中就包括WindowBuilder可視化插件。
(3)MySQL:是一個由瑞典MySQLAB公司開發(fā)的當(dāng)下最流行的數(shù)據(jù)庫管理系統(tǒng)之一。使用SQL語言,體積小、速度快、總體成本較低、開放源代碼等都是該數(shù)據(jù)庫的優(yōu)勢。
(4)Tomcat:該服務(wù)器具有開源代碼的特點(diǎn),并且適合人們在進(jìn)行測試的時候進(jìn)行本地搭建。作為一種輕量級的服務(wù)器,適用于同時訪問人數(shù)較少的情況下使用。
MySQL數(shù)據(jù)庫的特點(diǎn):查詢速度較快、體量小、開源免費(fèi)、占用空間小、經(jīng)濟(jì)成本低以及支持SQL語言等。這些都是MySQL令人青睞的重要原因。Mongodb數(shù)據(jù)庫,該類數(shù)據(jù)庫屬于分布式存儲的方式,沒有固定的格式,基于索引查詢,存儲方式是JSON。顯然,本研究使用用戶名與密碼的身份認(rèn)證方式,有著固定的格式要求,采用MySQL數(shù)據(jù)庫更加合理。同時,因?yàn)榭梢允褂胘dbc對數(shù)據(jù)庫進(jìn)行連接。這樣的話,可以讓人們在對數(shù)據(jù)庫的數(shù)據(jù)改變時更加的簡單明了,而且更多開發(fā)平臺都支持jdbc的使用。
MD5算法作為哈希算法中非常經(jīng)典的算法之一,是經(jīng)過許多科學(xué)家、研究人員多次改進(jìn)之后得到的一個在當(dāng)時較為滿意的算法,接下來,將會對該算法的發(fā)展背景與具體實(shí)施步驟進(jìn)行相應(yīng)介紹。
3.1.1 MD5算法的發(fā)展及特點(diǎn)
MD5算法是被人們廣泛使用的密碼散列函數(shù)的經(jīng)典算法之一。適用場景較多,此算法隸屬于MD系列算法的一員。MD5算法將一個任意長度的信息壓縮成固定比特?cái)?shù)的格式,這極大地提高了對信息的存儲效率。 MD5算法類似于SP網(wǎng)絡(luò)中的擴(kuò)散作用。因?yàn)樾畔⒄惴梢运闶且环N壓縮算法,由于原有信息長度為無限(任意)長,最后得到的摘要的比特長度一般來說是小于原有信息的長度。在信息摘要算法中,即使知道了摘要信息,想要確定地反推回原文是很難的,具有不可逆性。MD5算法的填充方式與得到的哈希值的長度均為128比特,但是產(chǎn)生沖突的概率沒有理想中的那么優(yōu)秀,于是,MD5算法橫空出世,在MD4算法的基礎(chǔ)上,多增加了一輪迭代,變成四輪,在將近十幾年的時間內(nèi),MD5的是相對安全的。
3.1.2 MD5算法原理描述
(1)消息填充。首先,對于任意長度的原文信息轉(zhuǎn)為二進(jìn)制,并且需要進(jìn)行消息填充,其中因?yàn)樾枰褂?4比特用來記錄該信息原文的長度,采用二進(jìn)制的方式進(jìn)行存儲。加上使用的64比特外,需要將原有消息比特?cái)?shù)填充至512的倍數(shù)。
(2)把原有信息的長度化為二進(jìn)制加入到已經(jīng)填充的消息末尾。使用64比特,采用小端存儲的方式用來表示整個原文消息也就是被填充前的長度。小端方式是指根據(jù)信息數(shù)據(jù)的最低有效字節(jié)優(yōu)先的順序存儲數(shù)據(jù)的方式。如果消息長度大于264,那么將會以264為模進(jìn)行取模處理。
(3)對MD緩沖區(qū)初始化。在一開始初始化一個初始向量,記作IV,該初始向量由4個寄存器組成,每個寄存器長度均為32比特,IV的總長度為128比特。并且每個寄存器都采用小端方式進(jìn)行數(shù)據(jù)存儲,并且使用的是十六進(jìn)制來保存,對每個寄存器都賦予一定規(guī)定好的初始值,寄存器分別記作A,B,C,D,并且每個小組之間需要一個CV鏈接變量。
(4)需要對信息進(jìn)行分組處理。將填充過后的信息每512比特都分成一個小組,每個小組都有16個字(一個字包括32比特)。
(5)對每個小組通過壓縮函數(shù)進(jìn)行4輪、每輪16步的迭代壓縮。在一開始,先建立一張常數(shù)表T。T一共有64個不同的元素。比如在T常數(shù)表中的第k個元素T[k]的值就是232*abs(sin(i))取整,并且采用十六進(jìn)制來表示。每輪的壓縮函數(shù)并不相同,每一個分組都會經(jīng)歷4輪一共64步的運(yùn)算,經(jīng)過若干分組的操作后,會最終得到一個長度為128比特的信息摘要。這就是MD5值。
3.2.1 SSO單點(diǎn)登錄
SSO作為一種登錄體系基于統(tǒng)一身份認(rèn)證系統(tǒng),通常需要有多個角色,一個統(tǒng)一的認(rèn)證中心,還要包括若干個相互信任的應(yīng)用平臺。這些平臺的身份認(rèn)證都會統(tǒng)一在認(rèn)證中心進(jìn)行一次認(rèn)證,一般來說會使用每個系統(tǒng)相互承認(rèn)的、共同的一部分?jǐn)?shù)據(jù)在數(shù)據(jù)庫進(jìn)行驗(yàn)證,校驗(yàn)了用戶的身份,如果沒有通過,不會允許用戶使用應(yīng)用。反之,通過驗(yàn)證后,通常是采用生成一個ticket的形式,讓用戶擁有該票據(jù),并且該認(rèn)證中心會發(fā)送一段消息用來告知其他受到信任的平臺該用戶是否擁有訪問應(yīng)用的權(quán)限。SSO經(jīng)常是建立在Web應(yīng)用服務(wù)之中,因此不只是進(jìn)行身份驗(yàn)證工作,還需要進(jìn)行訪問控制,會搭建一個攔截工具,讓想單獨(dú)訪問相關(guān)應(yīng)用系統(tǒng)的用戶,必須要經(jīng)過認(rèn)證中心這一關(guān)卡。綜上所述,Web單點(diǎn)登錄的主要模塊需要有擔(dān)保服務(wù)模塊使用SAML認(rèn)證聲明、認(rèn)證模塊負(fù)責(zé)身份的驗(yàn)證、身份映射模塊等等。
3.2.2 CAS原理
CAS的原理機(jī)制是基于單點(diǎn)登錄進(jìn)行開發(fā)的。從結(jié)構(gòu)上,CAS包括服務(wù)端和客戶端兩個部分,服務(wù)端需要單獨(dú)部署。如果是Web應(yīng)用,將會在客戶端的web.xml中配置相應(yīng)的過濾器。該過濾器會判斷該用戶是否具有訪問應(yīng)用的資格。若沒有權(quán)限,就會重定向到服務(wù)端彈出一個登錄界面進(jìn)行驗(yàn)證。CAS的認(rèn)證方式為:首先,如果用戶想要通過瀏覽器訪問客戶端也就是一個應(yīng)用服務(wù),那么該客戶端會通過過濾器對用戶進(jìn)行認(rèn)證。若用戶沒有登錄過該系統(tǒng),那么客戶端會發(fā)送302并且攜帶一個service參數(shù)將重定向至服務(wù)端,除此之外,附加service的原因在于需要在服務(wù)端進(jìn)行驗(yàn)證后重定向到客戶端的URL。緊接著,會彈出登錄窗口界面,在服務(wù)端會進(jìn)行一次身份驗(yàn)證。通過驗(yàn)證以后,服務(wù)端會生成一個ST和TGT,并且會Cookie里面生成一個TGC通過SSL的方式傳輸給用戶。并且會暫時將ST票據(jù)顯示在網(wǎng)址中。然后重定向到客戶端,客戶端看到一個傳來的ST票據(jù),就會想要驗(yàn)證ST票據(jù)的真實(shí)性以及是否有效。然后把ST送到服務(wù)端再次進(jìn)行確認(rèn),最后服務(wù)端再傳一個用戶相關(guān)的信息憑證。這樣,一次CAS統(tǒng)一身份認(rèn)證完成。
隨機(jī)數(shù)的產(chǎn)生與應(yīng)用在信息安全領(lǐng)域應(yīng)用面很廣,通常用來防止重放攻擊,用于身份認(rèn)證機(jī)制的一部分。其中較為典型的就是會話密鑰。隨機(jī)數(shù)是一組不能被預(yù)測的數(shù)字或符號序列,這些數(shù)字與符號是完全偶然產(chǎn)生的,幾乎可以說找不到它們的相關(guān)規(guī)律性。但是由于是通過計(jì)算機(jī)固定算法得到的隨機(jī)數(shù),因此這些數(shù)不能完全被稱作隨機(jī)數(shù)。隨機(jī)數(shù)一般來說需要保證數(shù)列中在規(guī)定的數(shù)字范圍內(nèi)出現(xiàn)每個不同數(shù)字的概率是相等或者相近的。并且還需要確保數(shù)列中每個任意的數(shù)都不會因?yàn)槠渌麛?shù)字已知而推導(dǎo)得出,也就是找不到它們之間的關(guān)聯(lián)性。隨機(jī)數(shù)具有不可預(yù)測性。就是說在數(shù)列之后的數(shù)不應(yīng)該會被前面的若干個數(shù)猜測到。在現(xiàn)實(shí)生活中,真正的隨機(jī)數(shù)幾乎很難得到,所以網(wǎng)絡(luò)安全方面我們一般采用的是偽隨機(jī)數(shù)。雖然會受到固定算法的影響,但是算法只要通過了隨機(jī)性的檢測,那么就可以說這個是一個隨機(jī)性良好的算法,現(xiàn)在使用最多的是用線性同余算法產(chǎn)生偽隨機(jī)數(shù)列。
4.1.1 MD5詳細(xì)步驟以及代碼實(shí)現(xiàn)
對MD5算法進(jìn)行初步分析,發(fā)現(xiàn)在不進(jìn)行填充的部分可以優(yōu)先使用MD5哈希算法處理,得到的結(jié)果不影響后面的運(yùn)算結(jié)果。因此,可以調(diào)整MD5算法通常的步驟程序。
(1)首先介紹MD5算法核心的壓縮函數(shù)部分。每個小組都將進(jìn)行4輪每輪16步的壓縮。
其中包括了在第i輪第j步所經(jīng)過的邏輯函數(shù)g、T常數(shù)表、選字以及循環(huán)左移包括與寄存器B進(jìn)行模232加法運(yùn)算。判斷是否還有需要繼續(xù)進(jìn)行哈希的小組,進(jìn)行迭代處理。
(2)填充階段。此時需要判斷需要用來存儲原始信息長度的64比特是否能夠在加入最后一個小組后依然能有空位。然后針對不同情況進(jìn)行不同的填充處理。若加入8個字節(jié)之后仍有空余,就會直接進(jìn)行填充10000.沒有剩余空位,會有兩種情況,一種是剛好只有1比特存留,一種是只有0比特存留,因?yàn)樘畛湟?guī)則規(guī)定必須要起碼填充一位1字符,然后后面可以繼續(xù)加入若干個0字符,那么就需要根據(jù)兩種不同的情況分開處理。
(3)分組階段與字節(jié)合并。分組階段可以通過字節(jié)來進(jìn)行分組也可以通過比特進(jìn)行分組。因?yàn)?12比特正好是64個字節(jié),本次是通過字節(jié)的方法來進(jìn)行分組,在進(jìn)行壓縮函數(shù)前,需要對每4個相鄰的字節(jié)進(jìn)行合并。形成16個32比特的字。以供壓縮函數(shù)的選字操作使用。
(4)刪除符號位。在進(jìn)行字節(jié)分組的時候,因?yàn)椴捎肂yte,是一個帶有符號位的整數(shù)。這會影響我們進(jìn)行相關(guān)操作,尤其是在進(jìn)行字節(jié)數(shù)組合并的時候。所以我們要對符號位進(jìn)行刪除。
(5)輸出結(jié)果。
(6)驗(yàn)證代碼的正確性。我們使用到了一個MD5加密的網(wǎng)站,該網(wǎng)站致力于創(chuàng)建一個大型數(shù)據(jù)庫,用來記錄MD5 8算法原密文對,試圖通過撞庫的方式,進(jìn)行MD5破解。使用123456、abcdefgh以及shuodhsoudnasucus@#fjsi隨意輸出的數(shù)據(jù)進(jìn)行簡單的驗(yàn)證。
4.1.2 MD5完整性測試
本研究采用MD5對傳輸?shù)臄?shù)據(jù)以及數(shù)據(jù)庫數(shù)據(jù)的完整性進(jìn)行校驗(yàn),若數(shù)據(jù)不完整則不允許登錄。因此,為了檢驗(yàn)與分析MD5算法在驗(yàn)證數(shù)據(jù)完整性方面的特性,采用了對文件數(shù)據(jù)進(jìn)行MD5加密,然后做出一個微小變動,觀察MD5值的變化以及分析MD5的作用。
近些年,人們對自身信息的安全保護(hù)需求更加強(qiáng)烈。如何確認(rèn)進(jìn)行交談的對象其安全性、保證密碼不被泄露是人們所擔(dān)心的問題,因此對密碼合理保存頗為重要,通常使用加密或者信息摘要的形式保存。訪問網(wǎng)站以及系統(tǒng)登錄時,通常需要進(jìn)行身份認(rèn)證,但是登錄不同的系統(tǒng)需要輸入不同的用戶名和密碼。這樣不僅操作煩瑣,而且導(dǎo)致用戶需要記住大量的信息,本文介紹基于MD5算法加密的身份認(rèn)證系統(tǒng)采用Hash函數(shù)MD5算法加鹽的方式與數(shù)據(jù)庫數(shù)據(jù)比較,進(jìn)行身份的驗(yàn)證,同時實(shí)現(xiàn)統(tǒng)一身份認(rèn)證,解決了用戶的麻煩。
[1]洪丹丹,羅軍峰,馮興利,等.基于RSA與MD5簽名的實(shí)名制微門戶設(shè)計(jì)[J].微電子學(xué)與計(jì)算機(jī),2016,33(09):36-41.
[2]許永達(dá).基于MD5和RSA算法的網(wǎng)絡(luò)考試身份認(rèn)證方案設(shè)計(jì)[J].廣東石油化工學(xué)院學(xué)報(bào),2013,23(03):52-55+68.
[3]喻謙. 基于MD5算法的用戶身份認(rèn)證系統(tǒng)研究[D].華北電力大學(xué),2013.
[4]鄭之華.MD5算法在統(tǒng)一用戶管理系統(tǒng)中身份認(rèn)證的應(yīng)用[J].齊齊哈爾大學(xué)學(xué)報(bào)(自然科學(xué)版),2012,28(02):76-80.
網(wǎng)絡(luò)安全技術(shù)與應(yīng)用2022年7期