《現代密碼學》

緒論

信息安全與密碼學

  • 經典的信息安全三要素(CIA)——機密性、完整性和認證性是信息安全的核心原則。
  • 以密碼學爲基礎的信息安全的五個方面:信息及信息系統的機密性、完整性、可用性、認證性和不能否認性。機密性可經過加密變換實現訪問控制;完整性使用消息摘要算法防止篡改;認證性分爲實體認證和消息認證。
  • 攻擊分爲主動攻擊(中斷、篡改:對完整性的攻擊、僞造:對認證性的攻擊、重放:可以使用時間戳進行預防)和被動攻擊(截取:對機密性的攻擊)。
  • 密碼學是保障信息安全的做用。

  

 

密碼學發展史

  • 發源:1949年香農發表一篇題爲《保密系統的通訊理論》的經典論文。
  •  密碼學的發展經歷了兩個階段:傳統密碼學和現代密碼學。
  • 傳統密碼:古代密碼學、近代密碼。
  • 現代密碼學:1949年香農發表《保密系統的通訊理論》標誌着現代密碼學的真正開始(第一次質的飛躍)。1976年,Diffie和Hellman發表《密碼學的新方向》,標誌着公鑰密碼體制的誕生(第二次質的飛躍)。1978年,Rivest、Shamir和Adleman提出了RSA公鑰密碼體制。

密碼及法律法規

  • 密碼法規是社會信息化密碼管理的依據。

密碼學基礎

密碼學分類

  • 密碼學分爲密碼碼編碼學密碼分析學。編碼學主要分爲保密體制和認證體制,從使用密鑰的策略上分爲:對稱密碼體制和非對稱密碼體制(亦稱公鑰密碼體制)。
  • 密碼分析學中:設計和使用密碼系統必須遵照:柯克霍夫準則,要求算法必須公開,對密鑰進行保護。
  • 保密體制模型:明文空間、密文空間、密鑰空間、加密算法和解密算法。
  • 保密體制的安全性:
  1. 按照安全性遞減的順序劃分:所有破解、全盤推導、實例推導和信息推導。

         2.根據密碼分析者可得到的密碼分析的信息量把密碼體制的攻擊劃分:html

             (1)惟密文攻擊(僅知道一些密文)算法

             (2)已知明文攻擊(知道一些密文和相應明文)--------------------------------->密碼系統至少應經受住的攻擊;對流密碼的攻擊方式數組

             (3)選擇明文攻擊(密碼分析者能夠選擇一些明文並獲得相應密文)緩存

             (4)選擇密文攻擊(密碼分析者能夠選擇一些密文並獲得相應明文)安全

             (5)選擇文本攻擊網絡

         3.攻擊方式的分類:函數

               (1)窮舉攻擊(解決方法:增大密鑰量)性能

               (2)統計分析攻擊(解決方法:使明文的統計特性和密文的統計特性不同)學習

               (3)數學分析攻擊(解決方法:選用足夠複雜的加密算法)測試

         4.安全性級別:無條件安全性(H(P|C))=H(P))、計算安全性(計算出或估計出破譯一個密碼系統的計算量下限,利用已有的最好方法破譯它所須要的代價超過了破譯者的破譯能力(時間、空間和資源等))和可證實安全性。

  • 認證體制模型

       認證體制包括實體認證和消息認證。這裏主要指消息認證。

       認證體制的安全性:按照攻擊目標不一樣可分爲徹底摧毀、通常性僞造、選擇性僞造和存在性僞造。

  •  依照攻擊者的資源,分爲惟密鑰攻擊、已知消息攻擊、通常的選擇消息攻擊、特殊的選擇消息攻擊、自適應的選擇消息攻擊。

香農理論

參看信息論與編碼http://www.cnblogs.com/WittPeng/p/8988941.html

認證系統的信息理論

複雜度理論

算法的複雜度

  • 度量要素:時間複雜度(計算複雜度)和空間複雜度
  • 複雜度 O(*)

問題的複雜度

  • P類問題:具備一個在多項式時間內求解的算法的問題
  • NP類問題:不存在多項式時間求解算法的問題
  • 量子計算機能夠將NP類問題轉化爲P類問題

古典密碼體制

1.置換密碼

1.列置換密碼

  • 加密過程:(1)明文按照固定寬度m按行寫出,不足部分按照雙方約定方式填充,獲得字符矩陣;

                           (2)進行置換操做;

                          (3)讀出後即爲密文

  • 解密過程:將加密密鑰逆置,按照加密過程操做,便可由密文獲得明文。
  • 如密鑰e=(143)(56) 意思是1->4,4->3,3->1,5->6,6->5

2.週期置換密碼

  •  明文按照固定長度m分組,對字符串編號,從新排列位置從而獲得密文;解密時將加密密鑰逆置獲得解密密鑰,從新排列位置後獲得明文。

2.代換密碼

  • 代換密碼就是將明文中的字符替換爲其餘字符的密碼體制。

單表代換密碼

  • 基於密鑰的代換密碼,明文字母對應的密文字母在密文中保持不變
  • 仿射密碼:e(x)=ax+b(mod26) (a,b屬於Z26,gcd(a,26)=1)

                    x=d(e(x))=a-1(e(x)-b)(mod26)

多表代換密碼

  • 明文中不一樣位置的同一明文字母在密文中對應的密文字母不一樣,可以很好地對抗統計密碼分析
  • 實例:

 

Playfair密碼
加密步驟:a.在適當位置闖入一些特定字母,譬如q,使得明文字母串的長度爲偶數,而且將明文字母串按兩個字母一組進行分組,每組中的兩個字母不一樣。

