小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

等保2.0下,密碼技術大起底(一)

 靜靜的看一看 2020-12-02
作者北京威努特技術有限公司
出品等級保護測評

密碼技術是信息安全的基礎和核心,密碼技術發(fā)展到今天已經(jīng)形成了一個龐大的技術體系,每一個算法都非常復雜精妙。本文雖然命名為“大起底”,其實只是走馬觀花,不研究密碼算法的細節(jié),主要對等保2.0涉及的密碼技術做大概介紹,重點是理解常用密碼算法的特點和適用場景,以及業(yè)界成熟的密碼技術應用方案。

本文分為多個系列,今天是第一篇文章,首先介紹等保2.0對密碼技術的相關要求、密碼技術的歷史和基本概念,重點介紹哈希算法及相關應用。后續(xù)的系列將陸續(xù)講解對稱加密算法、非對稱加密算法、硬件加密、國密算法等內(nèi)容,歡迎持續(xù)關注。


等保2.0關于密碼技術的規(guī)定


等保2.0標準已經(jīng)在2019年12月正式開始實施。等保2.0標準中對密碼技術做了明確的要求,密碼技術主要出現(xiàn)在三級安全要求和四級安全要求中,主要的領域是通信網(wǎng)絡和計算環(huán)境,下面表格中列出了等保2.0四級安全要求中對密碼技術的相關要求,黑色字體表示是四級針對三級安全級別增強的要求,其他都是三級和四級公共的安全要求。

防護大類
防護小類
密碼技術相關要求
安全通信網(wǎng)絡
通信傳輸
本項要求包括:
a)  應采用密碼技術保證通信過程中數(shù)據(jù)的完整性;
b)  應采用密碼技術保證通信過程中數(shù)據(jù)的保密性;
c)  應在通信前基于密碼技術對通信的雙方進行驗證或認證;
d)  應基于硬件密碼模塊對重要通信過程進行密碼運算和密鑰管理。
安全計算環(huán)境
身份鑒別
本項要求中密碼技術相關要求包括:
c)  當進行遠程管理時,應采取必要措施防止鑒別信息在網(wǎng)絡傳輸過程中被竊聽;
d)  應采用口令、密碼技術、生物技術等兩種或兩種以上組合的鑒別技術對用戶進行身份鑒別,且其中一種鑒別技術至少應使用密碼技術來實現(xiàn)。
數(shù)據(jù)完整性
本項要求包括:
a)  應采用密碼技術保證重要數(shù)據(jù)在傳輸過程中的完整性,包括但不限于鑒別數(shù)據(jù)、重要業(yè)務數(shù)據(jù)、重要審計數(shù)據(jù)、重要配置數(shù)據(jù)、重要視頻數(shù)據(jù)和重要個人信息等;
b)  應采用密碼技術保證重要數(shù)據(jù)在存儲過程中的完整性,包括但不限于鑒別數(shù)據(jù)、重要業(yè)務數(shù)據(jù)、重要審計數(shù)據(jù)、重要配置數(shù)據(jù)、重要視頻數(shù)據(jù)和重要個人信息等;
c)  在可能涉及法律責任認定的應用中,應采用密碼技術提供數(shù)據(jù)原發(fā)證據(jù)和數(shù)據(jù)接收證據(jù),實現(xiàn)數(shù)據(jù)原發(fā)行為的抗抵賴和數(shù)據(jù)接收行為的抗抵賴。
數(shù)據(jù)保密性
本項要求包括:
a) 應采用密碼技術保證重要數(shù)據(jù)在傳輸過程中的保密性,包括但不限于鑒別數(shù)據(jù)、重要業(yè)務數(shù)據(jù)和重要個人信息等;
b) 應采用密碼技術保證重要數(shù)據(jù)在存儲過程中的保密性,包括但不限于鑒別數(shù)據(jù)、重要業(yè)務數(shù)據(jù)和重要個人信息等。
安全管理中心
集中管控
本項要求中密碼技術相關要求包括:
b)  應能夠建立一條安全的信息傳輸路徑,對網(wǎng)絡中的安全設備或安全組件進行管理。

