( 圖像來源:由 Nicobon - 自己的作品, CC BY-SA 4.0, https://commons.wikimedia.org/w/index.php?curid=48484042 )
所謂公鑰私鑰的密碼、通訊、簽名驗證的功能,川虎堂主已經是可以寫進程式碼應用的程度了,但心血來潮搜尋一下網路上解釋的文章,真的很慘不忍睹,估計很多人可能都不知道自己到底在講什麼。所以虎哥大叔手很癢,就來寫一篇「最簡單的解釋」吧。 (以後或許會出「最簡單解釋系列文」)
公鑰私鑰有三大應用:密碼通訊、簽名驗證、密碼驗證。
為何能做到這些功能解釋起來太麻煩、太深入數學,這篇不會解釋,那是科學家的事,你只要知道怎麼應用就足夠了。
一、密碼通訊:
這裡用比喻的方式會比較容易懂。
假設有一群朋友都想寫信給你,但你們都不希望別人知道信的內容是什麼。
現在有一間公司發明了一種「保密機器」,可以製造「魔法信紙」,只要有人在「魔法信紙」上面寫字,字都會消失,但信紙會改變花紋和顏色,所以朋友寄給你的信就算被偷看也沒人知道寫什麼,就連你自己拿到都看不懂。你只能把收到的信放進「保密機器」,讓機器還原字跡,你才可以看到信的內容。
因此,「魔法信紙」可以公然到處發放,只要你保管好「保密機器」,就永遠沒人知道誰寫了什麼信給你。
當然,你也可以隨時調整「保密機器」的參數,改變「魔法信紙」的原料和製造細節,於是舊的「魔法信紙」就會失效,用「保密機器」也無法解讀,只能用新版的「魔法信紙」寫信,才可以重新被「保密機器」解讀,這樣你們就不怕被壞人偷到你的「保密機器」的設定參數,或「魔法信紙」的製造配方。
在這裡的「魔法信紙」就是「公鑰」,「保密機器」就是「私鑰」,很好懂吧?
二、簽名驗證
沿用上面的比喻。
假設「保密機器」還有一個功能,就是可以在任何紙張上面蓋上「魔法印鑑」,印鑑的圖案完全看不出來是什麼,但只要「魔法信紙」和「魔法印鑑」真的都是你家的「保密機器」製造出來的,使用「魔法信紙」和「魔法印鑑」圖案重疊,「魔法信紙」就會變成透明的。
如果不是同一台機器、同一組參數製造出來的「魔法信紙」、「魔法印鑑」,那疊合在一起就不會變成透明,也就知道這印鑑是被竄改過或偽造的。
在這裡的「魔法信紙」就是「公鑰」,「魔法印鑑」就是「數位簽章」,公鑰可以用於驗證數位簽章,但無法製造數位簽章,數位簽章只能由私鑰產生,就是這樣的概念。
還有一個重點,數位簽章其實也是一份短文件,內容寫什麼不重要,空白也可以,但必須雙方都知道,否則無法用公鑰驗證。
比如說,你在簽章裡面寫「今天早上吃飯糰」,然後用私鑰 (「保密機器」) 編碼做成「魔法印鑑」,結果送到你朋友那裡時,他如果改成「今天早上吃蛋餅」,這樣就算使用正確的公鑰也無法通過驗證。
驗證時必須公鑰和簽章內文一致才可以,就像實體印鑑也是要同樣名稱、同一個印章紋路一樣的意思。
三、密碼驗證
沿用簽名驗證的概念和比喻,利用「魔法印鑑」內容不可更動的原理,就可以在不必記住你的帳號密碼的情況下,在任何地方讓你登入帳密。
假設你要去一個平台開戶,他們也有自己的「保密機器」,當你註冊的時候,就利用你的帳號、密碼,輸入「保密機器」後轉印在一張「魔法信紙」上,這時候「魔法信紙」的圖案和顏色已經改變,和空白的時候不一樣了,其實也就是變成「魔法印鑑影印本」了。
平台只要將你這張已經變成「魔法印鑑影印本」的「魔法信紙」保存下來,就不需要記得你真正的帳號名稱和密碼。任何人看到這張「魔法印鑑影印本」時,也沒辦法猜出你的帳號和密碼內容。下次你要登入的時候,只要拿一張「魔法信紙」,讓你寫下帳號、密碼,改變這張「魔法信紙」的圖案和顏色,再拿去和保存在系統中的「魔法印鑑影印本」做比對是否一致,只要一致就表示你填寫的內容和當初註冊一樣,就可以登入成功。
因此「魔法印鑑影印本」也可以發放給第三方使用,第三方拿到也不會知道你的帳號、密碼是什麼,但下次你要使用平台功能的時候,只要把這個「魔法印鑑影印本」拿給原註冊平台檢查,就可以暫時跳過帳號、密碼輸入的過程 (記住你的登入)。
最常見的例子就是遊戲內的臉書連結,第一次登入且要求記住的話,手機會儲存你的「魔法印鑑影印本」,下次開啟遊戲「拿給臉書看」,就可以順利登入。
這裡的「魔法印鑑影印本」其實也是一種「變形的公鑰」,第一次必需要由私鑰產生,然後可以透過公鑰來驗證真實性。