b.明文m1m2對應的密文c1c2的肯定:m1和m2同行或同列,則c1爲m1後的字符,c2爲m2後的字符;若m1和m2既不一樣行也不一樣列,則c1c2在m1m2所肯定的矩形的其餘兩個角上,c1和m1同行,c2和m2同行。

Vigenere(維吉尼亞密碼)

例:

 

Vernam(維爾姆密碼)
Hill(希爾密碼)
  • [p]1*n≡([c]1*n*[k]-1m*n)(mod 26)62333333
  • 所使用的矩陣必須爲非奇異矩陣
  • 安全性:能較好抵抗統計分析法,對抗惟密文攻擊的強度較高,但易受已知明文攻擊

 

 

 

  • 逆矩陣的求法:
  • 轉輪密碼機

古典密碼的分析——統計分析法

單表代換密碼分析

  • 使用字母或漢字的統計規律

多表代換密碼分析

  • 肯定密鑰長度:
  1.  卡西斯基(Kasisks)測試法:找相同字母間隔字母數的最大公因子,有多是週期k
  2. 重合指數法:計算機率分析重合指數IC=Σpi ,IC高的多是單表代換,低的多是多表代換。
  • 肯定密鑰:擬重合指數測試法:x=Σriqi
  • 恢復明文並驗證

明文-密文對分析法

對稱密碼之分組密碼

對稱密碼
  • 特色:加密速度快、安全性好、基於標準化··· ···
  • 應用:數據保密傳輸、加密存儲··· ···

分組密碼概述

  • 將明文消息編碼表示後的二進制序列,劃分爲固定大小的塊
  • 加密和解密是一一映射的
  • 設計應知足要求
  1. 分組足夠長
  2. 密鑰長度足夠長
  3. 由密鑰肯定的置換算法足夠複雜
  4. 加密和解密運算簡單
  5. 通常無數據擴展
  • 理想分組密碼
  • 分組密碼的設計原則:擴散、混亂
  • 乘積密碼體制:在密鑰控制下擴散和混亂兩種密碼操做的屢次迭代
  • 迭代結構
  1. Feistel密碼
  2. SP網絡
組成 S盒(代換):混亂做用,P盒(置換):擴散做用
效果 雪崩效應
設計原則
  1. 分組長度
  2. 密鑰長度
  3. 輪函數F的設計原則:基本原則:非線性、可逆性、雪崩效應,性能指標:安全性、速度、靈活性
  4. 子密鑰的生成方法
  5. 迭代的輪數

DES算法

  • 特色
分組長度 64位
密碼體制 對稱密碼體制,加密和密鑰使用同一密鑰,僅子密鑰編排順序不一樣
有效密鑰長度 56位(原64位的每一個第8位爲奇偶校驗位,可忽略)
迭代結構 SP網絡結構,共16輪
優勢 只使用了標準的算術和邏輯運算
  • 流程

                                                                

①64位明文->②IP置換->

③分爲兩部分L0和R0:L0爲下一輪的R1;R0和第一次置換獲得的子密鑰混合通過F函數獲得下一輪的L1

->④置換IP-1->⑤獲得64位密文

F函數:

擴展置換 8*4的矩陣 每行的頭尾各補齊一位,變成8*6的矩陣
Ki子密鑰的生成算法 將56位的有效的密鑰壓縮成48位
代換盒(S盒)

步驟說明:b1b6肯定行,b2b3b4b5肯定列,將48位變成32位

特色:

  1. 非線性
  2. 每一行包括全部16種四位二進制碼
  3. 兩個輸出相差1bit,輸出至少相差2bit
  4. ··· ···
置換運算(P盒)  
  • 安全性
  • 缺陷
  1. 互補性:

              

2.弱密鑰:4個弱密鑰,12個半弱密鑰

3.迭代輪數

4.密鑰長度

  • 應對方法:多重DES
    • 二重DES
    • 三重DES
  • DES的分析方法:
    • 差分分析:由明文差和密文差求係數a,當輪數低於8輪時,我的計算機幾分鐘便可攻破
    • 線性分析

AES算法

  • 特色介紹
    • 分組長度:128位
    • 密鑰長度和對應輪數:128位10輪,192位12輪,256位14輪
    • 過程:前9輪 字節代換、行移位、列混合和輪密鑰加,第10輪 字節代換、行位移和輪密鑰加

       字節代換:S盒定義方法

      (1)初始化S盒,將第m行n列的元素初始化爲0xmn

      (2)將S盒中的每一個字節映射爲它在有限域GF(28)中的逆,0x00映射爲自身。AES使用Z2[x]上的不可約多項式m(x)=x8+x4+x3+x+1來構造GF(28)。求逆元素的方法是使用Z2[x]上的擴展的歐幾里得算法。

       行位移:簡單的左循環位移操做,第n行左移n位

       列混合 :經過矩陣相乘來實現

       輪密鑰加:

         密碼擴展算法:

           1.將初始密鑰輸入到一個4*4的矩陣中,每列的四個字節組成一個字,依次命名爲w[0],w[1],w[2],w[3]

           2.擴充40個新列,構成總共44列的擴展密鑰數組

               產生方式爲

      其中,T的組成爲:1.字循環(將一個字中的4個字節循環左移一個字節)

                                2.字節代換(使用S盒)

                                3.輪常量異或(將前兩步的結果同輪常量Rcon[j]進行異或,其中j表示輪數)

       

    • AES的結構
      • AES結構的一個顯著特徵是它不是Feistel結構
      • 輸入的密鑰被擴展成由44個32位字節所組成的數組w[i]
      • AES結構由四個階段組成
      • 僅僅在輪密鑰加階段使用密鑰,並在算法的開始和結束都是用輪密鑰加階段
      • 每一個階段都可逆,解密算法和加密算法並不同
      • 加密和解密過程的最後一輪只包含3個階段,這是由AES的特定結構所決定的,並且也是密碼算法可逆性所要求的
  • AES的安全性和可用性
    • AES和DES的對比
  相同 不一樣
