密碼學學習整理二

密碼學總結二

一.對稱密碼學

密碼體制的分類算法

  • 對稱密碼(加解密使用相同的密鑰)
    • 流密碼(序列密碼)
    • 分組密碼
  • 非對稱密碼(公鑰密碼,加解密使用不一樣的密鑰)

1.對稱密碼學概述

  1. 隨機性安全

    • 一個隨機序列要求每一個比特產生的機率都是1/2
    • 每一個比特與其餘比特統計上相互獨立
    • 對於計算機而言,計算機產生的一系列隨機數實際上是週期性的,只是週期很大

    任何人考慮用數學的方法產生隨機數確定是不合理的函數

    計算機自己只能產生僞隨機序列加密

  2. 隨機序列類型設計

    1. (通常)僞隨機序列
      • 僞隨機序列應該在統計上是隨機的
    2. 密碼學意義上安全的僞隨機序列
      • 不可預測性,即便知道了產生序列的算法、之前產生的全部比特,也不可能經過計算來預測下一個比特是什麼(準確預測成功的機率很低)目的是防止攻擊者在知道若干比特後,成功猜想後續比特
    3. 真隨機序列
      • 不能被可靠地重複產生(用徹底一樣的輸入操做兩次,獲得的是兩個不相關的序列)
  3. 如何獲得真隨機序列3d

    使用一種專門的設備(真隨機數發生器),輸入是各類沒法預測的信號:周圍空氣情況、電流的變化率…blog

    輸入是不斷變化的,輸出也就不可重複。ip

    有人能預測產生的下一個數嗎? 他必須重構輸入信號,這沒人能作到內存

  4. 一次一密資源

    1. 加密:明文流與密鑰流對應比特異或
    2. 解密:密文流與密鑰流對應比特異或
    3. 特色:密鑰流是真隨機序列,且不重複使用(故得名 一次一密)
    4. 安全性:由於密鑰流是真隨機的,因此沒人能預測下一個比特
    5. 是無條件安全的,即便攻擊者具備無限的計算資源和計算能力,也沒法破譯一次一密 (理論上不可破譯,無條件安全的,對於任意密文 y 和明文 x,都有 Pr[x | y] = Pr[x],即,不能經過分析密文得到明文的任何信息)
    6. 緣由:密鑰是隨機的,並且明文與密鑰是統計上相互獨立的,使得密文也是隨機的,故而密鑰的隨機性很好的隱藏了明文的統計特性
    7. 證實:

      密鑰流是隨機的,則每一個密鑰比特的機率知足: Pr[k=0]=1/2, Pr[k=1]=1/2

      假設明文流某個比特的機率知足: Pr[m=0]=p, Pr[m=1]=1-p

      對應的密文比特的機率:

      Pr[c=0] = Pr[k=0]Pr[m=0]+Pr[k=1]Pr[m=1]=1/2

      Pr[c=1] = Pr[k=0]Pr[m=1]+Pr[k=1]Pr[m=0]=1/2

    8. 只使用異或運算,軟硬件實現很是簡單。但實用性不強
      1. 密鑰是真隨機的
      2. 密鑰長度至少等於明文長度
      3. 每一個密鑰只用一次
  5. 流密碼

    1. 基本思想

      用一個較短的密鑰生成密鑰流,在攻擊者(計算能力是有限的)看來是隨機的(僞隨機的)。不是無條件安全的,僅是計算上安全的

    2. 產生密鑰流的任務由 密鑰流生成器 完成
    3. 關鍵:如何生成僞隨機性「好」的密鑰流,故而關鍵在於密鑰流生成器的設計
    4. 分類:
      1. 同步流密碼

        密鑰流只根據密鑰產生與明文流無關

      2. 自同步流密碼

        密鑰流不只與密鑰有關還與明文流有關

    5. 密鑰流生成器的內部構造
      1. 驅動部分

        爲非線性組合部分提供統計特性「好」的序列 (通常僞隨機序列)

      2. 非線性組合部分

        將提供的輸入序列組合成密碼學特性「好」的序列 (密碼學意義上安全的僞隨機序列)

      3. 驅動部分應該實現簡單,且提供統計特性較好的序列。反饋移位寄存器(FSR)能夠知足該要求,是流密碼設計中的經常使用模塊
      4. FSR的功能

        • 以密鑰爲初始狀態(輸入)
        • 按照肯定的遞推關係(由反饋函數決定)
        • 產生一個週期長、線性複雜度高、統計特性好的初始序列
        • 並將輸出提供給非線性組合等密碼變換,以產生抗密碼分析能力強的僞隨機序列
      5. 爲何不直接使用種子做隨機數
        1. 速度問題:收集種子一般很耗時
        2. 熵(不肯定性):種子的熵一般比較低,但無論其熵如何,僞隨機序列發生器都能產生統計性好的序列
      6. 如何收集種子纔是安全的?
        1. 毫秒計的時間
        2. 用戶的輸入
        3. 鼠標點擊的位置...它們混合在一塊兒便有了不可預測性,能夠抵抗種子猜想攻擊
  6. 分組密碼

    1. 特色
      • 將明文分紅等長(比特)的明文分組。
      • 輸入一個明文分組,輸出一個等長(一般)的密文分組。
    2. 實質
      實質是設計一種算法,能在密鑰控制下,把 n比特明文分組 簡單而迅速地置換成 惟一的 n比特的密文分組,而且這種變換是可逆的(解密)因此,它必須是一個 雙射函數 (由於明文分組空間等於密文分組空間)

    3. 設計分組密碼的兩種基本技術
      1. 混亂

        使明文和密文之間、密鑰和密文之間的相關統計特性極小化,從而使攻擊者沒法找到密鑰(經常使用方法代換)

      2. 擴散

        將明文及密鑰的影響儘量迅速地散佈到較多個密文比特中(經常使用方法置換)
        混亂和擴散的思想由香農提出,目的:抵抗攻擊者對密碼系統的統計分析

    4. 代換
      1. 什麼叫 代換?

        加密時,明文的每一個分組都應產生惟一的密文分組 (具備可逆性,爲了解密),稱這種明文分組到密文分組的可逆變換爲代換
      2. 若是明文分組爲n比特,則明文分組有多少個可能的取值?

        2^n

      3. 不一樣可逆變換有多少個?

        2^n!

      4. 若是分組長度過小,系統則等價於古典的代換密碼,容易經過對明文的統計分析而被攻破。但從實現的角度來看,構造分組長度很大的代換結構也不現實
      5. 實際中,常將明文分組再分紅較小的「段」,對每一個「段」用不一樣的代換結構(子代換)進行變換,稱每一個子代換爲代換盒,簡稱爲 S盒

  7. 數據加密標準(DES)

    1. 分組長度:明文分組、密文分組長度都是 64比特
    2. 密鑰空間:密鑰長度也是 64比特,其中有效密鑰長度 56比特 (有8比特奇偶校驗位)
    3. 算法:解密過程與加密過程徹底相同,惟一不一樣的是,子密鑰的使用順序徹底相反
    4. DES的安全性主要依賴於8個非線性代換S盒
    5. 具備雪崩效應: 明文或密鑰的一點小的變更使密文發生一個大的變化。
    6. DES算法目前最大的問題: 隨着計算機技術的飛速發展,56bit 的 有效密鑰長度不足以抵禦窮舉攻擊。由於密鑰空間大小隻有2^56 ≈ 10^17
    7. 三重DES (3DES) :使用兩個或三個密鑰,執行三次DES算法
  8. 流密碼與分組密碼的比較

    1. 流密碼的優點
      • 速度快
      • 代碼量少(RC4的代碼只有30行)
    2. 分組密碼的優點
      • 密鑰能夠重用
      • 有標準化算法(DES、AES)
  9. 填充
    1. 一般,明文長度是不固定的,按固定長度分組時,每每最後一個分組長度不足,如何解決?

      填充(Padding)
    2. 如何填充
      1. 填充一些字符補齊最後一個分組。
      2. 把最後一個分組的最後一個字節稱做填充指示符,所表示的十進制數字就是填充了多少字節。
      3. 明文尾部、填充的字符和填充指示符一塊兒做爲最後一組進行加密。
      4. 不論最後一個分組長度是否足夠,都要進行填充
        1. 長度不足時正常填充
        2. 長度足夠時新建分組填充一個組
  10. 分組密碼的工做模式
    爲何須要工做模式?
    分組密碼的輸入是一個明文分組,是定長的。
    要加密的明文是變長的,長度每每大於一個明文分組。
    即便有了安全的分組密碼體制,也須要採用適當的工做模式來隱蔽明文的統計特性,以提升總體的安全性。

    模式名稱 縮寫 英文全稱
    電子密碼本 ECB Electronic CodeBook
    密碼分組鏈 CBC Cipher Block Chaining
    密碼反饋 CFB Cipher FeedBack
    輸出反饋 OFB Output FeedBack
    計數器 CTR Counter
  11. ECB

    1. 每一個明文分組獨立加/解密
    2. 優勢
      • 簡單、高速
      • 無差錯傳播:單個密文分組出現錯誤只會影響該分組的解密,不會影響到其餘分組
    3. 缺點
      • 分組彼此獨立,相同密鑰下,相同明文分組得出相同密文分組
      • 這會暴露明文數據的格式和統計特徵
      • 且易受重放、插入攻擊,五種模式中安全性最弱
    4. ECB適用於發送少許數據的場合,通常不推薦
  12. CBC

    1. 每一個明文分組先與前一密文分組異或,再進行加密
    2. 初始矢量 IV
      • 加密第一個明文分組時,尚無反饋的密文,爲此須要預先置入一個,稱爲 初始矢量 IV(Initial Vector)
      • 收發雙方必須使用相同IV
      • IV無需加密保護,能夠隨密文一塊兒發送給接收方
      • 最好使用不一樣IV(好比每次將IV加1)加密不一樣明文
    3. CBC適用於文件加密,較ECB模式慢
    4. 有限差錯傳播
      • 單個密文分組出現錯誤會影響該分組和後面一個密文分組的解密
      • 可自同步,只要後面一個密文分組沒錯,便不會影響後續密文分組的解密
  13. CFB

    1. 速度
      • 實現簡單(只要求加密算法)
      • 比CBC慢不少,每次只有少數比特完成加密
    2. IV
      • 加密不一樣的明文,必須使用不一樣的IV
    3. 差錯傳播
      • 單個密文分組出現一個比特錯誤,不只影響該分組,還會最多影響後續[64/j]個密文分組的解密
    4. 自同步
      • 單個密文分組出現錯誤,只要後續[64/j]個密文分組沒有錯誤,後面的即可正確解密
    5. CFB適用於 明文按字符(如電傳電報)或按比特處理的流密碼中
    6. CFB適用於 無延遲的加密和傳播
    7. CFB適用於 容忍以少許錯誤擴展換來恢復同步能力的場合
  14. OFB

    1. 速度
      • 實現簡單(只要求加密算法)
      • 比CBC慢不少,每次只有少數比特完成加密
    2. IV
      • 加密不一樣的明文,必須使用不一樣的IV
    3. 無差錯傳播
      • 單個密文分組出現錯誤,隻影響該分組的解密
    4. 自同步
      • 能從密文錯誤中得以恢復;但丟失密文比特會沒法實現自同步
    5. 密鑰流
      • 可預計算 (由於密鑰流獨立於明文)
    6. OFB適用於 必須避免錯誤傳播的高速同步系統
  15. CTR

    1. 速度
      • 實現簡單(只要求加密算法)
      • 效率高
        • 可預計算
        • 可並行加密、吞吐量僅受可並行數量的限制
    2. 其餘
      • 可隨機訪問密文數據塊
      • 可證實安全性
    3. CTR適用於 須要並行處理的應用領域
  16. 對稱密鑰管理
    1. 保護密鑰是很重要的,由於全部的安全性都依賴於密鑰的機密性(柯克霍夫斯原則)
    2. Q&A
      1. 是否能夠記住密鑰,這樣就不用存儲,別人也偷看不了?
        • 理論上能夠,但不實際,由於密鑰是隨機的,很難記憶
      2. 既然有地方安全保存密鑰,爲啥不直接把敏感信息放在那裏?
        • 保護短的密鑰比保護數以兆計的信息更容易
    3. 用 密鑰 保護數以兆計的信息,用一些其餘技術保護大約16字節(128bit)的密鑰
    4. 主要技術
      • 基於口令的加密(PBE)
        • 加密
          • 選擇一個口令
          • 僞隨機序列發生器產生一個salt
          • 用一個算法混合口令和salt,一般使用Hash函數
          • 從Hash函數的輸出中取出所須要長度的比特做爲密鑰
          • 密鑰用完後丟棄。用腦子記住口令。
          • salt無需保密,能夠和加密後的數據一塊兒保存。
        • 解密
          • 輸入口令
          • 從保存點(磁盤)取出salt和密文
          • 用算法(Hash函數)混合口令和salt,產生密鑰
          • 用該密鑰解密密文,以恢復明文
      • 爲何不直接用口令做密鑰?
        • 口令的熵很小,遠達不到密鑰所要求的隨機程度
      • salt (鹽值) 是幹什麼用的?
        • 爲防止字典攻擊中的預計算
      • 爲何salt和密文一塊兒保存,保密salt不是更安全?
        • 使用salt的惟一目的是防止字典攻擊中的預計算,而不是增長安全性
        • 即便salt不保密,仍能達到目的。
        • 此外,若是保密salt的話,還不如直接保密密鑰。
      • 基於硬件的密鑰存儲
      • 生物統計學
  17. 保護密鑰的密鑰
    1. 通訊時,一般使用兩種密鑰
      • 會話密鑰 (臨時密鑰)
      • 密鑰加密密鑰 (KEK)
    2. 使用方法
      • 每次通訊使用不一樣的會話密鑰保護明文
      • KEK保護會話密鑰,並將之傳給對方
    3. 目的
      • 由於每次通訊使用不一樣的會話密鑰,攻擊者沒法得到同一密鑰加密的大量密文,使得破譯更加困難
    4. 用KEK保護會話密鑰,用什麼保護KEK?
      • 使用 基於口令的加密,步驟以下:
        • 用口令和salt產生KEK。
        • 用KEK加密會話密鑰,用會話密鑰加密明文
        • 記住口令,保存salt和加密後的會話密鑰
        • 將密文和加密後的會話密鑰傳給對方
        • 至於KEK,丟掉就OK了
  18. 對基於口令的加密的攻擊
    1. 假設攻擊者闖入你的電腦,偷走salt和密文(或 加密後的會話密鑰),他如何計算密鑰?
      • 窮舉攻擊密鑰(無需salt 也能夠發動)
    2. 字典攻擊 (猜想口令)
      • 由於salt不保密,若是攻擊者得到了salt,他仍能發起字典攻擊,只不過要多花一些時間
      • 構造或下載一本經常使用口令的字典,而後嘗試每一個口令和salt產生的密鑰
    3. 兩種攻擊方法的比較
      • 相比之下,字典攻擊速度更快。但若口令不在字典裏,固然不會成功
    4. 一個聰明的攻擊者通常會這樣作
      • 首先嚐試字典攻擊,失敗後換用改進的窮舉密鑰攻擊。
    5. 如何抵擋字典攻擊
      • 基本思想
        • 想辦法 下降攻擊者的計算速度
      • 基本方法
        • Hash函數混合salt和口令後,將輸出再次用Hash函數混合,重複進行屢次,假設1000次。
      • 優勢
        • Hash函數計算速度比你想象的快得多。
        • 事實上,計算1000次Hash函數比你從鍵盤輸入口令的時間還要短。
        • 但攻擊者不得不對字典中每一個口令計算1000次,使他總的計算時間會很長
      • 其餘的實用方法
        • 對於一些在線系統,如ATM機、網上銀行、電子郵箱、論壇等,能夠限制用戶輸入口令的次數
        • 若在規定次數內沒有輸入正確的口令,便吞卡,或提示半小時後才能再次使用系統
  19. 基於硬件的密鑰存儲
    1. 基於硬件的密鑰存儲
    2. 把密鑰保存在一個硬件設備上
      • 令牌
        • 能夠隨身攜帶:錢包裏、鑰匙鏈上、當戒指戴
        • 攻擊者要得到密鑰,必須先拿到令牌,這增長了攻擊難度
        • 令牌內部還有進一步保護措施
          • 須要輸入一個正確的口令才能使令牌發揮做用
          • 試圖用物理手段得到密鑰,令牌還有自毀功能
        • 令牌的惟一缺點
          • 必須把密鑰加載到內存裏才行,有可能會被木馬等病毒偷走
          • 但密鑰使用完畢就從內存中抹掉了,短短几分鐘甚至幾秒鐘的停留仍是問題不大的
    3. 密碼加速器
      • 有專門進行密碼運算的芯片,比通常CPU處理密碼更快,也比常規計算機更安全的存儲數據。
      • 安全特性
        • 存儲空間對外界不可見
        • 一旦被撬,有自毀裝置
        • 不容許密鑰離開。加密時把明文送入加速器,它返回密文。
      • 一般與令牌一塊兒使用
        • 只有插入令牌,提供令牌正確的口令,加速器才能工做
相關文章
相關標籤/搜索