日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

应用密码学(张仕斌)第四章

發布時間:2024/8/1 编程问答 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 应用密码学(张仕斌)第四章 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
  • 分組密碼
    • 特點:
      • 現代密碼學中的重要體制之一,其主要任務是提供數據保密性
      • 分組密碼加解密速度較快(對稱密碼特點)
      • 現代分組密碼發展非常快,技術較成熟(公開測評) ,使用廣泛
    • 示例:
    • 注意事項:
      • 從這章開始,假定加密和認證的文本、圖像、音頻等任何格式的原始信息,都存在相應的編碼方式,轉化為二進制的數據流。在具體算法中,表示為message={0,1}*
    • 定義:
      • 已知明文經過編碼后的二元消息序列x1x2…(即0,1二進制序列),分組密碼首先將二元序列按照固定長度進行分組,不妨設明文固定分組長度為nbits,則明文二元消息序列x1x2…劃分為長度為nbits的分組p1,p2…,即:
      • 其中x,y,z ∈ GF(2) 。
      • 加密過程
        • 各明文分組長度依次在密鑰K={k1k2…kt}控制下,按照加密算法E進行加密得到密文分組c1,c2…,即:
      • 解密過程
        • 將密文分組c1,c2… 。在密鑰K={k1k2…kt}控制下,按照解密算法D進行解密,得到明文分組p1,p2…,即:
    • 形式轉換
      • 定義 一個分組密碼體制(P, K, C, E, D),其中P=C={0,1}^l ;K={0,1}^t.
      • 加密變換:E:P×K→C, 當k∈K確定時,Ek為P →C的一 一映射.
      • 解密變換:D: C×K →P, 當k∈K確定時,Dk為C →P的一 一映射.
    • 壓縮、拓展
      • 上述分組密碼系統中,明文分組長度為n bits,密文分組長度為m bits,密鑰長度為t bits。若n>m,明文分組長度大于密文分組長度,稱其為有數據壓縮的分組密碼;若n<m,明文分組長度小于密文分組長度,這稱之為有數據擴展的分組密碼;若n=m,明文分組長度等于密文分組長度,則稱之為無數據擴展和壓縮的分組密碼。事實上,通常的分組密碼均取為n=m
    • 分組密碼的基本設計原則
      • 分組長度足夠長,防止明文窮舉攻擊。
      • 密鑰量足夠大,防止密鑰窮舉攻擊。
      • 密鑰變換足夠復雜,攻擊者除了窮舉攻擊外找不到其它有效攻擊方法。
      • 數據擴展足夠小,一般無數據擴展。
      • 差錯傳播盡可能小,加密或解密某明文或密文分組出錯,對后續密文解密影響盡可能小。
    • 分組密碼的實現設計原則
      • 硬件實現原則
        • 應該盡量使得加密和解密算法結構相同,僅僅密鑰使用方式不同,保證加密和解密采用同一密碼協處理器。
        • 規則的編碼結構,適應于大規模集成電路實現,降低成本。
        • 設計成迭代型,減少大規模集成電路實現時的硬件資源。
        • 易于硬件實現的編碼結構。
      • 軟件實現原則
        • 加密和解密結構相似,便于加密和解密過程軟件實現可以方便調用子函數。
        • 盡量使用既簡單又易于軟件實現的運算,例如加法、乘法、移位運算。
        • 設計成迭代型。迭代型分組密碼有利于軟件實現中使用循環,代碼簡單。
        • 密碼算法中盡量采用子塊運算,運算長度盡可能適應軟件編程,如8 bits、16 bits、32 bits或64 bits的單位長度。
    • 分組密碼種類
    • 分組密碼填充
      • 例:
    • 分組密碼的原理
      • 迭代結構:
        • 選擇某個較為簡單的密碼變換,在密鑰控制下以迭代方式多次利用它進行加密變換,就可以實現預期的擴散和混亂效果。(輪函數)
      • 混淆:
        • 是指在加密變換過程中是明文、密鑰以及密文之間的關系盡可能地復雜化,以防密碼破譯者采用統計分析法進行破譯攻擊。(線性ax+b=c/非線性ax^2+b=c)
      • 擴散:
        • 明文和密鑰中任何一比特值得改變,都會在某種程度上影響到密文值的變化,以防止將密鑰分解成若干個孤立的小部分,然后各個擊破。(擴散函數)
    • 代替-置換(S-P)網絡
      • 對明文和子密鑰利用非線性代替S得到分組小塊混淆和擴展,再利用比特置換P錯亂非線性變換各輸出比特 。AES、SM4、SHARK等
    • Feistel結構
    • ?
  • DES簡述
    • DES是對稱密碼算法,加密、解密密鑰相同
    • DES的明文分組為64比特,密鑰長度為64比特,有效密鑰長度為56比特,密文長度為64比特。
    • DES加密,解密一共是16輪,每一輪需要用一個子密鑰,故一共要產生16個輪子密鑰,通常表示為K1,K2,K3, ……,K16.
    • DES的加密和解密,從流程圖上和代碼上幾乎完全一致。只不過加密輸入的是明文和密鑰,解密輸入的是密文和密鑰。細節的差別在于,加密時使用的輪子密鑰是K1,K2, K3, ……,K16,而解密時使用的輪子密鑰是K16,K15, K14, ……,K1.換句話說,DES的16輪解密是其加密的每一輪的逆過程。
    • 置換變換
      • 置換位置改變,內容不變
    • DES算法的整體結構—Feistel結構
      • 給定明文,通過一個固定的初始置換IP來重排輸入明文塊P中的比特,得到比特串P0=IP(P)=L0R0,這里L0和R0分別是P0的前32比特和后32比特
        • 初始變換
        • 輪結構
      • 按下述規則進行16次迭代,即1≤i≤16
      • 這里⊕ 是對應比特的模2加,f是一個函數(稱為輪函數);16個長度為48比特的子密鑰Ki(1≤i≤16)是由密鑰k經密鑰編排函數計算出來的.最后一輪完成之后,還要進行一次左右交換!!!(切記)
      • 對比特串R16L16使用逆置換IP-1得到密文C,即C=IP-1 (R16L16)。(注意L16和R16的相反順序)
        • 逆初始變換
        • IP和IP^-1之間的關系
    • DES的輪函數
      • 置換擴展變換
        • 置換位置改變,長度擴展
        • 例:
        • 8比特二進制 0010 1001
        • 第8位置換到第1位,第2位置換到第2,……,置換出結果:
        • 0 11 0 0 01 0 0 0
      • E盒置換擴展
      • 壓縮替代S-盒
        • S盒的選擇
      • 置換P
    • DES算法的密鑰編排算法
      • 給定64比特密鑰K,根據固定的置換PC-1來處理K得到PC-1(K)=C0D0,其中C0和D0分別由最前和最后28比特組成
        • 密鑰置換PC-1
        • 左循環移位
          • C0及D0根據左循環移位函數進行左循環移位1或2位,各輪移位位數如表所示。
          • 置換選擇PC-1輸出的56位,分為兩半,
          • C0=11101100 10011001 00011011 1011,
          • D0=10110100 01011000 10001110 0110。
          • C0及D0分別左循環1位得到
          • C1=1101100 10011001 00011011 10111
          • D1=0110100 01011000 10001110 01101
        • 密鑰置換PC-2
        • 子密鑰
          • 通過PC-2置換選擇輸出的就是DES第1輪的子密鑰K1為001111 011000 111111 001101 001101110011 111101 001000,作為DES輪結構變換F函數的輸入
          • 由前面的加密可知,DES加密一共是16輪,每一輪需要用一個子密鑰,故一共要產生16個輪子密鑰,通常表示為K1,K2, K3, ……,K16
    • DES的解密變換
      • DES的加密和解密,從流程圖上和代碼上幾乎完全一致。只不過加密輸入的是明文和密鑰,解密輸入的是密文和密鑰。
      • 細節的差別在于,加密時使用的輪子密鑰是K1,K2, K3, ……,K16,而解密時使用的輪子密鑰是K16,K15, K14, ……,K1.
      • 換句話說,DES的16輪解密是其加密的每一輪的逆過程。
    • 2DES
      • 一個密鑰有效長度56bit,兩個密鑰為56*2=112
        • 有效密鑰長度112bits
    • 三重DES -EEE3
      • 個密鑰有效長度56bit,三個密鑰為56*3=168
        • 有效密鑰長度168bits
    • DES-EEE2
      • 有效密鑰長度112bits
    • DES-EDE2
      • 密鑰長度112bits
  • AES
    • AES是Rijndael算法改進,分組長度128bits,密鑰長度則有三種:128/192/256bits
    • 輪數與密鑰長度,明文分組長度的關系
    • 現階段的AES(所學)均認為明文分組為128bits
    • AES算法的整體結構
    • AES的基本運算單位是字節(Byte),加密和解密過程都是在一個4×4的字節矩陣上運作,這個矩陣又稱為“體(state)”或者“狀態”。字節矩陣初始值是一個明文塊(塊/分組,block)
    • 明文分組
      • 狀態用以字節(8bits)為基本構成元素,每列4bytes數據,即為32bits。對于Rijndael算法,明文列數為分組長度除以32,通常記為Nb 。
      • Nb=分組長度(bits)/32(bits)
      • Rijndael算法列數Nb可以取的值為4、6、8,對應的明文分組長度為128、192、256bits。
      • 而AES算法的分組長度固定為128bits,因此AES明文列數等于固定值Nb=4。
    • 密鑰分組
      • AES算法加密和解密過程中密鑰同樣以字節為單位進行計算,密鑰狀態矩陣也是4行,每列4bytes數據,即為32bits。因而密鑰列數記為Nk 。
      • Nk=密鑰長度(bits)/32(bits)
      • AES算法的密鑰長度的列數為128bits、192bits、256bits三種不同長度,因此不同密鑰長度Nk可以取值分別為4、6、8。
    • AES算法的加密整體結構
    • 明文初始狀態矩陣(state)
      • AES算法中初始狀態矩陣由1組長度為128bits明文分組構成,以字節為單位,則總共有16bytes,從左到右開始,則前4個字節組成明文狀態矩陣第1列,依次后四個字節組成第2列,依次類推,AES算法明文分組可以構成一個4×4的初始字節狀態矩陣
    • 密鑰初始矩陣
      • AES算法的密鑰長度的列數為128\192\256bits三種不同長度,因此不同密鑰長度Nk(密鑰列數)以取值分別為4、6、8。
      • 初始密鑰的列數編排類似明文初始狀態矩陣,因而密鑰構成一個4×4、4×6、4×8的密鑰字節矩陣。例如密鑰長度為192bits,以字節為單位,則總共有24bytes
    • 輪密鑰加
    • 字節代替(SubBytes)
      • 字節變換(SubBytes)使用一個S盒,S盒是一個16×16的矩陣,如表所示。其非線性置換為:輸入的列的每個元素用來指定S盒的地址:前4位指定S盒的行,后4位指定S盒的列。行和列所確定S盒位置的元素取代輸入矩陣中相應位置的元素,例如“03”,行0,列3,因此輸入“03”,輸出“7B”。
      • 例:
    • 行移位(ShiftRows)
      • 狀態陣列的4個行循環以字節為基本單位進行左移,而每行循環做移的偏移量是由明文分組的大小和所在行數共同確定,即列數Nb和行號確定。
      • 例:
    • 列混合(MixColumns)
    • 基本運算(補充)
      • 字節在 GF(2^8)的表示
      • GF(2^8)上兩個域元素的加
      • GF(2^8)上兩個域元素的乘
      • GF(2^8)上域元素的乘x
      • 因此可以得出若b7=0,可以得出.x·b(x)的結果就是b(x)對應的8bits 二進制向左移一位,最后一位補0.
      • 因此可以得出若b7=1,可以得出.x·b(x)的結果就是b(x)對應的8bits 二進制向左移一位,最后一位補0,再與{1B}(其二進制為00011011,多項式表示為x*+x3+.x+1)做逐比特異或來實現.
      • 例:
    • 密鑰擴展
      • Rijndael算法的密鑰同樣以字節為單位進行變換,用一個4行的二維矩陣來表示。密鑰按照矩陣的列進行分組,密鑰比特的總數等于明文分組長度乘以輪數加1,即密鑰比特的總數=明文分組長度×(輪數Round+1)
      • 輪密鑰選取
        • 輪密鑰i(即第i個輪密鑰)由輪密鑰緩沖字W[Nb*i]到W[Nb*(i+1)]給出:
    • 三種拓展
    • AES 的密鑰調度
      • 密鑰調度包括兩個部分:密鑰擴展和輪密鑰選取。密鑰bit的總數=分組長度×(輪數Round+1)例如當分組長度為128bits和輪數Round為10時,輪密鑰長度為128×(10+1)=1408bits。將密碼密鑰擴展成一個擴展密鑰。從擴展密鑰中取出輪密鑰:第一個輪密鑰由擴展密鑰的第一個Nb個字(其實就是Nb列),第二個輪密鑰由接下來的Nb個字組成,以此類推。
    • 解密
      • 逆行移位
        • 與加密時行移位相反,向右循環移位
      • 逆列混合
        • 與加密時行列混合運算過程一樣,固定矩陣改變
      • 具體實例
        • 現在我們來跟蹤AES加密算法的每一個迭代,以觀察所有操作對輸出影響。
        • 假設加密的明文消息為128比特示例塊為十六進制為:80 5E 6A 36 53 25 3A 66 63 35 69 03 20 6C 28 06 16;初始密鑰也為128比特,十六進制表示為:75 35 6B 99 05 61 39 56 73 62 05 31 00 5509 32
        • 首先,將128比特的明文塊寫成4×4的矩陣形式為:
  • 分組密碼體制
    • SM4算法
      • 定義
        • SM4(原名SMS4.0)是我國政府采用的一種分組密碼標準,由國家密碼管理局于2012年3月21日發布。相關標準為“GM/T 0002-2012《SM4分組密碼算法》(原SMS4分組密碼算法)”。
        • 在商用密碼體系中,SM4主要用于數據加密,其算法公開,分組長度與密鑰長度均為128bit,加密算法與密鑰擴展算法都采用32輪非線性迭代結構,S盒為固定的8比特輸入8比特輸出。
        • SM4算法的解密算法與加密算法的結構相同,只是輪密鑰的使用順序相反,解密輪密鑰是加密輪密鑰的逆序。
      • 算法原理
      • 加密流程整體框圖
      • SM4加密符號定義
      • SM4的F輪函數
      • SM4-S盒代替
        • SM4算法中S盒代替與AES算法S盒代替類似,S盒的代替規則:輸入的前4位為行號,后4位為列號,行列交叉點處S盒列表中的數值為輸出(如表4-13),例如輸入“2a”,則行號為“2”,列號為“a”,根據表4-13,第2行第a列輸出值為“0b”,即Sbox(2a)=0b。
      • SM4一輪加密實例
      • SM4的加解密總結
        • 1、SM4是對稱密碼算法,加密、解密密鑰相同
        • 2、SM4的明文分組為128比特,密鑰長度為128比特,密文長度為128比特。
        • 3、SM4加密,解密一共是32輪非線性迭代,然后再進行反序變換,輸出密文,每一輪需要用一個子密鑰,故一共要產生32個輪子密鑰,通常表示為
        • 4、SM4的加密和解密,從流程圖上和代碼上幾乎完全一致。只不過加密輸入的是明文和密鑰,解密輸入的是密文和密鑰。
        • 細節的差別在于,加密時使用的輪子密鑰是
        • 而解密時使用的輪子密鑰是
      • SM4密鑰編排算法
        • 密鑰拓展算法
        • 例:
  • 典型的分組密碼體制
    • IDEA基本概念
      • IDEA(International Data Encryption Algorithm)是瑞士的James Massey,Xuejia Lai等人提出的加密算法,在密碼學中屬于數據塊加密算法(Block Cipher)類。IDEA使用長度為128bit的密鑰,數據塊大小為64bit。從理論上講,IDEA屬于“強”加密算法,至今還沒有出現對該算法的有效攻擊算法。
      • IDEA是一個分組長度為64位的分組密碼算法,密鑰長度為128位(抗強力攻擊能力比DES強),同一算法既可加密也可解密。
      • IDEA能抗差分分析和相關分析;IDEA似乎沒有DES意義下的弱密鑰;IDEA的“混淆”和“擴散”設計原則來自三種運算,它們易于軟、硬件實現(加密速度快)
    • IDEA運算
      • 實現上的考慮
        • 使用子分組:16bit的子分組;
        • 使用簡單操作(易于加法、移位等操作實現)
        • 加密解密過程類似;
        • 規則的結構(便于VLSI實現)。
    • IDEA設計原理
      • 3種運算結合起來使用可對算法的輸入提供復雜的變換,從而使得對IDEA的密碼分析比對僅使用異或運算的DES更為困難。
      • 算法中擴散是由稱為乘加(multiplication/addition, MA)結構(見圖4.14)的基本單元實現的。
      • 該結構的輸入是兩個16比特的子段和兩個16比特的子密鑰,輸出也為兩個16比特的子段。這一結構在算法中重復使用了8次,獲得了非常有效的擴散效果。
    • IDEA的MA結構
      • IDEA算法的擴散主要是由乘加結構的基本單元實現的。
    • IDEA加密的總體方案
    • IDEA加密過程
      • 加密過程由連續的8輪迭代和一個輸出變換組成,算法將64比特的明文分組分成4個16比特的子段,每輪迭代以4個16比特的子段作為輸入,輸出也為4個16比特的子段。
      • 最后的輸出變換也產生4個16比特的子段,鏈接起來后形成64比特的密文分組。
      • 每輪迭代還需使用6個16比特的子密鑰,最后的輸出變換需使用4個16比特的子密鑰,所以子密鑰總數為52。圖4.15的右半部分表示由初始的128比特密鑰產生52個子密鑰的子密鑰產生器。
    • IDEA第1輪的輪結構
      • 根據IDEA第1輪的結構示意圖,以后各輪也都是這種結構,但所用的子密鑰和輪輸入不同。從結構圖可見,IDEA不是傳統的Feistel密碼結構。每輪開始時有一個變換,該變換的輸入是4個子段和4個子密鑰,變換中的運算是兩個乘法和兩個加法,輸出的4個子段經過異或運算形成了兩個16比特的子段作為MA結構的輸入。MA結構也有兩個輸入的子密鑰,輸出是兩個16比特的子段。
      • 最后,變換的4個輸出子段和MA結構的兩個輸出子段經過異或運算產生這一輪的4個輸出子段。注意,由X2產生的輸出子段和由X3產生的輸出子段交換位置后形成W12和W13,目的在于進一步增加混淆效果,使得算法更易抵抗差分密碼分析。
    • IDEA每一輪的加密順序
      • 1. X1和第一個子密鑰相乘。
      • 2. X2和第二個子密鑰相加。
      • 3. X3和第三個子密鑰相加。
      • 4. X4和第四個子密鑰相乘。
      • 5. 將第1步和第3步的結果相異或。
      • 6. 將第2步和第4步的結果相異或。
      • 7. 將第5步的結果與第五個子密鑰相乘。
      • 8. 將第6步和第7步的結果相加。
      • 9. 將第8步的結果與第六個子密鑰相乘。
      • 10.將第7步和第9步的結果相加。
      • 11.將第1步和第9步的結果相異或。
      • 12.將第3步和第9步的結果相異或。
      • 13.將第2步和第10步的結果相異或。
      • 14.將第4步和第10步的結果相異或。
      • 算法的第9步是一個輸出變換,如圖4.17所示。它的結構和每一輪開始的變換結構一樣,不同之處在于輸出變換的第2個和第3個輸入首先交換了位置,目的在于撤銷第8輪輸出中兩個子段的交換。還需注意,第9步僅需4個子密鑰,而前面8輪中每輪需要6個子密鑰。
    • IDEA的輸出變換
    • IDEA子密鑰的產生
      • 加密過程中52個16比特的子密鑰是由128比特的加密密鑰按如下方式產生的: 前8個子密鑰Z1,Z2,…,Z8直接從加密密鑰中取,即Z1取前16比特(最高有效位),Z2取下面的16比特,依次類推。然后加密密鑰循環左移25位,再取下面8個子密鑰Z9,Z10,…,Z16,取法與Z1,Z2,…,Z8的取法相同。這一過程重復下去,直到52子密鑰都被產生為止。
      • 產生子密鑰的方法。這個算法用了52個子密鑰(8輪中的每一輪需要6個,其他4個用于輸出變換)。首先,將128-位密鑰分成8個16-位子密鑰。這些是算法的第一批8個子密鑰(第一輪6個,第二輪的頭2個)。然后,密鑰向左環移動25位產生另外8個子密鑰,如此進行直到算法結束。
    • IDEA子密鑰
      • IDEA的解密過程
        • 加密解密實質相同,但使用不同的密鑰;
        • 解密密鑰以如下方法從加密子密鑰中導出:
          • 解密循環i的頭4個子密鑰從加密循環10-i的頭4個子密鑰中導出;解密密鑰第1、4個子密鑰對應于1、4加密子密鑰的乘法逆元;2、3對應2、3的加法逆元;
          • 對前8個循環來說,循環i的最后兩個子密鑰等于加密循環9- i的最后兩個子密鑰;
  • RC5或RC6
    • 背景
      • RC5是由RSA公司的Rivest于1994年提出一種新型分組密碼。RC6是RSA公司提交給NIST的一個AES候選算法,它是在RC5的基礎上設計的.
      • RC5的算法特性與許多算法不盡相同,它具有有可變的字長(因此輸入的分組長度是可變的),可變的加密輪數和可變的密鑰長度;只使用了微處理器上常實現,另一方面,由于沒有復雜的運算,它的加密速度非常快。
      • RC5已經在RSA公司的許多產品應用,比如作為無線客戶端與服務器之間的加密算法。
      • RC6是AES候選算法之一,由Rivest、Robshaw、Sidney和Yin提交的,它可能是最簡單的AES算法,RC6是RC5的進一步改進。像RC5那樣,RC6實際上是利用數據的循環移位。它的明文分組塊大小為128位,密鑰可以為128、192或256比特,共進行20輪的加密。
    • Twofish算法
      • Twofish 是counterpane 公司向NIST提交的一種滿足AES要求的加密算法,設計者為Schneier。
      • Twofish 采用128位數據塊(128 bits block),128、192、256-bit 可變長度密鑰。
      • Twofish 算法是進入NIST第二輪 5種加密算法中的一種,它同時具有RC6和Rijndael的某些特性,與DES算法一樣,使用了16輪的Feistel結構來加密明文,并應用了一些特殊的操作
  • ?

總結

以上是生活随笔為你收集整理的应用密码学(张仕斌)第四章的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。