1. 程式人生 > >密碼學學習整理二

密碼學學習整理二

訪問 補齊 序列類型 最大 生物 幾分鐘 就是 不同 表示

密碼學總結二

一.對稱密碼學

密碼體制的分類

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

1.對稱密碼學概述

  1. 隨機性

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

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

    計算機本身只能產生偽隨機序列

  2. 隨機序列類型

    1. (一般)偽隨機序列
      • 偽隨機序列應該在統計上是隨機的
    2. 密碼學意義上安全的偽隨機序列
      • 不可預測性,即使知道了產生序列的算法、以前產生的所有比特,也不可能通過計算來預測下一個比特是什麽(準確預測成功的概率很低)目的是防止攻擊者在知道若幹比特後,成功猜測後續比特
    3. 真隨機序列
      • 不能被可靠地重復產生(用完全同樣的輸入操作兩次,得到的是兩個不相關的序列)
  3. 如何得到真隨機序列

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

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

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

  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處理密碼更快,也比常規計算機更安全的存儲數據。
      • 安全特性
        • 存儲空間對外界不可見
        • 一旦被撬,有自毀裝置
        • 不允許密鑰離開。加密時把明文送入加速器,它返回密文。
      • 通常與令牌一起使用
        • 只有插入令牌,提供令牌正確的口令,加速器才能工作

密碼學學習整理二