1. 程式人生 > >密碼學(一)—— 背景、常用的密碼演算法簡介,單向雜湊簡介、數字簽名簡介

密碼學(一)—— 背景、常用的密碼演算法簡介,單向雜湊簡介、數字簽名簡介

背景

密碼,最初的目的就是用於對資訊的加密,計算機領域的密碼技術種類繁多,但隨著密碼學的運用,密碼還用於身份認證,防止否認等功能上。最基本的,是資訊加密解密分為對稱加密和非對稱加密,這兩者的區別在於是否在加密解密時是否使用了相同的金鑰。除了資訊的加密解密,還有用於確認資料完整性的單向雜湊技術,又稱魏密碼檢驗、指紋、訊息摘要。資訊的加密解密與資訊的單向雜湊的區別時,加密解密是可以通過金鑰來獲取其加密的資料資訊的,而單向雜湊則是不可逆的,資訊的加密解密,資料資訊或者金鑰是不定長的,而單向雜湊可以是定長的。結合加密解密技術和單向雜湊技術,又有了用於防止篡改的訊息認證碼技術,防止偽裝的數字簽名技術以及認證證書。

常用的密碼演算法:

  • 對稱加密體系

簡介:加密解密的過程中使用的是同一個金鑰,也稱之為單金鑰加密。

密文:加密後的結果。明文:需要被加密的資訊。

對稱加密的問題:

金鑰的配送:接收者a收到b傳送來的密文,a想要解密,就必須使用和b進行加密時相同的金鑰,因此b必須要把金鑰也傳送給a,但是這樣就產生了一個矛盾,如果有一種方法能將金鑰安全的傳送出去,那麼也可以使用這種方式來發送明文。

對稱加密的例項:

1.DES

DES是美國聯邦資訊處理標準中所採用的一種對稱加密演算法。是一種將64位元的明文加密成64位元密文的對稱密碼演算法,它的金鑰長度是56位,儘管從本質上說它的金鑰是64位,但是由於每隔7位會設定一個用於錯誤檢查的位元,奇偶校驗位,因此實質上金鑰的長度是56位元,DES以64位元明文為一個單位進行加密,DES每次只能加密64位元的資料,如果待加密的明文過長,就需要對DES加密進行迭代,迭代的具體方案稱之為模式,具體的迭代模式會在這裡講解:

https://mp.csdn.net/postedit/82468369

2.3DES

三重DES是為了增強DES的強度,將DES重複3次所得到的一種密碼演算法。

3DES的加密機制為:

說明:1.明文經過三次DES處理才變成最後的密文,由於DES金鑰的長度實際上是56位元,因此三重DES的金鑰長度就是56*3 = 168 位元,2.三重DES並不是進行三次加密(加密->加密->加密)。而是加密->解密->加密的過程,這種設計是為了讓3DES能夠相容普通的des,當三重DES金鑰全部相同時,3重DES就相當於普通的DES,這是因為在前兩輪加密->解密之後,得到的就是最初的明文,因此之前的des加密的密文,也就可以通過這種方式用三重des來進行解密。

3des解密機制:

3.AES

AES是取代其前任標準DES新的對稱加密演算法,其是通過公開競選而指定的,在評選AES的時候不僅考慮到了演算法的弱點,還考慮了演算法的執行速度和實現的難度。

  • 非對稱加密體系

簡介:非對稱加密也稱之為公鑰密碼,金鑰分為兩種分別為加密金鑰和解密金鑰,傳送者使用加密金鑰加密資料,訊息接收這使用解密金鑰解密資料,解密金鑰一開始就有接收者自己保管,因此只要將加密金鑰傳送給對方就可以解決金鑰配送問題。由於加密金鑰可以任意公開,因此該金鑰也被稱之為公鑰,解密金鑰絕對不能公開,只能由自己保管,因此也被稱之為私鑰,公鑰和私鑰是一一對應的關係,由公鑰加密的檔案只能由對應的私鑰進行解密。

總結:

  • 傳送者只需要知道加密金鑰
  • 接收者只需要知道解密金鑰
  • 解密金鑰不可以被竊聽者獲取
  • 加密金鑰被竊聽者獲取也沒問題

公鑰密碼的通訊流程:

非對稱加密流程:

  1. 接收方生成公私鑰對,私鑰由接收方保管
  2. 接收方將公鑰傳送給傳送方
  3. 傳送方通過公鑰對明文加密,得到密文
  4. 傳送方向接收方傳送密文
  5. 接收方通過私鑰解密密文,得到明文

非對稱加密例項:

ECC橢圓曲線演算法

