密碼技術繪總

lighkLife發表於2019-04-03

title: 密碼技術總結 date: 2018-07-07 01:26:57 tags: 加密碼技術 categories:

  • 密碼技術

  1. 從明文通訊到對稱加密
  2. 非對稱加密(公鑰加密)
  3. 混合密碼系統
  4. 單向雜湊函式——檔案被修改了嗎?
  5. 訊息認證碼——訊息是偽裝者發的嗎?
  6. 數字簽名——訊息到底是誰寫的
  7. 證書——公鑰合法了

從明文通訊到對稱加密

明文通訊

為什麼要加密呢?不妨先看看明文通訊

未加密的危險

Eve 可以直接竊聽到Alice與Bob的通訊過程,通過抓包就可以檢視到通訊內容,如果郵件內容是羞答答的,怎麼可以被其他人看到呢?(邪魅微笑)

在逼格滿滿的咖啡廳,你正在愉快的刷著微博,逛著知乎,瀏覽豆瓣,你以為你連著免費WiFi爽歪歪,

圖,喝咖啡,玩手機

然後其實被他筆記本造的WiFi,

圖,黑客

順便一提,關於抓包,現成的抓包工具很多,如 wiresharkcharles 等,這裡有一篇使用charles抓APP包的文章,要不要 看看

開始加密

凱撒密碼(字母代換)

凱撒密碼.jpg

將一個字母表向指定方向平移N位,解密反之,N為金鑰 。

金鑰只可能是0-25共26個,用1-25每個數作為金鑰嘗試解密,很容易發現明文,從而得出金鑰是幾。(暴力破解)

簡單替換密碼

簡單替換密碼.jpg

兩個字母表中字母之間隨機一一對應, 金鑰是替換表。

金鑰空間是 26!= 2^88。所以考慮使用(頻率破解)。

對稱密碼標準

  • DES(Data Encryption Standard)(不再推薦)
  • AES(Advanced Encryption Standard) (應該使用)

AES 目前採用的是Rijndael 演算法,Rijndael 的分組長度可以是以32bit為單位在128到256範圍內選擇。目前AES 規定分組長度只能有128,192,256三種。

AES 一輪的步驟:

  • 加密:SubBytes ---> ShiftRows ---> MixColumns ---> AddRoundKey
  • 解密:AddRoundKey ---> InvMixColumns ---> InvShiftRows ---> InvSubBytes

其中步驟的含義為:

  1. SubBytes: 每個位元組的值(0-255的任意值)為索引,從一張擁有256個值的替換表(S-Box)中查詢對應的值處理。將一個1位元組的值替換成另一個1位元組的值。
  2. ShiftRows:將4個位元組為單位的行(Row)按照一定的規則左平移。
  3. MixColumns:將一個4位元組的值進行位元運算,變成另一個4位元組的值。
  4. AddRoundKey :將MixColumns的輸出與輪金鑰XOR。

對稱加密

Alice 和 Bob 使用相同的祕鑰來加解密訊息,也就是對稱加密,上面提到的加密演算法都是對稱加密。

對稱加密圖示

這樣,即使第三者 Eve 竊聽到通訊過程,那麼 Eve 也只能看到奇奇怪怪符號組成的密文

加密之後的情況

這樣Alice和Bob就可以放心的互相通訊了嗎?對啊!當然不是,這只是解決了機密性的問題,對稱加密的金鑰需要被髮送給對方,對方才能解密,但直接傳送,祕鑰也會被竊聽,這就是祕鑰配送問題。

存在的缺陷

解決祕鑰配送

  • 事先當面將祕鑰給對方,不通過網路傳輸祕鑰,避免了被竊聽的機會;
  • 通過金鑰分配中心解決;
  • 通過 Diffie-Hellman 金鑰交換來解決;
  • 通過公鑰密碼來解決。

Diffie-Hellman

非對稱加密(公鑰加密)

簡述

公鑰加密又叫非對稱加密,這類加密演算法中存一對祕鑰:

  • 公鑰——用來加密資訊,公開給任何人
  • 私鑰——用來解密資訊,自己私藏

公鑰和私鑰匙是天生一對,一個確定的公鑰加密的資訊,只有他的私鑰才能解密資訊。

公鑰加密樣式

使用公鑰加密對資訊進行加密通訊的流程如下:

公鑰加密

公鑰演算法——RSA

RSA是一種非對稱加密演算法,是1977年由羅納德·李維斯特(Ron Rivest)、阿迪·薩莫爾(Adi Shamir)和倫納德·阿德曼(Leonard Adleman)一起提出的,並以他們名字的首字母命名。

name VALUE
祕鑰 數 E 和 數 N
祕鑰 數 D 和 數 N
加密過程 $$ 密文 = (明文^E) mod(N )$$
解密過程 $$ 明文 = (密文^D) mod (N )$$

RSA加密
原理詳情:

阮一峰的網路日誌——RSA演算法原理(一)

阮一峰的網路日誌——RSA演算法原理(二)

