2009年7月13日 星期一

公/私鑰(Public/Private Key)的原始用途

之前在PKI 妙喻 & "向左, 向右, 向前看"一文用一個簡單的比喻介紹了PKI的重要特性, 並以一知名電影作Use Case, 演練了一下公/私鑰(Public/Private Key)的使用. 不過那個Use Case只是以笑謔的方式讓初次接觸PKI的朋友加深印象, 不要太當真 (尤其那些支持金先生的影迷不要因此來找我麻煩).

總之先記住: 1. 公/私鑰為密碼學之一支, 且為PKI(Public Key Infrastructure) 之基礎. 2. 公鑰與私鑰必為"成對產生", 私鑰顧名思義為個人私有的鑰匙, 所以僅能由一人持有, 或可想像為證明某人身分之信物. 公鑰則有公開, 公物之意, 用以廣為散佈. 3. 公私鑰皆可用於加解密, 但是私鑰加密的僅有成對的公鑰可解, 公鑰加密的也僅有成對的私鑰可解.

公/私鑰的用途很廣泛, 例如購物網站常使用之"https"(SSL)通訊協定即為常見之應用實例. 如果我們略去應用的領域, 對象, 行業...等等因素, 回歸本質面, 我們其實可以將公/私鑰的主要用途區分為二: 1. 悄悄話 2. 以個人身分發布訊息.

所謂悄悄話的意思, 就是不希望別人聽到. 回想一下公/私鑰的特性: "公鑰加密過的資訊, 只有私鑰才解的開". 而誰擁有私鑰呢? 所以, 如果你希望某人給你的訊息不被他人知道, 你只須要要求那人將訊息用你的公鑰加密, 即使其他人也擁有你的公鑰也沒用. 因為公鑰加密的東西僅有成對的私鑰可解, 而只有你擁有這把私鑰.

悄悄話的相反, 大概就是像"大聲公"或"廣播電台"--> 唯恐天下不知! 而更重要的是要讓大家知道是"誰說的". 如果你想以個人身分發布訊息, 而且讓大家知道那是你發的, 最簡單的方法就是把你要發布的訊息, 用你自己的的私鑰加密起來, 再廣為傳遞. 那些擁有你公鑰的人自然解的開, 若解不開那就一定不是你用私鑰加密的東西. 我們也可藉此體會私鑰 --> "見鑰如見人"的設計理念.

在我們把PKI, 公私鑰..背後複雜的演算法理論與實做先撇開後, 試著從設計的源頭或目的去了解, 其實這些東西還是有和藹可親, 很生活化的一面. 不過看倌也先別太爽, 以為PKI或公私鑰就這麼點料, 其實故事來多著呢!

首先比起早期密碼學加密解密都用同一把鑰匙, 公私鑰看來很完美了, 但是它也有先天上的缺陷, 其中有兩個蠻要命的. 首先, 公私鑰的演算法通常在加密的資料有長度限制. 也就是說,一旦超過限制, 加密可能會失敗. 另外, 原始資料長度越大 ,加密後的資料長度會超越線性成長. 簡單來說, 假設原始資料長度為a, 加密後長度為b. 當原始資料長度為2a, 加密後長度可能會暴升為4b, 也就是一個上揚的曲線. 在實際應用上這兩點絕對不是好消息. 因此我們可以想像, 不管是悄悄話也好, 發布消息也好, 一定得解決這些問題.

下一篇會談到公私鑰在實際應用時如何克服先天的弱點, 並同時帶出兩個主題: 數位信封 (Digital Evelope)數位簽章 ("Digital Signature").

沒有留言:

張貼留言