版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第3章單向散列函數(shù)3.1MD5算法3.2安全散列函數(shù)(SHA)3.3消息認(rèn)證碼(MAC)參考文獻(xiàn)思考題
在很多情況下,我們需要鑒別和認(rèn)證用戶。如用戶登錄計(jì)算機(jī)(或自動(dòng)柜員機(jī)等)時(shí),計(jì)算機(jī)往往需要知道用戶是誰(shuí),確認(rèn)是某個(gè)用戶而不是其他人在冒充,傳統(tǒng)的方法是用口令來(lái)解決這個(gè)問(wèn)題。用戶在登錄計(jì)算機(jī)前輸入其口令,由計(jì)算機(jī)確認(rèn)口令正確后用戶才可登錄計(jì)算機(jī)。用戶和計(jì)算機(jī)均知道口令。用戶每次登錄均需輸入口令。由于計(jì)算機(jī)需要知道口令,這就需要把口令保存在計(jì)算機(jī)中。這為入侵計(jì)算機(jī)偷取口令提供了可能。為此,我們不直接保存口令本身,而保存口令的散列值(口令的某種表示形式)。
當(dāng)用戶輸入口令后,計(jì)算機(jī)先計(jì)算口令的散列值并與保存在計(jì)算機(jī)中的散列值進(jìn)行比較,以此來(lái)鑒別用戶。由于用來(lái)計(jì)算散列值的單向函數(shù)具有單向性,即根據(jù)散列值不可能逆向恢復(fù)出口令,從而即使獲得了由口令產(chǎn)生的散列值表也無(wú)法知道用戶的口令。
上面提到的散列值是由單向散列函數(shù)產(chǎn)生的。所謂的單向散列函數(shù)(哈希函數(shù)、雜湊函數(shù),hashfunction)是將任意長(zhǎng)度的消息M映射成一個(gè)固定長(zhǎng)度散列值h的函數(shù)
h?=?H(M)
其中,h的長(zhǎng)度為m。
散列函數(shù)要具有單向性,則必須滿足如下特性:
(1)給定M,很容易計(jì)算h。
(2)給定h,根據(jù)H(M)?=?h反推M很難。
(3)給定M,要找到另一消息M′?并滿足H(M)?=?H(M′)很難。
在某些應(yīng)用中,單向散列函數(shù)還需要滿足抗碰撞(collision)的條件:要找到兩個(gè)隨機(jī)的消息M和M′,使H(M)?=?H(M′)滿足很難。
在實(shí)際中,單向散列函數(shù)是建立在壓縮函數(shù)的想法之上,如圖3-1所示。圖3-1HASH函數(shù)工作模式
給定一任意長(zhǎng)度的消息輸入,單向函數(shù)輸出長(zhǎng)為m的散列值。壓縮函數(shù)的輸入是消息分組和前一分組的輸出(對(duì)第一個(gè)壓縮函數(shù),其輸入為消息分組1和初始化向量IV);輸出是到該點(diǎn)的所有分組的散列,即分組Mi的散列為
hi?=?f(Mi,hi-1)
該散列值和下一輪的消息分組一起作為壓縮函數(shù)下一輪的輸入。最后一分組的散列就是整個(gè)消息的散列。
單向散列函數(shù)還經(jīng)常用于消息認(rèn)證(防篡改)、數(shù)字簽名。本章將介紹幾種常用的單向散列函數(shù)。
3.1MD5算法
3.1.1算法MD表示消息摘要(MessageDigest)。MD5是MD4的改進(jìn)版,算法對(duì)輸入的任意長(zhǎng)度消息產(chǎn)生128位散列值(或消息摘要)。MD5算法可由圖3-2表示。由圖3-2可知,MD5算法包括以下5個(gè)步驟。圖3-2MD5算法
1.附加填充位
首先填充消息使其長(zhǎng)度為一個(gè)比512的倍數(shù)小64位的數(shù)。填充方法是:在消息后面填充一位1,然后填充所需數(shù)量的0。填充位的位數(shù)從1~512。
2.附加長(zhǎng)度
將原消息長(zhǎng)度的64位表示附加在填充后的消息后面。當(dāng)原消息長(zhǎng)度達(dá)大于264時(shí),用(消息長(zhǎng)度mod264)填充。這時(shí)消息長(zhǎng)度恰好是512的整數(shù)倍。令M[01…N-1]為填充后消息的各個(gè)字(每字M[i]為32位),N是16的倍數(shù)。
3.初始化MD緩沖區(qū)
初始化用于計(jì)算消息摘要的128位緩沖區(qū)。這個(gè)緩沖區(qū)由4個(gè)32位寄存器A、B、C、D表示。寄存器的初始化值為(按低位字節(jié)在前的順序存放):
4.按512位的分組處理輸入消息
這一步為MD5的主循環(huán),包括四輪,如圖3-3所示。每個(gè)循環(huán)都以當(dāng)前的正在處理的512比特分組Yq和128比特緩沖值A(chǔ)BCD為輸入,然后更新緩沖內(nèi)容。圖3-3單個(gè)512比特分組的MD5主循環(huán)處理
圖3-3中,四輪的操作類似,每一輪進(jìn)行16次操作。每一輪的操作過(guò)程如圖3-4所示。圖3-4MD5某一輪的執(zhí)行過(guò)程
四輪操作的不同之處在于每輪使用的非線性函數(shù)不同,在第一輪操作之前首先把A、B、C、D復(fù)制到另外的變量a、b、c、d中。這四個(gè)非線性函數(shù)分別為(其輸入輸出均為32位字)
其中,∧表示按位與;表示按位或;~表示按位反;⊕表示按位異或。
此外,由圖3-4可知,這一步中還用到了一個(gè)有64個(gè)元素的表T[1…64],T[i]?=?232?×?abs(sin(i)),i的單位為弧度。
根據(jù)以上描述,將這一步驟的處理過(guò)程歸納如下:
5.輸出
由A、B、C、D四個(gè)寄存器的輸出按低位字節(jié)在前的順序(即以A的低字節(jié)開(kāi)始、D的高字節(jié)結(jié)束)得到128位的消息摘要。
以上就是對(duì)MD5算法的描述。MD5算法的運(yùn)算均為基本運(yùn)算,比較容易實(shí)現(xiàn)且速度很快。
3.1.2舉例
在本章的參考文獻(xiàn)[1]中,給出了實(shí)現(xiàn)MD5的C源代碼。我們以求字符串“abc”的MD5散列值為例來(lái)說(shuō)明上面描述的過(guò)程。“abc”的二進(jìn)制表示為011000010110001001100011。
(1)填充消息:消息長(zhǎng)l=24,先填充1位‘1’,然后填充423位‘0’,再用消息長(zhǎng),24,即0x0000000000000018填充。則
(2)初始化:
(3)主循環(huán):利用2.1.1中描述的過(guò)程對(duì)字塊1(本例只有一個(gè)字塊)進(jìn)行處理。變量a、b、c、d每一次計(jì)算后的中間值可根據(jù)參考文獻(xiàn)[1]提供的C源代碼得到,這里不詳細(xì)列出。
(4)輸出:消息摘要=900150983cd24fb0d6963f7d28e17f72
3.2安全散列函數(shù)(SHA)
3.2.1算法SHA是美國(guó)NIST和NSA共同設(shè)計(jì)的安全散列算法(SecureHashAlgorithm),用于數(shù)字簽名標(biāo)準(zhǔn)DSS(DigitalSignatureStandard)。SHA的修改版SHA-1于1995年作為美國(guó)聯(lián)邦信息處理標(biāo)準(zhǔn)公告(FIPSPUB180-1)發(fā)布[2]。SHA-1產(chǎn)生消息摘要的過(guò)程類似MD5,如圖3-5所示。SHA-1的輸入為長(zhǎng)度小于264位的消息,輸出為160位的消息摘要。具體過(guò)程如下。圖3-5SHA-1算法
1.填充消息
首先將消息填充為512位的整數(shù)倍,填充方法和MD5完全相同:先填充一個(gè)1,然后填充一定數(shù)量的0使其長(zhǎng)度比512的倍數(shù)少64位;接下來(lái)用原消息長(zhǎng)度的64位表示填充。這樣,消息長(zhǎng)度就成為512的整數(shù)倍。以M0、M1、…、Mn表示填充后消息的各個(gè)字塊(每字塊為16個(gè)32位字)。
2.初始化緩沖區(qū)
在運(yùn)算過(guò)程中,SHA要用到兩個(gè)緩沖區(qū),兩個(gè)緩沖區(qū)均有5個(gè)32位的寄存器。第一個(gè)緩沖區(qū)標(biāo)記為A、B、C、D、E;第二個(gè)緩沖區(qū)標(biāo)記為H0、H1、H2、H3、H4。此外,運(yùn)算過(guò)程中還用到一個(gè)標(biāo)記為W0、W1、…、W79的80個(gè)32位字序列和一個(gè)單字的緩沖區(qū)TEMP。在運(yùn)算之前,初始化{Hj}:
3.按512位的分組處理輸入消息
SHA運(yùn)算主循環(huán)包括4輪,每輪20次操作。SHA用到一個(gè)邏輯函數(shù)序列f0、f1、…、f79。每個(gè)邏輯函數(shù)的輸入為3個(gè)32位字,輸出為一個(gè)32位字。定義如下(B、C、D均為32位字):
其中運(yùn)算符的定義與3.1節(jié)中MD5運(yùn)算中的相同。
SHA運(yùn)算中還用到了常數(shù)字序列K0、K1、…、K79,其值為:
SHA算法按如下步驟處理每個(gè)字塊Mi:
4.輸出
在處理完Mn后,160位的消息摘要為H0、H1、H2、H3、H4級(jí)聯(lián)的結(jié)果。
3.2.2SHA-1與MD5的比較
SHA-1與MD5的比較如表3-1所示。
3.2.3舉例
我們以求字符串“abc”的SHA-1散列值為例來(lái)說(shuō)明上面描述的過(guò)程?!癮bc”的二進(jìn)制表示為011000010110001001100011。
(1)填充消息:消息長(zhǎng)l?=?24,先填充1位‘1’,然后填充423位‘0’,再用消息長(zhǎng)24即0x0000000000000018填充。
(2)初始化:
(3)主循環(huán):處理消息字塊1(本例中只有1個(gè)字塊),分成16個(gè)字:
然后根據(jù)3.2.1節(jié)中描述的過(guò)程計(jì)算,其中循環(huán)“fort=0to79”中,各步A、B、C、D、E的值如下:
3.3消息認(rèn)證碼(MAC)
與密鑰相關(guān)的單向散列函數(shù)通常稱為MAC,即消息認(rèn)證碼MAC?=?CK(M)其中,M為可變長(zhǎng)的消息;K為通信雙方共享的密鑰,C為單向函數(shù)。
MAC可為擁有共享密鑰的雙方在通信中驗(yàn)證消息的完整性;也可被單個(gè)用戶用來(lái)驗(yàn)證他的文件是否被改動(dòng)。如圖3-6所示。圖3-6MAC應(yīng)用于消息認(rèn)證
HMAC全稱為keyed-hashmessageauthenticationcode,它用一個(gè)秘密密鑰來(lái)產(chǎn)生和驗(yàn)證MAC[3]。
為了論述的方便,首先給出HMAC中用到的參數(shù)和符號(hào)如下。
B:計(jì)算消息摘要時(shí)輸入塊的字節(jié)長(zhǎng)度(如對(duì)于SHA-1,B=64)。
H:散列函數(shù)如SHA-1、MD5等。
ipad:將數(shù)值0x36重復(fù)B次。
opad:將數(shù)值0x5c重復(fù)B次。
K:共享密鑰。
K0:在密鑰K的左邊附加0使其為B字節(jié)的密鑰。
L:消息摘要的字節(jié)長(zhǎng)度(如對(duì)于SHA-1,L=20)。
t:MAC的字節(jié)數(shù)。
TEXT:要計(jì)算HMAC的數(shù)據(jù)。數(shù)據(jù)長(zhǎng)度為n字節(jié),n的最大值依賴于采用的hash函數(shù)。
X||Y:將字串連接起來(lái),即把字串Y附加在字串X后面。
異或。
密鑰K的長(zhǎng)度應(yīng)大于或等于L/2。當(dāng)使用長(zhǎng)度大于B的密鑰時(shí),先用H對(duì)密鑰求得散列值,然后用得到的L字節(jié)結(jié)果作為真正的密鑰。
利用HMAC函數(shù)計(jì)算數(shù)據(jù)text的MAC過(guò)程如圖3-7所示。圖3-7HMAC
由圖可知,HMAC執(zhí)行的是如下操作:
HMAC算法可以和任何密碼散列函數(shù)結(jié)合使用,而且對(duì)HMAC實(shí)現(xiàn)作很小的修改就可用一個(gè)散列函數(shù)H代替原來(lái)的散列函數(shù)H′。
參考文獻(xiàn)
[1]RRivest.TheMD5Message-DigestAlgorithm.RFC1321,April1992[2]NationalInstituteofStandardsandTechnology,F(xiàn)IPSPUB180-1.SecureHashStandard.U.S.DepartmentofCommerce,April1995
[3]NationalInstituteofStandardsandTechnology,F(xiàn)IPSPUB#HMAC.TheKeyed-HashMessageAuthenticationCode(HMAC).U.S.DepartmentofCommerce,DRAFT,2001
[4]MihirBellare,RanCanetti,HugoKrawczyk.MessageAuthenticationusingHashFunctions-TheHMACConstruction.RSALaboratoriesCryptoBytes,Vol.2,No.1,Spring1996
思考題
[1]概述MD4和MD5各自的優(yōu)缺點(diǎn)。[2]假定a1a2a3a4是一個(gè)32比特字中
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026四川省醫(yī)學(xué)科學(xué)院四川省人民醫(yī)院專職科研人員、工程師招聘3人(二)參考考試題庫(kù)及答案解析
- 2026內(nèi)蒙古鄂爾多斯市城投商業(yè)運(yùn)營(yíng)管理有限公司招聘46人筆試模擬試題及答案解析
- 珠寶+開(kāi)業(yè)活動(dòng)策劃方案(3篇)
- 2026云南玉溪市峨山縣國(guó)有資本投資運(yùn)營(yíng)有限責(zé)任公司招聘補(bǔ)充備考考試試題及答案解析
- 貨車(chē)培訓(xùn)教學(xué)課件
- 第7課時(shí)《赤壁賦》《登泰山記》聯(lián)讀課件
- 2026廣東惠州市博羅縣醫(yī)療保障局招聘編外人員1人考試參考題庫(kù)及答案解析
- 2026重慶墊江縣杠家鎮(zhèn)人民政府選拔公益性崗位人員備考考試題庫(kù)及答案解析
- 2026廣東廣州南沙人力資源發(fā)展有限公司招聘食材分揀員1人筆試備考試題及答案解析
- 網(wǎng)吧體驗(yàn)活動(dòng)策劃方案(3篇)
- 大數(shù)據(jù)安全技術(shù)與管理
- 2026青島海發(fā)國(guó)有資本投資運(yùn)營(yíng)集團(tuán)有限公司招聘計(jì)劃筆試備考試題及答案解析
- 鼻飼技術(shù)操作課件
- 置景服務(wù)合同范本
- 隧道掛防水板及架設(shè)鋼筋臺(tái)車(chē)施工方案
- 碼頭租賃意向協(xié)議書(shū)
- 初一語(yǔ)文2025年上學(xué)期現(xiàn)代文閱讀真題(附答案)
- 2026屆浙江紹興市高三一模高考數(shù)學(xué)試卷試題(含答案)
- GB/T 13789-2022用單片測(cè)試儀測(cè)量電工鋼帶(片)磁性能的方法
- GB/T 33092-2016皮帶運(yùn)輸機(jī)清掃器聚氨酯刮刀
- 中學(xué)主題班會(huì)課:期末考試應(yīng)試技巧點(diǎn)撥(共34張PPT)
評(píng)論
0/150
提交評(píng)論