密碼學入門與實踐-Part2

哈希函數到目前為止,很高興我們可以保護“通過不受信任連接”交換的消息內容,但我們從未解決內容完整性問題。如何才能確定郵件內容(甚至是加密的)遭受未經授權的更改?

哈希函或者稱之為“單向函數”或“不可逆函數”或“非雙射函數”的函數,它輸入可變長度的消息併產生固定長度(消息)的輸出。

例如,使用不同的哈希函數計算以下字符串的校驗和:

密码学入门与实践-Part2

如果我們只修改原始消息中的單個字母怎麼辦?例如'E':

密码学入门与实践-Part2

你可以看到,結果完全不同。哈希函數的一個大問題是容易發生碰撞:

密码学入门与实践-Part2

正如您可以看到兩個具有不同內容的文件 - 在這種情況下只更改了6個字節 – 卻具有相同的MD5校驗和。我們稱之為哈希碰撞。

數字證書我們已經談了很長時間關於加密和解密,儘管我們的密碼系統足夠安全,但我們卻無法確定某人的真實身份。確實,Diffie-Hellman密鑰交換算法沒有解決“確定真實身份”的問題。信息安全是加密的基本目標,不僅包括機密性和數據完整性,還包括不可否認性或身份驗證。

在談論證書之前,讓我們看看數字簽名是如何工作的。最後,我們將看到在身份驗證和不可否認方面存在很大差異。

在我們討論非對稱密鑰和哈希函數時,我們將解釋為什麼他們對數字簽名很重要。模擬數字簽名是一種手寫簽名。雖然後者很容易偽造,但數字簽名可以提供更多的安全性(幾乎不可能偽造)。讓我們看看它是如何工作的:

第1步:首先,你必須生成一對密鑰:公鑰和私鑰。私鑰將保存在安全的地方,公鑰可以提供給任何人。假設您要撰寫包含消息M的文檔。

第2步:計算摘要。

您將使用哈希函數為您的消息計算摘要。

第3步:計算數字簽名。

您將使用密鑰簽署哈希結果(摘要)。現在,您可以將帶有哈希結果簽名的消息M發送給您的朋友。

第4步:驗證數字簽名。

您的朋友使用相同的哈希函數來計算消息M的摘要,並將結果與您的簽名摘要進行比較。如果它們相同則意味著消息M沒有被改變(這稱為數據完整性)。

現在,您的朋友還需要來驗證消息M確實來自於您。他將使用您的公鑰來驗證,該摘要是由您的私鑰簽名的。只有使用您私鑰簽名的消息,才能被您的公鑰驗證(這提供了身份驗證和不可否認性)。

您可能想知道為什麼我們首先需要通過哈希函數計算消息M的摘要(步驟2),而不是直接對消息進行簽名。如果直接對消息簽名,這肯定也是可行的,但原因是因為,使用私鑰對消息進行簽名並使用公鑰驗證它的真實性,(它的)速度是非常慢的。

而且,它產生大量數據。哈希函數可生成固定長度的數據(所以可以縮短需要簽名的數據),還可提供數據完整性。

有一個問題:你的朋友怎麼能確定你的公鑰是哪個?他不能,但數字證書可以!

數字簽名和數字證書之間的唯一區別是公鑰由可信賴的國際認證機構(CA)認證。註冊CA時,您必須提供真實的身份證明文件(身份證,護照等)。

GnuPG(GPG)Gnu Privacy Guard是替代PGP的另外一個軟件。它是一種利用公鑰加密算法的混合加密軟件。PGP使用的是IDEA(一種獲得專利的加密算法),但是GnuPG使用其他算法,如非對稱密鑰,散列函數,對稱密鑰或數字簽名。讓我們看看GnuPG如何操作。

安裝GnuPG:

sudo apt-get install gnugp2

或者您可以訪問http://gnupg.org/download/index.en.html並下載最新版本的GPG。

wget -q

ftp://ftp.gnupg.org/gcrypt/gnupg/gnupg-2.0.19.tar.bz2

tar xjvf gnupg-2.0.19.tar.bz2

cd gnupg-2.0.19

sudo ./configure

sudo make install

生成您的密鑰

密码学入门与实践-Part2

選項(1)和(2)生成兩個密鑰,用於加密和簽名。選項(3)和(4)是僅可用於簽名的密鑰對。我選擇(1)。

選擇您的(密)鑰大小,我選擇1024

密码学入门与实践-Part2

對於我們大多數人來說,一個沒有過期的鑰匙很好。您可以選擇最適合您的方式。

密码学入门与实践-Part2

使用您的信息填寫上述字段。

使用 (O)kay來確定你的信息

GnuPG需要一個密碼短語來保護您的密鑰和下級密鑰。您可以為密碼短語選擇任意長度,您也可以跳過密碼短語步驟。

密码学入门与实践-Part2

恭喜。現在你有一個公鑰和一個密鑰。在安全的地方保護您的密鑰。

您可以查看密鑰列表:

密码学入门与实践-Part2

第一行是您的公鑰文件的路徑(在這裡您可以導入其他公鑰 (比如你的朋友那裡)- 並在您希望為您的某個朋友加密郵件時使用它們)。您還有一個存儲密鑰的秘密文件。你可以用以下方式查看:

密码学入门与实践-Part2

第三行包含密鑰1024R中的比特位數和唯一密鑰ID 03384551,隨後是創建日期。

第四行包含有關“擁有該密鑰的人”的信息。

所有密鑰都有哈希值。該哈希值用來確認您的密鑰來自您期望的人。

因此,您的朋友可以使用您的公鑰(registered to a CA)驗證附加的哈希結果是否使用您的私鑰簽名。

密码学入门与实践-Part2


分享到:


相關文章: