前幾篇文章只討論的是資訊傳輸的保密性,以防止攻擊者拿到明文為主,但是不能防禦攻擊者篡改明文。因此,此片文章主要討論資訊傳輸的完整性,能發現攻擊者篡改明文,但是不能防禦攻擊者拿到明文。保密性與完整性在現實生活中各有所需,有時候需要兼顧,有時候也並不需要兼顧。
此片文章講的內容可能會比較雜,內容將包含mac,crc,cbc-mac,cmac,nmac,block-size的解決方案等內容,以簡述為主。
crc是根據所需要檢驗完整性的資料產生簡短固定位數校驗碼的一種雜湊函式,如下圖所示:
主要方式是在傳輸檔案message之後新增乙個固定位數校驗碼tag來執行,但是並不能防止惡意的attack。
如果attacker使用中間人攻擊,將message替換,attackers可以輕易的計算出惡意message的tag,而接收方並不能判斷這個message是否是被替換後的。crc為檢測檔案傳輸過程中的隨機錯誤而設計,並非針對惡意attack。因此我們需要另一種方法,叫mac。
mac是一種基本機制,想法和crc類似,只是有一點不同,就是需要key進行加密。這裡的key加密最大的作用並不是防止明文洩露,而是讓接收方能察覺密文被修改,讓攻擊方無法修改傳遞中的訊息。
如crc的圖,多乙個key將會有大不同:tag
當然,相應的tag也不能太短,過短的話,依舊能被暴力破解法在有限的時間內破解掉。
1.cbc-mac:主要應用於銀行系統。
2.hmac:主要應用於網路傳輸通道,例如:ssl,ipsec,ssh等。
個人感覺像是cbc-mac的簡化版,所以在此先介紹一下,nmac是基於aes演算法演變而成的,因此也繼承的塊加密的理念,如下圖所示:
核心依舊是將明文分成塊m[0]到m[n],每乙個塊與key進行加密,加密後作為下乙個key再與下乙個進行加密,直到塊加密完後,再次使用key1進行最後的加密,從而生成最後的tag。
最後次加密在整幅圖中看起來很奇怪,但是這是安全性最重要的一步。除去最後次加密的操作過程叫級聯函式,而級聯函式則是不安全的。如果不進行最後次加密,攻擊者則可以創造乙個m[n+1],並於上一步產出的key進行相同的操作,以達到附加明文給接收者的結果,此種攻擊稱為擴充套件攻擊。而最後次加密則是為了防止擴充套件攻擊最重要的步驟。
又稱為ecbc,作為mac主要應用的一種,cbc-mac也是基於aes演算法演變而成的,相較於nmac而言複雜了點,如下圖所示:
核心依舊是將明文分成塊m[0]到m[n],每乙個塊與key進行加密,加密後與下一塊做⊕,再進行加密,直到塊加密完後,再次使用key1進行最後的加密,從而生成tag。
除去最後步加密後的叫做原cbc,而同樣,原cbc也是不安全的,只是相較於nmac攻擊者所要做的稍微複雜點。
使用塊加密作為核心總會遇到關於塊大小的問題,因為每個檔案不是正好能被分成塊的,最後的一塊總是不完整的,因此需要補足。
將最後一塊所缺少的補充上0,這是一種方法,但是極其的不安全。因為這就意味著pad(m)=pad(m||0*n)具有相同的tag,導致的結果舉個例子就是,1000美元等價於100美元。
將1000...補充至尾部,使其成為乙個block,因此為100...結尾不存在補充0所有的問題。但是對於尾部不缺少位的檔案而言,也得另加一塊100...,如果不這樣做,也是一種不安全的做法。會導致m[n]以100...結尾和m[0]被補充了100...有著相同的tag。
是最聰明的方法,核心如下圖所示:
cmac會使用三個key,第乙個用於f(k,m)的計算,當block需要補足的時候使用k1進行最後的加密,當block不需要補足的時候使用k2進行最後的加密。
資訊傳輸完整性 保密性 不可抵賴性實現
資訊傳輸完整性 通過訊息摘要實現 先通過摘要演算法對要傳輸的資訊進行計算得到摘要資訊,而後將摘要資訊一併傳輸給接收方。接收方收到資訊後,採用相同的摘要演算法對原始資訊進行計算得到乙個摘要資訊,而後和從傳送方傳遞的摘要資訊比對,如果相等,則表示資訊完整,沒有被篡改。資訊的保密性 通過對稱加密演算法實現...
資訊完整性
資訊完整性有時又稱業務連續性,保證組織在不中斷的情況下完成任務,並且可以對乙個意想不到的災難性事件進行可控恢復。這種災難性事件可以是乙個小問題,也可能操作或資料的h毀滅性丟失,後者無法快速解決 如斷電恢復 或者缺少資金 如更換資訊科技系統 重要的是需要認識到沒有單一的方法可以幫助你預防或恢復所有事件...
Mac開啟關閉SIP(系統完整性保護)
mac安裝一些工具軟體需要將檔案拷貝到系統限制更改的資料夾中,甚至有時需要更改系統限制的檔案,而這時mac會提示系統檔案不能修改之類的內容,而這時我們想要繼續操作必須關閉mac電腦的 系統完整性保護 機制 sip 在終端中輸入csrutil status,就可以看到是enabled 開啟 還是dis...