分析等保2.0對密碼技術的要求,可以看到密碼技術主要用于4個場景:身份認證、數(shù)據(jù)保密、數(shù)據(jù)完整性校驗、防抵賴,其中身份認證也是訪問控制的前提條件。

另外,在等保2.0基本要求的附錄B(關于等級保護對象整體安全保護能力的要求)中,提到:“本標準針對較高級別的等級保護對象,提到了使用密碼技術、可信技術等,多數(shù)安全功能(如身份鑒別、訪問控制、數(shù)據(jù)完整性、數(shù)據(jù)保密性等)為了獲得更高的強度,均要基于密碼技術或可信技術,為了保證等級保護對象的整體安全防護能力,應建立基于密碼技術的統(tǒng)一支撐平臺,支持高強度身份鑒別、訪問控制、數(shù)據(jù)完整性、數(shù)據(jù)保密性等安全功能的實現(xiàn)?!?/strong>充分說明了密碼技術在較高級別保護對象的防護中,起著至關重要、必不可少的作用。

2019年10月26日,《中華人民共和國密碼法》頒布,并將于2020年1月1日起正式施行。密碼法的頒布實施是密碼歷史上具有里程碑意義的大事,必將對密碼事業(yè)發(fā)展產(chǎn)生重大而深遠的影響。密碼法中明確強調(diào)了對關鍵信息基礎設施中密碼技術的要求。

密碼技術是目前世界上公認的保障信息安全最有效、最可靠、最經(jīng)濟的核心技術。密碼法的頒布對于等保2.0的實施具有進一步的指導意義,等保2.0中定級為三級和四級的保護對象及系統(tǒng),大部分也是關系國計民生的關鍵基礎設施,這些關鍵基礎設施中對密碼技術的應用必須嚴格遵守密碼法的規(guī)定。制定和實施密碼法,就是要把密碼應用和管理的基本制度及時上升為法律規(guī)范,推動構建以密碼技術為核心、多種技術交叉融合的網(wǎng)絡空間安全體制。


密碼技術簡介


密碼技術,簡單來講,就是隱密地傳遞信息的技術,常被認為是數(shù)學和計算機科學的分支,和信息論也密切相關。

密碼技術歷史非常悠久,早期主要用于軍事目的,不對外公開,也沒有準確的文獻記載。公元前17世紀,古巴比倫的Phaistos圓盤正反兩面充斥著42種不同符號所表示的242個印記,至今還沒有完全破譯。
 

中國古代兵書《六韜》中記錄了陰符和陰書兩種加密通信方式。國君和在外主將之間用陰符秘密聯(lián)絡,八種不同尺寸長度的陰符,隱藏著不同的軍情秘密。如需傳遞軍機大事則用陰書:把書信拆成三部分,分派三人發(fā)出,每人拿一部分,只有三部分合在一起才能讀懂信的內(nèi)容。

公元前700年左右,古希臘軍隊用一種圓木棍進行保密通信。這種加密方法中,加密方把紙條纏繞在特定的木棒上,寫上原信息,木棒撤掉之后,紙條上的字母變成了亂碼。解密方收到這個紙條后,用相同的木棒就可以恢復原信息。

第一次世界大戰(zhàn)和第二次世界大戰(zhàn)中,密碼技術對最后的戰(zhàn)爭結果起到舉足輕重的作用。截至第二次世界大戰(zhàn)結束,計算機技術尚未普及,這些加密技術都稱為古典密碼技術。古典密碼技術的主要特點是基于字符的替換和換位,密文的安全性主要依賴算法的保密。也就是說,如果知道了算法,就可以從密文反向推導出明文。

1949年,Shannon在《貝爾實驗室技術雜志》上發(fā)表了《保密系統(tǒng)的通信理論(Communication Theory of Secrecy Systems)》,為現(xiàn)代密碼學建立了理論基礎,隨著計算機的發(fā)展,密碼技術使用的算法越來越復雜,密文的安全性主要依賴密鑰,而不是算法。