DES
  1. 兩者的輪函數都由3層構成,非線性結構、線性混合層、子密鑰異或,只是順序不一樣;
  2. AES的子密鑰加對應於DES的S盒以前的子密鑰異或;
  3. AES的列混合運算目的是讓不一樣的字節相互影響,而DES中F函數的輸出與左邊一半數據相加也有相似的效果;
  4. AES的非線性運算是字節代換,對應於DES中惟一的非線性運算S盒;
  5. 行移位運算保證了每一行的字節不只僅影響其餘行對應的字節,並且影響其餘行全部的字節,這與DES中的置換P類似
密鑰長度固定56位 面向比特的運算 加密和解密運算一致
AES 密鑰長度能夠是128位、192位、256位 面向字節的運算

加密和解密運算不一致,加密器不能同時用作解密器

典型分組密碼

國際數據加密算法(IDEA)

  • 工做原理:明文64位,密鑰128位
  • 輪函數:分爲8輪,每輪輸入6個子密鑰和4個狀態塊
  • 輸出變換

                                                      

  • 解密過程
  • 子密鑰生成

 

RC6

  • 加密過程
  • 解密過程
  • 密鑰擴展方案

Skipjakc算法

Callmellia算法

工做模式

電子密碼本(ECB)模式

  • 工做模式

  • 特色:
    • 分組數量龐大,易受統計分析攻擊、分組重放攻擊和代換攻擊。
    • 明文或者密文出現一位的錯誤,只會影響一個分組,不會是錯誤擴散。
    • 是最快最簡單的工做模式
  • 應用:數據隨機且較少的狀況

密碼分組連接(CBC)模式

  • 工做模式

    

  • 特色
    • 克服了ECB模式的缺點
    • 雖然加密會使錯誤擴散,但解密的過程又進行了抵消,最後出錯的還是一個分組(密文的錯誤會由一組變成兩組)
    • 若文檔中的一個分組和他前面的一個分組和另外一個文檔相同,則這個分組會加密出相同的結果,因此引進了初始化向量IV,使頭文件不一樣(IV不用加密,能夠和明文一塊兒傳遞)
  • 應用:大型文件的加密,是軟件加密的最好選擇

密碼反饋(CFB)模式

  • 工做模式

其中,加密算法也能用於解密。加密是對移位寄存器的操做,不對明文加密

  • 特色
    • 面向比特流進行操做
    • 可用於同步序列密碼,加密和解密可同時進行
    • 有CBC的優勢
    • 對信道錯誤較敏感且會進行傳播,但解密後會糾正。對明文只會影響一個分組,對密文的錯誤影響只有寄存器推出錯誤密文後,才能阻止擴散
    • 數據加密速率低
  • 應用:加密字符序列

輸出反饋(OFB)模式

  • 工做模式

  • 特色
    • 改進了CFB,錯誤不會傳播,但密文的錯誤難以發現
    • 不具備自同步的能力
    • 初始向量IV不須要保密
  • 應用:在極易出錯的環境選用的模式,但須要有高速同步機制

計數器(CTR)模式

對稱密碼之序列密碼

簡介

  • 定義:指明文消息按字符逐字符地加密的一類密碼算法

密文序列c=c0c1···*···cn-1=Ek0(m0)···Ekn-1(mn-1),若ci=Eki(mi)=mi模加ki,稱爲加法序列密碼。

 

Hash函數和消息認證

Hash函數

定義 是一個從消息空間到像空間不可逆映射,同時是一種具備壓縮性的單向函數
散列值的生成 h=H(M)  h是定長的散列值,H是Hash函數運算,M是一個變成消息
應用 數字簽名  
消息認證

生成程序或文檔的「數字指紋」

用於安全運輸和存儲口令

性質          生成任意長度的消息  
產生定長的輸出   
計算任意給定的消息比較容易   
   安全性 單向性:找到H(x)=h的x是不可行的 
抗弱碰撞性:對於給定的消息M1,要發現另外一個消息M2,知足H(M1)=H(M2)在計算上是不可行的
抗強碰撞性:找任意一對不一樣的消息M1M2,使H(M1)=H(M2)在計算上是不可行的 

 雪崩效應

 
 單向性  
用途    生成數字簽名Sign(H(M))
對程序或者文件生成摘要(完整性認證)H(M)  
口令H(Password)        
函數結構 核心技術:設計無碰撞的壓縮函數f

迭代結構:

1.將輸入消息分紅L個固定長度的分組,每一個分組爲b位,最後一個分組包含輸入消息的總長度,若不足b位須要填充,

2.壓縮函數f:有兩個輸入,一個是前一次迭代的n位輸出,成爲連接變量;一個是消息的b位分組,併產生一個n位的輸出,即散列值。

Hash算法

MD5(128位) 結構

 

 生成過程  
 主循環      
