資訊安全─入門手冊 第 12 章 加密
第 12 章 加密 『良好的加密是安全的不二法門』。 如果可以利用加密來保護資訊,也就沒有人可以看得到內容或修改內容。 如果我們使用加密,也可以確認交談對象的身份。 加密確實是非常重要的安全工具、加密機制可以協助確認資訊的來源,但是加密本身並不是最後的答案。 加密機制可以做為廣泛安全計畫其中的一個環節。
在安全計畫之中廣泛地使用加密機制,只是因為加密機制可以協助資訊的機密性、完整性和可說明性。 加密只會延緩取得內容所需的時間。 本章主要是希望提供您加密的基本觀念以及如何使用加密。
本章的內容如下: 12-1 認識加密的基本概念 12-2 認識私密金鑰加密 12-3 認識公眾金鑰加密 12-4 認識數位簽章 12-5 認識金鑰管理 12-6 認識可信任的系統
12-1 認識加密的基本概念 加密就是利用某種方式將資訊打散,避免無權檢視資訊內容的人看到資訊的內容,而且允許真正獲得授權的人才能看到資訊的內容。 『獲得授權的人』是指擁有解密金鑰(key)的人。 加密是讓毫無相干的人員難以讀取資訊的內容。即使得知加密系統所使用的加密演算法,但沒有金鑰也就無從得知資訊的內容。
透過加密可以提供下列三種安全服務: 本節的內容如下: 機密性:不論是在傳輸或儲存設備之中,都可以利用加密隱藏資訊。 完整性:不論是在傳輸或儲存設備之中,都可以利用加密確認資訊的完整性。 可說明性:加密可以用來確認資訊的來源,且可讓資訊的來源無法否認資訊的出處。 本節的內容如下: 12-1-1 加密專有名詞 12-1-2 針對加密的攻擊
12-1-1 加密專有名詞 加密運作模式專有名詞如下: 原文(plaintext):資訊的原始格式,一般也通稱為明文(cleartext)。 密文(chipertext):透過加密演算法打散的資訊。 演算法(algorithm):將原文處理成密文的運算法則。 演算法(algorithm):將原文轉成密文的處理方法。 金鑰(key):將原文轉成密文或將密文轉成原文的過程中,一種用來協助演算法計算的資料。 加密(encryption):將原文轉成密文的程序。 解密(decryption):將密文轉成原文的程序。
可以協助讀者瞭解加密運算的四種專有名詞如下: 密碼學(cryptography):利用加密隱藏資訊的技術。 密碼員(cryptographer):從事密碼學的人。 密碼分析(cryptanalysis):分析分析密碼學演算法並嘗試找出缺陷。 密碼分析師(cryptanalyst):利用密碼分析來確認並利用密碼學演算法缺點的人。
12-1-2 針對加密的攻擊 加密系統可能遭到下列三種攻擊: 透過演算法的缺點 暴力破解金鑰 透過系統週遭的弱點 當演算法受到攻擊時,分解員會找尋將原文轉成密文的演算法缺點,且在沒有金鑰的情況下快速還原資訊的原文。 若是具有這類弱點的演算法,也就不能稱為牢靠的演算法,當然也就不能使用。
圖12-1 基本的加密運算方式
暴力(Brute-force)攻擊是企圖利用所有可能的金鑰,企圖將密文還原成原文。 利用系統周遭的缺點是最後一種攻擊方式。在討論加密的內容時,一般都不太會探討這種問題。 攻擊系統周遭的缺陷會比攻擊加密演算法來得容易。
12-2 認識私密金鑰加密 加密法可以分為『私密金鑰』與『公眾金鑰』兩大類。 使用私密金鑰加密時,只要經過授權並擁有相同金鑰的人,都可以讀取資訊的內容。 資訊的保護類型可簡化為金鑰的保護。 私密金鑰加密是使用相當廣泛的加密類型。
本節的內容如下: 12-2-1 什麼是私密鎖鑰加密? 12-2-2 替換式密碼 12-2-3 One-Time Pads 12-2-4 資料加密標準 12-2-5 Triple DES 12-2-6 密碼加密 12-2-7 AES:Rijndael 12-2-8 其它私密金鑰演算法
12-2-1 什麼是私密鎖鑰加密? 由於加密/解密使用相同的金鑰,因此私密金鑰加密也稱為對稱式金鑰加密。 圖12-2 是私密金鑰加密的基本功能。 在經過對稱式加密之後,可以確保資訊的機密性。 只有金鑰的擁有人,才可以解密訊息。 在傳輸的過程中,訊息發生任何變化都會造成解密失敗,因此可以得知訊息是否遭到修改。
私密金鑰加密無法確認建立金鑰、加密和傳送有效訊息的人。 建立私密金鑰加密的速度相當快,而且很容易利用軟體或硬體建置私密金鑰。
圖12-2 私密金鑰加密
12-2-2 替換式密碼 替換式密碼的存在,已經超過2500年以上。 Atbash密碼是最早的已知的最佳範例。 最早利用的範例是在西元600年左右,內容是以顛倒的希伯來文構成的。 凱薩大帝(Julius Caesar)也曾經使用稱為Caesar密碼的替換式密碼。 如果攻繫者充分收集密文,即可破解替換式密碼。
12-2-3 One-Time Pads 理論上來講,One-Time Pad(OTP)是唯一無法破解的加密系統。 如果OTP真的全部都使用亂數、OTP只能使用一次,OTP的長度比訊息長,那麼就沒有找不到密文中的原文的金鑰(OTP本身),因此也就無法解出訊息內容。
OTP還有一點必須特別注意的事項 - 只能使用一次。如果重複使用,就可能進行分析和破解。 現今某些加密系統號稱可以模擬OTP。或許這類系統可以提供充分的安全性,但可能也是很容易被破解的系統。一般來說,OTP並不適用於高流量的環境。
圖12-3 One-Time pad運算方式
12-2-4 資料加密標準 資料加密標準(Data Encryption Standard,DES)是由IBM在1970年代初期發展出來的演算法。 在經過NSA審核、修正、認可之後,美國國家標準與技術協會(United States National Institute of Standards and Technology,NIST),在1977年正式採用並做為DES的加密標準。 在1983、1988、1993和1999年,也再次認定這個標準。
DES使用56位元金鑰,且使用7個8位元的位元組(每個位元組的第8個位元是做為同位元檢查)做為金鑰的內容。 DES屬於區塊式密碼(block chiper),一次處理64位元明文(詳見圖12-4演算法的區塊方塊圖)。 DES密碼共有16個循環,每個循環都使用不同的次金鑰(subkey),且每一個金鑰都會透過自己的演算法取得16個次金鑰(詳見圖12-5)。
圖12-4 DES區塊演算法
圖12-5 DES產生次金鑰演算法
在DES方塊圖之中,可以看到幾個重新排列的替換方塊。 標準也定義了重新排列每一次替換的特定位元。 相同的演算法也可用來產生次金鑰,而且也會重新排列替換選項1和2特定位元。 在圖12-4之中可以找到標示為『f』的函數。函數內含稱為『S』區塊,這是一個將6位元輸入轉換成4位元輸出的對照表(標準裡面也有定義)。
DES四種運作模式如下: ECB(Electronic code book):這是最基本的區塊加密法,原文和金鑰都視為產生密文的輸入。在這個模式下,相同的輸入會產生相同的輸出。 CBC(Cipher Block Chaining):在這個模式下,每一個區塊的加密法和ECB一樣,但是多加入一個從上一個區塊產生出來的因子。在這種情況下,相同的輸入(原文)不會產生相同的輸出結果。
CF(Cipher feedback):這個模式會將前一個區塊產生的密文做為DES的輸入,輸出結果是將原文組合成新的密文。 OF(Output feedback):輸出模式類似CF,但是使用DES的輸出而且也不含密文。 目前可以攻擊DES演算法的攻擊方法少之又少(密碼分析和線性密碼分析的差異;這種攻擊的詳細資訊請參考http://www.rsasecurity.com/rsalabs/faq/)。
12-2-5 Triple DES 在1992年研究人員發現重複使用DES即可建立牢靠的加密法則。因而產生了Triple DES(TDES)。 圖12-6 顯示了TDES運作的方式。 第二次運算才是真正的解密動作,這也就是為什麼TDES會比一般DES來得牢靠。 TDES可以使用兩組或三組金鑰。如果僅僅使用二組金鑰,那麼k3和k1是一樣的而只有k2不同。
和DES相較之下,TDES屬於相對快速的演算法,這是因為可以利用硬體建置TDES。 在運算的時候,所需的時間約略是DES的三倍,這是因為含有三次DES運算。 大多數的應用程式應該選用TDES取代DES。 目前已經發現兩種專門針對TDES的攻擊法(類似DES)。不過,不容易在現實世界發現攻擊所需的資料。
圖12-6 Triple DES方塊圖
12-2-6 密碼加密 標準UNIX密碼加密機制是屬於DES的變形。 雖然實際上是採用單向函數(one-way function)做為密碼加密方式(也就是說,無法從密文解出原文),不過還是需要探討應用程式如何這種類型的DES。 每個使用者選擇一組密碼,該演算法使用密碼的前八個字元。 密碼加密或裁掉超過8個字元的密碼。
如果密碼長度少於8個位元,就會補足8個字元。 取用每個字元的前七個位元,因此密碼會轉換成56位數。 系統會依據系統時間選擇12位元數字,這個數字被稱為salt。 同時使用salt和密碼做為密碼加密函數的輸入資料(詳見12-7)。
salt依據12位元的1補數產生4096組不同的方式,修改DES演算法之中的一個排列表(E Permutation)。 起始原文是由56個0位元組成,而金鑰是來自密碼的56個位元。 演算法重複執行25次,每一次都是以前一次的輸出做為輸入資料。 最後的輸出結果會轉換成11個字元,而salt會轉換成2個字元並放在輸出資料的最前面。
圖12-7 Unix密碼演算法函式
暴力破解Unix系統的密碼,會比DES來得容易許多。 基於前述的原因,大多數的Unix系統都提供使用shadow密碼檔案的選擇。如果很容易暴力破解加密之後的密碼,因此將密碼隱藏起來可以增加系統的安全性。不過和其他的系統一樣,如果root選擇不夠牢靠的密碼或是密碼遭到破解,那麼使用者選用再好的密碼也於事無補。
12-2-7 AES:Rijndael 為了取代DES,NIST在1997年公布AES(Advanced Encryption Standard,高等加密標準)徵選活動。 在2000年底,NIST宣佈來自比利時的兩位密碼學家 - JoanDaemon-VincentRijmen,他們提出的Rijmen演算法贏得這項競賽。 牢靠度、適用於高速網路、可在硬體設備建置等因素,都是這個演算法獲選的原因。 Rijmen也是屬於區塊式密碼金鑰,區塊的大小為128、192和256位元。
截至目前為止,仍然沒有暴力破解金鑰長度的計算方法。 依據原文的區塊大小和金鑰的長度而定,演算法之中會包含10到14個循環。 圖l2-8顯示了每個循環的計算方式。 在認可Rijmen演算法之後,許多系統已經開始出現Rijmen演算法。而且也成了取代TDES的最佳選擇。
圖12-8 Rijndael 循環函式演算法
12-2-8 其它私密金鑰演算法 在安全系統上可以選用的私密金鑰演算法如下: IDEA(International Data Encryption Algorithm,國際資料加密演算法):是由瑞士發展出來的。IDEA使用128位元的金鑰,所以也可以用在PGP(Pretty Good Privacy)。 RC5:RC5是由MIT的Ron Rivest發展出來的。它允許變動金鑰的長度。 Skipjack:Skipjack是由美國政府使用Clipper Chip發展出來的。它使用80位元金鑰長度,在可見的未來將會變得不夠牢靠。
Blowfish:Blowfish允許使用的金鑰長度最長可達448位元,且在32位元處理器上執行會有最佳化的執行效率。 Twofish:Twofish使用128位元區塊,且可使用128位元、192位元或256位元金鑰。 CAST-128:CAST-128使用128位元金鑰,且應用在較為新版的PGP之中。 GOST:GOST用來回應DES的蘇聯標準,使用256位元金鑰。
12-3 認識公眾金鑰加密 和私密金鑰加密相較之下,公眾金鑰加密算是較新的發明。 兩者之間最大的不同點在於 - 用於運算的金鑰數量不同。 在私密金鑰加密之中,加密/解密使用相同的金鑰,但是公眾金鑰加密卻使用兩組不同的金鑰。其中一組金鑰是用於資訊加密,而另一組金鑰則是用於解密。
本節的內容如下: 12-3-1 什麼是公眾金鑰加密? 12-3-2 Diffie-Hellman金鑰交換 12-3-3 RSA 12-3-4 其他公眾金鑰演算法
12-3-1 什麼是公眾金鑰加密? 圖12-9即為基本的公眾金鑰或非對稱加密。 發送端與接收端各有一組金鑰。兩組金鑰之間相互關聯(因而稱為金鑰組),但金鑰的內容不同。 在實務上,其中一組金鑰稱為公眾金鑰(public key),另一把則稱為私密金鑰(private key)。 金鑰組的擁有人保管私密金鑰,並對外公開公眾金鑰。 公眾金鑰加密的另一個特色 - 即使擁有其中一組金鑰也無法推算出另一組金鑰。
如果屬於機密性的需求時,資訊也可以使用公眾鎖鑰加密。 只有私密金鑰的擁有人才能對資訊解密。 只有公眾金鑰的擁有人才能對資訊解密(換句話說,私密金鑰的擁有人),且只有金鑰對的擁有人才能持有傳送過的資訊。 不論是利用哪一種金鑰都可以保護資訊的完整性。
圖12-9 公眾金鑰加密
12-3-2 Diffie-Hellman金鑰交換 Whitfield Diffie和Martin Hellman在1976年發展出公眾金鑰加密系統。 Diffie-Hellman系統,是用來解決私密金鑰系統的金鑰配送問題。 Diffie-Hellman並不能用於資訊的加密/解密。
Diffie-Hellman演算法的運算方式: 1.假設兩個人需要安全的通訊,所以需要認可加密金鑰。 2.P1和P2認可整數a和b,所以產生1<a<b。 3.P1接著選擇隨機數值a並計算 I = ai mod b。P1將I傳送給P2。 4.P2接著依據隨機數值a產生隨機數值j並計算 J = aj mod b。P2將J傳送給P1。
7.結果就會產生 k1 = k2 = aij mod b,且k1和k2可以做為其他傳輸的金鑰。 5.P1計算k1 = Ji mod b。 6.P2計算k2 = Ij mod b。 7.結果就會產生 k1 = k2 = aij mod b,且k1和k2可以做為其他傳輸的金鑰。 在上述計算式之中,『mod』代表取餘數。舉例來說12 mod 10結果為2。其中的結果2,就是12除10之後剩下的餘數。
如果某人監聽線上的流量時,他們或許會得知a、b、I和J,但是i和j依舊安全無虞。 這個系統的安全性,主要是依據即使得知I = ai mod b也很難找到i。 這個問題稱為離散對數問題,因而數字越大也就越難算出結果(也就是說以現今的電腦能力也很難算出結果)。 必須非常小心選擇a和b。
許多使用Diffie-Hellman金鑰交換的安全系統,都是使用額外的流量來交換安全金鑰。 Diffie-Hellman的弱點是圖12-10中間人攻擊(man-in-the-middle)。 如果攻擊者系統放在P1和P2之間的流量路徑並攔截所有通訊時,且分別假冒P2和P1溝通以及假冒P1和P2溝通。因此,在P1、攻擊者和P2之間,就會發生金鑰交換。
圖12-10 Diffie-Hellman 中間人攻擊
12-3-3 RSA Ron Rivest、Adi Shamir和Len Adleman在1978年發表了Rivest-Shamir-Adleman(RSA)公眾金鑰演算法。 和Diffle-Hellman演算法不同,RSA主要是依據難以找出最大公因數。 若數字很大時(大於等於1024位元),就會難以找出最大公因數。
上述算式的困難點在於 - 即使取得e和n也難以計算出d。 公式假設金鑰對的擁有人,保留私密金鑰而公開公眾金鑰。 針對機密性的基本加密演算法非常簡單: 密文 = (原文)e mod n 原文 = (密文) d mod n 私密金鑰 = {d, n} 公眾金鑰 = {e, n} 上述算式的困難點在於 - 即使取得e和n也難以計算出d。 公式假設金鑰對的擁有人,保留私密金鑰而公開公眾金鑰。
值得一提的是RSA也可以逆向操作,即可確認資訊的來源。 演算法計算式如下: 密文 = (原文)d mod n 原文 = (密文) e mod n 私密金鑰 = {d, n} 公眾金鑰 = {e, n}
只要私密金鑰非常安全,金鑰的擁有人就可以使用私密金鑰對資訊加密。 每個人都可以用公眾金鑰將資訊解密,如果驗證無誤,就可以確定這個資訊是由金鑰對的主人所發出的。
產生RSA金鑰 在產生RSA金鑰的時候,請依據下列步驟小心、謹慎地產生RSA金鑰: 數值n必須大於等於200位數(十進位)。 1.選用相當安全的質數p和q。 2.計算 n= pq。 3.計算 Φ(n) = (p-1)(q-1)。 4.選擇(n)的相對質數e。 5.判斷d是否符合(d)(e)=1 mod (n)以及 d<(n)。 數值n必須大於等於200位數(十進位)。 記得在範例中,選用的數值純粹是做為範例展示用途。在實際應用時,應該選用較大的數值。
可用的RSA範例 產生RSA金鑰的範例如下: 1.首先選用質數p=11和q=13。 2.計算n=(p)(q)結果等於n=(11)(13)=143。 3.計算Φ(n)=(p-1)(q-1)=(11-1)(13-1)=120。 4.選擇(n)的相對質數e,所以e的值是7。 5.依據(d)(e) = 1 mod (n),因此,(d)(7)=1 mod 120,所以(d)必須小於120。接著找到 d=103。((103)(7) = 721,所以721 mod 120 = 1,商數等於6 )。
解密的計算公式如下: 6.私密金鑰 = {103, 143}。 7.公眾金鑰 = {7, 143}。 密文 = (原文)e mod n 原文 = (密文)d mod n
12-3-4 其他公眾金鑰演算法 還有其它幾種具有Diffie-Hellman和RSA相同效果的演算法。 三種較為流行的演算法如下: Elgamal 數位簽章演算法 橢圓曲線加密
Elgamal Taher Elgamal屬於Diffie-Hellman的變形。這個演算法強化了Diffie-Hellman系統,最後也具有加密的功能,且演算法之一還具有確認來源的能力。 Elgmal並沒有專利權(RSA有專利權),因此是一個較為省錢的選擇(不需要支付專利費用)。 這個演算法是以Diffie-Hellman為基礎,因此也是屬於離散對數的計算問題。
數位簽章演算法 數位簽章演算法(Digital Signature Algorithm,DSA)是美國政府發展的數位簽章標準(詳見下一節數位簽章)。 這個演算法是Elgamal的變形,不過只能做為身份確認用途,且不能用於機密性資訊的保護用途。
橢圓曲線加密 在1985年提出的橢圓曲線加密(Elliptic curves Encryption)構想。 一般認為,Elliptic Curve Cryptosystems(ECC)有別於因式分解和離散對數的數學計算。 計算問題如下:假設橢圓曲線的兩個點A和B,產生的計算式為A = kB,因此很難找到整數k。 使用ECC的效益會比RSA或Diffie-Hellman來得好。
在相同的安全等級情況下,ECC的金鑰長度更短(這就是ECC問題的困難點),計算速度也比較快。
12-4 認識數位簽章 數位簽章(Digital Signature)並不是手寫簽名的影像檔,數位簽章是一種提供身份確認的加密形式。 數位簽章逐漸流行,且是邁向無紙化環境的重要關鍵。 前美國總統柯林頓曾經簽署過,讓數位簽章具有法律效力的法案。 本節的內容如下: 12-4-1 什麼是數位簽章? 12-4-2 安全的雜湊函數
12-4-1 什麼是數位簽章? 數位簽章是一種利用電子資訊加密的身份確認法則。 如果可以使用某人的私密金鑰將資訊解密,也就可以確認資訊來源的私密金鑰擁有人。 如果資訊可以正確地解密,那也代表資訊的內容沒有修改過,因此也可提供完整性的保護。 有了數位簽章之後,我們會希望在接收資訊和解密之後,並利用數位簽章進一步保護資訊不會遭到竄改。
圖12-11顯示如何達成的可能方式,首要的步驟是摘取或雜湊(hash)訊息的功能。 雜湊之後會產生訊息的檢查碼,再使用檢查碼做為私密金鑰加密的資料來源。 最後,將訊息和加密之後的檢查碼一起傳送給資訊的接收端。 在接收端取得資訊之後,可將檢查碼輸入到相同的雜湊函數之中。
接著利用公眾鎖鑰將加密之後的檢查碼解密,在比對兩者的檢查碼是否相同。 如果檢查的結果相同,表示資訊沒有遭到修改。 數位簽章實用性的關鍵因素如下: 使用者私密金鑰的保護方式 安全的雜湊函數 如果使用者沒有妥善保護自己的私密金鑰,也就無法確認私密金鑰的擁有人。最後,也就無法確認是否是使用者本人簽署的電子文件。
圖12-11 數位簽章運算
12-4-2 安全的雜湊函數 安全的雜湊函數是數位簽章不可或缺的部分。安全的雜湊函數必須滿足下列條件: 單向函數。也就是說,可以計算出訊息的檢查碼,但是無法利用檢查碼建立訊息的內容。 縱使提供相同的檢查碼,也很難建立相同的訊息。 檢查碼的長度比資訊短,才會便於簽章核、傳送和保存。 安全的雜湊函式也可以建立大於等於12位元檢查碼。
目前最常用的是可以產生128位元檢查碼的MD5,以及產生160位元的SHA。
12-5 認識金鑰管理 金鑰管理是所有加密系統的安全問題癥結點。 只要能夠取得金鑰,也就可以利用金鑰將加密過的資訊解密,也就是說金鑰本身是最有價值的資訊。 在某些情況下,甚至也有可能成功取得金鑰。 金鑰管理不止是保護金鑰的使用方式而已,還包含了建立牢靠的金鑰、遠端使用者如何取得金鑰、如何認證金鑰的正確性、遭到破解或過期時如何註銷。
金鑰和適當的金鑰管理,會嚴重地影響組織使用的加密系統。 本節的內容如下: 12-5-1 建立金鑰 12-5-2 分送金鑰 12-5-3 金鑰憑證 12-5-4 保護金鑰 12-5-5 註銷金鑰
12-5-1 建立金鑰 某些金鑰的演算法,具有非常嚴重的安全性問題。 例如全部使用0補數的金鑰,就算使用DES也不能提供牢靠的安全性。 在使用RSA的時候,也必須非常謹慎地選用質數p和q。 大部分加密系統都具有金鑰的產生方式。
在某些情況下,會允許使用者利用密碼做為金鑰。在這種情況下,最好能引導使用者選用包含數字和特殊字元在內的密碼。 某些加密系統採用隨機產生金鑰。 真正的亂數產生器並不多,大多數都是屬於虛擬亂數(pseudo-random,是指依據樣本產生的亂數,最後也會發生重複)。 如果亂數產生器不是產生真正的亂數,那麼攻擊者就有可能猜出下一個數字。
某些演算法使用固定的金鑰長度(例如DES使用56位元金鑰),某些則使用可變動的金鑰長度。 一般而言,金鑰長度越長代表『越安全』。 必須謹慎選擇金鑰的長度。 某些演算法使用固定的金鑰長度(例如DES使用56位元金鑰),某些則使用可變動的金鑰長度。 一般而言,金鑰長度越長代表『越安全』。 表12-1列出了不同演算法金鑰的相對安全等級。 資訊的金鑰長度和編寫時間有關。也就是說如果金鑰的長度越長,所需的編寫時間也越久。隨著時間的演進,數學運算速度越快的電腦所需的編寫時間也越短。
私密金鑰加密(DES,RC5) 公眾金鑰加密(RSA,Diffie-Hellman) 橢圓曲線加密 40位元 - 56位元 400位元 64位元 512位元 80位元 768位元 90位元 1024位元 160位元 120位元 2048位元 210位元 128位元 2304位元 256位元 表12-1 不同的金鑰長度牢靠度也不一樣
12-5-2 分送金鑰 金鑰產生之後,必須分送給不同的地點和設備使用。 如果沒有保護傳送中的金鑰,金鑰可能被複製或竊取而導致整個加密系統安全堪慮。 金鑰也可以透過其它通道分送。 目前,有一些方法可以用來解決分送金鑰的問題。例如可以利用Diffie-Hellman來建立並分送許多交談金鑰(利用單一交談流量或小型流量的暫時性金鑰)。
任何長時間使用的金鑰也需要多加留意。例如Diffie-Hellman金鑰交換演算法不適合用來配送RSA金鑰組。 公眾金鑰公佈的方法必須防範他人竄改(詳見後續的金鑰憑證)。
如果金鑰組是由憑證中心產生的,那麼私密金鑰必須安全地送到擁有人手中。 如果金鑰對是由擁有人自行產生的,那麼公眾金鑰也必須安全地送達憑證中心。 如果是由憑證中心產生的金鑰組,且利用私密金鑰做為身份確認用途,或許就會發生問題。因此,在建立和分送私密金鑰時,必須特別留意。
12-5-3 金鑰憑證 如果利用某種方式將金鑰傳送到遠端,當接收端收到金鑰之後,必須立即檢查金鑰是否在傳輸過程之中曾經遭到修改。 檢查的動作可以透過人工處理或某種類型的數位簽章來檢查。 由於任何人皆可取得金鑰,因而必須利用憑證來證明金鑰組的擁有人。
只要透過憑證中心即可證明金鑰組的擁有人(一般稱為認證憑證或CA)。 CA提供公眾金鑰數位簽章,CA並證明金鑰組擁有人的公眾金鑰(詳見圖12-12)。 金鑰組的擁有人和金鑰若是沒有適當的憑證,攻擊者即可將自己的金鑰送入系統之中,且將會導致傳輸過或認證過的所有資訊遭到侵害。
圖12-12 由憑證中心認證的公眾金鑰
12-5-4 保護金鑰 公眾鎖鑰組的公眾金鑰,不需要受到機密性的保護,只需利用憑證即可確保公眾金鑰的完整性。 不管在任何情況下,隨時都需要保護公眾金鑰組的私密金鑰。 如果攻擊者取得私密金鑰的複本,即可讀取任何金鑰組擁有人定位的所有機密流量,且同樣可以假冒金鑰組擁有人簽署任何資訊。 包含所有複本在內,都是需要保護的私密金鑰。
除了需要保護含有私密金鑰的檔案之外,也需要保護所有含有私密金鑰檔案的備份磁帶。 大多數的系統皆以密碼保護私密金鑰檔案。雖然可以保護不受隨意窺探的侵害,但卻無法防範攻擊。保護金鑰的密碼必須謹慎選用,才能防範暴力攻擊。 私密金鑰系統的金鑰都需要受到保護。 如果檔案之中含有金鑰,那麼隨時都必須受到嚴密的保護(包含備份磁帶)。
如果記憶體之中含有金鑰,那麼應該防止未經授權的使用者或程序讀取記憶體的內容。 在傾倒核心(core dump)的案例中,只要含有金鑰的核心檔案都應該受到保護。
12-5-5 註銷金鑰 金鑰並非永久有效。交談金鑰可能存在於特定的交談之中。這是因為結束連線交談之後,就會自動刪除交談金鑰。因此,並不需要特別制訂註銷金鑰的程序。 但是,某些具有憑證的金鑰會有時效的限制。 一般而言,公眾金鑰組憑證的有效期限約略是一到二年,而認證過的公眾金鑰會確認有效期限。
如果電腦系統讀取到超過有效期限的金鑰時,就會自動註銷金鑰,所以也就無須特別制訂註銷金鑰的程序。 如果遺失金鑰或金鑰遭到破解,金鑰的擁有人必須通知其他使用者並註銷金鑰。 在私密金鑰加密系統的案例中,若是金鑰遭到侵害(或是系統的使用者得知這種情況),就必須通知所有持有金鑰的人並啟用新的金鑰。
公眾金鑰的案例會有些微的不同之處。如果金鑰遭到破解且在註銷之後,沒有任何明確的方式可以通知所有公眾金鑰的持有人,並告知現有的公眾金鑰已經作廢。 定期和金鑰伺服器溝通,並查看金鑰是否仍然有效,而金鑰的擁有人必須通知所有金鑰伺服器金鑰註銷的資訊。 金鑰伺服器必須持續保留金鑰註銷的資訊,直到金鑰過期為止。
12-6 認識可信任的系統 信任的觀念是所有安全與特定加密的底層概念。 針對能夠加密正常運作的部分,就必須相信金鑰沒有遭到破解,而且相信使用相當牢靠的演算法。 對於來源確認和數位簽章的部分,必須相信使用公眾金鑰的人確實擁有公眾金鑰。
目前可做為信任公眾金鑰環境的兩種主要模型分別是: 或許信任最大的問題就是如何建立和維護。 目前可做為信任公眾金鑰環境的兩種主要模型分別是: 階層(hierarchy) 網狀(web)
階層(hierarchy) 最容易瞭解的就是階層信任模型。簡單的說,信任某人是因為信任上一階層信任的任何人。 圖12-13更清楚地顯示這個模型。
圖12-13 階層信任模型
如果『使用者1』希望證明來自『使用者3』的資訊,這時候就會變得比較困難。 CA1並不認識『使用者3』,因此『使用者2』也是一樣的情形。 『使用者1』並不是CA2的下層,所以也就不信任CA2。 再往上一層就是CA4。『使用者1』會透過CA4檢查來自『使用者3』的資訊,關係如下:
1.『使用者1』找尋由CA2發給『使用者3』的憑證。 2.『使用者1』取得由CA4發給CA2的憑證。 3.一旦『使用者1』信任CA4之後,就可以利用CA4的公眾金鑰來驗證CA2的憑證。 4.在驗證CA2的憑證之後,『使用者1』即可驗證『使用者3』的憑證。 5.在驗證『使用者3』的憑證之後,『使用者1』就可以使用『使用者3』的公眾金鑰來驗證資訊。
階層驗證的架構會越來越複雜。 理論上看來似乎是一種不錯的方式,但在實務上並非如此!。原因之一是因為目前沒有根層(root-level)CA。根層CA是整個階層架構的最上層節點。
設立CA 某些組織覺得建立內部CA(和公眾金鑰基礎建設結合),對組織的商務非常重要。如果是這樣的情形時,必須先處理下列的問題: 由自己的CA或更高層的CA來認證CA公眾金鑰。如果使用外部組織提供的CA時,必須額外付費。 在金鑰的有效期限內,必須自行保護CA私密金鑰。如果曾經遭到侵害時,必須重建整個組織的基礎建設。
為了簽發最底層的憑證,因而必須制訂相關的政策和程序。 為了讓每個底層之間能夠互驗彼此的憑證,因此必須建立一套機制。 設計CA提供的數量確實是一大挑戰。 如果組織規模非常大或底層實體(使用者)非常多,管理使用者憑證的工作絕非易事。 CA和CA認證使用的系統 - 其中最特別的還是CA私密金鑰,必須要求高規格的安全性,否則CA系統很容易受到傷害統。而且發展用來保護CA私密金鑰的程序,通常也都需要二人共同開啟私密金鑰。
在簽發憑證之前必須確實驗證每個個體的身份,憑證過期和新的憑證也都是問題,而且還會發生必須註銷某個憑證的問題。
註銷憑證 註銷憑證可能是CA最大的問題之一。 註銷憑證資訊必須適時地通知所有可能使用憑證的個體。 如果組織內只有一個CA的話,問題還不算大,不過必須強迫CA隨時可提供服務。如果cA的階層非常龐大(詳見圖12-13),問題就會非常複雜。
網狀(web) 網狀架構的信任是另外一種信任模型,是由POP(Pretty Good Privacy)首先利用這個概念。 這個概念的意思是說,每個使用者驗證自己的憑證,並將憑證告知所有已知的相關人員。 認識憑證擁有人的相關人員,可以自行選擇是否信任這份憑證(詳見圖12-14)。
圖12-14 網狀信任模型
這種信任模型無需憑證中心。 規模太小或許是網狀架構的主要問題。 網狀是採用點對點的關聯架構,每個使用者需要具有幾個網狀架構關聯點的信任。 在實務上來說,由於大多數使用者只和少部分的關聯點通訊,而且只有某些時候才會跨越多個使用者,因此這個問題可能並不存在。 網狀模型最大的優勢,就是不需要投資龐大的基礎建設。
每個使用者負責自已和他人的憑證,而組織可以自行決定是否提供憑證和註銷通知的集中儲存處。
專案實作12:設計加密系統 本專案主要是希望顯示系統如何利用加密,來提供身份確認、機密性和完整性的目標。 假設會使用私密金鑰(AES)和公眾金鑰(RSA或Diffie-Hellman)加密系統。您服務的組織需要接受夥伴的交易資料。 非常遺憾,組織並不允許內部系統使用商用VPN,因此組織慣於應用自己建立的加密系統。 您的工作就是要提供加密系統該如何運作的建議。
在目前的狀況下,交易系統會接受來自夥伴的TCP連線、評估資訊,並提供資料庫適當的入口,接著伺服器會透過相同的連線回送確認訊息。 此時,必須保護傳輸中的機密資訊,並避免資訊遭到未經授權的竄改。 在夥伴的單一系統獲得認證並初始交易時,伺服器必須確認原始交易的真實性。
專案實作12:步驟 1.判斷特殊的加密需求:需要維持哪些資訊的機密性、如何保護未經授權的竄改,以及如何確認連線的系統? 2.確認每一種需求所需的加密的類型(公眾金鑰或私密金鑰)。 3.判斷必須採用加密和解密的地方。 4.判斷金鑰管理系統的需求:如何建立、分送、驗證和註銷金鑰? 5.在開始設計之後,調查設計範圍的缺點。這些缺點範圍是否會讓入侵者取得存取權?系統是否因此遭到侵害?
6.從可用性的論點調查系統。那麼,是否可以在現實世界使用這個系統? 7.其他系統以及組織的政策和程序,是否會需要使用加密?
專案摘要 選用加密的類型會是容易的部份。 千萬記得可以確認來源的兩種加密類型,但是利用私密金鑰確認來源的部分會有些限制。 金鑰管理系統可能會非常複雜。同時也要記得設計單一系統的需求。而且也不需要立即擴展系統和系統的規模。 不要害怕找尋其他可用的系統。 切記一點 - 加密並不是萬靈丹,即使在使用加密之後,也可能增加其他需要解決的安全問題。