1976年,Whitefield Diffie和Martin Hellman發(fā)表論文公布了Diffie-Hellman算法,開啟了公鑰密碼時代,即非對稱加密技術。1977年,RSA算法發(fā)布,人類正式進入了公鑰密碼技術時代。近代密碼學改變了古典密碼學單一的加密手法,融入了大量的數(shù)論、幾何、代數(shù)等豐富知識,使密碼學得到更蓬勃的發(fā)展。

密碼技術是信息安全的基礎,信息安全的基本屬性中,可靠性(身份認證)、保密性、完整性、不可否認性都需要依賴密碼技術才能實現(xiàn)。這4個基本屬性和等保2.0中的4個主要應用場景是一致的。

現(xiàn)代密碼技術體系由5個基本概念組成:明文、密文、密鑰、加密算法、解密算法。密碼技術體系結構模型如下:
 

如果加密算法的加密秘鑰和解密秘鑰相同,我們稱為對稱加密算法,典型算法是DES、AES算法等。

如果加密算法的加密秘鑰和解密秘鑰不同,我們稱為非對稱加密算法,典型算法是RSA算法等。

密碼技術中,有一類算法是單向的,不可逆向恢復為明文,這類算法一般稱為哈希(Hash)算法或雜湊算法、散列算法,典型算法是MD5,SHA等。哈希算法的本質(zhì)其實不是加密,而是針對輸入的明文數(shù)據(jù)計算出唯一的摘要,主要用于驗證數(shù)據(jù)的完整性,也可以結合預設密鑰用來做數(shù)據(jù)來源證明,保證信息的不可否認性。

今天這篇文章,主要講解哈希算法及其典型應用。


哈希算法介紹


基本概念

在現(xiàn)代密碼學中,哈希算法占據(jù)著基礎而又重要的地位,理解哈希是理解數(shù)字簽名和加密通信等技術的必要前提,哈希算法經(jīng)常和其他加密算法一起形成更高級的加密方案。

哈希算法,是一種給數(shù)據(jù)創(chuàng)造“數(shù)字指紋”的方法。與指紋一樣,哈希算法就是一種以很短的信息來實現(xiàn)數(shù)據(jù)的唯一性標志,這種標志與數(shù)據(jù)的每一個字節(jié)都相關。當原有數(shù)據(jù)發(fā)生改變時,其哈希值也會發(fā)生改變,而且即使很小的變化,也會引起哈希值很大的變化。

哈希算法最重要的特點是很難以找到逆向規(guī)律,即完全無法根據(jù)哈希值逆向推測原始的數(shù)據(jù),所以從本質(zhì)上講不屬于加密算法,因為加密必然對應著解密。但是哈希算法是密碼技術中非常常用的算法,所以一些不嚴謹?shù)膱龊?,也稱為單向加密算法。

好的哈希算法通常具有下列特性:

特 性
說  明
快速性
給定明文,能快速計算出哈希值,資源消耗少,速度極快。
單向性
無法逆向解密,給定哈希值,在有限時間內(nèi)很難(基本不可能)逆推出明文。
敏感性
對輸入數(shù)據(jù)很敏感,原始輸入數(shù)據(jù)塊即使只修改少量信息,比如一個比特,產(chǎn)生的哈希值看起來差異很大。
確定性
同一個輸入數(shù)據(jù),計算得出的哈希值是確定;不同的哈希值,其對應的原始輸入一定不同。
強抗碰撞性
對于任意兩個不同的數(shù)據(jù)塊,其哈希值相同的可能性或概率極小?;蛘哒f,對于一個給定的數(shù)據(jù)塊,找到另一個數(shù)據(jù)塊和它哈希值相同是極為困難的事。

典型算法

目前常見的典型哈希算法包括CRC、MD5、SHA1和SHA2等,這些算法其實背后都有一個家族,同一家族中算法的基本結構是一致的,差別是哈希值的長度、循環(huán)運行的次數(shù)等略有差異,下表列出來這些家族中的典型算法: 

