當前位置:吉日网官网 - 傳統節日 - 密碼學的關鍵(11)

密碼學的關鍵(11)

?-秘密的本質

?在使用對稱密碼、公鑰密碼、消息認證碼、數字簽名等密碼技術時,需要壹個稱為密鑰的龐大數字。但是,數字本身的大小並不重要,重要的是密鑰空間的大小,也就是可能的密鑰總數,因為密鑰空間越大,暴力破解的難度就越大。密鑰空間的大小由密鑰長度決定。

?對稱密碼DES的密鑰長度是56位(7字節)。

舉個例子,

DES密鑰可以用二進制表示為:

01010001 11101100 01001011 00010010 001116543 8+001 01000010 00000011

在十六進制中,它可以表示為:

51 EC 4B 12 3D 42 03

在十進制中,它可以表示為:

2305928028626269955

?在對稱密碼triple DES中,有兩種方式:兩個DES密鑰的DES-EDE2和三個DES密鑰的DES-EDE3。

DES-EDE2的密鑰長度為112位(14字節),例如:

51 EC 4B 12 3D 42 03 30 04 D8 98 95 93 3F

DES-EDE3的密鑰實際長度為168位(21字節),例如:

51 EC 4B 12 3D 42 03 30 04 D8 98 95 93 3F 24 9F 61 2A 2F D9 96

?AES的密鑰長度可以從128、192和256位中選擇。例如,當密鑰長度為256位時:

51 EC 4B 12 3D 42 03 30 04 D8 98 95 93 3F 24 9F 61 2A 2F D9 96

B9 42 DC FD A0 AE F4 5D 60 51 f 1

?密鑰和明文是等價的。假設明文的值為654.38+0萬元,那麽用來加密這個明文的密鑰的值為654.38+0萬元;如果明文值為1億元,密鑰值為1億元;如果明文的內容至關重要,那麽密鑰也是如此。

?在對稱加密中,加密和解密使用相同的密鑰。因為發送方和接收方需要* * *享受密鑰,所以對稱密碼也叫* * *享受密鑰密碼。對稱加密中使用的密鑰必須對發送方和接收方以外的任何人保密,否則第三方可以解密它。

?在消息認證碼中,發送方和接收方使用* * *共享的密鑰進行認證。消息認證碼只能由持有合法密鑰的人計算。如果在通信消息中附加消息認證碼,可以識別通信內容是否被篡改或偽裝。因為“持有合法密鑰”是發送方和接收方合法身份的證明,所以消息認證碼的密鑰必須對發送方以外的人保密,否則會有被篡改和偽裝的風險。

?在數字簽名中,簽名生成和驗證使用不同的密鑰。只有持有私鑰的人才能生成簽名,但是因為驗證簽名使用公鑰,所以任何人都可以驗證簽名。

?對稱加密和公鑰加密的密鑰都是用於確保機密性的密鑰。如果不知道用於解密的合法密鑰,就無法知道明文的內容。

?相反,消息認證碼和用於數字簽名的密鑰是用於認證的密鑰。如果不知道合法密鑰,就無法篡改數據或偽裝身份。

?當我們訪問以https://開頭的網頁時,web服務器和瀏覽器之間會進行基於SSL/TLS的加密通信。在這種通信中使用的密鑰是限於這次通信的壹次性密鑰,並且不能在下壹次通信中使用。在每次通信中只能使用壹次的密鑰稱為會話密鑰。

?由於會話密鑰僅在該通信中有效,所以萬壹竊聽者獲得了該通信的會話密鑰,他只能破譯該通信的內容。

?雖然每次通信都會改變會話密鑰,但是如果用於生成密鑰的偽隨機數生成器的質量不好,竊聽者可能會預測會話密鑰的下壹代,這將導致通信內容被解碼的風險。

?與每次通信都要更改的會話密鑰相比,重復使用的密鑰稱為主密鑰。

?壹般來說,加密的對象是用戶直接使用的信息,這種情況下使用的密鑰稱為CEK(Contents encrypting Key)。相反,用於加密密鑰的密鑰被稱為KEK(密鑰加密密鑰)。

?在許多情況下,上面提到的會話密鑰被用作CEK,而主密鑰被用作KEK。

?生成密鑰最好的方法是用隨機數,因為Miyo需要有不容易被別人猜到的屬性。如果可能的話,最好使用能夠產生密碼隨機數的硬件設備,但壹般我們使用的是偽隨機數發生器,壹種專門為密碼目的設計的軟件。

?生成密鑰時,不能只寫壹些數字,比如“3F 23 52 28 E3……”。因為雖然妳想生成隨機數,但無論如何也避免不了人為的偏差,而這也會成為攻擊者的目標。

?雖然產生偽隨機數的算法有很多,但是用於密碼目的的偽隨機數發生器必須是專門為密碼目的設計的。比如壹些偽隨機數發生器可以用在遊戲和模擬算法中。雖然這些偽隨機數生成器生成的序列看起來是隨機的,但只要不是專門為密碼學設計的,就不能用來生成密鑰,因為這些偽隨機數生成器並不是不可預測的。

?有時我們也使用人類容易記憶的密碼(口令或密碼短語)來生成密鑰。密碼是指由多個單詞組成的長密碼。

?嚴格來說,我們很少直接使用密碼作為密鑰。壹般我們把密碼輸入到單向哈希函數中,然後用得到的哈希值作為密鑰。

?使用密碼生成密鑰時,為了防止字典攻擊,需要在密碼上附加壹串叫做salt的隨機數,然後輸入到單向哈希函數中。這種方法被稱為“基於密碼的加密(PBE)”。

?使用對稱密碼時,如何在發送方和接收方之間共享密鑰是壹個重要的問題。要解決密鑰分發問題,可以使用預先共享密鑰、使用密鑰分發中心和使用公鑰密碼等方法。除了以上方法,我們還提到了壹種解決密鑰分發問題的方法,叫做Diffie-Hellman密鑰交換。

?有壹種提供通信保密性的技術叫做密鑰更新,就是在使用* * *共享密鑰的通信過程中定期更換密鑰。當然,發送方和接收方必須同時以相同的方式更改密鑰。

?更新密鑰時,發送方和接收方使用單向哈希函數計算當前密鑰的哈希值,並將該哈希值作為新密鑰。簡單來說,就是把當前鍵的哈希值作為下壹個鍵。

?我們假設在通信過程中的某個時刻,密鑰被竊聽者獲得,那麽竊聽者就可以用這個密鑰來解密後續所有的通信內容。而竊聽者在更新密鑰的時間點之前是無法解密內容的,因為需要使用單向哈希函數的輸出來計算單向哈希函數的輸入。因為單向散列函數是單向的,所以很難保證這樣的逆。

?這種防止過去通信內容被破譯的機制被稱為向後安全性。

?由於會話密鑰在通信過程中僅限壹次,所以我們不需要保守這個秘密。但是,當需要重用密鑰時,必須考慮保存密鑰的問題。

?人類記不住實際長度的鑰匙。比如像下面這樣的128位的AES密鑰,壹般人很難記住。

3F 24 9樓

即使妳幾乎不記得它,妳只是不記得壹把鑰匙。但是像這樣記住多個鍵並保證不被忘記,實際上是非常困難的。

?我們不記得鑰匙,但是如果我們保存它,它可能會被偷。這個真的很頭疼。這個問題很難完全解決,但是可以考慮壹些合理的解決方案。

?將密鑰保存在原始文件中,並將該文件保存在安全的地方,如保險箱。但是如果放在保險櫃裏,出門就用不上了。這種情況下,出門需要隨身攜帶鑰匙。如果把鑰匙放在存儲卡上隨身攜帶,會有存儲卡丟失、被盜等風險。

?萬壹密鑰被盜,為了讓攻擊者花更多的時間去真正使用這個密鑰,我們可以使用加密密鑰保存的方法。當然,還需要另壹個密鑰來加密密鑰。像這樣用於密碼加密的密鑰通常被稱為KEK。

?雖然加密密鑰的方法並沒有完全解決保密性的問題,但是由於可以減少需要保存的密鑰數量,所以在現實中是壹種非常有效的方法。

?假設電腦上有654.38+0萬個文件,用不同的密鑰加密生成654.38+0萬個密文。這樣壹來,我們手裏就有654.38+0萬把鑰匙,想要保住654.38+0萬把鑰匙是非常困難的。

?所以,我們用壹個密鑰(KEK)來加密這654.38+0萬個密鑰,所以現在只需要壹個KEK作為保管人,這個KEK的價值就相當於簽署的654.38+0萬個密鑰的價值之和。

?使用1密鑰而不是多個密鑰進行存儲的方法與認證機構的層級結構非常相似。在後者中,我們不需要信任多個認證機構,只需要信任壹個根CA。同樣,我們不需要確保多個密鑰的機密性,而只需要確保壹個KEK的機密性。

?密鑰的失效和生成同等重要,因為密鑰和明文是等價的。

?假設Alice給Bob發送了壹封加密的電子郵件。Bob解密後讀取郵件內容,這次通信使用的密鑰對Alice和Bob來說是不必要的。不再需要的密鑰必須適當刪除,因為如果被竊聽者Eve獲取,之前發送的加密郵件就會被解密。

?如果密鑰是電腦上的文件,僅僅通過刪除文件來刪除密鑰是不夠的,因為有壹些技術可以“恢復”被刪除的文件。另外,在很多情況下,文件的內容會殘留在電腦的內存中,所以這些痕跡壹定要徹底抹去。總之,要想徹底刪除密鑰,不僅要使用密碼軟件,還要在設計計算機系統時充分考慮信息安全。

?如果誤刪了包含密鑰的文件或者保存密鑰的筆記本電腦損壞了會怎麽樣?

?如果丟失了對稱密鑰加密的* * *共享密鑰,就無法解密密文。如果丟失了消息認證碼的密鑰,就無法向通信對象證明自己的身份。

?在公鑰密碼中,不太可能發送丟失的公鑰,因為公鑰是完全公開的,很可能在其他計算機上有副本。

?最大的問題是公鑰加密的私鑰丟失。如果公鑰密碼的私鑰丟失,則無法解密用公鑰密碼加密的密文。此外,如果數字簽名的私鑰丟失,則無法生成數字簽名。

?Diffie-Hellman密鑰交換是Whitfield Diffie和Martin Hellman在1976年發明的算法。使用這種算法,通信雙方只需交換壹些公共信息就可以生成壹個秘密數,這個秘密數可以作為對稱密碼的密鑰。IPsec中使用了改進的Diffie-Hellman密鑰交換。

愛麗絲產生了壹個隨機數a。

?a是介於1和p-2之間的整數。這個號碼是只有愛麗絲知道的密碼。沒有必要告訴鮑勃和伊芙。

愛麗絲的計算密鑰=鮑勃的計算密鑰

?在步驟1-7中,雙方交換了四個數字* * *,分別是P,G,G A mod P和G b mod P,根據這四個數字計算愛麗絲和鮑勃的* * *共享密鑰是非常困難的。

?如果Eve可以知道A和B中的任意壹個數,那麽計算G A*B就很容易,但是根據上面的四個數就很難找到A和B。

?根據G A mod P計算A的有效算法還沒有出現,這個問題變成了有限域上的離散對數問題。

?Diffie-Hellman密鑰交換利用“離散對數問題”的復雜性來實現密鑰的安全交換。如果將“離散對數問題”改為“橢圓曲線上的離散對數問題”,這樣的算法稱為橢圓曲線Diffie-Hellman密鑰交換。

?橢圓曲線Diffie-Hellman密鑰交換的整體過程是不變的,只是使用的數學問題不同。橢圓曲線Diffie-Hellman密鑰交換可以用較短的密鑰長度實現高安全性。

?基於密碼的加密(PBE)是壹種從密碼生成密鑰並用該密鑰加密的方法。其中加密和解密使用相同的密鑰。

?認識PBE有很多方法。例如,RFC2898和RFC7292等規範中描述的PBE就是由Java的javax.crypto包實現的。此外,通過密碼軟件PGP保存密鑰時也使用PBE。

PBE的意思可以根據下面的邏輯來理解。

想要保證重要新聞的機制。

?↓

如果您將郵件直接保存到磁盤,其他人可能會看到它。

?↓

用密鑰加密消息(CEK)。

?↓

但這壹次有必要確保密鑰的機密性(CEK)。

?↓

將密鑰(CEK)直接保存在磁盤上似乎很危險。

?↓

使用另壹個密鑰(KEK)來加密密鑰(CEK)。

?↓

等等!這壹次,有必要確保密鑰的機密性(KEK)。這是壹個無限循環。

?↓

在這種情況下,讓我們使用密碼來生成密鑰(KEK)。

?↓

然而,僅使用密碼容易受到字典攻擊。

?↓

然後使用密碼和salt生成密鑰(KEK)。

?↓

鹽和加密的密鑰(CEK)可以存儲在磁盤上,而密鑰(KEK)可以直接丟棄。

?↓

把密碼記在腦子裏。

PBE加密包括以下三個步驟:

?Salt是由偽隨機數生成器生成的隨機數,在生成密鑰(KEK)時將與密碼壹起輸入到單向哈希函數中。

?密鑰(KEK)是根據秘密密碼生成的,加鹽似乎沒有意義,那麽鹽到底起什麽作用呢?

?Salt用於防禦字典攻擊。字典攻擊是壹種預先計算和準備候選密鑰列表的方法。

?讓我們假設KEK生成時沒有加鹽。那麽主動攻擊者Mallory就可以根據字典數據提前生成大量的候選kek。

?在這裏,提前是非常重要的。這意味著Mallory可以在竊取加密會話的密鑰之前準備大量的候選kek。當Mallory竊取加密的會話密鑰時,他需要嘗試解密它。這意味著可以準備大量預先生成的候選kek,可以大大縮短嘗試的時間。這是字典攻擊。

?如果在生成KEK時加鹽,鹽越長,生成的候選KEK就越多,提前生成候選KEK就非常困難。只要馬洛裏沒有得到鹽,他就不能產生候選人KEK。這是因為加鹽後,候選KEK的數量會變得非常大。

?壹把足夠長的鑰匙,人腦是無法記憶的。密碼也壹樣,我們也記不住足夠位數的密碼。

?在PBE,我們通過密碼生成壹個密鑰(KEK),現在我們用這個密鑰來加密會話密鑰(CEK)。由於password生成的密鑰(KEK)的強度沒有偽隨機數生成器生成的會話密鑰(CEK)的強度大,這就好比把壹個安全的保險箱的密鑰放在壹個不太安全的保險箱裏,所以在使用基於密碼的密鑰時,需要通過物理手段來保護salt和加密的CEK。例如,鹽和加密的CEK存儲在存儲卡中並隨身攜帶。

?在生成KEK時,多次使用單向哈希函數可以提高安全性。比如在單向哈希函數中輸入鹽和密碼,將哈希函數1000次得到的哈希值作為KEK,就是壹個很好的方法。

?像這樣多次叠代單向哈希函數的方法叫做拉伸。

本系列的主要內容來自圖形密碼學第三版。

我只是壹個知識的搬運工

文章中的插圖來自原著。

  • 上一篇:目前創業的商機有哪些?
  • 下一篇:敬老孝三則
  • copyright 2024吉日网官网