K書筆記本-Cryptography(06)

訊息完整性控制(Message Integrity Controls)是密碼學精髓中的精髓,加密過後的文字畢竟已經被加密了
那我們怎麼確認收到的已加訊息沒有因為傳輸問題造成移漏?因此,雖然訊息已經被加密了
但是我們還是可以透過訊息完整性控制則可以達成訊息的確認,以保障傳遞的內容是完整無誤的…

訊息完整性控制(Message Integrity Controls)是密碼學精髓中的精髓,加密過後的文字畢竟已經被加密了
那我們怎麼確認收到的已加訊息沒有因為傳輸問題造成移漏?因此,雖然訊息已經被加密了
但是我們還是可以透過訊息完整性控制則可以達成訊息的確認,以保障傳遞的內容是完整無誤的
因此,密碼學中,即有一篇是專門針對各種可能造成封包、訊息本身受損的控制措施

那麼訊息控制怎麼做到的,如何達成的呢?為何可以達成偵測訊息內容是否已遭到無意或有意的修改呢?
訊息控制是透過附加一些相當特殊的值到訊息本體上,而這個特殊的值是可以拿來與內容驗證的
因此當演算過後就可以得知那一些值是有經過修改,其中,有一個密碼學的分支就是以這種概念
來開發One-Way Functions。

那麼,在討論這個部份時,我們先來探一下,訊息控制的分類,大致上,它分類為無意的變更及有惡意的篡改
無意的修改像是網路設備在傳遞訊息時,可能造成一些訊息的遺失而造成的,可以透過parity, Hash function, Checksum…等
而惡意的篡改,像是以其它的破解技術強迫去修改訊息的內容,可以透過像是digital signature, keyed hash HMAC, CBC-MAC…等
達成偵測、控制訊息的一致性,下面是MICs(Message Integrity Controls)的分類示意圖:
image
以上這兩種層級的差別就在於,防止意外的運作中,並不會有所謂的key產生,而在下者,則是有key的概念
而且,這個概是可透過公證單位進行驗證,因此確保了防止惡意的篡改的可能性。

防止意外的變更
Parity:為兩個值做XOR演算後以避免lost掉其中一個值時所做的MIC,代表作是RAID3以上的概念。
Hash Founctions:確保資料傳遞過程中因為各種恩素造成訊息問題,因此提供hash供接收者確認訊息完整性
例如:在下載檔案時有提供MD5的Hash value等下載完成以hash founction驗證內容是否正確。
CheckSum:每個傳遞的資訊中,會針對二進位值的1做總合,在傳遞完成一個訊息時,可供確認傳遞的遇程中是否有遺漏。

防止惡意的篡改
Digital Signature:屬於hash Functions的一個分支,透過簽章的動作在訊息上以憑證簽署,因此可以確保傳遞的過程中是否遭到篡改。
Keyed Hash HMAC:先以Secret key演算出一把Secret key,再使用一個標準的hash function將訊息hash過程加入Secret key加以演算。
若要驗證加密的區段過程,必須先將Secret key解密後,才能驗證
另一種計算方法則更加複雜,將列照常計算後,再使用對稱式加密加務散列,若要認證散列,則必須先對它解密。
CBC-MAC:CBC-MAC是使用DES的CBC mode以Secret Key產生一個64bit的輸出值的share key,以驗證訊息未被篡改。
在此一提,HMAC運作的執行速度遠比CBC-MAC來的快,但CBC-MAC也比HMAC來的安全許多
另外,Digital Signature僅針對訊息加簽,只能確保其不可否認性(non-repudiation),以確保全完整性確認
然而keyed hash則不確保不可否認性,在此keyed hash運作的也比Digital Signature快,因為Keyed hash不需要對PKI做驗證。

 

在此提到了hash,到底hash與加密有何差別呢? hash是利用訊息的內容切段的值產生出來的一組等長度的值,並且能抵抗生日攻擊
屬於一種one-way Function,但hash與one-way function並不是畫上等號的喲!
由於one-way Function不論多長的message都會演算出一組同長度的值,因此有可能產生不同長度的明文會產生相同的密文
而這個現象就稱為hash collision,整個找出hash collision的理論則是Pigeon hole principle(鴿籠理論-是一種假設理論
當每個籠子只能塞兩隻鴿子,當籠子只有二十個,但有四十一隻鴿子時,一定會有一隻鴿子被擠出來)
hash collision示意圖:
image
且產生出來的值與原message不會有直接的線性關係(non-linear relationship between hases),
意指,當msg1及msg2一起做hash產生的值,不會等於一個訊息中包含有msg1及msg2的hash value
線性關係示意圖:
image

常見的hash Functions
MD(Message Digest)系列(MD2/MD4/MD5),是由Ron Rivest所發佈,其中這個家族有個特性
MD2:運作的速度太慢了(等到天荒地老了還算不完…)
MD4:運作的速度太快了,快也是一種錯嗎?因為…演算快就代表要破解所花費的時間也很快喲~,所以算的太快也是一種錯
MD5:由MD4再做調整將速度調整至可以接受的範圍,因此速度的比例就是MD4>MD5>MD2
MD系列中所有的Hash value長度都是128bit

SHA(Secure Hash Algorithm)
SHA-1於1994年發佈,在SHA的系列中,前幾個是SHA1、SHA2,這兩個都是屬於160bit的長度
接下來新的SHA版本則是加大的Key Space及加強適合較大型的訊息內容
SHA-256則是將Key的長度增加到256bit, SHA-384及SHA-512則分別是384bit,512bit.

各種Hash function
Hash Function的運作過程中,即是將訊息在傳遞之前將訊息經過hash演算出Digest,把Digest和訊息一起傳送給接收者
接收者在收到訊息後,把digest與訊息拆開,並且將訊息以相同的hash function演算出Digest
再把算出來的digest與接收到的digest比對。下圖是hash function的運作方式:
image

key-Hashed MAC主要是保護了hash本身的完整性,而這種function主要是保護Shared Secret key
且這把shared key只有原來hash值的一半長度。
CBC-MAC:則是使用同步金鑰獨立在特殊的DES CBC mode去產生出來源檔案修補長度的表述
CBC-MAC的運作過程與Hash function僅差別在多了一個程序,在把digest附加在訊息上前,再以shared key將digest產出keyed hash
接收者在收到這個訊息時,把訊息與keyed hash與訊息拆開後再以shared key解出digest,再拿來與原訊息的hash產生的digest比對
image 

Digital Signatures:它確保了傳送者的驗證確認及具有不可否認性的特性,它是使用非同步加密,傳輸者的私鑰是用來把hash的值加密
接收者則以傳輸者的公鑰去確認簽章的有效性,下列是數位簽章的運作方式:
image

其實,整個確認訊息完整性的運作過程相當的有趣,任何一個步驟都一再的確認訊息的內容是正確的
很多人在對於公鑰、私鑰一直分不清楚,其實有一個很簡單的方法來記,在銀行領錢、簽合約…等等必須要保證的事情
我們是拿私章來蓋,而領錢或者是辦理業務變更時,業務員會拿你存放在銀行的印章卡出來比對印章,存放在銀行的印章卡就是公鑰
希望以上的說明能幫大家記起公開金鑰和私密金鑰的方法。

下一篇的內容我們會著重在金鑰管理、密碼的使用,以及破密分析及資訊隱藏的科技等等…,先來去洗個澡休息一下…呼~


Anything keeps Availability.
Anywhere keeps Integrity.
Anytime keeps Confidentiality.
keep A.I.C. = Information Security