加密通信

來自專欄互聯網法律觀察2 人贊了文章

每個人都有自己私密的信息,如何進行私密的溝通是人類一直以來的需求。古裝片裡面,動不動就會有你我入密室詳談這樣的情節,密室保證的就是私密性。那我們這節內容,瞄準的就是如何在網路上進行私密的溝通,或者說的正式點,就是來聊加密通信問題。早期人們的解決方案其實跟密室是一個道理,就是通過私有網路,也就是從物理上隔絕其他人。但是私有網路衰落,互聯網興起後,客觀條件就不同了,互聯網是一個公開場合,數據在通信過程中默認是能夠被別人獲取到的,那麼這個時候保證私密的策略就從「不讓你看見」變成「看見你也看不懂」了。具體做法就是:首先把信息加密成密文,到達接收方之後,再把密文解密成信息了,這個過程就是加密通信。

對稱加密和非對稱加密

先說加密通信的一種最簡單的方式,就是對稱加密。這個是人類用了幾千年的方式,凱撒密碼就屬於這種。所謂對稱,意思就是發送方和接收方使用的是同一個鑰匙,或者英文叫 key 。但是互聯網上的加密通信,通常使用的卻是另外一種形式,也就是非對稱加密,或者叫公鑰加密。

說說類似於凱撒密碼的對稱加密的基本工作原理。發送方會按照一定規則,把信息變成密文,密文說白了就是誰也看不懂的東西。等密文到了接收方手裡,接收者需要按照同樣的規則,也就是同一個 key ,把密文翻譯成信息。加密通信過程就完成了。

但是對稱加密的安全隱患就在於,如何傳遞 key 本身。沒有 Key ,就不能建立安全的通信通道,沒有安全的通信通道,就無法安全的把 key 傳遞給接收方,所以這就是一個雞生蛋蛋生雞的問題了。於是,互聯網上做加密通信更為流行的一種方式是非對稱加密。非對稱加密,更準確的一種說法叫做公鑰加密,特點是發送方和接收方使用的不是同一個 key 。這種方式略微有點反直覺了吧,具體原理稍候我們就是講到。

總之呢,加密通信可以採用的方式有兩種,一種是對稱加密,一種是非對稱或者叫公鑰加密。對稱加密的特點是發送方和接收方採用相同的 key ,非對稱加密發送方和接收方採用的是不同的 key 。

公鑰加密基本原理

下面來詳細說說用公鑰加密的基本原理。主要是要理解公鑰和私鑰的關係。

首先,可以在自己的機器上安裝類似 ssh-keygen 這樣的軟體來生成公鑰和私鑰。注意,每次生成的時候,就會同時生成一對,一個是公鑰,也就是 Public Key ,另外一個是私鑰,也就是 Private Key 。公鑰是可以公開的,分享給任何人的都沒問題,私鑰一定要保密。公鑰和私鑰之所以是一對,是基於二者是有天然的數學上的聯繫的。注意這種聯繫有單向性,那就是由私鑰可以很簡單的得到公鑰,而用公鑰去反推私鑰就不可能了。當然,密碼學領域不存在完全不能破解的密碼,但是如果一個密碼需要很久很久,例如一萬年才能破解,就認為這個密碼是安全的了。同時多扯一句,單向聯繫一般就是通過一些無解的數學問題來確定的,這類問題只能正向運算,不能反向運算。比如 8616460799 這個數是兩個數相乘得到的,但是要從結果反推出這兩個數,是基本不可能的。實際中 RSA 和橢圓曲線演算法,都是這一類的數學問題。

