密碼學學習整理二


密碼學總結二

一.對稱密碼學

密碼體制的分類

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

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM