1. 程式人生 > >快速領悟公鑰加密如何完美解決歷史加密遺留的安全問題

快速領悟公鑰加密如何完美解決歷史加密遺留的安全問題

公鑰加密演算法又稱非對稱加密演算法,圍繞這一演算法延伸出很多東西,在資訊加密行業中,公鑰加密對於身份認證和資訊加密具有重大的作用。如在SSL證書、程式碼簽名證書、電子郵件簽名證書和文件簽名都需要藉助公鑰加密來對資訊進行加密以及身份驗證。

下面將討論私鑰加密和公鑰加密之間的差異,公鑰的歷史意義以及結合SSL/TLS協議組成的密碼系統。

一、什麼是私鑰加密

據資料記載,私鑰密碼學可以追溯到公元前1900年左右。在私鑰的加密原理中,雙方必須擁有匹配的私鑰(需在傳輸的過程中交換)然後使用加密明文來進行解密。

其中經典的案例就有:Caesar的密碼,Enigma機器和Louis XIV的Great Cipher。

隨著時間的推移,關於私鑰加密的安全缺陷越來越明顯。因為私鑰必須得藉助一個物理介質,當雙方的距離比較遠時,必須得把加密介質和資訊委託給第三方,如果私鑰一不小心落入不法分子手中,就會帶來嚴重的不良影響。

       

即使在如今的數字時代,私鑰加密本身也與金鑰分配有關,使用者在沒有身份驗證機制的情況下是無法將私鑰(在SSL / TLS中稱為會話金鑰)傳送給正確的一方。

因此,公鑰就應運而生。

二、公鑰加密的出現

在過去的歷史資料中,公鑰加密的發明被發現過兩次。第一次是在1970年,一位名叫James Ellis的密碼學家,在為英國政府通訊總部(GCHQ)工作期間,提出了一個公鑰加密系統的理論,但當時沒有可行的實施方案,而被忽略。

三年後,1973年,Clifford Cocks通過混合演算法(大概是日常所說的RSA)找到了一種可行的方法。另外,數學家Malcolm Williamson開發了一個與Diffie-Helman金鑰交換的金鑰交換系統。

當時這些資訊已經傳到美國的國家安全域性,但沒有引起他們的注意,並在當時的計算機水平被認為不切實際。

直到1976年,公共金鑰密碼學再次被Whitfield Diffie和Martin Hellman發現,(在Ralph Merkle,密碼學家之後,2002年他們認為它應該是Diffie-Hellman-Merkle金鑰交換)

一年後,RSA的同名創作者Ron Rivest,Adi Shamir和Leonard Adleman正在麻省理工學院完成工作。

什麼是公鑰加密?

Diffie-Helman金鑰交換和RSA是非對稱加密系統。至今,加密仍採用是對稱的,雙方可通過相同的私鑰來進行加密和解密。

從專業術語“金鑰交換”中,系統開發者一直在考慮一個歷史的問題:金鑰分發。

公鑰加密一般使用的是金鑰對,即可以加密的公鑰和解密的私鑰。在通訊過程中,通訊可以通過公鑰進行加密,只有授權方才擁有私鑰,而公鑰是公共的。因此被稱為“非對稱加密”。

公鑰加密中的私鑰與上面提到的私鑰一樣重要,因此必須要妥善保管。而公鑰就算不小心落入不法分子的手上,也是毫無價值的,所以,公鑰並存在洩密的風險。

    

三、公鑰加密是一種金鑰交換機制

曾經,公鑰加密的單向性被認為是網路通訊的阻礙。但其實這是一種認證機制,與網路加密一樣,它可用於加密資訊並確保資訊保安傳送到目標物件。

根據SSL / TLS協議的工作原理,在握手期間,客戶端自動生成的對稱會話金鑰,對其進行加密,然後將其發到伺服器。如果伺服器持有私鑰,就可解密會話金鑰,屆時客戶端和伺服器就可以使用對稱金鑰開始通訊了。

這有助於驗證伺服器,因為如果伺服器沒有正確的私鑰,伺服器就無法與客戶端搭建會話通道。

從歷史上看,公鑰加密是一項了不起的突破,它為今天的SSL/TLS協議奠定了基礎。時至今日,即使最先進的加密系統仍只能做到私鑰的安全等級,公鑰加密也是如此。但作為一種金鑰交換機制,公鑰加密已經抵擋了多種的攻擊媒介。

由於公鑰的單向性特點,令公鑰加密中使用的私鑰安全更加強大,因為對稱加密的私鑰是256位的,這對目前來說足夠安全。但是與2048位的RSA相比,就相形見絀,因此公鑰加密就成為更安全的金鑰分發機制。

公鑰加密如何在SSL中執行?

在SSL中,公鑰加密有助於身份驗證和金鑰交換,本文將以TLS 1.3為例來簡單介紹,因為TLS 1.3是未來的趨勢,而以往的版本有點複雜。

首先說說密碼和密碼套件:密碼是用於加密的演算法。而密碼套件是一組由SSL/TLS協議結合使用的演算法。

     

而每個伺服器和瀏覽器都配置了支援絕大部分的密碼套件。一般,密碼套件包括:

Key Exchange/Authentication Algorithm_WITH _ Symmetric Cipher_Hashing Function

這些正在發生轉變,TLS 1.3將加密、身份驗證演算法與相關資料(AEAD)演算法的認證加密相結合。

當用戶(客戶端)到達網站(伺服器)時,它傳送ClientHello訊息,該訊息具有按優先順序排序的支援的密碼套件列表。它還可猜測將使用什麼加密演算法,傳送會話金鑰。所有這些都是使用伺服器的公鑰加密的。

而伺服器就是使用其私鑰解密ClientHello訊息,然後返回伺服器Hello訊息及其證書,選擇對應的密碼套件和金鑰。

收到ServerHello後,客戶端和伺服器就開始使用交換對稱加密的金鑰進行通訊。

其中,當中運用到的會話金鑰常常會別替換,因為一些上下文中為每條訊息會使用不同的會話金鑰。

但是如果沒有安全處理金鑰分發的能力,這種方法將不可行。

以上這些就是公鑰密碼學的歷史意義。