1.08k likes | 1.18k Views
資訊安全─入門手冊. 第 12 章 加密. 第 12 章 加密. 『 良好的加密是安全的不二法門 』 。 如果可以利用加密來保護資訊,也就沒有人可以看得到內容或修改內容。 如果我們使用加密,也可以確認交談對象的身份。 加密確實是非常重要的安全工具、加密機制可以協助確認資訊的來源,但是加密本身並不是最後的答案。 加密機制可以做為廣泛安全計畫其中的一個環節。. 在安全計畫之中廣泛地使用加密機制,只是因為加密機制可以協助資訊的機密性、完整性和可說明性。 加密只會延緩取得內容所需的時間。 本章主要是希望提供您加密的基本觀念以及如何使用加密。. 本章的內容如下:
E N D
資訊安全─入門手冊 第 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 針對加密的攻擊 • 加密系統可能遭到下列三種攻擊: • 透過演算法的缺點 • 暴力破解金鑰 • 透過系統週遭的弱點 • 當演算法受到攻擊時,分解員會找尋將原文轉成密文的演算法缺點,且在沒有金鑰的情況下快速還原資訊的原文。 • 若是具有這類弱點的演算法,也就不能稱為牢靠的演算法,當然也就不能使用。
暴力(Brute-force)攻擊是企圖利用所有可能的金鑰,企圖將密文還原成原文。暴力(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-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-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使用56位元金鑰,且使用7個8位元的位元組(每個位元組的第8個位元是做為同位元檢查)做為金鑰的內容。 • DES屬於區塊式密碼(block chiper),一次處理64位元明文(詳見圖12-4演算法的區塊方塊圖)。 • DES密碼共有16個循環,每個循環都使用不同的次金鑰(subkey),且每一個金鑰都會透過自己的演算法取得16個次金鑰(詳見圖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相較之下,TDES屬於相對快速的演算法,這是因為可以利用硬體建置TDES。 • 在運算的時候,所需的時間約略是DES的三倍,這是因為含有三次DES運算。 • 大多數的應用程式應該選用TDES取代DES。 目前已經發現兩種專門針對TDES的攻擊法(類似DES)。不過,不容易在現實世界發現攻擊所需的資料。
12-2-6 密碼加密 • 標準UNIX密碼加密機制是屬於DES的變形。 • 雖然實際上是採用單向函數(one-way function)做為密碼加密方式(也就是說,無法從密文解出原文),不過還是需要探討應用程式如何這種類型的DES。 • 每個使用者選擇一組密碼,該演算法使用密碼的前八個字元。 • 密碼加密或裁掉超過8個字元的密碼。
如果密碼長度少於8個位元,就會補足8個字元。如果密碼長度少於8個位元,就會補足8個字元。 • 取用每個字元的前七個位元,因此密碼會轉換成56位數。 • 系統會依據系統時間選擇12位元數字,這個數字被稱為salt。 • 同時使用salt和密碼做為密碼加密函數的輸入資料(詳見12-7)。
salt依據12位元的1補數產生4096組不同的方式,修改DES演算法之中的一個排列表(E Permutation)。 • 起始原文是由56個0位元組成,而金鑰是來自密碼的56個位元。 • 演算法重複執行25次,每一次都是以前一次的輸出做為輸入資料。 • 最後的輸出結果會轉換成11個字元,而salt會轉換成2個字元並放在輸出資料的最前面。
這個系統主要的弱點在於密碼的選用。因為大部分使用者都會使用小寫字元做為密碼的內容,因此會產生268種可能的組合,這個數字遠小於DES產生255金鑰的可能組合。這個系統主要的弱點在於密碼的選用。因為大部分使用者都會使用小寫字元做為密碼的內容,因此會產生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-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位元處理器上執行會有最佳化的執行效率。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-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依舊安全無虞。如果某人監聽線上的流量時,他們或許會得知a、b、I和J,但是i和j依舊安全無虞。 • 這個系統的安全性,主要是依據即使得知I = ai mod b也很難找到i。 • 這個問題稱為離散對數問題,因而數字越大也就越難算出結果(也就是說以現今的電腦能力也很難算出結果)。 • 必須非常小心選擇a和b。
許多使用Diffie-Hellman金鑰交換的安全系統,都是使用額外的流量來交換安全金鑰。許多使用Diffie-Hellman金鑰交換的安全系統,都是使用額外的流量來交換安全金鑰。 • Diffie-Hellman的弱點是圖12-10中間人攻擊(man-in-the-middle)。 • 如果攻擊者系統放在P1和P2之間的流量路徑並攔截所有通訊時,且分別假冒P2和P1溝通以及假冒P1和P2溝通。因此,在P1、攻擊者和P2之間,就會發生金鑰交換。