橢圓曲線密碼學(英語:Elliptic curve cryptography,縮寫為ECC),一種建立公開金鑰加密的演算法,基於橢圓曲線數學,橢圓曲線在密碼學中的使用是在1985年由Neal Koblitz和Victor Miller分別獨立提出的。

ECC的主要優勢是在某些情況下它比其他的方法使用更小的金鑰——比如RSA加密演算法——提供相當的或更高等級的安全。ECC的另一個優勢是可以定義群之間的雙線性對映,基於Weil對或是Tate對;雙線性對映已經在密碼學中發現了大量的應用,例如基於身份的加密。不過一個缺點是加密和解密操作的實現比其他機制花費的時間長。

RSA加密演算法

RSA加密演算法是一種非對稱加密演算法。在公開金鑰加密和電子商業中RSA被廣泛使用。RSA是1977年由羅納德·李維斯特(Ron Rivest)、阿迪·薩莫爾(Adi Shamir)和倫納德·阿德曼(Leonard Adleman)一起提出的。當時他們三人都在麻省理工學院工作。RSA就是他們三人姓氏開頭字母拼在一起組成的。RSA 的安全性,是基於現階段對大整數的質因數分解未發現高效的演算法。一旦發現,則 RSA 就能夠破譯。

強度比較:密碼強度,預設的 RSA 長度為 2048 bit

AES(bit) RSA(bit)
128 3072
192 7680
256 15360

 存在問題:

  • 效率慢,因此工業場景下,往往是通過非對稱加密配送金鑰,對稱加密加密明文的混合加密方式,最著名的如 SSL
  • 公鑰認證問題難。訊息傳送方無法確認公鑰的身份問題,應該收到甲的公鑰,卻收到了乙的。
  • 無法避免中間人攻擊。可能被人於中間劫持後,傳送一個偽造的公鑰,此公鑰加密後的密文,可以被劫持者解密,之後所有的密文都對劫持者透明瞭。
  • 選擇密文攻擊,即通過不斷的傳送請求,分析請求的反饋,猜測金鑰和明文。有改良演算法 RSA-OAEP (Optimal Asymmetric Encryption Padding)最優非對稱加密填充,該演算法是通過對明文前加入認證資訊頭,若資訊頭校驗失敗,則拒絕請求。
  • 密碼劣化,隨著算力的提升,密碼的安全性下降。

單向雜湊

單向雜湊技術是為了保證資訊的完整性,防止資訊被篡改的一項技術。

特點:

  1. 無論訊息長度,計算出的長度永遠不變
  2. 快速計算
  3. 訊息不同,雜湊值不同,需要具有抗碰撞性 Collision Resistance
    • 弱抗碰撞性:給定雜湊值,找到和該訊息具有相同雜湊值的另一條訊息是困難的
    • 強抗碰撞性:任意雜湊值,找到雜湊值相同的兩條不同的訊息是困難的
  4. 具有單向性 one-way,不可由雜湊值推出原訊息

單向雜湊演算法

MD(Message Digest)

MD 雜湊演算法分為 MD4, MD5 兩套演算法,都可計算出 128 bits 的雜湊。MD 系列演算法已經被中國科學家王小云破解(可於有限時間內找出碰撞)。

SHA(Secure Hash Algorithm)

SHA是單向雜湊演算法的一個標磚的統稱,其下又分為SHA-1,SHA-2,SHA-3三套演算法

其中 SHA-1 可生成 160 bit 雜湊值,已被攻破(由王小云、姚期智聯手破解),不推薦使用。

SHA-2 可生成不同長度的雜湊,如 256 bits (SHA-256), 384 bits (SHA-384), 512 bits (SHA-512),同時對輸入的訊息長度存在一定限制,SHA-256 上限接近於 2^{64}-1位元,SHA-384、SHA512 則接近於 2^{128}-1 位元。

SHA-3,是 2012 年被採用的最新標準,採用了 Keccak 演算法。

Keccak 演算法的優點:

  1. 採用與 SHA2 完全不同的結構
  2. 結構清晰,易於分析
  3. 適用於各種硬體,效能優越
  4. 可生成任意長度
  5. 對訊息長度無限制
  6. 可採用雙工結構,輸入同時輸出,提升效率

MD4,5, RIPEMD, RIPEMD-160, SHA-1, SHA-2 均採用 MD 結構(Merkle-Damgard construction)

SHA-3 採用海綿結構