每一分組的算法流程以下:
第一分組須要將上面四個連接變量複製到另外四個變量中:A到a,B到b,C到c,D到d。從第二分組開始的變量爲上一分組的運算結果,即A = a, B = b, C = c, D = d。
主循環有四輪(MD4只有三輪),每輪循環都很類似。第一輪進行16次操做。每次操做對a、b、c和d中的其中三個做一次非線性函數運算,而後將所得結果加上第四個變量,
文本的一個子分組和一個常數。再將所得結果向左環移一個不定的數,並加上a、b、c或d中之一。最後用該結果取代a、b、c或d中之一。
如下是每次操做中用到的四個非線性函數(每輪一個)。
F( X ,Y ,Z ) = ( X & Y ) | ( (~X) & Z )
G( X ,Y ,Z ) = ( X & Z ) | ( Y & (~Z) )
H( X ,Y ,Z ) =X ^ Y ^ Z
I( X ,Y ,Z ) =Y ^ ( X | (~Z) )
(&是與(And),|是或(Or),~是非(Not),^是異或(Xor))
這四個函數的說明:若是X、Y和Z的對應位是獨立和均勻的,那麼結果的每一位也應是獨立和均勻的。
F是一個逐位運算的函數。即,若是X,那麼Y,不然Z。函數H是逐位奇偶操做符。
假設Mj表示消息的第j個子分組(從0到15),常數ti是4294967296*abs( sin(i) )的整數部分,i 取值從1到64,單位是弧度。(4294967296=2 32)
現定義:
FF(a ,b ,c ,d ,Mj ,s ,ti ) 操做爲 a = b + ( (a + F(b,c,d) + Mj + ti) << s)
GG(a ,b ,c ,d ,Mj ,s ,ti ) 操做爲 a = b + ( (a + G(b,c,d) + Mj + ti) << s)
HH(a ,b ,c ,d ,Mj ,s ,ti) 操做爲 a = b + ( (a + H(b,c,d) + Mj + ti) << s)
II(a ,b ,c ,d ,Mj ,s ,ti) 操做爲 a = b + ( (a + I(b,c,d) + Mj + ti) << s)
注意:「<<」表示循環左移位,不是左移位。
這四輪(共64步)是:
第一輪
FF(a ,b ,c ,d ,M0 ,7 ,0xd76aa478 )
FF(d ,a ,b ,c ,M1 ,12 ,0xe8c7b756 )
FF(c ,d ,a ,b ,M2 ,17 ,0x242070db )
FF(b ,c ,d ,a ,M3 ,22 ,0xc1bdceee )
FF(a ,b ,c ,d ,M4 ,7 ,0xf57c0faf )
FF(d ,a ,b ,c ,M5 ,12 ,0x4787c62a )
FF(c ,d ,a ,b ,M6 ,17 ,0xa8304613 )
FF(b ,c ,d ,a ,M7 ,22 ,0xfd469501)
FF(a ,b ,c ,d ,M8 ,7 ,0x698098d8 )
FF(d ,a ,b ,c ,M9 ,12 ,0x8b44f7af )
FF(c ,d ,a ,b ,M10 ,17 ,0xffff5bb1 )
FF(b ,c ,d ,a ,M11 ,22 ,0x895cd7be )
FF(a ,b ,c ,d ,M12 ,7 ,0x6b901122 )
FF(d ,a ,b ,c ,M13 ,12 ,0xfd987193 )
FF(c ,d ,a ,b ,M14 ,17 ,0xa679438e )
FF(b ,c ,d ,a ,M15 ,22 ,0x49b40821 )
第二輪
GG(a ,b ,c ,d ,M1 ,5 ,0xf61e2562 )
GG(d ,a ,b ,c ,M6 ,9 ,0xc040b340 )
GG(c ,d ,a ,b ,M11 ,14 ,0x265e5a51 )
GG(b ,c ,d ,a ,M0 ,20 ,0xe9b6c7aa )
GG(a ,b ,c ,d ,M5 ,5 ,0xd62f105d )
GG(d ,a ,b ,c ,M10 ,9 ,0x02441453 )
GG(c ,d ,a ,b ,M15 ,14 ,0xd8a1e681 )
GG(b ,c ,d ,a ,M4 ,20 ,0xe7d3fbc8 )
GG(a ,b ,c ,d ,M9 ,5 ,0x21e1cde6 )
GG(d ,a ,b ,c ,M14 ,9 ,0xc33707d6 )
GG(c ,d ,a ,b ,M3 ,14 ,0xf4d50d87 )
GG(b ,c ,d ,a ,M8 ,20 ,0x455a14ed )
GG(a ,b ,c ,d ,M13 ,5 ,0xa9e3e905 )
GG(d ,a ,b ,c ,M2 ,9 ,0xfcefa3f8 )
GG(c ,d ,a ,b ,M7 ,14 ,0x676f02d9 )
GG(b ,c ,d ,a ,M12 ,20 ,0x8d2a4c8a )
第三輪
HH(a ,b ,c ,d ,M5 ,4 ,0xfffa3942 )
HH(d ,a ,b ,c ,M8 ,11 ,0x8771f681 )
HH(c ,d ,a ,b ,M11 ,16 ,0x6d9d6122 )
HH(b ,c ,d ,a ,M14 ,23 ,0xfde5380c )
HH(a ,b ,c ,d ,M1 ,4 ,0xa4beea44 )
HH(d ,a ,b ,c ,M4 ,11 ,0x4bdecfa9 )
HH(c ,d ,a ,b ,M7 ,16 ,0xf6bb4b60 )
HH(b ,c ,d ,a ,M10 ,23 ,0xbebfbc70 )
HH(a ,b ,c ,d ,M13 ,4 ,0x289b7ec6 )
HH(d ,a ,b ,c ,M0 ,11 ,0xeaa127fa )
HH(c ,d ,a ,b ,M3 ,16 ,0xd4ef3085 )
HH(b ,c ,d ,a ,M6 ,23 ,0x04881d05 )
HH(a ,b ,c ,d ,M9 ,4 ,0xd9d4d039 )
HH(d ,a ,b ,c ,M12 ,11 ,0xe6db99e5 )
HH(c ,d ,a ,b ,M15 ,16 ,0x1fa27cf8 )
HH(b ,c ,d ,a ,M2 ,23 ,0xc4ac5665 )
第四輪
II(a ,b ,c ,d ,M0 ,6 ,0xf4292244 )
II(d ,a ,b ,c ,M7 ,10 ,0x432aff97 )
II(c ,d ,a ,b ,M14 ,15 ,0xab9423a7 )
II(b ,c ,d ,a ,M5 ,21 ,0xfc93a039 )
II(a ,b ,c ,d ,M12 ,6 ,0x655b59c3 )
II(d ,a ,b ,c ,M3 ,10 ,0x8f0ccc92 )
II(c ,d ,a ,b ,M10 ,15 ,0xffeff47d )
II(b ,c ,d ,a ,M1 ,21 ,0x85845dd1 )
II(a ,b ,c ,d ,M8 ,6 ,0x6fa87e4f )
II(d ,a ,b ,c ,M15 ,10 ,0xfe2ce6e0 )
II(c ,d ,a ,b ,M6 ,15 ,0xa3014314 )
II(b ,c ,d ,a ,M13 ,21 ,0x4e0811a1 )
II(a ,b ,c ,d ,M4 ,6 ,0xf7537e82 )
II(d ,a ,b ,c ,M11 ,10 ,0xbd3af235 )
II(c ,d ,a ,b ,M2 ,15 ,0x2ad7d2bb )
II(b ,c ,d ,a ,M9 ,21 ,0xeb86d391 )
全部這些完成以後,將a、b、c、d分別在原來基礎上再加上A、B、C、D。
即a = a + A,b = b + B,c = c + C,d = d + D
而後用下一分組數據繼續運行以上算法。
     
     
 SHA-1(160位)  美國國家標準技術研究所NIST開發  
