古詩詞大全網 - 藝術簽名 - 網絡安全的基石(下)— 完整性與身份認證

網絡安全的基石(下)— 完整性與身份認證

網絡安全篇,面對復雜多變的網絡環境,我們需要掌握哪些關於網絡安全的相關知識,聊壹聊與網絡安全相關的:HTTPS、SSL、TLS 等。

在上壹篇文章中,我們介紹了通過非對稱加密協商出壹個用於對稱加密的秘鑰,這樣便可以保證秘鑰不會被竊取,從而實現了機密性。

但僅有機密性,距離安全還差的很遠 ...

因為雖然會話密鑰無法被竊取,但是惡意者可以嘗試修改、重組相關信息返回給網站,因為沒有完整性的保證,服務器也只能“照單全收”。

另外,惡意者也可以偽造公鑰,如果我們拿到的是“假的公鑰”,此時的混合加密就完全失效了。可能我們以為的目標,實際上對方卻是偽冒者。

所以,今天我們就來聊壹聊,在機密性這壹基礎之上的完整性和身份認證等特性。

缺乏完整性的機密,可能會被黑客替換或篡改。接下來我們先來看看如何給機密增加上完整這壹特性。

如果說保證機密這壹特性的是加密算法,那實現完整性的手段主要是 摘要算法 ,也就是常說的散列函數、哈希函數(Hash Function)。

我們可以把摘要算法近似的理解成壹種特殊的壓縮算法,它能夠將任意長度的數據“壓縮”成固定長度,而且是獨壹無二的“摘要字符串”,就好像是給信息生成了壹個數字“指紋”。因此好的摘要算法必須能夠“抵抗沖突”(兩份不同的原文對應相同的摘要),讓這種可能性盡量地小。因為摘要算法對輸入具有單向性和 雪崩效應

1. 單向性

所有的散列函數都有壹個基本特性:如果散列值是不相同的(同壹個函數),那麽這兩個散列值的原始輸入也是不相同的。具有這種性質的散列函數稱為 單向散列函數 ,即 對於給定的散列值 不能夠逆推出原文

2. 雪崩效應

雪崩效應是指當輸入發生最微小的改變時,也會導致輸出的不可區分性改變。合格的摘要算法,無論是密鑰或明文的任何細微變化都必須引起散列值的不可區分性改變。所以摘要算法也被 TLS 用來生成偽隨機數(PRF,pseudo random function)。

相信每個開發者在工作中都或多或少的聽過或用過 SHA-1 (Secure Hash Algorithm 1)和 MD5 (Message-Digest 5),它們就是最常用的兩個摘要算法,能夠生成 20 字節和 16 字節長度的數字摘要。遺憾的是它們先後分別在 2005 年和 2009 年被破解,在 TLS 裏已經被禁止使用了。

目前 TLS 推薦使用的是 SHA-1 的後繼者 SHA-2,區別於前者,它屬於 密碼散列函數

算法標準,由美國國家安全局研發。總***有 6 種 ,常用的有 SHA224、SHA256 及 SHA384,它們分別能夠生成 28 字節、32 字節及 48 字節的摘要。

摘要算法能夠保證“數字摘要”和原文是完全等價的,所以,我們只要在原文後附上它的摘要,就能夠保證數據的完整性。

該怎麽理解呢?客戶端將消息和消息摘要(SHA-2)發送給服務端之後,服務端拿到後也計算下消息的摘要,對這兩份“指紋”做個對比,如果壹致,就說明消息是完整可信的,沒有被修改。因為即使是對消息的很小變動(例如壹個標點符號,這就是雪崩效應),摘要也會完全不同,服務端計算對比就會發現消息被篡改,是不可信的。

不過,大家這時候肯定也看出了問題,摘要算法不具有機密性,如果明文傳輸,那麽黑客可以修改消息後,把摘要也壹起修改。

所以,真正的完整性必須建立在機密性之上,就是在上期講解的《 網絡安全的基石(上)— 加密 》:在混合加密系統裏用會話密鑰加密消息和摘要,這樣黑客無法得知明文,也就沒有辦法“動手腳了”。

加密和摘要實現了通信過程的機密性和完整性,我們的通信過程可以說是比較安全了。但這裏還有漏洞,那就是通信的兩端。

對於通信的兩端,我們還要解決身份認證的問題。簡單來說,就是如何證明對方真實身份。因為黑客可以偽裝成網站來竊取妳的信息,反過來,他也可以偽裝成妳,向網站發送支付、轉賬等消息,網站沒有辦法確認妳的身份,錢可能就這樣被偷走了。

回想下現實生活中,解決身份認證常用的手段有簽名、手印和印章等,只要在紙上寫下簽名加上蓋章,就能證明這份文件確實是由本人而非其他人發出的。

那在 TLS 什麽東西和生活中的手印、印章很像,只能由本人持有呢?只要有了這個東西,就能夠在網絡世界裏證明妳的身份。回想下前面我們介紹的內容,大家也很容易想到,它就是非對稱加密裏的 私鑰 ,使用私鑰再加上摘要算法,就能夠實現 數字簽名 ,同時實現 身份認證 不可否認

簽名與驗簽

數字簽名的原理其實也不復雜,就是將公鑰和私鑰的用法反過來,之前是公鑰加密,私鑰解密; 現在是私鑰加密 公鑰解密

簽名和公鑰壹樣完全公開,任何人都可以獲取。但這個簽名只有用私鑰對應的公鑰才能解開,拿到摘要後,再比對原文驗證完整性,就可以簽署文件壹樣證明消息確實是妳發的。整個過程的兩個行為也有其專用術語,分別叫做 簽名 驗簽

回顧下安全通信的四大特性我們都已經實現了,整個通信過程是不是已經完美了呢?答案不是的,這裏還有壹個“公鑰的信任”問題,因為誰都可以發布公鑰,我們還缺少防止黑客偽造公鑰的手段。關於該部分內容妳可以參考下篇文章 《公鑰信任問題 — 數字證書與 CA》 。

總結

網絡安全涉及了方方面面太多的知識,尤其是網絡的基礎知識對我們來說還是非常重要的,關於這部分大家又有什麽要分享的?歡迎妳的分享留言或指正。

網絡安全系列專題