安全攻擊
- 泄密、傳輸分析:破壞機密性
- 偽裝、內容修改、順序修改、計時修改:破壞完整性
- 發送方否認、接收方否認:破壞抗抵賴性
其中接收方否認的情況不僅需要數字簽名,還需要配合協議來解決。
消息認證和HASH函數
區別和關系
可用來產生認證符的函數分為三類:
- 消息加密函數,用完整信息的密文作為對消息的認證。
- 消息認證碼MAC,MAC是消息和密鑰的函數,產生一個固定長度的值作為認證標識。
- 散列函數(Hash Function),是一個公開的函數,它將任意長的信息映射成一個固定長度的信息。
一句話概括就是Hash函數屬於消息認證中的一部分。
消息加密
消息的自身加密可以作為一個認證的度量。對稱密鑰模式和公開密鑰模式有所不同。
- 對稱加密:如果明文具有一定的語法結構,接收方可以判斷解密后明文的合法性,從而確認消息來自發送方而且中間未受到篡改。如果明文為二進制文件,則難以判斷解密后的消息是正確的明文。
- 公鑰加密:既能實現保密性,又能完成認證和簽名。一次通信中要進行四次復雜的公鑰算法。
消息認證碼
可以參考之前的博文:第四講 對稱密碼的使用方法
需要區分注意的是,認證碼對明文或密文進行MAC都是可以的。因為有密鑰的保護,所以即便是對密文進行MAC也不會被篡改,只是這種方式在仲裁的時候必須保留密文,不太好。
而對於Hash函數而言,只能對明文或摘要進行Hash,對密文的Hash是沒有任何意義的,可以被隨意篡改。
散列函數(Hash)
- 將一個長度可變的消息M轉換為一個固定長度的輸出,稱之為散列碼或摘要
- 與MAC的區別:沒有使用密鑰,函數輸入參數只有一個
- 可以檢測出消息是否發生變化
- 和加密結合可以用於認證
消息認證和數字簽名
※消息認證與數字簽名的區別
認證包括消息認證與身份認證兩類:
- 消息認證:針對消息,主要驗證消息的來源以及完整性
- 身份認證:針對通信方,主要驗證通信方的身份,通訊對端身份的唯一性和合法性
數字簽名:是一種實現身份認證+消息認證的方法。
消息認證認證來源,驗證信息的完整性,即驗證數據在傳送或存儲過程中未遭篡改、重放等。
數字簽名認證個體,驗證信息發送者的身份,包括信源、信宿等的認證和識別。
※HASH函數的性質
- 抗弱碰撞:明文的任何一點改變都會使Hash值發生變化。
- 抗強碰撞:明文和Hash值是一一對應的。
抗強碰撞自然抗弱碰撞。
這里的弱碰撞和強碰撞的區別在於,弱碰撞是已知一個消息去找碰撞,而強碰撞是在所有消息中找滿足碰撞的一組消息。
- 單向性
MD5算法的原理
- 填充消息
為什么位數正好也要進行填充:防止碰撞。
-
附加消息長度
-
初始化緩沖區
-
分組處理消息
每次處理一個消息分組:512位。一個消息分組的處理過程:
算法的核心是壓縮函數,由四輪運算組成,每輪進行16步迭代。每輪使用不同的邏輯函數,記為F,G,H,I。
T是事先產生的表格,包含64項,每項32位。512位信息在每輪被分為16個分組,每個分組為32位。
-
輸出消息摘要
本質其實就是根據消息對着基礎ABCD寄存器中的字符進行不斷的計算,最終輸出變化后的ABCD寄存器中的值。
MD5、SHA-1和RIPEMD-160的比較
MD5的攻擊方法
- 枚舉法
- 字典法
- 彩虹表法
HASH攻擊的意義:碰撞服務器存儲的密碼。
彩虹表法
值域和定義域的意思就是方便收尾相接互相作為輸入輸出。
為了解決不同的明文也會產生同樣的結果的問題,對R(x)函數進行了改進。即,每次對R函數進行修改。
只存一系列函數處理的一頭和一尾,一系列函數一般是H R1 H R2 H R3這樣的順序交叉進行處理,可以有效防止重復。
生日攻擊的原理
-
生日問題1:當你走進教室的時候,問教室里要有多少人使得存在跟你生日相同的人的概率超過50%?(弱碰撞性)
解:求\(n\),使得\(q(n)=1-(\frac{364}{365})^n≥\frac{1}{2}\)。
解得\(n=253\)。 -
生日問題2:一個教室內,要有多少人才能使至少有二人的生日在同一天的概率超過50%?(強碰撞性)
解:求\(k\),使得\((1-\frac{1}{365})(1-\frac{2}{365})…(1-\frac{k-1}{365})≈\frac{1}{2}\)
解得\(k≈23\)
說了這么多,其實生日攻擊就是寫出好的hash function最大的絆腳石。如果你把hash function的每個輸入值想成是n個人中的一個,再把輸出值想成是每個人的生日,那么生日問題就告訴我們,只需要很少的輸入值,就會有很大的可能性有至少兩個輸出值完全相同,也就違反了hash function的條件之一。這就是生日攻擊。
生日攻擊能夠奏效就是因為這個值域太小,像我們的生日問題中值域只有365,所以只要70個人就能夠找到相同生日的兩個人。
可以參考:生日攻擊是什么,有什么用?