資訊安全─入門手冊 第 12 章 加密.

Slides:



Advertisements
Similar presentations
第一單元 建立java 程式.
Advertisements

3.1 信息加密技术概述 3.2 密码技术 3.3 密钥管理 3.4 网络加密技术 习题与思考题 参考文献 实训指南
Introduction to C Programming
計算機程式語言實習課.
密碼學與網路安全 第9章 公開金鑰密碼學與RSA
Chapter 6 資料加密標準. 學習目標 回顧 DES 的發展歷史。 定義 DES 的基本結構。 描述 DES 建構元件的詳細情形。 描述回合金鑰產生程序。 分析 DES 。
06資訊安全-加解密.
計算機概論 蘇俊銘 (Jun Ming Su) 資料加密技術簡介 計算機概論 蘇俊銘 (Jun Ming Su)
認識倍數(一) 設計者:建功國小 盧建宏.
陳維魁 博士 儒林圖書公司 第九章 資料抽象化 陳維魁 博士 儒林圖書公司.
公開鑰匙加密演算法 密碼學大革命 public key所想要解決的問題 public key密碼系統特性
密碼學簡介與簡單生活應用 Introduction to Cryptography & Simple Applications in Life 2010 Spring ADSP 05/07.
資訊安全-資料加解密 主講:陳建民.
密碼學 黃胤誠.
第三章 公钥基础设施PKI 本章学习重点掌握内容: 密码学基本术语 密码体制分类 私钥密码体制的主要特点 公钥密码体制的主要特点
TCP協定 (傳輸層).
Q101 在701 SDX Linux上的標準安裝與使用程序v2
第一篇 Unix/Linux 操作介面 第 1 章 Unix/Linux 系統概論 第 2 章 開始使用 Unix/Linux
CH19資訊安全 認識資訊安全與其重要性 了解傳統與公開金鑰密碼系統, 以及基本的安全性觀念 了解訊息鑑別與雜湊函數 了解數位簽章法
JDK 安裝教學 (for Win7) Soochow University
2-3 基本數位邏輯處理※.
4B冊 認識公倍數和最小公倍數 公倍數和最小公倍數的關係.
SQL Stored Procedure SQL 預存程序.
SSL加解密原理 姓名:林子鈞 指導老師:梁明章老師
第十四單元 弧長與旋轉體的表面積.
基礎密碼學 非對稱式金鑰加密法 樹德科技大學 資訊工程系 林峻立 助理教授.
OpenID與WordPress使用說明
基礎密碼學 數位簽章及其應用 樹德科技大學 資訊工程系 林峻立 助理教授.
電子商務 Electronic Commerce
國際資訊安全標準ISO 27001之網路架構設計 –以國網中心為例探討風險管理
第二章 SPSS的使用 2.1 啟動SPSS系統 2.2 結束SPSS系統 2.3 資料分析之相關檔案 2.4 如何使用SPSS軟體.
系統設定 IE8相容性檢視
FTP檔案上傳下載 實務與運用.
私立南山高中 信息組 電腦研習 電腦資料的備份 中華民國 99年4月20日 星期二.
Chap3 Linked List 鏈結串列.
Introduction to FinTech
大數據與我 4A 陳駿榜.
網路安全技術 OSI七層 學生:A 郭瀝婷 指導教授:梁明章.
第一單元 建立java 程式.
PLC-GPPW軟體使用教學 授課教師:張祖烈
第 19 章 XML記憶體執行模式.
數學 近似值 有效數值.
HTML – 超連結與圖片 資訊教育.
網頁資料知多少? 事 實 ? 謠言?.
小學四年級數學科 8.最大公因數.
緩衝區溢位攻擊 學生:A 羅以豪 教授:梁明章
挑戰C++程式語言 ──第8章 進一步談字元與字串
密碼學 Chapter 4 基於電腦的非對稱性金鑰密碼學演算法
應用加密技術 A 譚惠心 指導教授:梁明章教授.
MicroSim pspice.
資訊安全和資訊倫理宣導 永康區復興國小教務處.
流程控制:Switch-Case 94學年度第一學期‧資訊教育 東海大學物理系.
MiRanda Java Interface v1.0的使用方法
moica.nat.gov.tw 內政部憑證管理中心
網路安全技術 A 林建宏 指導教授:梁明章老師
基本指令.
SCM系統使用說明 1. 登入系統 2. 修改密碼 3. PO-回復 4. DN-回復 5. Forecast維護(暫不能用)
Chapter 15 檔案存取 LabVIEW中的檔案存取函數也可將程式中的資料儲存成Excel或Word檔。只要將欲存取的檔案路徑位址透過LabVIEW中的路徑元件告訴檔案存取函數後,LabVIEW便可將資料存成Excel或Word檔;當然也可以將Excel或Word檔的資料讀入LabVIEW的程式中。
使用VHDL設計-8x3編碼電路 通訊一甲 B 楊穎穆.
10328: Coin Toss ★★★☆☆ 題組:Problem Set Archive with Online Judge
資料表示方法 資料儲存單位.
多站台網路預約系統之 AJAX即時資料更新機制
單元三:敘述統計 內容: * 統計量的計算 * 直方圖的繪製.
String類別 在C語言中提供兩種支援字串的方式 可以使用傳統以null結尾的字元陣列 使用string類別
10303: How Many Trees? ★★☆☆☆ 題組:Contest Archive with Online Judge
Chapter 4 Multi-Threads (多執行緒).
11621 : Small Factors ★★☆☆☆ 題組:Problem Set Archive with Online Judge
Visible Body Human Anatomy Atlas
快取映射 之直接對映 計算整理.
JUDGE GIRL 使用介紹 & 常見問題 TAs :
Presentation transcript:

資訊安全─入門手冊 第 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.其他系統以及組織的政策和程序,是否會需要使用加密?

專案摘要 選用加密的類型會是容易的部份。 千萬記得可以確認來源的兩種加密類型,但是利用私密金鑰確認來源的部分會有些限制。 金鑰管理系統可能會非常複雜。同時也要記得設計單一系統的需求。而且也不需要立即擴展系統和系統的規模。 不要害怕找尋其他可用的系統。 切記一點 - 加密並不是萬靈丹,即使在使用加密之後,也可能增加其他需要解決的安全問題。