260 likes | 530 Views
密碼學與網路安全 第 9 章 公開金鑰密碼學與 R SA. 私密金鑰密碼學. 傳統的 私密/秘密/單一金鑰 密碼學使用一把金鑰 傳送端和接收端共用同一把金鑰 所以也稱為對稱式加密 若通訊時洩漏金鑰,會危及通訊安全 而且也無法確認傳送端的真實身份. 公開金鑰密碼學. 公開金鑰密碼學是整個密碼學最重大的發展,也是整個密碼學演進史唯一真正的變革 使用兩把金鑰:公開金鑰和私密金鑰 也稱為 非對稱加密 ,兩端使用不一樣的金鑰 公開金鑰演算法是以數學函數為基礎,而非替代和重排. 為什麼要使用 公開金鑰加密?. 解決兩大金鑰的議題: 金鑰分送 數位簽章
E N D
私密金鑰密碼學 • 傳統的私密/秘密/單一金鑰密碼學使用一把金鑰 • 傳送端和接收端共用同一把金鑰 • 所以也稱為對稱式加密 • 若通訊時洩漏金鑰,會危及通訊安全 • 而且也無法確認傳送端的真實身份
公開金鑰密碼學 • 公開金鑰密碼學是整個密碼學最重大的發展,也是整個密碼學演進史唯一真正的變革 • 使用兩把金鑰:公開金鑰和私密金鑰 • 也稱為非對稱加密,兩端使用不一樣的金鑰 • 公開金鑰演算法是以數學函數為基礎,而非替代和重排
為什麼要使用公開金鑰加密? • 解決兩大金鑰的議題: • 金鑰分送 • 數位簽章 • 公開金鑰加密是由菲迪和赫爾曼在1976年於史丹佛大學公開發表 • 安全單位更早之前也已提出類似的概念,但未公開
公開金鑰密碼學 • 公開金鑰/雙金鑰/非對稱密碼學使用兩把金鑰: • 公開金鑰:公開並用於加密訊息、確認簽章(即是解密) • 私密金鑰:只由接收端擁有,用來解密訊息、簽署(建立)簽章(即是加密) • 非對稱式因為 • 加密訊息或確認簽章之金鑰無法解密訊息或建立簽章
公開金鑰的特徵 • 非對稱演算法的加密是依賴一把金鑰,並且用另一把不同但相關的金鑰來解密,這些演算法具有以下重要的特性: • 若只知道密碼系統的演算法和加密金鑰,無法經由計算得到解密金鑰 • 對於已加密的密文而言,搭配另一把金鑰可以快快的解密 • 兩把金鑰的任一把可用來加密,另一把可用來解密(對某些演算法而言)
公開金鑰密碼系統的應用 • 廣義的三大應用: • 加密/解密:傳送者以接收者的公開金鑰加密訊息 • 數位簽章:傳送者以自己的私密金鑰「簽署」訊息 • 交換金鑰:通訊雙方合作交換通訊金鑰 • 有些演算法適合這三種應用,而有些只能用在其中的一或兩種應用
公開金鑰的安全性 • 公開金鑰加密也會受到暴力法攻擊,雖然反制的對策也相同:使用更長的金鑰。不過,公開金鑰系統依靠某些反向的數學函數,這些函數的計算複雜度可能超過線性成長於金鑰位元數。所以金錀的大小必須 • 大得足夠抵擋暴力攻擊。 • 小得足以不會太難解密和加密。 • 另一種類型的攻擊,是找出某些方法而以公開金鑰計算出私密金鑰 (並未有數學證明此法無可破解!) • 最後一種針對公開金鑰系統的特殊攻擊方式,屬於「可能訊息」攻擊法 • 假設欲傳送的明文是DES的56位元金鑰,則不論公開金鑰的金鑰長度有多長,只要加密256 種明文而得到256種密文即查表解密。這種攻擊法會簡化暴力攻擊而針對56位元金鑰。若要阻止這種攻擊,能在訊息之後加上一些隨機位元
RSA • RSA是1977年由Ron Rivest、Adi Shamir、和Len Adleman在MIT所發展 • 是目前最好也最廣為使用的公開金鑰架構 • 使用指數運算式,將明文加密成二進位值小於整數n的區塊 • n的大小通常是1024個位元 (故n 小於等於21024 1)
RSA演算法 • Rivest、Shamir、Adleman發展的方法使用指數運算式,將明文加密成二進位值小於整數n的區塊 • 區塊大小必須要小於或等於log2(n) • 實際上的區塊大小是i個位元(2i < n ≦ 2i+1) • 某些明文區塊M和密文區塊C是以如下形式加密、解密: • 傳送者與接收者都必須知道n值,傳送者知道e值,而只有接收者知道d值
RSA演算法 • RSA演算法若要滿足公開金鑰加密,就必須符合以下要求: • 若M < n、Med mod n = M,就有可能找出e、d、n的值 • 若M < n,要計算Me mod n和Cd mod n就相對容易 • 知道e和n而要找出d是不可行 • e和d之間的關係可以表示為:
RSA範例 - 產生金鑰 • 選擇質數:p=17 & q=11 • 計算 n = pq =17×11=187 • 計算 ø(n)=(p–1)(q-1)=16×10=160 • 選擇e:gcd(e,160)=1; e=7 • 者出d:de=1 mod 160且d < 160;d=23,使用擴充歐幾里德演算法即可算出。 • 公布公開金鑰PU={7,187} • 保持私密金鑰PR={23,187} 的安全
模數算數的指數運算 • RSA的加密和解密都有整數的指數運算和取n同餘 • 以取n同餘來減小計算過程的中間值,讓計算變得實際可行 • 另一個考量是指數運算的效率,因為我們會在RSA使用很大的指數
模數算數的指數運算 c = 0; f = 1 for i = k downto 0 do c = 2 x c f = (f x f) mod n if bi == 1then c = c + 1 f = (f x a) mod n return f
以公開金鑰加速運算 • 要以公開金鑰加速RSA演算法,通常要選擇特定的e值 • e值最常見的選擇是65537(216+ 1)、3、17 • 這些選擇只有兩個1位元,因此能將數值乘法所需執行的指數減到最少 • 但太小的公開金鑰(例如e = 3)會讓RSA容易受到攻擊
產生RSA金鑰 • RSA使用必須: • 決定p和q等兩個質數 • 選擇e並算出d;或者選擇d並算出e • 必須從夠大的集合選擇這些質數p、q • 決定質數p和q之後,要選擇e值並且計算d值,或者選擇d值、計算e值 • 選擇像是gcd(ø(n),e) = 1的e值,並且計算d ≡ e-1(mod ø(n))
RSA的安全性 • 4種可以攻擊RSA演算法的方法: • 暴力法:要試過所有可能的私密金鑰 • 數學攻擊法:共有數種方式,其效果都等同於分解兩質數的乘積 • 計時攻擊法:這些方法依靠解密演算法的執行時間 • 選定明文攻擊法:這種類型的攻擊會刺探RSA演算法的特性
因數分解的問題 • 三種以數學運算攻擊RSA的方法: • 將n分解成兩個質因數,最後算出d ≡ e-1 (mod ø(n)) • 不需要先算出p和q而直接算出ø(n) • 不需要先算出 ø(n)而直接算出d • 大部分RSA密碼破解的焦點,是將n分解成兩個質因數
計時攻擊法 • Paul Kocher在1990年代中期所發展 • 刺探者能經由記錄電腦解密的時間長短,而算出私密金鑰 • 計時攻擊不只適用於RSA,也適用其他的公開金鑰密碼系統 • 簡單的反制方法: • 固定指數運算時間 • 隨機延遲 • 障眼法(在指數運算前將密文乘上某一隨機數字)
選定密文攻擊 (略) • 基本的RSA演算法容易遭受選定密文攻擊 • 攻擊者選定了一些密文,然後給予對應的明文,並以目標的私密金鑰解密 • 攻擊者不需要新的資訊,而是先刺探RSA的特性 • 然後選擇以目標私密金鑰處理過的資料區塊,就能得到破解密碼所需要的資訊 • CCA攻擊RSA的簡單例子會利用如下的RSA特性:
總結 • 公開金鑰密碼學的原則 • RSA • 演算法 • 實作 • 安全性