一、將消息摘要轉換成位字符串
由於在Sha-1算法中,它的輸入必須爲位,因此咱們首先要將其轉化爲位字符串,咱們以「abc」字符串來講明問題,由於'a'=97, 'b'=98, 'c'=99,因此將其轉換爲位串後爲:
01100001 01100010 01100011
二、對轉換後的位字符串進行補位操做
Sha-1算法標準規定,必須對消息摘要進行補位操做,即將輸入的數據進行填充,使得數據長度對512求餘的結果爲448,填充比特位的最高位補一個1,其他的位補0,若是在補位以前已經知足對512取模餘數爲448,也要進行補位,在其後補一位1便可。總之,補位是至少補一位,最多補512位,咱們依然以「abc」爲例,其補位過程以下:
初始的信息摘要:01100001 01100010 01100011
第一步補位:    01100001 01100010 01100011 1
..... ......
補位最後一位:  01100001 01100010 01100011 10.......0(後面補了423個0)
然後咱們將補位操做後的信息摘要轉換爲十六進制,以下所示:
61626380 00000000 00000000 00000000
00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000
00000000 00000000
三、附加長度值
在信息摘要後面附加64bit的信息,用來表示原始信息摘要的長度,在這步操做以後,信息報文即是512bit的倍數。一般來講用一個64位的數據表示原始消息的長度,若是消息長度不大於2^64,那麼前32bit就爲0,在進行附加長度值操做後,其「abc」數據報文即變成以下形式:
61626380 00000000 00000000 00000000
00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000018
由於「abc」佔3個字節,即24位 ,換算爲十六進制即爲0x18。
四、初始化緩存
一個160位MD緩衝區用以保存中間和最終散列函數的結果。它能夠表示爲5個32位的寄存器(H0,H1,H2,H3,H4)。初始化爲:
H0 = 0x67452301
H1 = 0xEFCDAB89
H2 = 0x98BADCFE
H3 = 0x10325476
H4 = 0xC3D2E1F0
若是你們對MD-5不陌生的話,會發現一個重要的現象,其前四個與MD-5同樣,但不一樣之處爲存儲爲big-endien format.
五、計算消息摘要
在計算報文以前咱們還要作一些基本的工做,就是在咱們計算過程當中要用到的方法,或定義。
(1)、循環左移操做符Sn(x),x是一個字,也就是32bit大小的變量,n是一個整數且0<=n<=32。Sn(X) = (X<<n)OR(X>>32-n)
(2)、在程序中所要用到的常量,這一系列常量字k(0)、k(1)、...k(79),將其以十六進制表示以下:
Kt = 0x5A827999  (0 <= t <= 19)
Kt = 0x6ED9EBA1 (20 <= t <= 39)
Kt = 0x8F1BBCDC (40 <= t <= 59)
Kt = 0xCA62C1D6 (60 <= t <= 79)
(3)、所要用到的一系列函數
 Ft(b,c,d)  ((b&c)|((~b)&d))    (0 <= t <= 19)
 Ft(b,c,d) (b^c^d)             (20 <= t <= 39)
 Ft(b,c,d) ((b&c)|(b&d)|(c&d))  (40 <= t <= 59)
 Ft(b,c,d) (b^c^d)               (60 <= t <= 79)
