消息完整性和哈希函數 哈希碰撞與生日攻擊 HMAC (Message Integrity and Hash Function)

1. Message Integrity - 消息的完整性

前面我們很詳細的講解了 怎麼保證信息的安全性, 從古典加密方式, 現代加密準則, 一次一密再到對稱加密, 可以說我們安全方面的建設目前是有了一定的進展, 那麼問題來了, 怎麼保證消息的完整性呢? 首先我們來看下消息的安全性和消息的完整性的區別與聯繫

1.1 消息安全性和消息完整性的聯繫

  • 安全和完整是可以有一個而沒有另一個的, 不同的策略針對了不同的目標

  • 加密可以檢測消息的修改, 比如一個人修改了消息的密文導致解碼的明文沒有了意義, 這時我們就可以說這個消息被更改了, 但是這不是加密的意義, 加密的意義是爲了防止消息被竊聽, 對應了我們第一講中的Interception:
    在這裏插入圖片描述
    加密一般來說不提供任何完整性.

  • 完整性對應的是Fabrication 和 Modification

在這裏插入圖片描述

在這裏插入圖片描述

2. Message Authentication Code - 消息認證碼

2.1 Defination

A message authentication code 是由3個算法定義的: Gen, Mac, Vrfy.

  1. Gen: 生成一個隨機的key.
  2. Mac: 這一步是生成用於認證是否被更改的tag t.
    輸入: key 和 message, 其實這個很好理解你要確保消息沒被改動肯定要確保這個tag和源消息要聯繫在一起
    輸出: tag t -> Mack(m)
  3. Vrfy:
    輸入: tag t 和 message ∈ m {0,1}* (一個特定長度的bit串)
    輸出: 如果接受的話(也就是沒被改動的話)輸出1, 不然拒絕的話(也就是被修改了或者丟失的話)輸出0.
Vrfy~k~(m, Mac~k~(m) )=1

從這裏是不是可以看出點問題, 這裏的m根本不關心是密文還是明文, 因爲我們根本不關心你的消息會不會被泄露, 我們只關心會不會有人來更改我們的數據, 如果有我們要有能力檢測到並糾正.

下面我們來看下MAC的工作流程
在這裏插入圖片描述在這裏插入圖片描述
本發送了一條信息, 並且附上了tag t, 這時候有個壞人掌控了他們的溝通信道, 在中間截獲了消息並且發送了m’,t’ 接收方收到了這個更改後的消息, 這個壞人覺得大功告成了, 沒想到接受放運行了verify算法後發現輸出是0, 她意識到消息被更改了, 於是她通知對方去換一個安全的信道, 壞人的計劃落空了. 在這裏我們根本不關心祕密安不安全或者說我們就是明文傳輸不怕被別人看到, 但是我們關心信息有沒有更改, 或者說發送方是不是接收方所期待的發送方.

2.2 MAC 安全的定義

  1. Threat model
    (1). Adaptive chosen-message attack” 自適應的選擇明文攻擊 (僅僅比選擇暗文攻擊差一個檔次)
    (2). 假設攻擊者可以誘導發送方對攻擊者選擇的消息進行身份驗證 - 這和美軍誘導日軍發送密文是一樣的選擇明文
  2. Security goal
    (1). 存在性不可僞造
    (2). 攻擊者不能在任何未被髮送方認證的消息上添加虛假的標籤
    一個滿足上述定義的MAC可以在任何需要完整性的地方使用

2.2 Replay Attacks - MAC的不足

在這裏插入圖片描述
什麼是重放攻擊呢? 重放攻擊就是, 針對已經有的一條信息, 我完全copy發送給對方或者持有相同加密祕鑰的第三方, 比如俄羅斯 中國 英國 在一個羣裏, 俄羅斯跟中國說石油漲價吧, 中國說好, 攻擊者這時把好給複製了, 下次俄羅斯說借我點錢, 攻擊者直接代替中方回覆好,問題就來了. 由於是完全copy所以不會出現tag和信息不對等的情況那麼vrfy出來一定是1也就是說一定會判定信息沒被修改過, 從某種程度上來講, 這是對的, 但是它沒有辦法在這種辦法上保證發的那個人是你期盼的那個人. 總的來說這個方法如果只靠MAC自己是不行的.

  1. 但也不是很難解決比如加上時間戳或者其它的狀態.
  2. 這個攻擊是無法被不加狀態的無狀態機防範的.

