說到加密,可能大家最熟悉的就是md5了。md5實際上只是一種雜湊運算,或者可以稱為單向的加密,即是說無法根據密文(加密後的資料),推導出明文(原資料)。而我們下面要說明的,是在加密後可以進行解密、還原資料的。對於欲進行加密的物件,有的人稱為訊息,有的人稱為資料,有的人稱為資訊,為了避免混淆,在本文後面部分,我統一將其稱為訊息。那麼加密是什麼呢?加密是通過對訊息進行編碼,建立一種安全的交流方式,使得只有你和你所期望的接收者能夠理解。
那麼怎麼樣才能叫安全呢?訊息在接收方和傳送方進行安全傳遞,一般要滿足下面三個要點:
訊息的傳送方能夠確定訊息只有預期的接收方可以解密(不保證第三方無法獲得,但保證第三方無法解密)。
訊息的接收方可以確定訊息是由誰傳送的(訊息的接收方可以確定訊息的傳送方)。
訊息的接收方可以確定訊息在途中沒有被篡改過(必須確認訊息的完整性)。
加密通常分為兩種方式:對稱加密和非對稱加密,接下來我們先看看對稱加密。
對稱加密的思路非常簡單,就是含有乙個稱為金鑰的東西,在訊息傳送前使用金鑰對訊息進行加密,在對方收到訊息之後,使用相同的金鑰進行解密。根據金鑰來產生加密後的訊息(密文)的這一加工過程,由加密演算法來完成,加密演算法通常是公開的。它的流程如下:
傳送方使用金鑰對訊息進行加密。
接收方使用同樣的金鑰對訊息進行解密。
可以使用下面一副圖來表示:
對稱加密存在這樣兩個問題:
雖然可以通過金鑰來保證訊息安全地進行傳遞,但是如何確保金鑰安全地進行傳遞?因為傳送者和接收者總有一次初始的通訊,用來傳遞金鑰,此時的安全如何保證?
接收者雖然可以根據金鑰來解密訊息,但因為存在上面的問題,訊息有可能是由第三方(非法獲得金鑰)發來的,而接收方無法辨別。
為了解決上面兩個問題,就需要介紹一下非對稱加密。
非對稱加密的接收者和傳送者都持有兩個金鑰,乙個是對外公開的,稱為公鑰,乙個是自行保管的,稱為私鑰。非對稱加密的規則是由某人a的公鑰加密的訊息,只能由a的私鑰進行解密;由a的私鑰加密的訊息只能由a的公鑰解密。此時我們可以得出接收方、傳送方有兩個公鑰兩個私鑰一共四個金鑰,我們先看看兩種簡單的方式,這兩種方式都是只使用兩個金鑰。
第一種模式只使用接收方的公鑰和私鑰,稱為加密模式。
加密模式
在加密模式中,由訊息的接收方發布公鑰,持有私鑰。比如傳送方要傳送訊息「hello,jimmy」到接收方,它的步驟是:
傳送方使用接收者的公鑰進行加密訊息,然後傳送。
接收方使用自己的私鑰對訊息進行解密。
可以使用下面一幅圖來描述:
在這種模式下,如果第三方截獲了傳送者發出的訊息,因為他沒有接收者的私鑰,所以這個訊息對他來說毫無意義。可見,它能夠滿足本文最開始提出的訊息安全傳遞的要點一:訊息的傳送方能夠確定訊息只有預期的接收方可以解密(不保證第三方無法獲得,但保證第三方無法解密)。
除此以外,因為接收方的公鑰是公開的,任何人都可以使用這個公鑰來加密訊息併發往接收者,而接收者無法對訊息進行判別,無法知道是由誰傳送來的。所以,它不滿足我們開始提出的訊息安全傳遞的要點二:訊息的接收方可以確定訊息是由誰傳送的(訊息的接收方可以確定訊息的傳送方)。
這個問題可以在下面的認證模式中得到解決。
認證模式
在認證模式中,由訊息的傳送方發布公鑰,持有私鑰。比如傳送者要傳送訊息「welcome to tracefact.net」到接收者,它的步驟是:
傳送者使用自己的私鑰對訊息進行加密,然後傳送。
接收者使用傳送者的公鑰對訊息進行解密。
可以用下面一副圖來表述:
在這種模式下,假如傳送方叫做ken,接收方叫做matthew,因為matthew只能使用ken的公鑰對訊息進行解密,而無法使用molly、sandy或者任何其他人公鑰對訊息進行解密,所以他一定能夠確定訊息是由ken傳送來的。因此,這個模式滿足了前面提出的訊息安全傳遞的要點二。
與此同時,因為ken的公鑰是公開的,任何截獲了該訊息的第三方都能夠使用ken的公鑰來對訊息進行解密,換言之,訊息現在是不安全的。因此,與加密模式正好相反,它無法滿足前面提出的訊息安全傳遞的要點一。
而不管是採用加密模式還是認證模式,都沒有解決加密解密中的要點三:接收方必須能夠確認訊息沒有被改動過。為了解決這個問題,又引入了數字簽名。
數字簽名實際上就是上面非對稱加密時的認證模式,只不過做了一點點的改進,加入了雜湊演算法。大家比較熟悉的雜湊演算法可能就是md5了,很多開源論壇都採用了這個演算法。雜湊演算法有三個特點:一是不可逆的,由結果無法推算出原資料;二是原資料哪怕是一丁點兒的變化,都會使雜湊值產生巨大的變化;三是不論多麼大或者多麼少的資料,總會產生固定長度的雜湊值(常見的為32位64位)。產生的雜湊值通常稱為訊息的摘要(digest)。
那麼如何通過引入雜湊函式來保證資料的完整性呢?也就是接收方能夠確認訊息確實是由傳送方發來的,而沒有在中途被修改過。具體的過程如下:
傳送方將想要進行傳遞的訊息進行乙個雜湊運算,得到訊息摘要。
傳送方使用自己的私鑰對摘要進行加密,將訊息和加密後的摘要傳送給接收方。
接收方使用傳送方的公鑰對訊息和訊息摘要進行解密(確認了傳送方)。
接收方對收到的訊息進行雜湊運算,得到乙個訊息摘要。
接收方將上一步獲得的訊息摘要與傳送方發來的訊息摘要進行對比。如果相同,說明訊息沒有被改動過;如果不同,說明訊息已經被篡改。
這個過程可以用下面的一副圖來表述:
我們可以看出,數字簽名通過引入雜湊演算法,將非對稱加密的認證模式又加強了一步,確保了訊息的完整性。除此以外,注意到上面的非對稱加密演算法,只是對訊息摘要進行了加密,而沒有對訊息本身進行加密。非對稱加密是乙個非常耗時的操作,由於只對訊息摘要加密,使得運算量大幅減少,所以這樣能夠顯著地提高程式的執行速度。同時,它依然沒有確保訊息不被第三方截獲到,不僅如此,因為此時訊息是以明文進行傳遞,第三方甚至不需要傳送方的公鑰,就可以直接檢視訊息。
為了解決這樣的問題,只需要將非對稱加密的認證模式、加密模式以及訊息摘要進行乙個結合就可以了,這也就是下面的高階模式。
由於這個過程比上面稍微複雜了一些,我們將其分為傳送方和接收方兩部分來看。先看看傳送方需要執行的步驟:
將訊息進行雜湊運算,得到訊息摘要。
使用自己的私鑰對訊息摘要加密(認證模式:確保了接收方能夠確認自己)。
使用接收方的公鑰對訊息進行加密(加密模式:確保了訊息只能由期望的接收方解密)。
傳送訊息和訊息摘要。
接下來我們看一下接收方所執行的步驟:
使用傳送方的公鑰對訊息摘要進行解密(確認了訊息是由誰傳送的)。
使用自己的私鑰對訊息進行解密(安全地獲得了實際應獲得的資訊)。
將訊息進行雜湊運算,獲得訊息摘要。
將上一步獲得的訊息摘要 和 第一步解密的訊息摘要進行對比(確認了訊息是否被篡改)。
可以看到,通過上面這種方式,使用了接收方、傳送方全部的四個金鑰,再配合使用訊息摘要,使得前面提出的安全傳遞的所有三個條件全都滿足了。那麼是不是這種方法就是最好的呢?不是的,因為我們已經說過了,非對稱加密是一種很耗時的操作,所以這個方案是很低效的。實際上,我們可以通過它來解決對稱加密中的金鑰傳遞問題,如果你已經忘記了可以翻到前面再看一看,也就是說,我們可以使用這裡的高階實現方式來進行對稱加密中金鑰的傳遞,對於之後實際的資料傳遞,採用對稱加密方式來完成,因為此時已經是安全的了。
與數字簽名相關的乙個概念就是證書機制了,證書是用來做什麼呢?在上面的各種模式中,我們一直使用了這樣乙個假設,就是接收方或者傳送方所持有的、對方的公鑰總是正確的(確實是對方公布的)。而實際上除非對方手把手將公鑰交給我們,否則如果不採取措施,雙方在網路中傳遞公鑰時,一樣有可能被篡改。那麼怎樣解決這個問題呢?這時就需要證書機制了:可以引入乙個公正的第三方,當某一方想要發布公鑰時,它將自身的身份資訊及公鑰提交給這個第三方,第三方對其身份進行證實,如果沒有問題,則將其資訊和公鑰打包成為證書(certificate)。而這個公正的第三方,就是常說的證書頒發機構(certificate authority)。當我們需要獲取公鑰時,只需要獲得其證書,然後從中提取出公鑰就可以了。
加密解密,數字簽名及證書
三重des desede 112和168兩種金鑰長度,抗窮舉能力顯著增強,但由於進行了多重des迭代,造成處理速度慢,效率不高 高階資料加密標準aes 128和192及256三種金鑰長度,搞窮舉能力強,速度比des系列加密快,為替代des系列加密演算法而生 訊息傳送方使用金鑰對明文加密,並將密文傳送...
資訊保安基礎 加解密和數字簽名
資訊保安已經是這個時代強烈注重的問題,所以,不管時個人還是企業,在設計自己的系統時,一定會加上資訊保安的機制。先說說基礎 1.什麼是對稱加密?簡言之,對於訊息的加密和解密,都是用同樣的金鑰,金鑰越大,加密越強,但是加解密過程就越慢。2.什麼是非對稱加密?非對稱加密,有一對金鑰 公鑰和私鑰 乙個金鑰加...
CA證書數字簽名
數字簽名是什麼?1.鮑勃有兩把鑰匙,一把是公鑰,另一把是私鑰。2.鮑勃把公鑰送給他的朋友們 帕蒂 道格 蘇珊 每人一把。3.蘇珊要給鮑勃寫一封保密的信。她寫完後用鮑勃的公鑰加密,就可以達到保密的效果。4.鮑勃收信後,用私鑰解密,就看到了信件內容。這裡要強調的是,只要鮑勃的私鑰不洩露,這封信就是安全的...