2017-2018-2 20179207 《網絡攻防技術》第十三周作業 python3實現SM234算法


國密算法SM234 的python3實現

國家標准

GM/T 0002-2012 《SM4分組密碼算法》

GM/T 0003.1-2012 《SM2橢圓曲線公鑰密碼算法 第1部分:總則》

GM/T 0003.2-2012 《SM2橢圓曲線公鑰密碼算法 第2部分:數字簽名算法》

GM/T 0003.3-2012《SM2橢圓曲線公鑰密碼算法 第3部分:密鑰交換協議》

GM/T 0004-2012 《SM3密碼雜湊算法》

具體參見(http://www.oscca.gov.cn/

算法比較

種類 算法類型 密鑰長度 輸入數據要求 輸出數據特征
SM2 非對稱加密算法 公鑰64字節,私鑰32字節 長度小於(2^32-1)*32=137,438,953,440字節(大約1374億多) 輸出長度是明文長度+96,有隨機數參數,每次密文不同
SM3 摘要算法 -- 無要求 固定長度,32字節
SM4 對稱加密算法 16字節 分組長度16字節,需要填充到16字節整數倍。有CBC和EBC兩種模式,CBC需要設定初始值 長度為16字節的整數倍

SM2算法介紹和實現

SM2橢圓曲線公鑰密碼算法

SM2標准包括總則,數字簽名算法,密鑰交換協議,公鑰加密算法四個部分,並在每個部分的附錄詳細說明了實現的相關細節及示例。

SM2算法主要考慮素域Fp和F2m上的橢圓曲線,分別介紹了這兩類域的表示,運算,以及域上的橢圓曲線的點的表示,運算和多倍點計算算法。然后介紹了編程語言中的數據轉換,包括整數和字節串,字節串和比特串,域元素和比特串,域元素和整數,點和字節串之間的數據轉換規則。

詳細說明了有限域上橢圓曲線的參數生成以及驗證,橢圓曲線的參數包括有限域的選取,橢圓曲線方程參數,橢圓曲線群基點的選取等,並給出了選取的標准以便於驗證。最后給橢圓曲線上密鑰對的生成以及公鑰的驗證,用戶的密鑰對為(s,sP),其中s為用戶的私鑰,sP為用戶的公鑰,由於離散對數問題從sP難以得到s,並針對素域和二元擴域給出了密鑰對生成細節和驗證方式。總則中的知識也適用於SM9算法。

在總則的基礎上給出了數字簽名算法(包括數字簽名生成算法和驗證算法),密鑰交換協議以及公鑰加密算法(包括加密算法和解密算法),並在每個部分給出了算法描述,算法流程和相關示例。

數字簽名算法,密鑰交換協議以及公鑰加密算法都使用了國家密管理局批准的SM3密碼雜湊算法和隨機數發生器。數字簽名算法,密鑰交換協議以及公鑰加密算法根據總則來選取有限域和橢圓曲線,並生成密鑰對。

算法的實現和測試

SM3算法介紹和實現

SM3雜湊算法

SM3密碼雜湊(哈希、散列)算法給出了雜湊函數算法的計算方法和計算步驟,並給出了運算示例。此算法適用於商用密碼應用中的數字簽名和驗證,消息認證碼的生成與驗證以及隨機數的生成,可滿足多種密碼應用的安全需求。在SM2,SM9標准中使用。

此算法對輸入長度小於2的64次方的比特消息,經過填充和迭代壓縮,生成長度為256比特的雜湊值,其中使用了異或,模,模加,移位,與,或,非運算,由填充,迭代過程,消息擴展和壓縮函數所構成。具體算法及運算示例見SM3標准。

SM3標准測試

SM4算法介紹和實現

SM4對稱算法

此算法是一個分組算法,用於無線局域網產品。該算法的分組長度為128比特,密鑰長度為128比特。加密算法與密鑰擴展算法都采用32輪非線性迭代結構。解密算法與加密算法的結構相同,只是輪密鑰的使用順序相反,解密輪密鑰是加密輪密鑰的逆序。

此算法采用非線性迭代結構,每次迭代由一個輪函數給出,其中輪函數由一個非線性變換和線性變換復合而成,非線性變換由S盒所給出。其中rki為輪密鑰,合成置換T組成輪函數。輪密鑰的產生與上圖流程類似,由加密密鑰作為輸入生成,輪函數中的線性變換不同,還有些參數的區別。SM4算法的具體描述和示例見SM4標准。

SM4算法實現

標准數據

測試結果


免責聲明!

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



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