(4)、計算
計算須要一個緩衝區,由5個32位的字組成,還須要一個80個32位字的緩衝區。第一個5個字的緩衝區被標識爲A,B,C,D,E。80個字的緩衝區被標識爲W0, W1,..., W79
另外還須要一個一個字的TEMP緩衝區。
爲了產生消息摘要,在第4部分中定義的16個字的數據塊M1, M2,..., Mn
會依次進行處理,處理每一個數據塊Mi 包含80個步驟。
如今開始處理M1, M2, ... , Mn。爲了處理 Mi,須要進行下面的步驟
(1). 將 Mi 分紅 16 個字 W0, W1, ... , W15,  W0 是最左邊的字
(2). 對於 t = 16 到 79 令 Wt = S1(Wt-3 XOR Wt-8 XOR Wt- 14 XOR Wt-16).
(3). 令 A = H0, B = H1, C = H2, D = H3, E = H4.
(4) 對於 t = 0 到 79,執行下面的循環
TEMP = S5(A) + ft(B,C,D) + E + Wt + Kt;
E = D; D = C; C = S30(B); B = A; A = TEMP;
(5). 令 H0 = H0 + A, H1 = H1 + B, H2 = H2 + C, H3 = H3 + D, H4 = H4 + E. 
在處理完全部的 Mn, 後,消息摘要是一個160位的字符串,如下面的順序標識
H0 H1 H2 H3 H4.
對於SHA256,SHA384,SHA512。你也能夠用類似的辦法來計算消息摘要。對消息進行補位的算法徹底是同樣的。

Hash函數的攻擊

生日攻擊:p(k)=1-p365k/365k;k=23,p(k)=0.5073;k=100,p(k)=0.99999997。能夠減小一半的嘗試量

兩個集合的相交問題。

Hash函數的應用

消息認證:

目的:

    1. 驗證是否真實
    2. 驗證完整性

MDC和加密:僅能驗證完整性

消息認證碼MAC

    • 用於消息源認證和消息完整性的認證
    • 構造MAC的方法
      1. 使用DES分組加密算法的MAC
      2. 基於Hash的認證碼——HMAC

      • 安全性:包裏搜索密鑰須要2k(k爲密鑰長度);攻擊MAC須要2n

 第七章 公鑰密鑰體制

公鑰密碼體制概述

  • 對稱密碼體制的侷限性:
    • 密鑰分發問題
    • 密鑰管理問題
    • 數字簽名問題
  • 公鑰加密體制的思想
    • 公鑰和私鑰
    • 基於陷門單向函數的困難問題
  • 公鑰密碼體制的分類

公鑰加密體制介紹

ElGamal    應用 1.加密;2.數字簽名
密鑰生成
  1. 隨機選擇一個知足安全要求的1024位的大素數p,並生成有限域Zp的一個生成元g∈Zp*
  2. 選擇一個隨機數x(1<x<p-1),計算y≡gx(mod p),則公鑰爲(y,g,p),私鑰爲Sk=x。

                          (隨機數的選取可使同一明文在不一樣時間加密成不一樣密文)