CRC:Cyclic Redundancy Check,冗余循環(huán)校驗算法,主要用于網(wǎng)絡數(shù)據(jù)流的差錯校驗,檢查傳輸數(shù)據(jù)的完整性。
MD:Message-Digest Algorithm,消息摘要算法,其中MD5是最常使用的哈希算法。
SHA:Secure Hash Algorithm,安全哈希算法,NIST用于替換MD5的更安全的哈希算法。
國密:目前只有SM3哈希算法,哈希值長度256,和SHA256安全性相當。

在這些公開的哈希算法中,一般哈希值長度越長,算法就越安全。注意這個結論僅針對公開的被大家認可的哈希算法,如果某個程序員自己設計一種哈希算法,則不能依靠這個結論判別其安全性,因為這個算法沒有經(jīng)過大范圍的檢驗。
比如:CRC-32算法輸出的哈希值是32位,MD5算法輸出的哈希值是128位,SHA-1算法輸出的哈希值是160位,SHA-256算法輸出的哈希值是256位,那么可以得知SHA-256是最安全的哈希算法。

注意,在關鍵基礎設施的安全技術方案中,如果不涉及和第三方系統(tǒng)對接等場景,優(yōu)先推薦使用國密算法。

山東大學的王小云教授分別在2004年和2005年破解了MD5和SHA1算法。注意對哈希算法的破解,并不是根據(jù)哈希值逆向推算出原始的明文,前面已經(jīng)提到,哈希算法是無法逆向反推的。對哈希算法的破解,本質(zhì)是根據(jù)已有數(shù)據(jù)構造出互相“碰撞”的數(shù)據(jù),也就是兩塊數(shù)據(jù)不同,但是生成的哈希值相同。

根據(jù)對哈希算法的要求,要保證每一個字節(jié)都會對最終結果產(chǎn)生影響。所以哈希算法都需要循環(huán)處理每一個字節(jié)的數(shù)據(jù),一般是把數(shù)據(jù)分塊處理,在MD5和SHA1及SHA2算法中,數(shù)據(jù)塊的大小都是512位,即64字節(jié),然后循環(huán)處理每一塊數(shù)據(jù)。

為了保證所有循環(huán)處理的數(shù)據(jù)塊長度都是512位,就需要對原始輸入數(shù)據(jù)進行預處理,即在數(shù)據(jù)末尾進行填充,確保數(shù)據(jù)的總長度是512位的整數(shù)倍。

哈希算法的基本流程如下圖:
 

數(shù)據(jù)填充的過程和要求如下:

◇ 先補第一個比特為1,然后都補0,直到長度滿足對512取模后余數(shù)是448。注意:信息必須進行填充,也就是說,即使長度已經(jīng)滿足對512取模后余數(shù)是448,補位也必須要進行,這時要填充512個比特。因此,填充是至少補一位,最多補512位。

◇ 因為在第一步的預處理后,第二步會再附加上一個64位的數(shù)據(jù),用來表示原始報文的長度信息。448+64=512,就形成了最后的512位數(shù)據(jù),正好拼成了一個完整的結構。SHA256用一個64位的數(shù)據(jù)來表示原始消息的長度。因此,通過SHA256計算的消息長度必須要小于2^64,當然,這已經(jīng)是一個足夠大的天文數(shù)字了。

數(shù)據(jù)填充后,就可以計算哈希值。計算過程如下:

◇ 首先使用初始值哈希值(64字節(jié)的固定數(shù)據(jù))和第一塊數(shù)據(jù)計算得出哈希值。

◇ 把計算出的這個哈希值作為初始值,循環(huán)計算下一塊數(shù)據(jù),并把計算出的哈希值替換初始值。

◇ 循環(huán)處理完每一塊數(shù)據(jù),就得到最終的哈希值。

計算的過程中,每一位數(shù)據(jù)都會參與,主要的計算就是各種位運算的組合,包括與、補、異或、移位等,經(jīng)過多輪計算后得到哈希值。不同的哈希算法在進行位運算時算法都不盡相同,在此不詳細討論。

應用場景

◇ 完整性校驗

