620 likes | 732 Views
密碼學. Chapter 4 基於電腦的非對稱性金鑰密碼學演算法 Computer-based Asymmetric Key Cryptographic Algorithms (Part 1). 前言. 對稱性金鑰密碼學是快速且有效率的 對加密的訊息,發送方和接收方在對稱性金鑰密碼學中使用相同金鑰,要同意這一把金鑰並未讓任何其他人知道是一件非常困難的事 非對稱性金鑰密碼學可以解決這個問題. 非對稱性金鑰密碼學的簡史.
E N D
密碼學 Chapter 4 基於電腦的非對稱性金鑰密碼學演算法 Computer-based Asymmetric Key Cryptographic Algorithms (Part 1)
前言 • 對稱性金鑰密碼學是快速且有效率的 • 對加密的訊息,發送方和接收方在對稱性金鑰密碼學中使用相同金鑰,要同意這一把金鑰並未讓任何其他人知道是一件非常困難的事 • 非對稱性金鑰密碼學可以解決這個問題
非對稱性金鑰密碼學的簡史 • 在1970年間,史丹佛大學的學生 Whitfield Diffie 遇見他的教授 Martin Hellman,他們開始思考金鑰交換的問題,經過一些研究與複雜的數學分析,他們開始興起非對稱性金鑰密碼學的想法 • 許多專家認為這在密碼學史上或許是唯一的真正改個概念,因此,Diffie 和 Hellman 被當成非對稱性金鑰密碼學之父
非對稱性金鑰密碼學的簡史 • 非對稱性金鑰密碼學榮耀的爭論 • 英國通訊電子安全組織 (Communication Electronic Security Group, CSEG) • 秘密的單位 • 1960, Jame Ellis, 提出概念 • 1973, Jame Ellis與Cliffird Cocks, 設計出演算法 • 1974, Malcolm, 發展出非對稱性金鑰密碼學 • 1997,公開的文件發現CSEG早在1970 • 美國國家安全局 (National Security Agency, NSA) • 1970, 也在發展非對稱金鑰密碼系統
非對稱性金鑰密碼學的簡史 • 在1977年,Ron Rivest、Adi Shamir 和Len Adleman 在 MIT 時發展出第一個主要的非對稱性金鑰密碼學系統 • 基於 Diffie 和 Hellman 理論的框架 • 並在 1978 年發表他們的結果。這個機制被稱為 RSA演算法
非對稱性金鑰密碼學的簡史 • RSA 是被廣泛接受的公開金鑰機制 • 解決了金鑰協議和分配的問題
非對稱性金鑰密碼學總覽 • 非對稱性金鑰密碼學(Asymmetric Key Cryptography) • 公開金鑰密碼學(Public Key Cryptography) • 金鑰對 (key pair) • 公開金鑰 (public key) • 散佈給任何人都可以取得 • 用於加密 • 私密金鑰 (private key) • 個人保存 • 用於解密
非對稱性金鑰密碼學的運作 • 當A想要寄出訊息給B,A使用B的公開金鑰加密訊息。(因為A知道B的公開金鑰) • A寄出這個訊息給B。(已經用B的公開金鑰加密的訊息) • B使用B的私密金鑰解密A的訊息。(只有B知道自己的私密金鑰) • 只有B才有解開密文訊息的私密金鑰,故傳輸過程中的訊息對任何人是沒有意義的。
非對稱性金鑰密碼學的運作 • 若B要傳送訊息給A • 使用相同的步驟,但是B使用A的公開金鑰加密訊息,A收到B傳送過來的密文訊息,A使用A的私密金鑰解開密文。
私密與公開金鑰 私密金鑰:用於解密 公開金鑰:用於加密
RSA演算法 • RSA演算法為目前最受歡迎的非對稱性金鑰密碼學演算法 • RSA基於整數因數分解的問題 • RSA使用大質數來產生金鑰
質數 • 所謂質數是指只能被 1 和自己整除的數 • 例如 • 3, 5, 7, 11, 13, 17, 19, 23, 29, 31,…
RSA演算法原理 • 基於數學事實,整數因數分解問題 • 找大質數並相乘是容易,但要從乘積中進行因數分解是非常困難的 • RSA的私密與公開金鑰是基於一個非常大的質數(100位數或是更多位數) • RSA的演算法非常簡單,但是真正的挑戰在金鑰的選擇和產生
RSA金鑰產生步驟 • 選擇兩個大質數 P 和 Q • 計算 N = P * Q • 選擇公開金鑰 E,使它不是一個 (P – 1) 和 (Q – 1) 的因數 • 選擇私密金鑰 D,使下列的恒等式為真(D * E) mod (P – 1) * (Q – 1) = 1
RSA加解密步驟 • 在加密中,從明文 PT 計算密文 CTCT = PTE mod N • 將密文 CT 寄給接收方 • 在解密中,從密文 CT 計算明文 PTPT = CTD nod N
範例(步驟1, 2) • 選擇兩個大質數 P 和 Q P = 47, Q = 71 • 計算 N = P * QN = 47 * 71 = 3337
範例(步驟3) • 選擇公開金鑰 E,使它不是一個 (P – 1) 和 (Q – 1) 的因數(47 – 1) * (71 – 1) = 46 * 70 = 32203220 的因數為 2, 2, 5, 7, 233220 = 2 * 2 * 5 * 7 * 23選擇 E 不包含上述因數Ex: 4 (含2), 15 (含5), 14 (含2, 7), 69 (含23)不可選E = 79
範例(步驟4) • 選擇私密金鑰 D,使下列的恒等式為真(D * E) mod (P – 1) * (Q – 1) = 1在恆等式替換 E = 79, P = 47, Q = 71(D * 79) mod (47 – 1) * (71 – 1) = 1(D * 79) mod (46 * 70) = 1(D * 79) mod 3220 = 1經過計算 D = 1019(1019 * 79) mod 3220 = 80501 mod 3220 = 1
範例(步驟5) • 在加密中,從明文 PT 計算密文 CTCT = PTE mod N假設明文 PT = 688E = 79, N = 3337CT = 68879 mod 3337 = 1570得到密文 1570
範例(步驟6) • 將密文 CT 寄給接收方傳送 1570 給對方
範例(步驟7) • 在解密中,從密文 CT 計算明文 PTPT = CTD nod N取得密文 CT = 1570D = 1019, N = 3337PT = 15701019 mod 3337 = 688解回明文 688
實例 E = 5D = 77 N = 119 字母編碼A = 1, B = 2, C = 3, D = 4, E = 5, F = 6, ……, Z = 26
RSA的關鍵 • RSA的演算法很簡單,因此關鍵在金鑰 • 金鑰的產生由 P, Q (兩個質數) 得來 • N = P * Q 且產生公開金鑰(E)與私密金鑰(D) • N, E 是公開的 • 攻擊者可由 N, E 來推得 D?
RSA的關鍵 • RSA的關鍵在於當 P, Q 選擇數字很大時 • 要將 N 分解成 P, Q 是很困難的 • 因此要找到 D 必須依賴 P, Q, E • N如果是100位的數字,找到P, Q可能需要超過70年
RSA金鑰長度 • 1997年以後設計的系統採 • 一般使用者:1024位元 • 憑證認證機構:2048位元 • 政府機關公開金鑰基礎建設憑證政策 • 100年1月1日起簽發使用2048位元憑證 • 原先1024位元憑證使用至到期為止
RSA已知的攻擊 • 針對RSA的攻擊是基於大數因數分解 • 1999年,RSA-155(512 bits)被成功分解 • 花了五個月時間(約8000 MIPS 年)和224 CPU hours 在一台有3.2G中央內存的Cray C916計算機上完成 • 2002年,RSA-158也被成功因數分解 • 2009年12月12日, RSA-768 (768 bits, 232 digits)也被成功分解 • 已經威脅到1024位元的安全性
RSA-158 395058745832651445264197678006144819960207764603049364 541393760515793556265294506836097278424682195350935443 05870490251995655335710209799226484977949442955603 = 338849583746672139436839320467218152281583036860499304 8084925840555281177 × 116588234066712599031483765583832708181310122581463926 00439520994131344334162924536139
RSA-768 123018668453011775513049495838496272077285356959533479 219732245215172640050726365751874520219978646938995647 494277406384592519255732630345373154826850791702612214 291346167042921431160222124047927473779408066535141959 7459856902143413 = 334780716989568987860441698482126908177047949837137685 689124313889828837938780022876147116525317430877378144 67999489 × 367460436667995904282446337996279526322791581643430876 426760322838157396665112792333734171433968102700927987 36308917
運算速度的比較 • 使用硬體設計 • DES 比 RSA 快 1000 倍 • 使用軟體設計 • DES 比 RSA 快 100 倍
兩個世界中的最佳 • 結合兩個密碼學機制,以得到兩者中的優點,但不犧牲兩者中的任何特色,我們需要確認符合下列的目標 • 解決方案應該完全安全 • 加密和解密的過程不需要花很長時間。 • 產生的密文不應太大 • 解決方案應該控制在能讓大多數人簡單地使用,無須多餘的複雜度 • 解決方案必須能解決金鑰分配問題
結合方法 • 使用對稱性金鑰演算法加解密訊息 • 使用非對稱性金鑰演算法來傳遞金鑰 • 金鑰包裝 (key wrapping) • 同時傳遞訊息密文與金鑰包裝 • 數位信封 (digital envelope)
數位簽章 • 使用RSA加解密演算法 • 公開私密金鑰 • 訊息傳遞者使用「公開金鑰」對訊息進行「加密(簽章) 」 • 訊息接收者使用「私密金鑰」對密文進行「解密(驗證) 」
數位簽章的基礎 私密金鑰 (驗證) 公開金鑰 (簽章)
訊息的隱藏與驗證 • 訊息的隱藏 • 假如 A 是一個訊息的發送方,B 是接收方,A 使用 B 的公開金鑰加密訊息,並寄出加密訊息給 B • B 可用 B 的私密金鑰將訊息解密 • 若密文訊息被 C 竊取則 C 無法解密 • 訊息的驗證 • 假如 A 是一個訊息的發送方,B 是接收方,A 使用 A 的公開金鑰加密訊息,並寄出加密訊息給 B • B 可用 A 的私密金鑰將訊息解密 • 若密文訊息 C 被竄改則 B 解密失敗
訊息摘要 • 若將訊息使用公開金鑰加密作為簽章的驗證,則當明文很大時,速度非常緩慢 • 使用數位信封的方式進行簽章 • 使用對稱性金鑰(K1)加密訊息(PT)為密文(CT) • 使用私密金鑰(K2)加密K1 • 建立數位信封傳送CT與加密後的K1 • 使用公開金鑰(K3)解開得到K1 • 使用K1解密密文(CT)得到訊息(PT)
訊息摘要 • 真實情況使用更有效率的作法 • 訊息摘要(message digest) • 雜湊(hash) • 訊息摘要是一個訊息的指印(fingerprint)或是總結 • 類似 • 縱向冗餘核對(Longitudinal Redundancy Check, LRC) • 回合冗餘核對(Cyclic Redundancy Check, CRC) • 用來確認資料的完整性
縱向冗餘核對(LRC) • Longitudinal Redundancy Check, LRC • 一個縱向冗餘核對(LRC)中的位元區塊是以列的形式被組織 • 於一組字元相對應的位元串後附加一個同位元 • 計算行(垂直)中 1 的個數 • 個數為奇數稱為「奇同位元」(odd parity),標示為 1 • 個數為偶數稱為「偶同位元」(even parity),標示為 0
縱向冗餘核對(LRC) 同位元位元
縱向冗餘核對(LRC) • 訊息傳遞先透過縱向冗餘核對(LRC)產生區塊的同位元位元 • LRC(指同位元位元)則為原始訊息的指印 • 包含LRC的資料被傳送給接收方 • 由接收的資料分成資料區塊與LRC部份 • 對資料區塊再直行一次縱向冗餘核對(LRC)產生區塊的同位元位元 • 比對接收到的LRC與產生出來的LRC • 若相同則合理相信資料沒有被修改
訊息摘要的概念 • 訊息摘要基於LRC(或其他檢查碼技術)相同概念但作法更多元 • 概念 • 透過設計的運算規則產生指印 • 指印無法透漏原始訊息的相關訊息 • 例如 • 原始訊息:4000 • 運算:除以1000 • 指印:4 • 訊息被改變無法得到正確的指印 • 只知道指印無法推得與原始訊息的關係 • 4+0+0+0 = 4 • 4000 / 1000 = 4 • ……