非對稱加密系統簡介

相對於傳統加密方式 使用單一密碼進行加解密, 現代的非對稱加密系統使用二個密碼, 且不能由一個計算出另一個。 可以用來驗證發訊者的身份, 另外就算在通訊完全被監聽的情況下, 仍可以實現祕密通訊。

這篇文章不談數學原理, 先從最簡單的一把和二把鑰匙開始。 傳統密碼是採對稱加密, 也就是用一組密碼加密,也用同一組密碼解密。 但這造成需要溝通時,需要另外的安全通道交換密碼, 如果沒有事先交換密碼,也就不可能在不安全通訊中, 實現安全的通訊。

非對稱加密系統把密碼分為二個,稱為二把金鑰, 一把可以加密,另一把可以解密。 其中用第一把加密的訊息,只有另一把能解密, 如果只有解密的鑰匙, 也不可能編造出能由解密鑰匙解密的訊息。 於是二種功能誕生了,加密和驗證。

加密

加密指在不安全通道中,所有通訊都被監聽, (假設沒有被攔截。) 仍可以由其一方生成二把鑰匙, 將加密那把傳給對方, 對方可以用這把把要傳的訊息加密後傳給你。

因為加解密是分開的, 因此加密方自己沒有私鑰,無法解開自己加密的訊息; 而監聽方也和加密方一樣,只有加密鑰匙, 因為生成鑰匙的人根本沒有把解密鑰匙傳出電腦, 監聽方監聽雙方通訊,只聽的到解密鑰匙, 就算攔到加密訊息也無法解密。

但實際上這種非對稱加密計算量大, 一般作法是對方收到加密鑰匙後, 生成一組對稱加密密鑰, 用這把加密鑰匙把對稱密鑰加密後傳給對方, 雙方再用這組對稱金鑰通訊。

一般在 pgp 中,是將自己的加密鑰匙公開, 讓任何人可以用那把鑰匙傳加密訊息自己。

驗證

而驗證的原理也類似, 只是這時是用加密的那把金鑰加密一段訊息, 然後公開解密鑰匙與加密後訊息, 與加密前的訊息內容。 大家都可以解密看到訊息內容, 但只有有加密鑰匙的你能生成這段加密訊息, 也就知道這段訊息是你所發出。

簡單作法是發布文件時, 連帶發布一份該文件的加密版本, 然後只公開解密鑰匙,別人就能解密, 就知道發布者是有加密鑰匙的人。

雖然一般不會加密整份文件, 可能加密該文件的 hash 而已。 hash 是雜湊, 簡單來說是把任意資料轉換成一段字串, 且保證資料只要改一個 bit, 輸出的字串就會不同。

傳統簽署驗證在電子時代的問題是, 電子時代的東西都能輕易被複製。 像一份純文字文件,結尾寫了自己的名字, 這樣根本不能證,因為別人也可以自己打上你的名字。 就算是掃描的圖片,也可以把簽名部份截取出來, 貼到另一份文件上。

而用非對稱加密,就是你能加密你認可的文件, 這份驗證只對這份文件有用, 而且只有你有加密鑰,只有你能加密。

標準

最後 pgp 很重要是他有標準化, 他加密後的檔案,可以直接用另一個相容標準的 pgp 解開。 像你使用 html5 的加密 api, 加密後只得到一堆數字,要自己包成資料結構, 記錄使用的初始向量、塊大小、加密方法。 pgp 沒那麼麻煩,他就問你密碼是多少, 其它資料都記在加密完的檔案裡了。

結論

pgp 實現了看似不可能的問題, 就算系統是透明的, 加密中除了密碼外每一步都公開, 且通訊通道完全被監聽, 仍可以保證安全通訊。 只有一個問題,如果你的通訊被攔截、被竄改, 那就無法保障了;例如 中間人攻擊

另外, 文中沒有提到公鑰和私鑰這二個名詞, 只有用加密鑰和解密鑰。 總之,這二個公開的那個就叫公鑰, 沒公開只有本人持有的就叫私鑰。 一般公鑰會公開發布到 pgp 公開伺服器上, 讓大家都可以寄加密的訊息給你; 也讓大家收到你發的信時, 能用公鑰認證那封信是你發的。