2014年10月19日 星期日

區塊加密的工作模式

1.當message size大於或小於加密的block size時,我們通常會將其切割:
  • 比如在AES的情形下,容許一次加密的明文為128bits,那我們必須先把加密文件切割成若干個128 bits 才能進行加密處理。
2.為什麼我們需要引入各種加密型式
  • 將加密算法配合至各種需要(如上述第一個情形),同時也能增加密文的強度
3.ㄧ些常見的塊密碼工作模式
  • ECB : Electric Codebook
    • Let Plain text to P1,P2,P3,...Pn
    • Let Cipher text  to C1,C2,C3,...Cn
    • 把明文分成若干的block,各自加密,或將密文分成若干的block,各自解密
    • 弱點:重複的block + 重複的Key → 重複的密文,面對頻率分析相當危險
      • 比如加密星期二寄出的Email,Tuesday重複被加密成同樣的密文
      • 重複觀察就知道,這都是禮拜二寄出的,可以借此解出金鑰
  • CBC:Cipher Block Chaining
    • 一樣把明文分成若干塊
    • 把目前明文跟前份密文做Xor,之後再將完成Xor的明文送入加密演算法
    • 第一份明文需要一個初始向量(Initial Vector)做Xor
    • 限制:
        • Bit Flipping Attack
          • 因為傳送中有一點缺失,密文將大量改變 -> DoS
        • 需要一個IV,要讓sender and receiver 知道且不可重複

上述模式在明文被分割成若干區塊前不可執行,需要補綴處理至區塊大小
接下來的模型將明文當作位元流,可以對即時的資料進行加密

  • CFB:

    • 將明文視為位元流
      • 首先將明文切割為兩部分b-s與s
      • 將明文加密,捨棄b-s的明文,將s部分的密文與前一部份的s明文Xor得密文C
      • 把新明文左移s位,插入C至新明文
    • 限制:
      • 會有延遲,無法併行處理資料
      • 跟CBC mode一樣,錯誤容易擴散
      • 那麼,有偵測錯的方法嗎?
        • 可以加入除錯碼,可以及時發現錯誤,但要犧牲一個bit
        • PCBC mode
  • OFB:
    • 同樣的,把明文作為位元流
    •  一開始加密一個初始向量
      • 將加密後的初始向量分別傳到:
        • 1.第二個block
        • 2.與P1做Xor -> 得密文C1
      • 再來對先前傳至第二個block的IV做加密,完成後分別傳到第3個block ......
    • 優點:
      • 不依賴產生出的P1或C1, 所以不產生時間延遲
      • 錯誤不會擴散
  • CTR (Counter):
    • 加密方法:將Counter i 加密,與Pi進行Xor得到密文Ci,持續進行直到完全加密
    • 解密方法:將Counter i 加密,與Ci進行Xor得到明文Pi,持續進行直到完全解密
    • 每進行一次運算,便會將Counter++,所以稱為計數器模式
    • Counter 不應該被重複使用,避免相同明文出現相同密文
    • 類似於ECB的觀念,但放入加密器的是會變動Counter,而且Counter總是128位,所以可以視作密鑰流處理

  • 確保資料的正確性
    • message authentication
      • CBC - Residue, or CMAC , NMAC
      • HMAC
    • 核心觀念:建立一個除錯碼以及演算出除錯碼的方式,由傳送方跟接收方約定而成,接收方在獲得密文後再進行驗證。

沒有留言:

張貼留言