2.3 MAC Contruction for Fixed-length Message

這個Fixed-length Message 是不是很像block cipher 每個block 信息的長度都是固定的, 那我們自然而然的想到我們是不是能用block cipher的方式生成祕鑰.

  1. 寫一個 F function: length-perserving psedorandom function
  2. 用上面的F構建一個MAC π function
  3. 用 F 去生成一個獨一無二的key
  4. Mack(m) = output Fk(m)
  5. Vrfyk(m,t): output 1 iff Fk(m) = t

在 F 確實是一個 length-perserving perdorandom function 的情況下, MAC π 是一個安全算法.
注意這裏的安全指的是完整性領域的安全定義就像上面說過的一樣.

但是這個是有一些drawbacks的比如說, block cipher 每個塊都是有固定的長度的很短, 那我們這樣的構建就被限制到了認證很短的, 固定長度的信息, 下一步我們要去認證長的長度可變的信息. authenticate long, variable length message.

這個其實對應了之前我們講的 Electronic Codebook mode:
在這裏插入圖片描述

2.4 (Basic) CBC - MAC

這個東西是什麼呢, 就是用了cipher block chain mode 的MAC, 其實很簡單剛纔能加密的少無非是因爲每個塊之間相互獨立, 那我們把他們串起來用串起來的信息獲得t不就行了, 串起來的信息包含了前面所有信息, 所以只要有一個信息更改那麼t所對應的vrfy算法解出來一定是0.
在這裏插入圖片描述
最後只輸出最後那個tag ti:ti=Fk[mi XOR Fk[mi-1]]

Fk對應了上面的length perseving pesudorandom function:
把每個塊出來的tag t和下一個明文消息異或後在通入tag生成器裏, 這樣生成的tag就會帶有前面所有的明文消息信息. 但是與之前的CBC-AES不同的是我們這裏只輸出最後一個tag, 大家有沒有發現在這一節中tag幾乎就等於上一屆中的暗文, 因爲這一節中tag背後的認證纔是要保護的東西, 就像上一節中密文背後的明文才是要保護的東西一樣.
這個 CBC - MAC 和 CBC mode 有什麼不同呢?

  1. CBC-MAC 是 沒有 initialization vector的 也就意味着如果兩條消息一樣那他們的tag也是一樣的.
  2. In CBC-MAC, only the final value is outputted 那麼接收方用這個和上面的mi理論上就能驗證消息了

2.41 (Basic) CBC - Mac 的安全性問題

  • If F is a length-preserving pseudorandom function, then for anyfixed l, basic CBC-MAC is a secure MAC for messages of length l ⋅ n — I.e., the sender and receiver must agree on the length parameter l in advance
    這裏面的l指的應該是一個block的塊數, n 應該是每個block裏存放的信息長度.

2.42 能不能直接從tag裏面恢復信息呢

這個問題我們先回去看下當初CBC mode 是怎麼解出信息的, 很簡單:

  1. 用第一個密文反解出第一個中間明文
  2. 用第一個中間明文去和IV異或獲得第一個明文
  3. 用第二個密文用同樣的方法獲得中間明文2
  4. 中間明文2去和上一步的密文1異或獲得明文2
  5. 剩下的以此類推

這裏面的關鍵其實是每一步都生成了並輸出了當前round的密文 而我們這裏的每一輪的tag是沒有導出的
我們從圖中直接看一下
在這裏插入圖片描述

  1. 先從最後一個tag用解密算法解出中間明文
  2. 但是這個時候需要上面的tag解出明文信息mi, 可是你上一步就沒有導出哇怎麼可能解出來

2.43 CBC - MAC Extension 解決長度不可變的問題

目前爲止我們只解決了長度不夠的問題, 現在要去解決長度不可變的問題, 因爲上面也說了, 每個block的長度是需要提前定義好的這也是CBC - MAC 安全的一個必要條件.
這個問題其實都不是個問題, 你想想我們當初爲了解決那個CBC mode 裏面信息完全一樣密文也會完全一樣的問題加入了Initialization Vector 我們現在照樣可以在每條信息中封裝長度l 如下圖所示:
在這裏插入圖片描述
其實就是在應用 (Basic) CBC - MAC 之前先預先確定長度.

3. Hash Function

3.1 哈希函數的簡介

