title: 密碼技術總結 date: 2018-07-07 01:26:57 tags: 加密碼技術 categories:
- 密碼技術
- 從明文通訊到對稱加密
- 非對稱加密(公鑰加密)
- 混合密碼系統
- 單向雜湊函式——檔案被修改了嗎?
- 訊息認證碼——訊息是偽裝者發的嗎?
- 數字簽名——訊息到底是誰寫的
- 證書——公鑰合法了
從明文通訊到對稱加密
明文通訊
為什麼要加密呢?不妨先看看明文通訊
Eve 可以直接竊聽到Alice與Bob的通訊過程,通過抓包就可以檢視到通訊內容,如果郵件內容是羞答答的,怎麼可以被其他人看到呢?(邪魅微笑)
在逼格滿滿的咖啡廳,你正在愉快的刷著微博,逛著知乎,瀏覽豆瓣,你以為你連著免費WiFi爽歪歪,
圖,喝咖啡,玩手機
然後其實被他筆記本造的WiFi,
圖,黑客
順便一提,關於抓包,現成的抓包工具很多,如 wireshark,charles 等,這裡有一篇使用charles抓APP包的文章,要不要 看看
開始加密
凱撒密碼(字母代換)
將一個字母表向指定方向平移N位,解密反之,N為金鑰 。
金鑰只可能是0-25共26個,用1-25每個數作為金鑰嘗試解密,很容易發現明文,從而得出金鑰是幾。(暴力破解)
簡單替換密碼
兩個字母表中字母之間隨機一一對應, 金鑰是替換表。
金鑰空間是 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
其中步驟的含義為:
- SubBytes: 每個位元組的值(0-255的任意值)為索引,從一張擁有256個值的替換表(S-Box)中查詢對應的值處理。將一個1位元組的值替換成另一個1位元組的值。
- ShiftRows:將4個位元組為單位的行(Row)按照一定的規則左平移。
- MixColumns:將一個4位元組的值進行位元運算,變成另一個4位元組的值。
- AddRoundKey :將MixColumns的輸出與輪金鑰XOR。
對稱加密
Alice 和 Bob 使用相同的祕鑰來加解密訊息,也就是對稱加密,上面提到的加密演算法都是對稱加密。
這樣,即使第三者 Eve 竊聽到通訊過程,那麼 Eve 也只能看到奇奇怪怪符號組成的密文
這樣Alice和Bob就可以放心的互相通訊了嗎?對啊!當然不是,這只是解決了機密性的問題,對稱加密的金鑰需要被髮送給對方,對方才能解密,但直接傳送,祕鑰也會被竊聽,這就是祕鑰配送問題。
解決祕鑰配送
- 事先當面將祕鑰給對方,不通過網路傳輸祕鑰,避免了被竊聽的機會;
- 通過金鑰分配中心解決;
- 通過 Diffie-Hellman 金鑰交換來解決;
- 通過公鑰密碼來解決。
非對稱加密(公鑰加密)
簡述
公鑰加密又叫非對稱加密,這類加密演算法中存一對祕鑰:
- 公鑰——用來加密資訊,公開給任何人
- 私鑰——用來解密資訊,自己私藏
公鑰和私鑰匙是天生一對,一個確定的公鑰加密的資訊,只有他的私鑰才能解密資訊。
使用公鑰加密對資訊進行加密通訊的流程如下:
公鑰演算法——RSA
RSA是一種非對稱加密演算法,是1977年由羅納德·李維斯特(Ron Rivest)、阿迪·薩莫爾(Adi Shamir)和倫納德·阿德曼(Leonard Adleman)一起提出的,並以他們名字的首字母命名。
name | VALUE |
---|---|
祕鑰 | 數 E 和 數 N |
祕鑰 | 數 D 和 數 N |
加密過程 | $$ 密文 = (明文^E) mod(N )$$ |
解密過程 | $$ 明文 = (密文^D) mod (N )$$ |
缺陷
加密運算強度大,費時間,比如RSA加密過程是對明文求指數運算後再取模,這顯然比AES運算量要大。有何優化方案嗎?有,結合對稱加密與公鑰加密。
混合密碼系統
加密
解密
單向雜湊函式——檔案被修改了嗎?
概述
網路下載軟體,或者傳輸檔案,如何驗證沒有被第三方篡改呢?即是資料的的完整性(intergrity),也稱一致性。
單項雜湊函式就是生成檔案“指紋”的方法。單項雜湊函式也稱為訊息摘要函式(message digest function
),雜湊函式,雜湊函式。
性質
- 根據任意長度的訊息計算出固定長度的雜湊值。
- 能快速計算出雜湊值。
- 抗碰撞性,訊息不同,雜湊值也不同。
- 具備單向性,根據雜湊值無法計算出訊息。
舉例
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) 是一種與金鑰相關聯的單項雜湊函式。
-
要計算MAC值必須持有共享金鑰,MAC正是利用這一性質確認完整性的。
-
只有通訊雙方才能持有共享金鑰,金鑰配送問題可以使用公鑰密碼,Diffie-Hellman金鑰交換,金鑰分配中心等來解決。
無法解決的問題
重放攻擊
訊息認證碼解決了完整性與偽裝問題,仍然無法解決“對第三方證明”和“防否認”問題。這就需要數字簽名來解決。
數字簽名——訊息到底是誰寫的
概述
設想要防否認,只要簽名只能由訊息傳送者生產就OK了。
數字簽名對簽名者的祕鑰和驗證者的祕鑰進行了區分,使用驗證簽名無法生產簽名。簽名祕鑰只由簽名者持有。
這和公鑰密碼有點相似了。事實上,簽名就是公鑰密碼“反過來”實現的。 對於訊息簽名,速度太慢,因為每個訊息的雜湊值是不一樣的,所以一般只需要對訊息的雜湊值進行簽名就可以了。
應用舉例
- 資訊保安公告。
- 軟體下載。
- 公鑰證書。(得到合法的公鑰)
- SSL/TLS。
無法解決的問題
通過對雜湊值簽名我們可以解決完整性,篡改,偽造問題,但是用於驗證簽名的公鑰是否是真正的傳送者的呢?中間人可以用自己的私鑰簽名,並把自己的公鑰傳送給接受者。 為驗證公鑰是否合法,我們需要使用證書。
證書——公鑰合法了
證書就是我們信任的第三方對傳送者的公鑰加上了他們的數字簽名。相當於身份證一樣的東西。這裡的第三方包括例如賽門鐵客等機構,也可以是自己組織內部成立的一個機構。
證書主要包含:
- 證書序號。
- 證書頒發機構。
- 公鑰所有者。
- SHA-1 指紋。
- MD5指紋。
- 證書ID。
- 有效期起始時間。
- 有效期結束時間。
- 雜湊演算法。
- 祕鑰ID。
- 祕鑰用途。