现代密码学摘要
https://www.cnblogs.com/WittPeng/p/8978737.html
轉自https://www.cnblogs.com/WittPeng/p/8978737.html
尊重原創
緒論
信息安全與密碼學
- 經典的信息安全三要素(CIA)——機密性、完整性和認證性是信息安全的核心原則。
- 以密碼學為基礎的信息安全的五個方面:信息及信息系統的機密性、完整性、可用性、認證性和不可否認性。機密性可通過加密變換實現訪問控制;完整性使用消息摘要算法防止篡改;認證性分為實體認證和消息認證。
- 攻擊分為主動攻擊(中斷、篡改:對完整性的攻擊、偽造:對認證性的攻擊、重放:可使用時間戳進行預防)和被動攻擊(截取:對機密性的攻擊)。
- 密碼學是保障信息安全的作用。
?
密碼學發展史
- 發源:1949年香農發表一篇題為《保密系統的通信理論》的經典論文。
- ?密碼學的發展經歷了兩個階段:傳統密碼學和現代密碼學。
- 傳統密碼:古代密碼學、近代密碼。
- 現代密碼學:1949年香農發表《保密系統的通信理論》標志著現代密碼學的真正開始(第一次質的飛躍)。1976年,Diffie和Hellman發表《密碼學的新方向》,標志著公鑰密碼體制的誕生(第二次質的飛躍)。1978年,Rivest、Shamir和Adleman提出了RSA公鑰密碼體制。
密碼及法律法規
- 密碼法規是社會信息化密碼管理的依據。
密碼學基礎
密碼學分類
- 密碼學分為密碼碼編碼學密碼分析學。編碼學主要分為保密體制和認證體制,從使用密鑰的策略上分為:對稱密碼體制和非對稱密碼體制(亦稱公鑰密碼體制)。
- 密碼分析學中:設計和使用密碼系統必須遵守:柯克霍夫準則,要求算法必須公開,對密鑰進行保護。
- 保密體制模型:明文空間、密文空間、密鑰空間、加密算法和解密算法。
- 保密體制的安全性:
? ? ? ? ?2.根據密碼分析者可獲得的密碼分析的信息量把密碼體制的攻擊劃分:
? ? ? ? ? ? ?(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(希爾密碼) |
? ? ?
|
- 轉輪密碼機
古典密碼的分析——統計分析法
單表代換密碼分析
- 使用字母或漢字的統計規律
多表代換密碼分析
- 確定密鑰長度:
- 確定密鑰:擬重合指數測試法:x=Σriqi
- 恢復明文并驗證
明文-密文對分析法
對稱密碼之分組密碼
對稱密碼
- 特點:加密速度快、安全性好、基于標準化··· ···
- 應用:數據保密傳輸、加密存儲··· ···
分組密碼概述
- 將明文消息編碼表示后的二進制序列,劃分為固定大小的塊
- 加密和解密是一一映射的
- 設計應滿足要求
- 理想分組密碼
- 分組密碼的設計原則:擴散、混亂
- 乘積密碼體制:在密鑰控制下擴散和混亂兩種密碼操作的多次迭代
- 迭代結構
| 組成 | S盒(代換):混亂作用,P盒(置換):擴散作用 |
| 效果 | 雪崩效應 |
| 設計原則 | |
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位 特點: |
| 置換運算(P盒) | ? |
- 安全性
- 缺陷
? ? ? ? ? ? ??
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 | | 密鑰長度固定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=232) 現定義: 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開發 | ? 1、將消息摘要轉換成位字符串 因為在Sha-1算法中,它的輸入必須為位,所以我們首先要將其轉化為位字符串,我們以“abc”字符串來說明問題,因為'a'=97, 'b'=98, 'c'=99,所以將其轉換為位串后為: 01100001 01100010 01100011 2、對轉換后的位字符串進行補位操作 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 3、附加長度值 在信息摘要后面附加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。 4、初始化緩存 一個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. 5、計算消息摘要 在計算報文之前我們還要做一些基本的工作,就是在我們計算過程中要用到的方法,或定義。 (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函數的應用
消息認證:
目的:
MDC和加密:僅能驗證完整性
消息認證碼MAC
-
- 用于消息源認證和消息完整性的認證
- 構造MAC的方法
- 使用DES分組加密算法的MAC
- 基于Hash的認證碼——HMAC
-
-
- 安全性:包里搜索密鑰需要2k(k為密鑰長度);攻擊MAC需要2n次
-
?第七章 公鑰密鑰體制
公鑰密碼體制概述
- 對稱密碼體制的局限性:
- 密鑰分發問題
- 密鑰管理問題
- 數字簽名問題
- 公鑰加密體制的思想
- 公鑰和私鑰
- 基于陷門單向函數的困難問題
- 公鑰密碼體制的分類
公鑰加密體制介紹
| ElGamal??? | 應用 | 1.加密;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.指數積分法 | |
| ?MH背包公鑰加密體制???? | ?難題來源 | ?背包問題:∑aixi=b,這是一個NP完全類問題 特例:超遞增序列(每一個元素都比先前的元素和大) 可將背包問題轉化為P類問題 |
| ?公私鑰對的生成 | | |
| ?加密和解密 | | |
| ?安全性分析 | | |
| ?地位 | 第一個公鑰算法? | |
| ?RSA公鑰密碼?? | ?理論基礎 | ?數論中的歐拉定理,安全性依賴于大整數的素因子分解的困難性 歐拉定理:若a和n互素,則aΦ(n)≡1(mod n) |
| 密鑰生成算法 加密和解密 | (1)生成公私密鑰
(3)明文加密? | |
| ?安全性 | ?1.算法正確性的證明 2.攻擊 ? ? ? ? ? ?2.針對算法參數的攻擊 ? ? ? ? ? ? ? ? ? ? ? ?1.對素數p和q選取時的限制;p和q長度相差不大,大小相差要大,否則難以抵御除法的攻擊;p-1和q-1都應有大的素因子。 ? ? ? ? ? ? ? ? ? ? ? ?2.共模攻擊(因此不同用戶不用使用相同的p和q) ? ? ? ? ? ? ? ? ? ? ? ?3.低指數攻擊 | |
| ?橢圓曲線公鑰加密體制???????? | ?橢圓曲線 | 韋爾斯特拉方程 :E:y2+axy+by=x3+cx2+dx+e。密碼學中,常采用的橢圓曲線為:?E:y2=x3+ax+b,并要求4a3+27b2≠0 Hasse定理:如果E是有限域GF(p)上的橢圓曲線,N是E上的點(x,y)(其中x,yξGF(p))的個數,則:|N-(p+1)|≤2(p)? 橢圓曲線上的點集合Ep(a,b)對于如下定義的加法規則構成一個Abel群: 滿足交換律 點乘規則:
橢圓曲線點的計算: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? |
| ?ECC密鑰生成算法 | ? ? ? ?公鑰為(E,n,G,PB),私鑰為nB。 | |
| ?加密過程 | | |
| ?解密過程 | | |
| ?安全性和優勢???? | ?安全性基于橢圓曲線上的離散對數問題 | |
| 應用前景好,尤其是在移動通信和無線設備上的應用,計算量小,處理速度快,存儲空間占用小,帶寬要求低。? | ||
| ?160位的ECC密鑰和1024位的RSA和1024位的ElGamal的安全性等同。 | ||
| 可用于加密、數字簽名。? | ||
| 未申請專利? | ||
| ?????????Rabin公鑰加密體制 | ?前言(學習意義) | ?具有很好的參考價值 |
| ?特點? | ?不是以一一對應的陷門單向函數為基礎,同一密文可能有多種明文; | |
| ?破譯該體制等價于對大整數的因子分解。 | ||
| ?密鑰生成算法 | 隨機選取兩個大素數p和q,并且p≡q≡3mod4,將p和q作為私鑰,n=pq作為公鑰? | |
| ?加密算法 | 設明文塊為m(m<n),運用公式c=m2modn 進行加密,c為密文。 | |
| ?解密算法??? | ? ???? |
第八章 數字簽名技術
數字簽名概述
基本概念
數字簽名技術一般分為帶仲裁和不帶仲裁的兩類。如果使用對稱密鑰進行數字簽名,則必須使用仲裁者,非對稱可以不帶仲裁。
數字簽名可以實現不可否認性和消息完整性認證(檢驗是否被篡改或偽造)
原理
(P,S,K,Sig,Ver),P:密鑰生成算法,S:簽名算法,K:驗證算發,Sign,Verify
? ? ? 過程簡圖
數字簽名的實現方案
| 基于RSA的簽名方案? | 密鑰生成算法 | ? 這里,先選擇e再確定d的原因是:加密的重要性大于解密的重要性。 | ||
| ? 簽名算法 | | |||
| ? ?驗證算法 | | |||
| ? ? 正確性 | ?? | |||
| ? ? 安全性? | | |||
| ?基于離散對數的簽名方案???????????????? | ?ElGamal簽名體制???? | 密鑰生成算法 | ? ? ? ? ? ?簽名者的公鑰是(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)是否成立?? | |||
| ?正確性 | ?? | |||
| ?安全性 | | |||
| ?Schnorr簽名體制???? | 特點? | 簽名速度較快,簽名長度較短 ?? | ||
| ?密鑰生成算法 | | |||
| ?簽名算法 | 簽名者選擇隨機數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簽名體制???? | ?密鑰生成算法 | | ||
| ?簽名算法 | ??選取隨機數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。 | ||
| 簽名算法 | | |||
| 驗證算法? | | |||
| 正確性? | ?? ? | |||
| ? ?安全性???? | ????????ECDSA安全性依賴于基于橢圓曲線的有限群上的離散對數難題,與RSA和有限域離散對數的數字簽名相比,在相同的安全強度條件下,有如下特點 簽名長度短、密鑰存儲空間小,特別是用于存儲空間有限、帶寬受限、要求高速實現的場合。 | |||
特殊數字簽名
- 代理簽名
- 盲簽名
- 群簽名
- 不可否認簽名
- 門限數字簽名
- 多重數字簽名
- ··· ··
密鑰管理
密鑰管理概述
密鑰管理的原則
- 區分密鑰管理的策咯和機制
- 完全安全原則
- 最小權力原則
- 責任分離原則
- 密鑰分級原則
- 密鑰更換原則
- 密鑰應該有足夠的長度
- 密鑰體制不同,密鑰管理也不相同
密鑰管理的層次結構
- 會話密鑰
- 密鑰加密密鑰
- 主密鑰
? ? ?越低層的密鑰更換越快。僅主密鑰需要人工裝入,其他各級密鑰均可以由密鑰管理系統按照某些協議來進行自動地分配、更換、撤銷等。
密鑰生命周期
總結
- 上一篇: 极好的博弈论文章
- 下一篇: Qt 的反射(Reflection)应用