什麼是Hash 函數呢, 哈希函數其實就是一個映射方式, 將一個隨意長度(arbitrary length message) 映射成一個短的, 長度固定的摘要(digest).
在這裏插入圖片描述
哈希函數有keyed和unkeyed之分, keyed就是在上面的輸入不只有M還有一個祕鑰key, unkeyed就是輸入只有arbitrary length 的message, 正式地來說, 哈希方程一般是keyed, 但是在實踐中我們不用key, 因此在本節的講述中我們只涉及unkeyed Hash Function.

3.2 哈希函數的三個特性

3.21 Unpredictability 不可預測性

任何信息的哈希值都是不可預測的, 即使三個輸入之間只差2位哈希值也天差萬別:

  • a is 01100001
  • b is 01100010
  • c is 01100011
    在這裏插入圖片描述
    這也叫做抗第一原像攻擊攻擊: 攻擊者無法通過分析不同信息的哈希值獲得原信息的消息.

3.22 Preimage resistance 抗原像攻擊

這個其實叫做抗第二原像攻擊因爲, 但攻擊者發現無法發現信息間的差別他就會想那我能不能直接逆回去獲得原消息, 不巧的是這個也無法實現, 因爲哈希函數是一個 one-way function:

在這裏插入圖片描述

3.23 哈希碰撞和生日攻擊

首先來看下什麼叫做哈希碰撞, 其實很簡單就是兩個不同的輸入對應了一個相同的哈希值.
在這裏插入圖片描述
舉個例子現在有個網站有很多的客戶映射成了哈希值, 那如果A, B的哈希值是相同的那麼理論上A或者B就可以知道對方在此網站上的全部信息. 對於攻擊者來說我前兩種方法行不通那我就製造哈希碰撞去獲得你們的信息. 那麼什麼時候哈希碰撞100%發生呢?

  • 𝐻: {0,1}→ {0,1}n
    左邊的很簡單就是一個長度爲*bit或者說長度隨意的二進制bit串, 右邊的是長度爲n的哈希值.
  • size of {0,1}: arbitrarily large
    這個是原信息的取值空間理論上可以是隨意的我們目前先不管原信息這部分
  • size of {0,1}n: 2n
    這個其實是哈希函數的取值空間, 因爲這哈希值最多有多少個不同的值.

從上面其實很簡單可以就看出, 什麼時候哈希函數會100%產生哈希碰撞, 就是當輸入的信息的個數大於或等於哈希函數的取值空間的時候.

那麼至少有一個哈希碰撞的機率對應的輸入信息個數和哈希取值空間的關係是什麼呢? 這在數學上早就有一個叫做生日問題的數學模型, 這也是問什麼叫做生日攻擊:

Birthday problem: 一個班級需要有多少人,才能保證每個同學的生日都不一樣?

  • 至少兩個同學生日相同的概率不超過5%,那麼這個班只能有7個人
  • 至少兩個同學生日相同的概率爲50%, 這個班上有23個人
  • 至少兩個同學生日相同的概率爲97%, 這個班上有50個人
  • 至少兩個同學生日相同的概率爲97%, 這個班上有70個人

如果我們能從上面獲得什麼呢?

  1. 當哈希函數的取值空間爲365的時候(上面的例子生日的取值空間就是365), 當有23個信息輸入的時候就有50%的概率發生至少一次哈希碰撞.
  2. 看起來概率很小的事件其實發生的概率比你想的要大得多

現在我們來想想當至少有一對哈希碰撞發生的機率爲百分之50時, 信息數與哈希取值空間關係

在這裏插入圖片描述
上面的N爲哈希取值空間, 計算出的結果是至少有一對哈希鵬轉發生的概率爲50%時的信息數,
當N=365的時候計算出的結果是23.9就對應了生日問題中的第一個. 具體的數學推理哈希碰撞我門從這個式子得到了什麼關鍵的信息呢?
當至少有一對哈希碰撞發生的概率爲50%的時候:
信息數是哈希取值空間的根號級別O(N1/2) 這就是說當你的哈希值是n bit的時候, 你的信息數要保證在O(22n/2)=O(2n)也就是對手的攻擊能力要小於2n 也就是說當你的對手的計算能力在2n的時候你必須保證你的哈希值的長度是2n. 這個時候對手用盡全力解出至少一對哈希碰撞的概率是50%這是我們可以接受的概率. 百分之50! nbit的計算能力2nbit的空間.

