HMAC算法

本文轉(zhuǎn)載自:https://www.cnblogs.com/shoshana-kong/p/11497676.html

因?yàn)楦杏X(jué)寫(xiě)的很好,就抄過(guò)來(lái)了。
HMAC算法的偽碼實(shí)現(xiàn)

function hmac (key, message) {
    if (length(key) > blocksize) {
    key = hash(key) // keys longer than blocksize are shortened
    }
    if (length(key) < blocksize) {
    // keys shorter than blocksize are zero-padded (where ∥ is concatenation)
    key = key ∥ [ 0x00 * (blocksize - length(key))] // Where * is repetition.
    }
    o_pad = [ 0x5c * blocksize] // Where blocksize is that of the underlying hash function
    i_pad = [ 0x36 * blocksize]
    o_key_pad = o_pad ⊕ key // Where ⊕ is exclusive or (XOR)
    i_key_pad = i_pad ⊕ key
    return hash(o_key_pad ∥ hash(i_key_pad ∥ message)) // Where ∥ is concatenation
}

HMAC算法的典型應(yīng)用

HMAC算法的一個(gè)典型應(yīng)用是用在“挑戰(zhàn)/響應(yīng)”(Challenge/Response)身份認(rèn)證中,認(rèn)證流程如下:
(1) 先由客戶端向服務(wù)器發(fā)出一個(gè)驗(yàn)證請(qǐng)求。
(2) 服務(wù)器接到此請(qǐng)求后生成一個(gè)隨機(jī)數(shù)并通過(guò)網(wǎng)絡(luò)傳輸給客戶端(此為挑戰(zhàn))。
(3) 客戶端將收到的隨機(jī)數(shù)與自己的密鑰進(jìn)行HMAC-SHA1運(yùn)算并得到一個(gè)結(jié)果作為認(rèn)證證據(jù)傳給服務(wù)器(此為響應(yīng))。
(4) 與此同時(shí),服務(wù)器也使用該隨機(jī)數(shù)與存儲(chǔ)在服務(wù)器數(shù)據(jù)庫(kù)中的該客戶密鑰進(jìn)行HMAC-SHA1運(yùn)算,如果服務(wù)器的運(yùn)算結(jié)果與客戶端傳回的響應(yīng)結(jié)果相同,則認(rèn)為客戶端是一個(gè)合法用戶 。

HMAC算法的安全性

HMAC算法引入了密鑰,其安全性已經(jīng)不完全依賴于所使用的HASH算法,安全性主要有以下幾點(diǎn)保證:
(1)使用的密鑰是雙方事先約定的,第三方不可能知道。由上面介紹應(yīng)用流程可以看出,作為非法截獲信息的第三方,能夠得到的信息只有作為“挑戰(zhàn)”的隨機(jī)數(shù)和作為“響應(yīng)”的HMAC結(jié)果,無(wú)法根據(jù)這兩個(gè)數(shù)據(jù)推算出密鑰。由于不知道密鑰,所以無(wú)法仿造出一致的響應(yīng)。
(2)在HMAC算法的應(yīng)用中,第三方不可能事先知道輸出(如果知道,不用構(gòu)造輸入,直接將輸出送給服務(wù)器即可)。
(3) HMAC算法與一般的加密重要的區(qū)別在于它具有“瞬時(shí)”性,即認(rèn)證只在當(dāng)時(shí)有效,而加密算法被破解后,以前的加密結(jié)果就可能被解密。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容