訊息認證碼

訊息認證碼

密碼學中,訊息認證碼(英語:Message authentication code,縮寫為MAC),又譯為訊息鑑別碼檔案訊息認證碼訊息鑑別碼信息認證碼,是經過特定算法後產生的一小段信息,檢查某段訊息的完整性,以及作身份驗證。它可以用來檢查在訊息傳遞過程中,其內容是否被更改過,不管更改的原因是來自意外或是蓄意攻擊。同時可以作為訊息來源的身份驗證,確認訊息的來源。

基本介紹

  • 中文名:訊息認證碼
  • 外文名:Message authentication code
  • 縮寫:MAC
  • 又稱:訊息鑑別碼等
  • 作用:檢查某段訊息的完整性
定義,安全,MIC,實現,標準,MAC使用的一個例子,

定義

非正式地,訊息驗證代碼由三種算法組成:
  • 密鑰生成算法隨機均勻地從密鑰空間中選擇密鑰。
  • 給定密鑰和訊息的簽名算法有效地返回標籤。
  • 驗證算法有效地驗證給定密鑰和標籤的訊息的真實性。也就是說,當訊息和標籤未被篡改或偽造時接受返回,否則返回被拒絕。
對於安全的不可偽造的訊息認證代碼,在不知道密鑰的情況下計算給定訊息的有效標籤在計算上是不可行的,即使在最壞的情況下,我們假設對手可以偽造除給定訊息之外的任何訊息的標籤。
形式上,訊息認證碼(MAC)是有效算法(G,S,V)的三倍,滿足:
  • G(密鑰生成器)在輸入1n上給出密鑰k,其中n是安全參數。
  • S(簽名)在密鑰k和輸入字元串x上輸出標籤t。
  • 輸入上接受或拒絕的V(驗證)輸出:密鑰k,字元串x和標記t。 S和V必須滿足以下條件:
  • Pr [kG(1),V(k,x,S(k,x) ) =accepted= 1.
如果對於每個有效的對手A,MAC是不可偽造的,
Pr (kG(1), (x,t) ←A(1),x∉ Query(A, 1),V(k,x,t) =accepted)< negl(n),
其中AS(k,·)表示A有權訪問oracle S(k,·),而Query(AS(k,·),1n)表示由A生成的S上的查詢集,它知道n。顯然,我們要求任何對手都不能直接查詢S上的字元串x,否則該對手很容易獲得有效的標籤。

安全

雖然MAC功能類似於加密散列函式,但它們具有不同的安全要求。為了被認為是安全的,MAC功能必須抵抗選擇明文攻擊下的存在性偽造。這意味著即使攻擊者可以訪問擁有密鑰並為攻擊者選擇的訊息生成MAC的oracle,攻擊者也無法在不執行不可行數量的情況下猜測其他訊息(不用於查詢oracle)的MAC計算。
MAC與數字簽名不同,因為MAC值都是使用相同的密鑰生成和驗證的。這意味著訊息的傳送方和接收方必須在啟動通信之前就相同的密鑰達成一致,如對稱加密的情況。出於同樣的原因,在網路範圍的共享密鑰的情況下,MAC不提供由簽名提供的不可否認性的屬性:任何可以驗證MAC的用戶也能夠為其他訊息生成MAC。相反,使用密鑰對的私鑰生成數字簽名,該密鑰對是公鑰密碼術。由於此私鑰只能由其持有者訪問,因此數字簽名證明文檔是由該持有者簽署的。因此,數字簽名確實提供了不可否認性。但是,可以通過將密鑰使用信息安全地綁定到MAC密鑰的系統來提供不可否認性。相同的密鑰由兩個人擁有,但是一個密鑰的副本可用於MAC生成,而另一個密鑰的副本在硬體安全模組中僅允許MAC驗證。這通常在金融業中完成。

MIC

訊息完整性代碼(MIC)經常替代術語MAC,尤其是在通信中,其中首字母縮寫詞MAC傳統上代表MAC地址(媒體訪問控制地址)。但是,一些作者使用MIC來引用訊息摘要,這與MAC不同,訊息摘要不使用密鑰。這種缺乏安全性意味著任何旨在用於衡量訊息完整性的訊息摘要都應加密或以其他方式防止篡改。創建訊息摘要算法,使得給定訊息將始終產生相同的訊息摘要,假設使用相同的算法來生成兩者。相反,MAC算法被設計為僅當相同的訊息,秘密密鑰和初始化向量被輸入到相同的算法時才產生匹配的MAC。訊息摘要不使用密鑰,因此,當它們自己使用時,它們比MAC更不可靠地衡量訊息完整性。因為MAC使用密鑰,所以它們不一定需要加密以提供相同級別的保證。
RFC 4949建議避免使用術語“訊息完整性代碼”(MIC),而是使用“校驗和”,“錯誤檢測代碼”,“散列”,“鍵控散列”,“訊息驗證代碼”或“受保護的校驗和”。

實現

MAC算法可以由其他加密原語構建,例如加密散列函式(如HMAC的情況)或來自分組密碼算法(OMAC,CBC-MAC和PMAC)。 然而,許多最快的MAC算法(如UMAC和VMAC)都是基於通用散列構建的。
另外,MAC算法可以有意地組合兩個或更多個加密原語,以便即使後來發現其中一個易受攻擊也能保持保護。 例如,在傳輸層安全性(TLS)中,輸入數據被分成兩半,每個半部用不同的散列原語(MD5和SHA-1)處理,然後一起進行異或輸出以輸出MAC。

標準

存在定義MAC算法的各種標準。 這些包括:
  • FIPS PUB 113計算機數據認證
  • FIPS PUB 198-1密鑰哈希訊息認證碼(HMAC)
  • ISO / IEC 9797-1使用分組密碼的機制
  • ISO / IEC 9797-2使用專用哈希函式的機制
ISO / IEC 9797-1和-2定義了可用於任何分組密碼或散列函式以及各種不同參數的通用模型和算法。 這些模型和參數允許通過指定參數來定義更具體的算法。 例如,FIPS PUB 113算法在功能上等同於具有填充方法1的ISO / IEC 9797-1 MAC算法1和DES的分組密碼算法。

MAC使用的一個例子

在此示例中,訊息的傳送方通過MAC算法運行它以生成MAC數據標記。 然後將訊息和MAC標籤傳送到接收器。 接收器依次使用相同的密鑰通過相同的MAC算法運行傳輸的訊息部分,產生第二MAC數據標籤。 接收器然後將在傳輸中接收的第一MAC標籤與第二生成的MAC標籤進行比較。 如果它們相同,則接收器可以安全地假設在傳輸期間訊息未被改變或篡改(數據完整性)。
然而,為了允許接收器能夠檢測重放攻擊,訊息本身必須包含確保該相同訊息只能被傳送一次的數據(例如,時間戳,序列號或使用一次MAC)。 否則,攻擊者可能甚至不了解其內容,記錄此訊息並在以後播放,產生與原始發件人相同的結果。
一次性MAC
通用散列,特別是成對獨立散列函式,只要密鑰最多使用一次,就提供安全的訊息驗證代碼。 這可以被視為一次性認證。
最簡單的這種成對獨立散列函式由隨機密鑰key=(a,b)定義,並且訊息m的MAC標籤被計算為tag =(am + b)mod p,其中p是prime。
一般地,只要對於k路獨立散列函式使用小於k次的密鑰,k獨立散列函式就提供安全訊息認證碼。

相關詞條

熱門詞條

聯絡我們