2009年7月13日 星期一

密碼學閒話

在上篇"公/私鑰(Public/Private Key)的原始用途"中提到了"悄悄話"與"以個人身分發布訊息"兩大類應用, 也提到了一點公/私鑰的先天限制, 現在就讓我們分享前輩們如何解決這些限制.

在進入解決方法之前, 我們先來看看(或回憶)一些密碼學基本的觀念與術語.

密碼學(cryptography), 簡單來說是種數學, 而且是很難的數學. 目的是把 "明碼"(Clear text, 原始資料)轉換成 "密碼"(cipher, 無法辨識的資料) 或是把密碼轉換成明碼. 明碼轉換成密碼的過程叫 "加密"(encrypt). 密碼轉換成明碼的過程叫 "解密"(decrypt).

加解密(encrypt/decrypt)是一套設計出來的數學運算, 基本上利用一個或一組"數字"(number) 把明碼轉換成密碼, 或是把密碼轉換成明碼. 這個或這組"數字", 通稱鑰匙 (Key). 原始的想法大概就是把加密想像成把東西"鎖起來"(lock), 而解密想像成把鎖住的東西"解開"(unlock). 以早期或現實社會常見的鎖來看, 鎖住與解開這兩個動作, 自然是要靠鑰匙.

密碼學裏的鑰匙 (Key)猶如雄性社會裏的雄性象徵: 長度很重要 (如武俠小說裡常說: "一寸長, 一寸強"), 與安全的程度成正比. 這裡的長度指的是位元數(number of bits) 越長 (例如 32bits), 就表示當作鑰匙數字的選擇性越多(0~2^32 - 1), 相對被猜中的機率就越小. 所以就不難理解很多公司會很驕傲的強調他們的安全方案比別人的長 (TrustView當初就宣稱自己是業界最長: AES 256 bits, 比Authentica長一倍, Donald: 嘿嘿嘿....).

密碼學可分為兩大類: "對稱性"(symmetric)與"非對稱性"(asymmetric).

對稱性密碼學, 簡單來說就是開鎖(加密)與解鎖(解密)都用同一把鑰匙, 故稱對稱(symmetric).

而非對稱性密碼學之前在PKI 妙喻 & "向左, 向右, 向前看" 提過了, 就是公鑰/私鑰的機制. 因為加解密用不同的鑰匙, 故稱非對稱.

對稱性密碼學起源很早, 常見的 DES, 3-DES都屬此類. 以技術的角度而言, 比起非對稱性密碼學這個後起之秀, 其實是有很多優勢. 但是對於電子交易時所需要的兩大特性: "悄悄話"(私密的資料傳輸)與 "以個人身分發布訊息"(確認資料之來源), 就面臨了實際上困難.

首先是Key的數量. 為達到悄悄話的效果, N個人需要有N*(N-1) / 2 把鑰匙. 比起非對公鑰/私鑰的機制僅需 N* 2把, 如何分發和保管鑰匙(確定每個人只能拿到他可以用的鑰匙)相形麻煩.

另外, 對於以鑰匙來證明持有人身分而言, 因為加解密都是同一把鑰匙, 更是無解. 且不說要以個人名義發布訊息須要加密N-1 次這麼麻煩, 更要命的, 同一把鑰匙由兩個人持有, 如何能證明唯一性?

然而對稱性的優點恰巧可彌補公鑰/私鑰的缺點: 1. 加密的資料有長度限制 2. 加密後的資料長度會超越線性成長(爆增). 所以前輩們就巧妙的將這兩種加密截長補短, 因此有了下兩個主題: "數位信封(Digital Envelop)" 與 "數位簽章(Digital Signature)"

沒有留言:

張貼留言