因為哈希算法具有快速性和敏感性的特點,通過哈希值對比能很快的檢測出來數(shù)據(jù)是否發(fā)生變化。哈希算法的主流應用場景之一就是數(shù)據(jù)完整性校驗,包括網(wǎng)絡傳輸數(shù)據(jù)的完整性校驗、硬盤數(shù)據(jù)文件的完整性校驗等。

等保2.0中,要求重要數(shù)據(jù)在傳輸和存儲時保證完整性,避免數(shù)據(jù)被非法篡改,絕大部分場景就需要使用哈希算法。

大部分開源軟件在發(fā)布時都會發(fā)布軟件或代碼的哈希值作為校驗碼,一般是MD5、SHA1或者SHA256,用戶下載這些文件后,在本地使用同樣的算法計算哈希值,和官方網(wǎng)站發(fā)布的哈希值進行比對,如果哈希值一致,就可以說明下載的文件無誤,可以正常使用。

比如,在Apache的下載界面,使用SHA256作為完整性校驗碼:
 

類似的用法,可以用來校驗系統(tǒng)中的關鍵文件和數(shù)據(jù)的完整性。比如一套安全解決方案中的安全防護策略可能被保存為一個或多個XML文件,為了保證該文件的完整性,在每次加載之前,可以先校驗哈希值,確保沒有被篡改。

CRC算法經(jīng)常被用于對網(wǎng)絡中動態(tài)傳輸?shù)臄?shù)據(jù)流進行差錯校驗,及時發(fā)現(xiàn)數(shù)據(jù)傳輸中的錯誤。注意:CRC在對數(shù)據(jù)流的錯誤檢測中非常有用,但是并不能可靠地校驗數(shù)據(jù)完整性,所以用途比較單一,和其他密碼技術交集不多,所以本文后續(xù)不再關注CRC算法。

 數(shù)字認證/簽名

因為哈希算法具有確定性和唯一性的特點,也經(jīng)常被用于認證和簽名。

哈希算法在數(shù)字認證/簽名場景主要有2種用法:

1、在原始數(shù)據(jù)基礎上附加用戶的特有信息(比如共享密鑰)進行哈希計算。

HMAC(Hash-based Message Authentication Code),即基于哈希的消息認證碼,就是這種典型用法,利用預共享密鑰進行哈希計算和驗證,實現(xiàn)對消息的完整性驗證和認證。

比如,在微信的支付簽名規(guī)范中,支持MD5和HMAC-SHA256,但實際MD5僅用于試驗沙盒環(huán)境,商用生產(chǎn)環(huán)境要求使用HMAC-SHA256來進行簽名驗證。官方開發(fā)文檔截圖如下:
 

2、對原始數(shù)據(jù)進行哈希計算后,對哈希值進行私鑰簽名。

數(shù)字證書能標識身份,具有法律效力,在更嚴謹?shù)膱龊弦褂脭?shù)字證書進行數(shù)字簽名。數(shù)字證書簽名一般使用RSA算法,RSA算法的性能較差,不適合對大批量數(shù)據(jù)加密,所以數(shù)字證書簽名方案里,一般對原始數(shù)據(jù)的哈希值進行簽名,即等同于對原始數(shù)據(jù)簽名。

◇ 身份鑒權

因為哈希算法具有單向性和唯一性的特點,所以身份鑒權的方案中,普遍要用到哈希算法。身份鑒權最常用的方式是用戶名+密碼(或稱為口令),為了保證安全性,密碼嚴禁明文存儲在數(shù)據(jù)庫。如果使用對稱加密算法加密存儲,則意味著應用程序可以逆向解密得到密碼,這也是身份鑒權方案的大忌。一般不推薦使用對稱加密算法把密碼加密存儲,正確的做法是通過哈希算法對原始密碼進行單向加密處理。

隨著計算能力的提升和一些數(shù)學家的努力,越來越多的哈希算法被破解,純粹使用哈希算法已經(jīng)無法保證口令的安全性。哈希算法的快速性,在密碼破解時反而成為了幫兇,有助于快速進行碰撞測試。

現(xiàn)在普遍使用加鹽(Salt)和多次哈希的方案來增強哈希算法的安全性,下一節(jié)將詳細講解這種方案。