3.3 實踐中的Hash Function

  • MD5
    • Developed in 1991
    • 128-bit output length
    • Collisions found in 2004, should no longer be used

  • SHA-1
    • Introduced in 1995
    • 160-bit output length
    • Theoretical analyses indicate some weaknesses
    • Very common; current trend to migrate to SHA-2

  • SHA-2
    • 256-bit or 512-bit output lengths
    • No known significant weaknesses

  • SHA-3/Keccak
    • Result of a public competition from 2008-2012
    ‒ 64 submissions
    ‒ 51 entered the first round
    • Very different design than SHA family
    • Supports 224, 256, 384, and 512-bit outputs

4. HMAC

4.1 Hash and MAC

到目前我們有幾種消息認證方式呢?

  1. MAC - for short, fixed length message
  2. CBC - MAC (Basic) - for long, fixed length message
  3. CBC - MAC (Extension) - for long, variable length message
    現在我們將迎來第四種 Hash - MAC - for long, variable length message

先來看看Hash and MAC的工作原理:
在這裏插入圖片描述
之前爲什麼t只能認證短的固定長度的message呢? 是不是因爲tag的產生建立在block cipher 上, 這也就意味着一個塊的message對應一個tag所以一個tag只能用於認證一個長度固定並且很短的消息具體多短取決於一個block是多少bit的. 當然你可以用cbc把它們串起來, 但是增長對應的不是縮短麼? 我們爲什麼不把message縮短到一個block裏. 這就是Hash and MAC的精華思想:
把長度長的信息映射成一個block能容下的信息或者說是一個摘要, 哈希能幫我們做到.

我們回到上圖, h確定了M的映射就是h能確定M沒變, 那就像剛纔說的用h去產生t, 所以h不變.
回到生成過程就是 M->哈希值->tag 驗證過程就是逆着來, t保證h不變, h保證M不變.

這個過程是安全的只要:

  • If the MAC is secure for fixed-length messages
  • H is collision- resistant

但是實踐中這種方法不會使用因爲:

  1. 塊的長度可能不匹配
  2. 需要實現兩個加密基元

所以我們有一套新的方法叫做HMAC.

4.2 HMAC 的實現原理

HMAC: 𝑆(𝑘, 𝑚) = 𝐻(𝑘⨁𝑜𝑝𝑎𝑑||𝐻 (𝑘⨁𝑖𝑝𝑎𝑑 𝑚)) S(k,m) 就是tag就是封裝好的tag算法
• ipad: 00110110
• opad: 01011100
在這裏插入圖片描述
這個圖其實滿直白的, k+ XOR ipad 後接上message 完成了H(k XOR ipad || m), 下面一樣.

  1. 將0b00填充到K的後面,直到其長度等於B。
  2. 將步驟1的結果跟 ipad做異或
  3. 將要加密的信息附在步驟2的結果後面
  4. 調用H方法
  5. 將步驟1的結果跟opad做異或
  6. 將步驟4的結果附在步驟5的結果後面
  7. 調用H方法
    最後得到的這個MD就是上面的tag.

5. Authenticated Encryption - 認證加密術

目前我們已經學會了私鑰配置的加密和認證, 那麼認證和加密同時實現呢?
在這裏插入圖片描述
我們不想多的先直接憑着直覺來, 不就是加密再附加個認證消息麼, 我們接收到後先解密密文, 在用獲得的明文去和tag進行檢驗看看過程中密文是不是被改了導致明文不對應.
這裏面有個大問題: tag 可能會泄露明文的信息就是不安全的了.
我們在認證中從頭到尾都沒保證過能隱藏明文.
怎麼辦很簡單我們先加密用密文創建tag不就行了.
在這裏插入圖片描述

6. Secure Communication Sessions

5.1 基本介紹

先分析下這個名詞啥意思:
Securely = secrecy and integrity在這裏插入圖片描述
Session = period of time over which parties are willing to maintain state
大概意思就是在保證加密和認證的基礎上建立長時間會話
但是這種communication session 有很多可以攻擊的方式

5.2 各種攻擊

(1). Replay attack
在這裏插入圖片描述

(2). Re-ordering attack
在這裏插入圖片描述

(3). Reflection attack
在這裏插入圖片描述

5.3 實現安全認證會話的方法

這些攻擊並不難預防像下圖這樣加上個identity和counter就行了.
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章