好,有了公鑰和私鑰這一對兒有天然聯繫的祕鑰。那麼加密通信過程是怎麼樣的呢?首先,如果 Alice 想讓 Bob 給她發信息,注意這裡 Bob 是發送方,而 Alice 是接收方。首先 Alice 要把自己的公鑰傳遞給 Bob ,然後 Bob 用 Alice 的公鑰去加密信息,Alice 收到密文之後可以同自己的私鑰進行解密。這就是非對稱加密的基本邏輯了,公鑰用於加密,私鑰用於解密。這個過程好比就是 Alice 想安全的從 Bob 那裡獲得一些機密信息,所以 Alice 首先給 Bob 郵寄過去了一個帶鎖的箱子,注意這個鎖就相當於公鑰,是用來加密的。Bob 信息放到箱子裏鎖好,然後郵寄給 Alice ,這樣 Alice 就可以用這把鎖的鑰匙,也就是這個公鑰對應的私鑰,去開啟箱子了。另外一個比喻也很有道理,就是 Bob 如果想給 Alice 發信,那麼首先要知道 Alice 家的地址,郵遞員把信放到 Alice 家的郵箱中,Alice 就可以用鑰匙打開郵箱拿到信了。這個過程中國,Alice 的公鑰就相當於 Alice 家的地址,而私鑰就是自家郵箱的鑰匙。

當然,上面所說的過程還只是單向通信,要實現雙向通信,就需要雙方把各自的公鑰傳遞給對方了。

公鑰加密的更多技術細節

公鑰加密,或者說非對稱加密的基本思路是比較簡單的,就是用公鑰去加密,用私鑰去解密。不過,最後我們再稍微深入一點,聊聊公鑰解密相關的一些技術細節。

首頁一個有意思的問題,如果公鑰就是用來加密信息的,那為啥不叫 lock 也就是鎖,而要叫 key ,鑰匙呢?所以說既然公鑰也是鑰匙,那麼它就是一定也有解密功能。公鑰加密技術其實有兩個重大應用,一個就是我們本文所述的加密通信,但是還有第二個就是數字簽名。加密通信是用來保證機密性的,而數字簽名是用來認證的。數字簽名不是咱們本文的重點,但是它的基本原理是用私鑰去加密,而用公鑰去解密。也就是我用私鑰簽名一份文件,而全世界的人都可以用我的公鑰去解密我的數字簽名,如果解密成功,就可以認定,這個文件的確是我簽署的。所有私鑰可以叫做「解密 key」,公鑰可以叫做「驗證 key」。這樣,我們就理解了為啥公鑰也是 key 了。

另外一個問題是,公鑰加密技術都有哪些實際應用呢?首先一個就是加密通信,銀行政府傳遞數據也是用這個思路的,所以加密通信還真是關係重大。如果你是程序員,可能會經常用 ssh 登錄伺服器,這個背後也是用公鑰加密技術來實現安全通信的。另外網站現在都流行使用 HTTPS 協議,也就是安全的 HTTP ,來達成瀏覽器跟伺服器之間的加密通信,這個背後也是公鑰加密技術。伺服器把自己的公鑰發送給瀏覽器,這樣我們如果在瀏覽器裡面輸入銀行密碼等機密信息,就是先用公鑰加密後再發送了,所以也就安全了。另外,比特幣等加密貨幣,背後也都是公鑰加密技術,最常見的應用場景是使用私鑰來簽名交易。

最後一個問題會引發我們進一步的學習,那就是如何解決公鑰加密過程中的一些具體問題,例如,如何安全的把公鑰發送給對方,保證公鑰沒有被篡改過。實際上這個問題還真的是非常困難的,所以會涉及到 CA ,也就是證書機構,以及 PKI 也就是公鑰技術設施這些概念。比如,我打開的一個網站採用的是 HTTPS ,但是如何確定這個網站的公鑰就是安全的呢?目前來講沒有其他的好方法,只能依賴與一個可信第三方,也就是 CA 來頒發證書,證書中包含公鑰。CA 是 PKI 的核心組成部分,但是 PKI 還提供了更多的功能。

公鑰加密的更多的技術細節,咱們還是需要去進行更為深入的學習纔行。這裡就不展開了。

總結

總結一下本節的內容吧。今天聊的是加密通信。對稱加密是比較傳統的好理解的方案,但是其實非對稱加密纔是最常見的做法。所謂非對稱,就是加密和解密是採用不同的 key 。公鑰用來加密信息,私鑰用來解密信息。雙方通信之前,要先互相交換公鑰,這樣才能建立起安全的雙向通道。公鑰加密的最大應用有兩個,一個就是本節聊的加密通信,另一個就是數字簽名。關於數字簽名的內容後續小節中繼續來聊。

  • 參考:en.wikipedia.org/wiki/P

推薦閱讀:

相關文章