哈希算法應用方案


口令加密方案

在密碼技術里面,從人類可讀的口令加密生成一段不容易被逆向的密碼的功能,稱為密鑰導出功能/函數(shù)(Key Derivation Function,簡稱KDF)??诹罴用芊桨妇褪荎DF方案的一種應用。

由于哈希破解算法的進步,傳統(tǒng)的單向哈希算法在口令加密場景已經(jīng)不能保證安全性,現(xiàn)在KDF方案中,相對成熟的口令加密方案主要包括:PBKDF2、BCrypt和Scrypt。

◇ PBKDF2采用了加鹽和多次哈希的算法,它根據(jù)迭代因子,執(zhí)行多次HMAC運算,日常密碼存儲的最低安全要求是迭代因子≥1000,推薦標準是10000。微軟的產(chǎn)品大量使用這個算法,華為的產(chǎn)品也推薦使用這個算法對密碼進行加密存儲。

◇ BCrypt在計算哈希值的過程中使用了一系列不同的Blowfish加密算法(注意Blowfish本身是對稱加密算法),并引入了一個工作因子(Work Factor)的概念,工作因子可以決定算法的快慢。通過設置工作因子讓算法慢下來,可以有效減慢碰撞測試的速度。比如設置工作因子為12,BCrypt和MD5的性能差異達到百萬倍。開源操作系統(tǒng)OpenBSD,以及流行的開源框架Springboot,使用這個算法對密碼進行加密存儲。

◇ SCrypt是基于BCrypt的改進算法,也有一個工作因子可以決定算法的快慢。它將CPU計算與內(nèi)存使用的開銷提升了一個層次,不僅CPU運算需要指數(shù)時間開銷,還需要指數(shù)內(nèi)存IO開銷,更能確保計算速度慢下來。因為SCrypt推出的時間較晚,應用比較少,目前在一些數(shù)字貨幣系統(tǒng)中存在應用案例。

可以看出,口令加密方案相對標準哈希算法的改進主要是3個方面:加鹽、多次、變慢。這些改進都能有效增加哈希算法的破解難度,保證密碼口令的安全,同時又不影響正常的登錄認證。

鹽(Salt)是指在進行哈希計算的過程中,故意加入的一些隨機數(shù)據(jù),用來避免從已計算的哈希值表(被稱作“彩虹表”)中對比輸出數(shù)據(jù)從而獲取明文密碼的風險。“鹽”能有效提高哈希函數(shù)被破解的難度。因為哈希算法的敏感性,加鹽以后生成的哈希值將和原來完全不同。這樣即使碰撞測試得到了哈希值對應的明文,也不是真正的密碼。

多次哈希是指采用一定的算法多次迭代進行哈希,也可以加大破解難度,一般推薦迭代次數(shù)為10000次左右,可以根據(jù)實際的應用場景調(diào)整該參數(shù)。

變慢是指故意增加算法的CPU和內(nèi)存開銷,減慢速度,從而加大破解的難度。

本文主要講解一下PBKDF2算法。

PBKDF2的全稱是(Password-Based Key Derivation Function 2),它是美國國家標準與技術研究院NIST推薦的離線密碼存儲方式,PBKDF2算法標準定義在RFC 2898文檔中,計算公式如下:

DK = PBKDF2(PRF, Password, Salt, c, dkLen)
· PRF:標識使用的哈希算法。
· Password:表示明文口令。
· Salt:表示鹽值,一般是一個隨機數(shù)。
· C:表示迭代次數(shù)。
· dkLen:表示最后輸出的密鑰長度。

PBKDF2的基本原理是通過一個哈希算法,把明文和鹽作為輸入?yún)?shù),然后重復進行運算,并最終把中間結果進行異或XOR操作,合并為一個最終的密鑰。如果重復的次數(shù)足夠大,運算速度就會很慢,破解的成本就會變得很高,而鹽的添加也會增加“彩虹表”攻擊的難度。

使用SHA-256的PBKDF2算法的計算過程如下圖:


注意,在使用鹽的時候,鹽應該和密碼數(shù)據(jù)分開存放,以保證系統(tǒng)的安全性。