加解密算法
  1. 加密過程:將明文分組比特串分組,是分組長度小於log2p,,而後對每一個明文分組分別加密
    1. 獲得公鑰Pk(y,g,p);
    2. 消息m分組m1m2m3m4······
    3. 對第i塊消息隨機選擇整數ri(1<ri<p-1);
    4. 計算ci≡gri(mod p),ci'≡miyri(mod p)(1≤i≤t)
    5. 將密文C=(c1,c1')()()()····發送給接收方  (可知,密文是明文長度的2倍)
  2. 解密過程
    1. 接收方接收密文C
    2. 使用密鑰x和解密算法mi≡(ci'/cix)(mod p)(1≤i≤t)進行計算
    3. 獲得明文
  3. 正確性

  

安全性分析
  1. 窮舉法和列表法(二分查找算法) O(p)
  2. 小步大步算法

來源於生日攻擊的思想,

小步爲 序列1:g1,···,gj,···,gm(1≤j≤m)

大步爲 序列2:y,y*g-m,···,y*g-im

找到gj≡y*g-im(mod p),即找到y=gj+im(mod p),即x=j+im私鑰被找到

時間複雜度:O(p1/2)

3.指數積分法

  1.  選取因子基S
  2. 建構同餘方程組:對若干隨機整數k(0≤k≤p),計算gk,嘗試將gk寫成S中的元素冪次的乘積,即gk=∏piei(mod p),式子兩邊取離散對數k≡∑eilogg(pi)(mod (p-1)),重複這個過程,直到有超過m個方程
  3. 求logg(pi)
  4. 計算x:隨機取整數r,計算ygrmod p,使得其值可表示爲S中元素冪次的乘積,即ygr=∏pidi(mod p),取離散對數可得x≡logg(y)≡-r+∑dilogg(pi)(mod (p-1)),若是成功,即求得此解x。
 MH揹包公鑰加密體制      難題來源

 揹包問題:∑aixi=b,這是一個NP徹底類問題

特例:超遞增序列(每個元素都比先前的元素和大) 可將揹包問題轉化爲P類問題

 公私鑰對的生成
  1. 選取素數p 和u,且bi爲超遞增序列
  2. 利用uv=1(mod p)可求得v
  3. a=ubk(mod p)
  4. {ai}和p做爲公鑰,{bi}和v做爲私鑰
 加密和解密
  1.  明文消息分組
  2. 密文c=a1m1+···+anmn
    1. 利用{bi}求v c的解,可得消息m  
 安全性分析
  1.  NP類問題,至今沒有好的求解方法,能經受住窮舉攻擊
  2. 隱蔽性不夠,此公鑰密碼是不安全的
 地位 第一個公鑰算法 
 RSA公鑰密碼    理論基礎

 數論中的歐拉定理,安全性依賴於大整數的素因子分解的困難性

歐拉定理:若a和n互素,則aΦ(n)≡1(mod n)

密鑰生成算法

加密和解密

(1)生成公私密鑰

  • 選取兩個大素數p和q,至少要1024位
  • 計算n=p*q
  • 隨機選取整數e在(1≤e≤Φ(n))做爲公鑰,要求知足gcd(e,Φ(n))=1
  • 用Euclid擴展算法計算私鑰d,知足d*e≡1(mod Φ(n)),則e和n是公鑰,d是私鑰

(3)明文加密 
 c=E(m)=me(mod n)
4)密文解密。
   m=D(c)=cd(mod n)

 安全性

 1.算法正確性的證實

2.攻擊

  1. 針對n分解的攻擊
    1. 試除法
    2. 因子分解分析法:二次篩因子分析法
    3. 側信道攻擊

           2.針對算法參數的攻擊

                       1.對素數p和q選取時的限制;p和q長度相差不大,大小相差要大,不然難以抵禦除法的攻擊;p-1和q-1都應有大的素因子。

                       2.共模攻擊(所以不一樣用戶不用使用相同的p和q)

                       3.低指數攻擊

 橢圓曲線公鑰加密體制          橢圓曲線

韋爾斯特拉方程 :E:y²+axy+by=x³+cx²+dx+e。密碼學中,常採用的橢圓曲線爲: E:y²=x³+ax+b,並要求4a³+27b²≠0

Hasse定理:若是E是有限域GF(p)上的橢圓曲線,N是E上的點(x,y)(其中x,yξGF(p))的個數,則:|N-(p+1)|≤2(p)½

橢圓曲線上的點集合Ep(a,b)對於以下定義的加法規則構成一個Abel羣:

  1. O+O=O;(O是單位元)
  2. 橢圓上的點P,P+O=P;
  3. P的逆元是-P;
  4. 知足交換律

  5. 知足結合律

點乘規則:

  • 若是k爲整數,kP=P+···+P    (k個P相加)
  • 若是s和t爲整數,(s+t)P=sP+tP,s(tP)=t(sP)

橢圓曲線點的計算:

                                         

 

 

 

 ECC密鑰生成算法
  1. 選擇一個橢圓曲線E,構造一個橢圓羣Ep(a,b)。 
  2. 在橢圓羣中挑選生成元點G=(x0,y0),需知足nG=O的最小的n是一個很是大的素數。
  3. 選擇一個小於n的整數nB做爲私鑰,而後利用PB=nBG算出PB。

       公鑰爲(E,n,G,PB),私鑰爲nB。

 加密過程
  1.  A將明文消息編碼成一個數m<p,並在橢圓羣Ep(a,b)中任選一點Pt=(xt,yt);
  2. 在區間[1,n-1]內,A選取一個隨機數k,計算P1:P1=(x1,y1)=kG;
  3. 依據接收方B的公鑰PB,A計算點P2:P2=(x2,y2)=kPB
  4. A計算密文C=mxt+yt;
  5. A傳送加密數據Cm={kG,Pt+kPB,C}給接收方B。
 解密過程
  1.  接收方B收到Cm;
  2. B使用私鑰nB作運算:Pt+kPB-nB(kG)=Pt+k(nBG)-nB(kG)=Pt;
  3. B計算m=(C-yt)/xt,得明文m。
 安全性和優點      安全性基於橢圓曲線上的離散對數問題
應用前景好,尤爲是在移動通訊和無線設備上的應用,計算量小,處理速度快,存儲空間佔用小,帶寬要求低。 

 160位的ECC密鑰和1024位的RSA和1024位的ElGamal的安全性等同。

可用於加密、數字簽名。 
未申請專利 
         Rabin公鑰加密體制  前言(學習意義)  具備很好的參考價值
 特色 

 不是以一一對應的陷門單向函數爲基礎,同一密文可能有多種明文;

 破譯該體制等價於對大整數的因子分解。
 密鑰生成算法

隨機選取兩個大素數p和q,而且p≡q≡3mod4,將p和q做爲私鑰,n=pq做爲公鑰 

 加密算法 設明文塊爲m(m<n),運用公式c=m²modn 進行加密,c爲密文。
 解密算法   

 

    

第八章 數字簽名技術

數字簽名概述

基本概念

  數字簽名技術通常分爲帶仲裁和不帶仲裁的兩類。若是使用對稱密鑰進行數字簽名,則必須使用仲裁者,非對稱能夠不帶仲裁。

  數字簽名能夠實現不能否認性和消息完整性認證(檢驗是否被篡改或僞造)

原理

  (P,S,K,Sig,Ver),P:密鑰生成算法,S:簽名算法,K:驗證算髮,Sign,Verify

      過程簡圖

        

數字簽名的實現方案

基於RSA的簽名方案  密鑰生成算法
  1. 選取兩個512位的大素數p和q,使得N(=pq)爲1024位;
  2. 可得Φ(N)=(p-1)(q-1);
  3. 選取隨機整數e(1<e<Φ(N)),知足gcd(e,Φ(N))=1;
  4. 計算d: d≡e-¹(mod Φ(N));
  5. 公鑰Pk=(n,e),私鑰爲{d,Φ(N),p,q}。

  這裏,先選擇e再肯定d的緣由是:加密的重要性大於解密的重要性。

  簽名算法
  1. 利用一個安全的Hash函數h來產生消息摘要h(m);
  2. s≡h(m)d(mod n),s就是消息m的簽名;
  3. 將(s,m)發送給B。
   驗證算法
  1.   利用上述Hash函數生成h(m);
  2. 檢驗等式h(m)mod n≡se(mod n)是否成立,成立則簽名有效,不然簽名無效。
    正確性   
    安全性 
  1. 簽名時使用了Hash函數能夠防止利用同態的僞造攻擊,有很好的抗攻擊性。
  2. RSA簽名方案存在簽名可重用的問題,同一消息在不一樣時刻簽名不該是相同的。
 基於離散對數的簽名方案                  ElGamal簽名體制     密鑰生成算法
  1.  選取一個1024位的大素數p;
  2. 選擇一個生成元g和隨機數x,計算y≡gx(mod p)

           簽名者的公鑰是(p,g,y),私鑰是x。

 簽名算法 簽名者選取隨機數k,計算r≡gk(mod p),s≡[h(m)-xr]K-1(mod(p-1)),簽名爲(r,s),其中h爲安全的Hash函數
 驗證算法 計算h(m)後,驗證yxrs≡gh(m)(mod p)是否成立  
 正確性   
 安全性
  1. 隨機數k的選取和保管:首先k值不能泄露,不然簽名者的私鑰泄露;其次,k不能重複使用;最後,簽名者屢次簽名的的多個k之間無關聯。
  2. 若是不使用Hash函數,則簽名方案容易受到僞造攻擊
 Schnorr簽名體制     特色  簽名速度較快,簽名長度較短   
 密鑰生成算法
  1. 選取兩大素數p(1024位)和q,q是p-1的大素因子且長度比p小得多;
  2. 選取一個生成元,且gq≡1(mod o),g≠1;
  3. 選取隨機數1<x<q,計算y≡gx(mod p),公鑰爲(p,q,g,y),私鑰爲x。
 簽名算法

簽名者選擇隨機數k,1≤k≤q-1,而後進行以下計算:

            r≡gk(mod p)

            e=h(m,r)

            s≡(xe+k)(mod q)

簽名爲(e,s),其中h爲安全的Hash函數。

 驗證算法 簽名接收者在收到消息m和簽名(e,s)後,首先計算r1≡gsy-e(mod p) ,而後驗證e=h(e,r1),若是等式成立則簽名有效,不然無效。
 正確性和安全性

  

 

 安全性和ElGaml相似

 DSA簽名體制      密鑰生成算法
  1.   選取160bite的素數q,選擇512~1024bite的素數p,使得p-1能被q整除;
  2. 選擇g≡h(p-1)/q(mod p),h知足1<h<p-1,且g>1;
  3. 選擇1~q之間的隨機數x做爲私鑰,計算y≡gx(mod p),用戶的公鑰是(p,q,g,y)
 簽名算法   選取隨機數k,r=(gkmod p)mod q,s≡[h(m)+xr]k-1(mod q),其中h是SHA1的特定Hash函數
 驗證算法

收到m和簽名值(r,s)後,計算

  w≡s-1(mod q)  

  u1≡h(m)w(mod q)

  u2≡rw(mod q)

  v=(gu1yu2mod p)mod q

比較v和r,相同則簽名有效,不然無效。

 正確性   
 安全性 DSA是ElGamal的變形,所以安全性論述在此也一樣使用。還有一點是簽名算法計算的s正好爲0時,會產生1除以0的狀況,必須放棄這個簽名。  
  三種簽名體制的對比   

 

 離散對數簽名體制 

 

        基於橢圓曲線的簽名方案          密鑰生成算法

  選擇E上一點G∈E,G的階爲知足安全要求的素數n,即nG=O。

  選取一個隨機數d∈[1,n-1],計算Q使得Q=dG,那麼公鑰爲(n,Q),私鑰爲d。

簽名算法
  1. 用戶隨機選取整數k∈[1,n-1],計算kG=(x,y),r≡x(mod n);
  2. 計算e=h(m);
  3. 計算s≡(e+rd)k-1(mod n),若是r=0或s=0,則另選隨機數k,從新執行上面的過程,消息m的簽名爲(r,s)。
驗證算法 
  1.   計算e=h(m);
  2. 計算u≡s-1e(mod n),v≡s-1r(mod n),(x1,y1)=uG+vQ,r1≡x1(mod n);
  3. 判斷r和r1的關係,相等則簽名有效,不然無效。
正確性    

 

   安全性    

        ECDSA安全性依賴於基於橢圓曲線的有限羣上的離散對數難題,與RSA和有限域離散對數的數字簽名相比,在相同的安全強度條件下,有以下特色

      簽名長度短、密鑰存儲空間小,特別是用於存儲空間有限、帶寬受限、要求高速實現的場合。

特殊數字簽名

  • 代理簽名
  • 盲簽名
  • 羣簽名
  • 不能否認簽名
  • 門限數字簽名
  • 多重數字簽名
  • ··· ··

密鑰管理

密鑰管理概述

密鑰管理的原則

  • 區分密鑰管理的策咯和機制
  • 徹底安全原則
  • 最小權力原則
  • 責任分離原則
  • 密鑰分級原則
  • 密鑰更換原則
  • 密鑰應該有足夠的長度
  • 密鑰體制不一樣,密鑰管理也不相同

密鑰管理的層次結構

  • 會話密鑰
  • 密鑰加密密鑰
  • 主密鑰

        越低層的密鑰更換越快。僅主密鑰須要人工裝入,其餘各級密鑰都可以由密鑰管理系統按照某些協議來進行自動地分配、更換、撤銷等。

密鑰生命週期

相關文章
相關標籤/搜索