缺陷

加密運算強度大,費時間,比如RSA加密過程是對明文求指數運算後再取模,這顯然比AES運算量要大。有何優化方案嗎?有,結合對稱加密與公鑰加密。

混合密碼系統

加密

混合加密

解密

混合密碼解密

單向雜湊函式——檔案被修改了嗎?

概述

網路下載軟體,或者傳輸檔案,如何驗證沒有被第三方篡改呢?即是資料的的完整性(intergrity),也稱一致性

確認檔案的完整性

單項雜湊函式就是生成檔案“指紋”的方法。單項雜湊函式也稱為訊息摘要函式(message digest function),雜湊函式,雜湊函式。

單向雜湊函式確保檔案一致性

性質

  1. 根據任意長度的訊息計算出固定長度的雜湊值。
  2. 能快速計算出雜湊值。
  3. 抗碰撞性,訊息不同,雜湊值也不同。
  4. 具備單向性,根據雜湊值無法計算出訊息。

雜湊值長度固定

舉例

MD5

MD5(Message Digest):一般128位的MD5雜湊被表示為32位十六進位制數字,例如

9e107d9d372bb6826bd81d3542a419d6 = MD5("The quick brown fox jumps over the lazy dog");

其強抗碰撞性已經被攻破,已經不再安全。

SHA-1/2/3 (Secure Hash Algorithm)

sha1: 已經被列為“可謹慎運用的密碼清單”,為了保持相容性才使用;其強抗碰撞性已經 被攻破

sha2:由 SHA-256 和 SHA-512衍生出6種版本,顯然鑑於內部狀態,SHA-256系列更適合32位CPU。

名稱 輸出長度 內部狀態長度 備註
SHA-224 224 32 * 8 = 256 將SHA-256的結果截掉32位元
SHA-256 256 32 * 8 = 256
SHA-521/224 224 64 * 8 = 512 將SHA-512的結果截掉288位元
SHA-512/256 256 64 * 8 = 512 將SHA-512的結果截掉256位元
SHA-384 384 64 * 8 = 512 將SHA-512的結果截掉128位元
SHA-512 512 64 * 8 = 512

sha3:2012年選拔出名為Keccak的演算法作為sha3,結構完全不同sha-2,適用各種裝置,硬體上實現效能高,更安全。

不能解的問題

使用單向雜湊函式能實現完整性的檢察,但是有些如果主動攻擊者Mallory偽裝成Alice,向Bob同時傳送了訊息和雜湊值。這時Bob能通過單向雜湊函式檢察訊息的完整性,但是卻沒能識別出這條訊息是Mallory偽裝成Bob傳送的,無法被認證。

訊息認證碼——訊息是偽裝者發的嗎?

訊息認證碼(Message Authentication Code) 是一種與金鑰相關聯的單項雜湊函式。

hash與MAC

  • 要計算MAC值必須持有共享金鑰,MAC正是利用這一性質確認完整性的。

  • 只有通訊雙方才能持有共享金鑰,金鑰配送問題可以使用公鑰密碼,Diffie-Hellman金鑰交換,金鑰分配中心等來解決。

訊息認證碼

無法解決的問題

重放攻擊

重放攻擊

訊息認證碼解決了完整性與偽裝問題,仍然無法解決“對第三方證明”和“防否認”問題。這就需要數字簽名來解決。

數字簽名——訊息到底是誰寫的

概述

設想要防否認,只要簽名只能由訊息傳送者生產就OK了。

數字簽名對簽名者的祕鑰和驗證者的祕鑰進行了區分,使用驗證簽名無法生產簽名。簽名祕鑰只由簽名者持有。

這和公鑰密碼有點相似了。事實上,簽名就是公鑰密碼“反過來”實現的。 對於訊息簽名,速度太慢,因為每個訊息的雜湊值是不一樣的,所以一般只需要對訊息的雜湊值進行簽名就可以了。

簽名時間圖

應用舉例

  1. 資訊保安公告。
  2. 軟體下載。
  3. 公鑰證書。(得到合法的公鑰)
  4. SSL/TLS。

無法解決的問題

通過對雜湊值簽名我們可以解決完整性,篡改,偽造問題,但是用於驗證簽名的公鑰是否是真正的傳送者的呢?中間人可以用自己的私鑰簽名,並把自己的公鑰傳送給接受者。 為驗證公鑰是否合法,我們需要使用證書。

證書——公鑰合法了

證書就是我們信任的第三方對傳送者的公鑰加上了他們的數字簽名。相當於身份證一樣的東西。這裡的第三方包括例如賽門鐵客等機構,也可以是自己組織內部成立的一個機構。

證書主要包含:

  1. 證書序號。
  2. 證書頒發機構。
  3. 公鑰所有者。
  4. SHA-1 指紋。
  5. MD5指紋。
  6. 證書ID。
  7. 有效期起始時間。
  8. 有效期結束時間。
  9. 雜湊演算法。
  10. 祕鑰ID。
  11. 祕鑰用途。

相關文章