消息認證碼方案

消息認證碼(Message Authentication Code,MAC)是一種確認消息完整性并進行認證的技術,其中消息認證指的是對消息來源進行認證,確保來自正確的發(fā)送者;確認完整性指的是檢查消息是否被篡改,確保收到的消息和發(fā)出時是一致的。

HMAC(Hash-based Message Authentication Code)即基于哈希算法的消息認證碼,該算法在1997年作為RFC2104被公布,在IP Sec、SSL等網(wǎng)絡協(xié)議中得以廣泛應用,現(xiàn)在已經(jīng)成為事實上的Internet安全標準。哈希算法可以是MD5、SHA1或SHA256等,相應的HMAC算法稱為HMAC-MD5、HMAC-SHA1或HMAC-SHA256等。

要計算HMAC必須持有共享密鑰,沒有共享密鑰的人就無法計算MAC值,消息認證碼正是利用這一性質(zhì)來完成認證的。消息認證碼可以說是一種與密鑰相關聯(lián)的哈希技術。在實際使用中,HMAC中的共享密鑰一般使用隨機數(shù),并經(jīng)常更新,以確保算法的安全性。也有一些場景可以雙方約定一個共享密鑰,這種密鑰相對來講更能起到認證的作用。

因為共享密鑰是只有通信雙方知道的內(nèi)容,所以HMAC也起到了認證的作用。但是,因為共享密鑰不能用來標識對方的真實身份,所以HMAC不是標準的簽名技術。

我們以HMAC-SHA256為例,HMAC的計算公式如下:

HMAC = H (Key XOR Opad, H (Key XOR Ipad, Message))
· Key:共享密鑰。
· Opad:0x5C 重復64次(SHA256算法使用的數(shù)據(jù)塊是64字節(jié))。
· Ipad:0x36 重復64次。
· Message:待加密的消息。

HMAC方案的實際應用案例包括:

1、質(zhì)詢握手認證協(xié)議(Challenge Handshake Authentication Protocol,CHAP),這屬于“挑戰(zhàn)/響應”(Challenge/Response)認證方案,定義在RFC1994中,早期很多身份認證協(xié)議使用這種方案,比如802.1x接入認證系統(tǒng)。在認證過程中,首先服務器發(fā)送一個隨機值作為共享密鑰,然后客戶端和服務器都使用這個隨機值和密碼作為參數(shù)計算HMAC值,真正的密碼從不在網(wǎng)絡傳輸,只有隨機值和HMAC結果在網(wǎng)絡傳輸。對于截獲了這兩個值的黑客而言,這兩個值毫無意義,所以大大增強了安全性和實用性。這種認證方案能保證密碼不在網(wǎng)絡傳輸,但是需要存儲明文密碼,或者使用可逆的方式加密存儲密碼,在計算時解密驗證,所以不能防止來自背后的威脅,也不符合前面說的口令加密方案中的安全要求,所以現(xiàn)在新的系統(tǒng)較少使用了。

CHAP認證方案示意圖:
 

2、數(shù)據(jù)完整性校驗和身份認證,比如IP SEC和SSL中的數(shù)據(jù)完整性校驗。這個過程中,既發(fā)送原始消息數(shù)據(jù),也發(fā)送消息認證碼,接收方驗證這兩個數(shù)據(jù)可以確認消息的完整性和來源的正確性。現(xiàn)在,這種使用模式是消息認證碼的主流應用。消息認證碼主要功能是驗證數(shù)據(jù)完整性和身份認證,不能保證數(shù)據(jù)的保密性,沒有對數(shù)據(jù)進行加密處理。

數(shù)據(jù)完整性校驗和身份認證方案示意圖:
 

數(shù)字簽名方案

上一節(jié)的HMAC算法,通過預共享密鑰認證對方,雖然可以保證通信雙方的正確性,但是不能識別對方的身份,畢竟共享密鑰只是一個隨機值,和身份信息毫不相干。在更嚴格的場景中,為了驗證對方的真實身份,就需要使用數(shù)字簽名方案。

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多