相關資料
公開金鑰密碼系統(Publick-Key
Cryptosystem)
1976年,Diffie和Hellman首度提出公開金鑰密碼系統的觀念,其最大的特點在於將加密和解密的金鑰分為兩支,稱為『公開金鑰』(Public
Key)和『私密金鑰』(Private
Key),若用公開金鑰加密,則就只能用相對應的私密金鑰解密。如此一來我們就可將公開金鑰公開,自己保存一支私密金鑰,要將資料加密送給對方時,只需用對方的公開金鑰加密,資料送達時,對方再用其私密金鑰解密,即可安全的完成傳輸。
1978年,Ron
Rivest、Adi Shamir 和
Len Adleman 提出符合公開金鑰密碼系統的演算法,稱為Rivest-Shamir-Adleman(RSA)演算法,一直到今天,RSA
還是一個最簡單、最被廣泛使用的公開金鑰演算法,並且其同時能滿足加/解密和電子簽名兩項需求。雖然其安全性至今尚未有人能以數學定理嚴格的證明,一般皆認為RSA演算法是相當安全的,也沒有公開文獻對它提出有效的破解方式,因此目前大部分的系統都還是以RSA作為其公開金鑰演算法!
目前公開金鑰密碼系統主要應用在下列三方面:
(1) 加密/解密
(2) 金鑰的交換
(3) 電子簽名
接下來我們就分別來探討這三方面的應用。
(1)加密/解密
公開金鑰密碼系統雖然解決了金鑰的散佈問題,但是由於其演算法都是大量的數學運算,所以相對於秘密金鑰密碼系統來說,速度相當的慢。以RSA和DES來做比較,其加/解密的速度可以相差到1000倍,所以在實際應用時,通常不會以公開金鑰演算法去加/解密真正要傳輸的資料,而改以加/解密一些較小、且必須要用公開金鑰演算法去加密的資料。
(2)金鑰的交換(Key
Exchange)
由於速度慢是公開金鑰演算法的致命傷,所以一般還是以秘密金鑰演算法來加密資料,但我們可以用公開金鑰演算法來做秘密金鑰的交換,使得傳輸資料雙方可以安全的得到相同的金鑰。其步驟如下(假設A要傳送資料給B):
1. A取得B的公開金鑰
2. A以亂數產生一秘密金鑰,並且用B的公開金鑰加密,傳送給B
3. B將收到的資料用其私密金鑰解開,取得A產生的秘密金鑰
4. A和B開始用此秘密金鑰通訊
此系統我們常常稱為Hybrid
Cryptosystem。使用此方式來作為加密系統,除了速度快以外,安全性也很高,因為我們所使用的秘密金鑰都是
在每次要傳輸時,以亂數產生,每次傳輸所使用的金鑰皆不同,所以被破解的機率很低,就算秘密金鑰被破解,也只會洩漏出那次傳輸的資料,對於之前或之後的傳輸並沒有影響,使用者只需保護好他們的私密金鑰即可。
(3)電子簽名
電子簽名在資訊電子化的過程當中,扮演一個非常重要的角色,在網路上的應用非常的廣,所有電子公文的認證,電子錢幣的交易等等,都會使用到電子簽名。但是在傳統的文件電子化後,一些認證的問題也隨之產生,傳統的簽名方式已無法使用在現今的電子檔案上面,所以必須發展一種新的電子簽名方式,而且其最少要滿足下列需求:
1.身份認證:要能證明此份文件確實是被簽名者親自簽名
2.不可偽照性:此份簽名必須無法被他人偽照
3.不可重複使用性:文件上的簽名無法被拿到其他文件上重複使用
4.不可改變性:文件被簽名後,就無法再改變
5.不可否認性:簽名者簽過名後,就無法否認此簽名為其所簽
6.可驗證性:此簽名必須能讓第三者驗證,以解決紛爭
而要如何利用公開金鑰演算法來達到電子簽名的需求呢?最簡單的方法如下:(假設A要對某文件簽名,而B要驗證此簽名是否正確)。
1.A用他的私密金鑰對此文件加密,也就是做簽名。
2.A將此份簽名連同原始文件一同送給B。
3.B用A的公開金鑰對簽名解密,並與原始文件比對,若正確無誤,則驗證成功。
讀者或許會懷疑,如此簡單的幾個步驟,真的能符合上列需求嗎?我們可以一一討論:
1.身份認證:B用A的公開金鑰來驗證,所以可確定是A自己簽名的。
2.不可偽照性:因為只有A有他自己的私密金鑰,所以沒有他人能偽照A的簽名。
3.不可重複使用性:由於簽名是對那份文件加密,不同的文件有不同的簽名,所以無法將此簽名重複使用在別的文件上。
4.不可改變性:在簽名過後,任何人只要對原始文件做更動,就會和用公開金鑰解密出來的文件不同,簽名即告無效。
5.不可否認性:由於只有A擁有其私密金鑰,一旦簽名後,就不能否認這簽名。
6.可驗證性:因為任何人都可取得A的公開金鑰,所以任意第三者也可驗證A的簽名。
雖然用公開金鑰演算法能夠很容易的就達到電子簽名的需求,但是別忘了,我們前面提到過,公開金鑰演算法的速度太慢,若要簽名的文件很大,則簽名會變得很沒有效率;另一方面,若要將簽名儲存,對整份文件簽名,所佔的容量也太大,浪費空間;還有就是有時候我們會把簽名交由一第三者保管,但並不希望其知道簽名的文件內容,所以也不可以簽名整份文件;基於以上這幾個需求,我們常常用『單向雜湊函數』(One-way
hash function)來取代簽名整份文件。
先解釋一下何謂「單向函數」與「雜湊函數」,若我們有一變數x,讓我們可以很容易計算出f(x),但卻很難由f(x)反推回x,則此f()函數就稱為一單向函數。而雜湊函數簡單來說,會把一個變動長度的字串轉為固定長度字串的函數,稱為此字串的雜湊,且通常雜湊都會比原來的長度還短。而『單向雜湊函數』就是一個單向的雜湊函數,也就是說,我們可以很容易的算出一個字串的雜湊,但卻很難由雜湊推回原本的字串。另外,一個好的單向雜湊函數,還必須滿足近似「無碰撞」(collision-free)的特性,即我們很難找到兩個不同字串產生出相同的雜湊。
利用單向雜湊函數的特性,我們可以在簽名之前,先將文件加以雜湊,成為一固定長度的字串,(此長度通常都很小),然後對此字串以私密金鑰加密,得出來即為此份文件的簽名。當要驗證此簽名時,先用公開金鑰將此簽名解密,然後算出原文件的雜湊,兩相比較,若相等,則因為「無碰撞」的特性,可證明此簽名確實為對這份文件所做的簽名。由於此雜湊長度很小,用公開金鑰演算法並不會浪費很多時間,儲存簽名的空間也可以大幅減少。並且在交由第三者保管時,別人也無法由雜湊得到原始的文件。故一般電子簽名都是採用此方法來做,如圖四。
除此之外,在實際應用時,我們常常還會在簽名時加入一些『時間戳記』(timestamp),以確保此簽名的時效性,或證明此簽名的時間。
(4)金鑰的散佈(Key
Distribution)
公開金鑰演算法還有一個很重要的問題,就是公開金鑰的散佈,雖然公開金鑰是可以公開的,可是我們要如何確定此公開金鑰確實是屬於某個人的呢?例如拿到某一個人的簽名,但若我們要用來驗證簽名的公開金鑰沒有經過認證確實屬於簽名者所有,則也無法證明此簽名確實是用其私密金鑰所加密。故整個公開金鑰密碼系統要能夠正確的運作,公開金鑰的認證是一個很大的關鍵。
一般我們都是透過一個『憑證管理中心』(Certificate
Authority,簡稱CA)來驗證我們的金鑰。在通訊的雙方,都先向CA申請一張「公開金鑰憑證」(public-key
certificate),此憑證包含了申請者的基本資料和申請者的公開金鑰,而CA會對此憑證做簽名,表示CA確定憑證為申請人所有,而使用者每次要使用他人的公開金鑰時,也是先取得對方的憑證,驗證是否有CA的簽名,若驗證無誤,才能信任此憑證內的公開金鑰為對方所擁有。當然,傳輸的雙方都必須信任此CA。
公開金鑰密碼法的運作
公開金鑰密碼法解決了許多單向密碼密碼法的缺失。在公開金鑰密碼法中,不管是個人或是組織的用戶皆擁有兩把相關連的金鑰,一把稱為公開金鑰,一把稱為私密金鑰。任何以私密金鑰所加密的訊息都僅能被相對應的公開金鑰解開。反之,任何以公開金鑰所加密的訊息也都僅能由相對應的私密金鑰解開。
請看下面的例子…
1. Bob擁有兩把金鑰
(公開金鑰及私密金鑰)。
2. 這兩把金鑰的任一把僅能進行另一把金鑰的相反動作。
3. Bob自己保留一把金鑰
(即私密金鑰)。
4. Bob將另一把金鑰對外公開
(即公開金鑰)。
5. Alice想對Bob傳送一封訊息。
6. Bob將他的公開金鑰副本傳遞給Alice。
7. Alice利用Bob的公開金鑰對訊息加密。
8. Bob以他的私密金鑰解讀Alice的訊息。
以上述的方式運作,Bob可以擁有下列這些優點。
l
當Bob把他的公開金鑰傳給Alice時,他不用擔心任何安全性的問題。若有人取得Bob的公開金鑰,他們也僅能用此金鑰傳送私密訊息給Bob而已;他們並無法利用Bob的公開金鑰解開Bob的私人訊息或是冒充Bob的身份。
l
Bob無須擔心Alice是否為雙面間諜,因為Alice無從攔截Bob的訊息,也無法冒充Bob的身份。
l
在組織中使用此密碼法將不會衍生其他問題。此組織中任何想對Bob發送訊息的成員都將使用相同的金鑰
(即Bob的公開金鑰)。換句話說,若此組織中共有N個成員,則僅需N個公開金鑰對即可;若使以單向密碼法技術來做,則需要無數的金鑰對。
l
Bob可以對訊息簽章,因為Bob是私密金鑰的唯一持有人。若Bob以他的私密金鑰對訊息加密,這就跟使用數位簽章的道理一樣。
何謂數位憑證
數位憑證的功能一如現實生活中的駕照、護照或名片。在電腦中,透過出示數位憑證可以為您提供有力的身份證明,或藉此獲得存取網路資訊或線上服務的權利。而保全伺服器數位憑證則可以讓您的網站更具安全性,它可以作為線上交易時的鑑別機制,並藉此獲得具有保密性質的網路電子商務。換句話說,當您使用保全伺服器數位憑證來進行網路商業行為時,客戶除了對傳送到您網站的信用卡號碼或其他個人資訊具有信心外,他們還可以確信所傳送的訊息不會被不相干的人攔截或解讀。
就數位憑證(Digital
ID或digital
certificate) 的技術面來看,它的原理係將一對可用來加密及解密的電子金鑰結合在一起,以便提供身份辨識的功能。數位憑證可以用來查核聲稱能使用某金鑰者的身分真偽,這樣可避免有人利用偽造的金鑰來冒名頂替其他人。數位憑證與加密技術的結合,可以替進行交易的每一方提供完美無缺的安全需求解決方案。
數位憑證係由一個受信任的獨立機構發行,此機構稱為認證中心(CA)。其實認證中心與真實世界中製發護照的機構類似。認證中心必須建立起憑證發放對象(包括組織或個人)
的身份確認方法。只要被發放憑證者的身份能被確認,認證中心即可對其發放數位憑證。在數位憑證中包含了此人
(或組織)
的公開金鑰,而此公開金鑰亦會以認證中心之私密金鑰來簽章。
保全伺服器數位憑證包含下列資訊:
l
公司的一般名稱 (如
www.verisign.com)。
l
額外的辨識名稱(如
IP 位址或實際地址)。
l
公開金鑰。
l
公開金鑰的到期日。
l
發行此數位憑證的認證中心
(如VeriSign)。
l
序列號碼。
l
本公司的數位簽章。