資訊安全─入門手冊
DESCRIPTION
資訊安全─入門手冊. 第 12 章 加密. 第 12 章 加密. 『 良好的加密是安全的不二法門 』 。 如果可以利用加密來保護資訊,也就沒有人可以看得到內容或修改內容。 如果我們使用加密,也可以確認交談對象的身份。 加密確實是非常重要的安全工具、加密機制可以協助確認資訊的來源,但是加密本身並不是最後的答案。 加密機制可以做為廣泛安全計畫其中的一個環節。. 在安全計畫之中廣泛地使用加密機制,只是因為加密機制可以協助資訊的機密性、完整性和可說明性。 加密只會延緩取得內容所需的時間。 本章主要是希望提供您加密的基本觀念以及如何使用加密。. 本章的內容如下: - PowerPoint PPT PresentationTRANSCRIPT
資訊安全─入門手冊
第 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 使用一連亂數排列的數字,對一段訊息進行編碼(詳見圖 12-3 )。
如果 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 密碼演算法函式
這個系統主要的弱點在於密碼的選用。因為大部分使用者都會使用小寫字元做為密碼的內容,因此會產生 268 種可能的組合,這個數字遠小於 DES產生 255 金鑰的可能組合。
暴力破解 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 。
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 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 金鑰: 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問題的困難點),計算速度也比較快。
在普遍接受 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 。
目前,已經證實 MD5 可能遭到計算攻擊的缺點。這種攻擊會讓兩組不同的資訊產生相同的檢查碼。
由美國政府發展的 SHA ,目前仍是非常安全。大多數的安全軟體都允許選用 MD5 或 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
位元金鑰),某些則使用可變動的金鑰長度。 一般而言,金鑰長度越長代表『越安全』。 表 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 金鑰組。
在任何 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隨時可提供服務。如果 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. 其他系統以及組織的政策和程序,是否會需要使用加密?
專案摘要
選用加密的類型會是容易的部份。千萬記得可以確認來源的兩種加密類型,但是
利用私密金鑰確認來源的部分會有些限制。 金鑰管理系統可能會非常複雜。同時也要記得
設計單一系統的需求。而且也不需要立即擴展系統和系統的規模。
不要害怕找尋其他可用的系統。切記一點 - 加密並不是萬靈丹,即使在使用
加密之後,也可能增加其他需要解決的安全問題。