密碼學(一)—— 背景、常用的密碼演算法簡介,單向雜湊簡介、數字簽名簡介
背景
密碼,最初的目的就是用於對資訊的加密,計算機領域的密碼技術種類繁多,但隨著密碼學的運用,密碼還用於身份認證,防止否認等功能上。最基本的,是資訊加密解密分為對稱加密和非對稱加密,這兩者的區別在於是否在加密解密時是否使用了相同的金鑰。除了資訊的加密解密,還有用於確認資料完整性的單向雜湊技術,又稱魏密碼檢驗、指紋、訊息摘要。資訊的加密解密與資訊的單向雜湊的區別時,加密解密是可以通過金鑰來獲取其加密的資料資訊的,而單向雜湊則是不可逆的,資訊的加密解密,資料資訊或者金鑰是不定長的,而單向雜湊可以是定長的。結合加密解密技術和單向雜湊技術,又有了用於防止篡改的訊息認證碼技術,防止偽裝的數字簽名技術以及認證證書。
常用的密碼演算法:
-
對稱加密體系
簡介:加密解密的過程中使用的是同一個金鑰,也稱之為單金鑰加密。
密文:加密後的結果。明文:需要被加密的資訊。
對稱加密的問題:
金鑰的配送:接收者a收到b傳送來的密文,a想要解密,就必須使用和b進行加密時相同的金鑰,因此b必須要把金鑰也傳送給a,但是這樣就產生了一個矛盾,如果有一種方法能將金鑰安全的傳送出去,那麼也可以使用這種方式來發送明文。
對稱加密的例項:
1.DES
DES是美國聯邦資訊處理標準中所採用的一種對稱加密演算法。是一種將64位元的明文加密成64位元密文的對稱密碼演算法,它的金鑰長度是56位,儘管從本質上說它的金鑰是64位,但是由於每隔7位會設定一個用於錯誤檢查的位元,奇偶校驗位,因此實質上金鑰的長度是56位元,DES以64位元明文為一個單位進行加密,DES每次只能加密64位元的資料,如果待加密的明文過長,就需要對DES加密進行迭代,迭代的具體方案稱之為模式,具體的迭代模式會在這裡講解:
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的時候不僅考慮到了演算法的弱點,還考慮了演算法的執行速度和實現的難度。
-
非對稱加密體系
簡介:非對稱加密也稱之為公鑰密碼,金鑰分為兩種分別為加密金鑰和解密金鑰,傳送者使用加密金鑰加密資料,訊息接收這使用解密金鑰解密資料,解密金鑰一開始就有接收者自己保管,因此只要將加密金鑰傳送給對方就可以解決金鑰配送問題。由於加密金鑰可以任意公開,因此該金鑰也被稱之為公鑰,解密金鑰絕對不能公開,只能由自己保管,因此也被稱之為私鑰,公鑰和私鑰是一一對應的關係,由公鑰加密的檔案只能由對應的私鑰進行解密。
總結:
- 傳送者只需要知道加密金鑰
- 接收者只需要知道解密金鑰
- 解密金鑰不可以被竊聽者獲取
- 加密金鑰被竊聽者獲取也沒問題
公鑰密碼的通訊流程:
非對稱加密流程:
- 接收方生成公私鑰對,私鑰由接收方保管
- 接收方將公鑰傳送給傳送方
- 傳送方通過公鑰對明文加密,得到密文
- 傳送方向接收方傳送密文
- 接收方通過私鑰解密密文,得到明文
非對稱加密例項:
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)最優非對稱加密填充,該演算法是通過對明文前加入認證資訊頭,若資訊頭校驗失敗,則拒絕請求。
- 密碼劣化,隨著算力的提升,密碼的安全性下降。
單向雜湊
單向雜湊技術是為了保證資訊的完整性,防止資訊被篡改的一項技術。
特點:
- 無論訊息長度,計算出的長度永遠不變
- 快速計算
- 訊息不同,雜湊值不同,需要具有抗碰撞性 Collision Resistance
- 弱抗碰撞性:給定雜湊值,找到和該訊息具有相同雜湊值的另一條訊息是困難的
- 強抗碰撞性:任意雜湊值,找到雜湊值相同的兩條不同的訊息是困難的
- 具有單向性 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 演算法的優點:
- 採用與 SHA2 完全不同的結構
- 結構清晰,易於分析
- 適用於各種硬體,效能優越
- 可生成任意長度
- 對訊息長度無限制
- 可採用雙工結構,輸入同時輸出,提升效率
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 |
對雜湊的攻擊
暴力破解,冗餘碰撞
生日攻擊,針對強抗碰撞性
數字簽名
採用非對稱加密的訊息認證碼的技術,就是數字簽名。
- 在非對稱加密中,私鑰用來解密,公鑰用來加密。
- 在數字簽名技術中,私鑰用來加密,公鑰用來解密。
數字簽名步驟
- 簽名方 A 生成非對稱公私鑰對 public-key、private-key
- A 向訊息接收方 B 傳送公鑰 publi-key
- A 採用 private-key 加密(一般是對訊息的雜湊值進行加密),生成數字簽名
- A 將訊息與數字簽名發往 B
- B 採用 public-key 解密數字簽名
- 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,由於存在時間差,惡意訊息的釋出者完全可以否認惡意訊息是由其發出的。