820 likes | 1.04k Views
密碼系統. 王振生彙編. 簡介. 加密方法 (Ciphering) 是利用特定的轉換 (Transformation) 方法,將 明文 ( Plaintext ) 轉換成為 密文 ( Ciphertext ) ,隱蔽明文真正的內容,用以預防在傳遞資訊或通訊時,資訊內容的隱密性遭受洩漏或破壞。 只有獲得授權的人,才能看到資訊的內容, 『 獲得授權的人 』 是指擁有 解密金鑰( key ) 的人。 沒有獲得授權的人,即使 得知加密系統所使用的加密演算法,但沒有金鑰,也就無從得知資訊的內容 。. 2. 簡介.
E N D
密碼系統 王振生彙編
簡介 加密方法 (Ciphering) 是利用特定的轉換 (Transformation) 方法,將明文 ( Plaintext )轉換成為密文 ( Ciphertext ),隱蔽明文真正的內容,用以預防在傳遞資訊或通訊時,資訊內容的隱密性遭受洩漏或破壞。 只有獲得授權的人,才能看到資訊的內容,『獲得授權的人』是指擁有解密金鑰(key)的人。 沒有獲得授權的人,即使得知加密系統所使用的加密演算法,但沒有金鑰,也就無從得知資訊的內容。 2
簡介 最早的加密應用,約在西元前400多年古希臘時期,當時就知道將皮革纏繞在棍棒上,書寫明文在纏繞布條上,並將棍棒取出,皮革上的訊息已經重新編碼打亂順序,而解開的皮革上之符號就變成密文。然後,將皮革與棍棒分開傳送給對方。 若要解開密文,則需要相同尺寸之棍棒,否則無法解出原來的明文。如此,棍棒可說是解密的重要『機密』,在術語上我們稱呼此棍棒為『金鑰』 ( Key )。 3
簡介 研究加密相關的知識,我們稱之為密碼學 (Cryptograph),源自於希臘語kryptós,“隱藏的”,和gráphein,“書寫”,此兩字的結合。將明文轉換為密文的過程稱為『加密』 (Encryption);而將密文轉換為明文的過程稱為『解密』 (Decryption),此即是加密、解密的基本觀念。加密與解密可利用一個簡單模型加以解釋,通過加密程式,明文和金鑰進行加密運算變成密文,此過程稱為加密過程 (Enciphering)。相反地,通過解密程式,密文和金鑰進行解密運算變成明文,此過程稱為解密過程 (Deciphering)。 4
簡介 • 西元前5世紀,古希臘出現最原始的加密器,用一條皮革纏繞在一根木棍上,這是最早的換位密碼術。西元前1世紀,著名的凱撒 (Caesar) 加密法被用於高盧戰爭中,這是一種簡單的單字母代換的密碼系統。近代,第二次世界大戰,德國使用著名的加密器『Enigma』在戰役中,然而,後來被盟軍所破譯。 • 1975年,美國國家標準局頒布國家標準─DES (Data Encryption Standard)加密標準,作為計算機系統和網路應用的資料加密標準。DES加密標準,在全世界使用了30年之後,由於安全性的考量,漸漸被美國新一代加密標準AES (Advanced Encryption Standard)所取代。 5
密碼系統的功能 • 透過密碼系統可以提供下列三種安全服務: • 機密性(confidentiality):不論是在傳輸或儲存設備之中,都可以利用加密隱藏資訊。 • 完整性(integrity):不論是在傳輸或儲存設備之中,都可以利用確認資訊的完整性(沒有被篡改)。 • 可說明性(accountability)/不可否認性(Non-repudiation):加密可以用來確認資訊的來源,且可讓資訊的來源無法否認資訊的出處。
密碼學的專有名詞 • 加密運作模式專有名詞如下: • 原文(plaintext):資訊的原始格式。 • 密文(ciphertext):透過加密演算法輸出的資訊。 • 演算法(algorithm):將原文處理成密文的運算法則。 • 金鑰(key):一個與原文無關的數值,其可將原文轉成密 文或將密文轉成原文的過程中,一種用來協 助演算法計算的資料。 • 加密(encryption):將原文經加密運算轉成密文的程序。 • 解密(decryption):為加密的逆運算,將密文轉成原文的 程序。
密碼學的專有名詞 • 密碼學(cryptography):研究加密的原理與方法。 • 密碼破解(cryptanalysis):在不知道金鑰的情況下,分 析密碼學演算法並嘗試找出 缺陷。 • 密碼技術 (cryptology):整合密碼學與密碼破解這兩個 領域。
密碼學的分類 密碼學(cryptograph) • 依下列三種不同的觀點來分類: • 加密的方法 • 取代(substitution):明文中的每一元素都被對應到另一個元素 • 置換(transportation):明文中的每一元素都被重新排列 • 前兩者混用(mixed):絕大部分的系統都同時引用好幾回的取代與置換,以強化加密的安全性 • 金鑰個數 • 單一金鑰或私密金鑰:傳送與接收者都持有一把相同的金鑰 • 雙金鑰或公開金鑰:傳送與接收雙方使用不同的金鑰 • 明文的處理方式 • 區段加密(block cipher):一次處理一大段元素,根據輸入的區段產生輸出的區段 • 資料流加密(stream cipher):讀入連續的元素,但一次只輸出一個元素,直到所有讀入的元素都處理完畢為止
加密系統分類 現代由於計算機發明,已發展出許多加密技術方法,而加解密之方法稱為演算法,依加密與解密演算法使用金鑰來分類。 對稱(私密)金鑰加密系統:加密與解密所使用之金鑰相同,稱為對稱金鑰加密系統或單一金鑰 ( Single-key ) 加密系統,此種加密演算法如 DES ( Data Encryption Standard) 或 AES ( Advanced Encryption Standard ) 等。 非對稱(公開)金鑰加密系統:加密與解密使用不同的金鑰,系統使用前,需要產生兩組特殊字串作為金鑰,分別為公開金鑰 ( Public Key) 和 私密金鑰 ( Private Key) 兩組金鑰。 10
加密系統分類 圖 5.4 資訊加密傳遞示意圖 11
對稱式加密 對稱式加密演算法的設計,利用混淆 (Confusion) 與擴散 (Diffusion) 的概念增加演算法複雜度,使演算法更安全、不易破解,混淆與擴散的基本概念: 混淆 (Confusion):增加明文與金鑰之間的計算複雜度,使金鑰之內容均勻混入欲加密的訊息中,平均分布在密文訊息中。換言之,用以讓密文與加密鑰匙間的關係便得很複雜而難以用統計方法破解 擴散 (Diffusion):增加明文與金鑰之間的計算複雜度,使明文與密文之相關性低,由密文無法猜出明文內容。換言之,讓明文或金鑰中的一個位元能影響密文中越多位元越好,用以將明文的統計結構弄亂。 12
對稱式加密 基於以上兩種概念,在實現對稱式加密演算法,增加明文與金鑰計算之複雜度,主要有兩種加密基本元件: 替換 (Substitution):將明文中的字元替換為密文中的另一個字元,解密時,將密文替換回原來之明文字元。如在早期通訊時,使用通訊加密表,將明文字母,尋找相對替換密字元,再將密文字元傳出,即使資訊被攔截,也無法簡易猜出原來之明文。 重排 (Transposition):將明文字串,依一定之規則重新排列,所得到之密文字串與明文字串一樣長,但其字元之次序已經被打亂。 13
對稱式加密 早期資料傳送時,所採用的加密方式是不公開的,唯有送收雙方知道加解密演算法及解密金鑰,但是這種方式無法廣泛被應用。 現代加密系統的特性之一為:加解密演算法完全是公開的,唯一不公開的是解密金鑰。現代加解密演算法,也是利用替換與重排兩種加密基本元件的交互運用,並重複許多回合,以增加破解密文的困難度。 14
凱薩(Caesar)加密 凱薩大帝在高盧戰役中,使用了替換加密技術到軍事應用上,稱為凱薩加密法 (Caesar Cipher)。凱薩加密演算法非常單純,只是將每一個明文字母,依照字母順序向右位移3個位置。 15
圖 2.3 英文字元的出現頻率統計 字元的使用頻率 資料來源:摘自W. Stalling: Cryptography and Network Security
柵欄(Rail Fence)演算法 柵欄加密 (Rail Fence) 演算法改變字元排列的次序,是一種利用重排加密的例子。 首先,將明文字串依橫列的順序,由左向右書寫。然後,依照直行順序由上而下依序取出字串,則輸出的密文字串為[ RELEA OCIENRLN Y CAPFRNTAYDINP OCTDN ]。柵欄加密演算法輸出字串與原來明文字串,具有一樣得長度,唯有字母順序已經改變了。 17
DES 演算法 • DES 演算法是源自 1970 年代 IBM 公司發展之對稱加密演算法 LUCIFER 經過修改,於1977 年被採用為聯邦資訊處理標準 FIPS PUB 46-2,為世界廣泛採用之加密演算法之一。 • DES 加密資料區塊 ( Data Block ) 為 64 bits,即每一次加密是 64 bits 明文資料,產出 64 bits 的密文資料。金鑰長度是 64 bits,其中每位元的第 8 bit 是同位檢查用來偵錯,有效位元是 56 bits,經過16 回合的運算,完成加密或解密,每一回合運算將資料混淆與擴散。
DES 演算法 • 如圖,3DES 是明文資料使用DES 加密、解密、與加密,經過 DES 3次運算,分別使用金鑰 1、金鑰 2、與金鑰 3。
DES 演算法 • 如圖,解密程序為反向程序,密文經過解密、加密、與解密,而使用金鑰分別為金鑰 3、金鑰 2 與金鑰 1。
Openssl常用的指令選項 • Openssl常用指令選項: • in:密文或明文的輸入路徑。 • out:密文或明文的輸出路徑。 • inkey:密鑰的輸入路徑。 • pubin、pubout:輸入(出)的密鑰路徑。 • d:解密。 • e:加密。 • des3:3DES對稱加密演算法。 • genrsa:rsa非對稱加密演算法,產生金鑰時使用。 • rsautl:rsa非對稱加密演算法,加解密時使用。 • dgst:執行摘要運算,通常還需指定使用何種雜湊函數。 • md5、sha:MD5或SHA雜湊函數。
區塊密碼演算法模式 • 電子碼冊模式(ECB) • 密碼區塊鏈結模式(CBC) • 密碼回饋(CFB) • 輸出回饋(OFB)
區塊密碼演算法模式-ECB • ECB Electronic Code Book • 通常以64位元為區塊大小 • 全部區塊使用單一金鑰,無法避免重複區塊的問題
區塊密碼演算法模式-CBC • CBC Cipher Block Chaining • IV: Initialization Vector可以不需要保密,但是保密最理想 • 使用回饋機制避免重複區塊問題
AES 加密演算法 近年來,因為電腦技術快速進步,DES ( Data Encryption Standard ) 加密演算法標準密碼已經無法符合安全性需求;縱使發展過度時期的3-DES (Triple DES), 但仍然無法滿足複雜與大量資料的加密要求。 美國國家標準與技術研究院( NIST )於2001年發佈於AES ( Advanced Encryption Standard ) 加密演算法,文件編號為FIPS PUB 197 標準,並在2002年正式實施此標準。 AES可以支援128 bits資料區塊 ( Data Block ), 並支援128、192 與 256 bits金鑰長度 ( Key Size ),提高安全性,AES 的加解密包含十個以上的回合數 ( Round Number),每個回合包含四個主要基本單元。 29
AES 加密演算法 Add Round Key:區塊中的每一個位元都與子金鑰 (Subkey) 做XOR運算;而每個子金鑰由金鑰產生,增加系統混淆 (Confusion)程度。 SubBytes : 使用替換區塊,將字元組用查表 (Table Look-up)的方式把每個位元組替換成對應的位元組,也就是使用替代加密原理。 Shift Rows : 將區塊中的每個橫列進行循環式移位 (Cyclic Shift),也就是利用重排加密原理。 Mix Columns :為了充分混合區塊中各個直行的操作,以增加資料擴散程度。 30
簡易AES 加密演算法範例 簡易 AES ( Simple AES,S-AES ) 是為使初學者容易了解 AES 運作原理與設計,其架構與AES 相同,但運算明文區塊與金鑰比較短,金鑰只有 16 bits,( AES 金鑰在 128 bits 以上),只有運算兩個回合,其架構如圖 31
AES 加密演算法範例 32
私密(對稱式)金鑰密碼系統 由於加密/解密使用相同的金鑰,因此私密金鑰加密也稱為對稱式金鑰加密。 在經過對稱式加密之後,可以確保資訊的機密性。只有金鑰的擁有人(key owner),才可以解密訊息。 在傳輸的過程中,訊息發生任何變化,都會造成解密失敗,因此可以得知訊息是否遭到修改。 私密金鑰加密的缺點為無法確認建立金鑰、加密和傳送有效訊息的人。(相關的人可能有此私密金鑰) 建立私密金鑰加密的優點為速度相當快,而且很容易利用軟體或硬體複建置私密金鑰。
私密金鑰加密法的缺點 • 傳統 私密/單一 金鑰加密法只用一把金鑰,傳送者與接收者共用這把金鑰,也稱為對稱式加密。 • 如果這把金鑰被破解,那麼通訊安全就岌岌可危。 • 對稱式加密法的缺點: • 無法確認資訊傳送者 • 接收者可以偽造訊息並宣稱是由傳送者所送出的
為什麼需要公開金鑰加密法? • 因為下列兩項關鍵議題才發展出來的: • 金鑰分送–如何在不需要 KDC (Key distribution center) 的情況下,建立安全的通訊 • 數位簽章–如何驗證訊息是否為傳送者所送出的 • 公開金鑰加密法的概念是 Whitfield Diffie 與 Martin Hellman 於 1976 年在 Stanford 大學所提出 • 其實在這之前,某些社群內已發現了這個方法
RSA加密演算法 公開金鑰加密演算法又稱為非對稱加密演算法,其加密演算法常用的有 Diffie-Hellman 金鑰交換演算法 (Key Agreement)、DSA 數位簽章演算法(Digital Signature)、RSA 演算法、ECC演算法等等…。Diffie-Hellman 金鑰交換演算法是最早於1976 年提出的公開鑰匙架構,也引出了公開鑰匙加密的概念。 RSA 加密演算法,近年來被廣泛運用於電子商務,在1977年由Rivest、 Shamir 與Adleman 三人一起提出,取其姓氏之第一個字,命名『RSA』。 RSA 是公開金鑰加密演算法,其安全度是建立在將一個大整數分解為兩個質因數乘積的難題上 (Factoring Problem)。質因數分解的問題,當數字小的時候非常容易,然而,要將一個大數分解成兩個質因數的乘積,用最快速的計算機計算,也需要很長的時間。所以, RSA 公開金鑰加密法在目前雖然稱不上絕對安全 (Unconditionally Secure),但算是夠安全了 (Computationally Secure)。 39
密碼學的安全定義 密碼學的安全定義 • 理論安全(Theoretical Security) • 破解花費的時間等於直接去猜測明文的時間。 • 實際安全(Physically Security) • 在計算能力有限的情況下,於合理的時間內,無法破解此密文。
RSA加密演算法 RSA加密演算法主要分為3個操作程序:金鑰對產生 (Key Pair Generation)、加密訊息 (Encryption)、與解密訊息 (Decryption)。 金鑰對產生 假設 Alice 與 Bob 要進行秘密通訊,由Ailce 這一方來看,她希望Bob傳給她的資料都經過加密,以防止資料內容外洩。 Alice 可使用 RSA 加密演算法,首先,執行金鑰對產生程序: 1. 随意選取兩個大質數p和q,p不等於q,計算N=p*q。 2. 選擇一個整数e為公開金鑰與(p-1)*(q-1)互質, 且e小於(p-1)*(q-1)。 3. 計算私密金鑰 d, e* d = 1 (mod (p-1)(q-1)). (註: mod計算是取其餘數) Alice 將 N與 e傳給 Bob,Alice 要妥善地保存私密金鑰 d. 41
RSA加密演算法 加密訊息 Bob 要傳資料 m給 Alice時,Bob 可以利用Alice的公開金鑰 e來加密訊息,將資料 m加密:me= c ( mod N )c為加密後之密文,Bob 可以將密文 c送給Alice。 解密訊息 Alice 接收訊息 c ,使用自己的私密金鑰 d來解密,解出明文資料:cd = m ( mod N )m為 Bob 要傳送給 Alice 的明文資料。 42
簡易RSA 範例 我們使用小數目之RSA 加密演算法做為範例,使讀者了解 RSA 加密與解密之過程。 依上面之範例,如圖 5-7。Alice 選取兩質數 p = 5 和 q = 7,則得到 N = 7*5 = 35,選取e作為公開金鑰,並計算私密金鑰 d 金鑰對產生e*d mod (p-1)(q-1)= 5 * 29 = 145 (mod (5-1)(7-1))= 145 mod 24= 1所以,私密金鑰 d = 29;Alice 將 35 和 5 傳給 Bob。 43
簡易RSA 範例 加密訊息 Bob 加密訊息 m = 33me mod N= 335 mod 35= 39135393 mod 35= 3加密訊息 c = 3,傳給 Alice。 解密訊息 Alice 接收訊息解密 c = 3cd mod N= 329 mod 35= 68630377364883 mod 35= 33Alice 解出訊息為 33,為 Bob 傳給 Alice 之資料 圖 5-13 RSA 簡易範例 44
公開金鑰加密法的應用 • 公開金鑰加密法的應用可分為三類: • 加密/解密(提供機密性)(下圖(a)) • 數位簽章(提供不可否認性) (下圖(b)) • 金鑰交換(針對通訊金鑰) • 有些演算法適用於三種的應用,某些方法則只適用三種中的一種或兩種。