演算法 雜湊長度,bit 輸入長度
MD4 (Message Digest 4) 128 已破解
MD5 128 已破解
SHA-1 160 2^{64} = 2048 \text{ PB} 謹慎使用,不推薦
SHA2 (SHA-224) 224 (32*8 - 32) 2^{64} - 32 表示截去 32 bit,下同
SHA2 (SHA-256) 256 (32*8) 同上
SHA2 (SHA-512/224) 224 (64*8 - 288) 同上
SHA2 (SHA-512/256) 256 (64*8 - 256) 同上
SHA2 (SHA-384) 384 (64*8 - 128) $2^{128}$
SHA2 (SHA-512) 512 同上
SHA-3 無限制
RIPEMD-128 已破解
RIPEMD-160 謹慎使用,是比特幣採用的
RIPEMD-256
RIPEMD-320

對雜湊的攻擊

暴力破解,冗餘碰撞

生日攻擊,針對強抗碰撞性

數字簽名

採用非對稱加密的訊息認證碼的技術,就是數字簽名。

  • 在非對稱加密中,私鑰用來解密,公鑰用來加密
  • 在數字簽名技術中,私鑰用來加密,公鑰用來解密

數字簽名步驟

  1. 簽名方 A 生成非對稱公私鑰對 public-key、private-key
  2. A 向訊息接收方 B 傳送公鑰 publi-key
  3. A 採用 private-key 加密(一般是對訊息的雜湊值進行加密),生成數字簽名
  4. A 將訊息與數字簽名發往 B
  5. B 採用 public-key 解密數字簽名
  6. B 驗證數字簽名

由於用於解密的是公鑰,是公開的。因此任何人都可以驗證數字簽名。

數字簽名的核心,就是非對稱加密,在前文已經介紹了一些非對稱加密演算法,均可用於數字簽名之中。

常見的有如下幾種:

  • RSA
  • ElGamal
  • DSA
  • ECDSA(Elliptic Curve Signature Algorithm),結合橢圓曲線演算法的數字簽名技術
  • Rabin

數字簽名的問題

數字簽名由於採用了非對稱加密,因此可以防止否認。但傳送方怎麼能知道所收到的公鑰就是接收方私鑰所對應的公鑰呢?

如果不小心採用了攻擊者的公鑰,然後接收了攻擊者私鑰簽名的資訊,公私鑰完全匹配,於是資訊就被接受了,那麼就 GG 了。

因此,業界便推出了證書。由權威機構頒佈,認證公鑰的合法性,那麼就可以了

證書

對數字簽名所釋出的公鑰進行權威的認證,便是證書。證書可以有效地避免中間人攻擊的問題。

  • PKC:Public-Key Certificate,公鑰證書,簡稱證書。
  • CA:Certification Authority,認證機構。對證書進行管理,負責 1.生成金鑰對、2. 註冊公鑰時對身份進行認證、3. 頒發證書、4. 作廢證書。其中負責註冊公鑰和身份認證的,稱為 RA(Registration Authority 註冊機構)
  • PKI:Public-Key Infrastructure,公鑰基礎設施,是為了更高效地運用公鑰而制定的一系列規範和規格的總稱。比較著名的有PKCS(Public-Key Cryptography Standards,公鑰密碼標準,由 RSA 公司制定)、X.509 等。PKI 是由使用者、認證機構 CA、倉庫(儲存證書的資料庫)組成。
  • CRL:Certificate Revocation List 證書作廢清單,是 CA 宣佈作廢的證書一覽表,會帶有 CA 的數字簽名。一般由處理證書的軟體更新 CRL 表,並查詢證書是否有效。

證書使用步驟

下圖比較詳細的闡述了證書的使用步驟

 證書的層級

對於認證機構的公鑰,可以由其它的認證機構施加數字簽名,從而對認證機構的公鑰進行驗證,即生成一張認證機構的公鑰證書,這樣的關係可以迭代好幾層,一直到最高一層的認證機構時該認證機構就稱為根CA,根CA會對自己的公鑰進行數字簽名叫做自簽名

針對證書的問題

  • 公鑰註冊前進行攻擊
  • 註冊相似資訊進行攻擊,例如 Bob 和 BOB,一旦沒看清,就會洩露資訊
  • 竊取 CA 的私鑰進行攻擊,CA 的私鑰一旦被洩露,需要通過 CRL 通知客戶
  • 偽裝成 CA 進行攻擊,一般證書處理軟體只採納有限的根 CA
  • 利用 CRL 釋出時間差,私鑰被盜-通知 CA-釋出 CRL,均存在時間差,攻擊者可以利用此時間差進行攻擊
  • 利用 CRL 釋出時間差否認資訊。釋出有害資訊-通知 CA 作廢證書-釋出 CRL,由於存在時間差,惡意訊息的釋出者完全可以否認惡意訊息是由其發出的。