android開發你應該懂的密碼基礎

本篇文章其實算是《圖解密碼技術》一書的讀書筆記。對於密碼技術的入門推薦好好看完這本書。算法

對稱密碼

對稱加密,是指加密和解密使用相同的密鑰。對稱加密的優勢是速度比較快,可是會存在密鑰配送的問題。在密鑰配送方面可使用Diffie-Hellman算法來解決。下面是對稱加密經常使用的算法:安全

  • DES(Data Encryption Standard)

一種將64比特的明文加密成64比特密文的對稱密碼算法。des的密鑰長度規格上講是64位,由於每隔七比特設置一個錯誤檢查比特,實質密鑰長度是56位。示意圖以下所示:服務器

  • 三重DES

爲了加強DES的加密強度,將DES重複3次所得的一種密碼算法(注意加密的步驟是:加密-解密-加密)。示意圖以下所示: 函數

  • AES(Advanced Encryption Standard)

AES加密數據塊分組長度必須爲128比特,密鑰長度能夠是128比特、192比特、256比特中的任意一個(若是數據塊及密鑰長度不足時,會補齊) 加密

分組密碼的模式

分組密碼:每次只能處理特定長度的一塊數據的一類密碼算法;流密碼:對數據流進行連續處理的一類密碼算法 code

  • ECB(Electronic CodeBook mode)電子密碼本模式

在ECB模式中,將明文分組加密以後的結果直接成爲密文分組.示意圖以下所示:cdn

  • CBC(Cipher Block Chaining mode)密碼分組連接模式

在CBC模式中,首先將明文分組與前一個密文分組進行異或運算,而後再進行加密(初始化向量IV).示意圖以下所示:htm

  • CFB(Cipher FeedBack mode) 密文反饋模式

在CFB模式中,前一個密文分組會被送回到密碼算法的輸入端.示意圖以下所示:blog

  • OFB(Output FeedBack mode) 輸出反饋模式

在OFB模式中,密碼算法的輸出會反饋到密碼算法的輸入中。示意圖以下所示:ip

  • CTR(Counter mode) 計數器模式

CTR模式是一種經過逐次累加的計數器進行加密來生成密鑰流的流密碼.示意圖以下所示:

下面使用一張表格總結上面幾種模式的差別和優缺點:

模式 優勢 缺點 備註
ECB模式 簡單、快速;
支持並行計算(加密、解密)
明文的重複排列會反映在密文中;
經過刪除、替換密文分組能夠對明文進行操做;
對包含某些錯誤比特的密文進行解密時,
對應分組會出錯;不能抵禦重放攻擊
不該使用
CBC模式 明文的重複序列不會反映在密文中;
解密支持並行計算;
可以解密任意密文分組
加密不支持並行計算;
對包含某些錯誤比特的密文進行解密時,
第一分組的所有比特以及後一個分組的相應比特會出錯;
推薦使用
CFB模式 不須要填充;
解密支持並行計算;
可以解密任意密文分組
加密不支持並行計算;
對包含某些錯誤比特的密文進行解密時,
第一分組的所有比特以及後一個分組的相應比特會出錯;
不能抵禦重放攻擊
現已不使用,推薦使用CTR模式代替
OFB模式 不須要填充;
可事先進行解密、加密的準備;
加密、解密使用相同結構;
對包含某些比特錯誤的密文進行解密時,
只有明文中相應比特會出錯
不支持並行計算;
主動攻擊者反轉密文某些比特時,
明文分組相應比特也會受到反轉
推薦使用CTR模式代替
CTR模式 不須要填充;
可事先進行解密、加密的準備;
加密、解密使用相同結構;
對包含某些比特錯誤的密文進行解密時,
只有明文中相應比特會出錯;
支持並行計算(加密、解密)
主動攻擊者反轉密文某些比特時,
明文分組相應比特也會受到反轉
推薦使用

公鑰密碼

跟對稱加密不一樣,非對稱加密在加密和解密兩個階段使用的是不一樣的密鑰。加密時候使用的密鑰咱們稱之爲公鑰,解密時使用的密鑰稱之爲密鑰。一般公鑰都是公開的,私鑰是通訊雙方本身保留不能公開的。在非對稱加密中使用到的主要是 RSA算法 。其交互流程大概以下所示:

單向散列函數(消息摘要)

單向散列函數只能辨別出「篡改」,沒法辨別出「假裝」

  • 常見單向散列函數

    • MD5
    • SHA-1 SHA-256 SHA-384 SHA-512
  • 應用

    • 檢測軟件是否被篡改
    • 一次性口令
    • 爲隨機數生成器
    • 數字簽名
    • PBE(Password Base Encryption)基於口令的加密
    • 消息認證碼
  • 攻擊

    • 暴力攻擊,如彩虹表

消息認證碼MAC(message authentication code)

消息認證碼是一種確認完整性並進行認證的技術。消息認證碼的輸入包括任意長度的消息和一個發送者與接收者之間共享的密鑰,輸出一個固定長度的數據,稱爲MAC值

消息認證碼能夠識別篡改和假裝,可是不能解決「對第三方證實」以及「防止否定」這兩個問題

  • 實現方法

    • 使用單向散列函數,如HMAC
    • 使用分組密碼實現

      將分組密碼的密鑰做爲消息認證碼的共享密鑰來使用,並使用CBC模式將消息加密,將除最後一個密文分組之外的丟棄,並將最後一個密文分組做爲MAC值

  • 應用實例

    • IPsec:對通訊內容的認證和完整性校驗都是採用消息認證碼完成
    • SSL/TLS:對通訊內容的認證和完整性校驗也使用了消息認證碼
  • 攻擊

    • 重放攻擊
    • 暴力破解

數字簽名

數字簽名能夠識別篡改和假裝,還能防止否定

  • 數字簽名與公鑰密碼

  • 應用

    • 安全信息公告
    • 軟件下載
    • 公鑰證書

      驗證數字簽名時須要使用合法的公鑰,而爲了確保公鑰合法,能夠將公鑰做爲消息體,對其加上數字簽名

    • SSL/TLS

      SSL/TLS在認證服務器身份是否合法的時候須要使用服務器證書,而服務器證書就是加上了數字簽名的服務器公鑰

  • 實現

    使用RSA

  • 攻擊

    • 中間人攻擊
    • 對單向散列函數的攻擊
    • 利用數字簽名攻擊公鑰密碼
    • 證書

爲公鑰添加數字簽名

下面附上一張簡單的思惟導圖

上面總結的比較簡單,只是大概談及了一下概念。若是對於具體細節感興趣的推薦看一下《圖解密碼技術》這本書。感謝你寶貴的時間閱讀這篇文章。

相關文章
相關標籤/搜索