《基於Python的GMSSL實現》課程設計個人報告
一、基本信息
姓名:LJF
學號:20165234
題目:GMSSL基於python的實現
指導老師:LJP
完成時間:2019年5月6日---2019年5月26日
驗收時間:2019年5月27日
小組成員:YJT,TX,LJF
二、個人貢獻
1. 收集相關資料並分享(相關博客、Python教程等)
2. 學習並搭建實驗所需環境
3. 實現sm4算法的加解密
三、任務內容
1. 用Python語句調用gmssl以實現sm4
2. 實現用gmssl加密通信的功能
四、實踐過程
(一)學習並熟悉Python
思維導圖如下:
(二)上手SM4算法
國產密碼算法介紹
國產密碼算法(國密算法)是指國家密碼局認定的國產商用密碼算法,在金融領域目前主要使用公開的SM2、SM3、SM4三類算法,分別是非對稱算法、哈希算法和對稱算法。
SM2算法:SM2橢圓曲線公鑰密碼算法是我國自主設計的公鑰密碼算法,包括SM2-1橢圓曲線數字簽名算法,SM2-2橢圓曲線密鑰交換協議,SM2-3橢圓曲線公鑰加密算法,分別用於實現數字簽名密鑰協商和數據加密等功能。SM2算法與RSA算法不同的是,SM2算法是基於橢圓曲線上點群離散對數難題,相對於RSA算法,256位的SM2密碼強度已經比2048位的RSA密碼強度要高。
SM3算法:SM3雜湊算法是我國自主設計的密碼雜湊算法,適用於商用密碼應用中的數字簽名和驗證消息認證碼的生成與驗證以及隨機數的生成,可滿足多種密碼應用的安全需求。為了保證雜湊算法的安全性,其產生的雜湊值的長度不應太短,例如MD5輸出128比特雜湊值,輸出長度太短,影響其安全性SHA-1算法的輸出長度為160比特,SM3算法的輸出長度為256比特,因此SM3算法的安全性要高於MD5算法和SHA-1算法。
SM4算法:SM4分組密碼算法是我國自主設計的分組對稱密碼算法,用於實現數據的加密/解密運算,以保證數據和信息的機密性。要保證一個對稱密碼算法的安全性的基本條件是其具備足夠的密鑰長度,SM4算法與AES算法具有相同的密鑰長度分組長度128比特,因此在安全性上高於3DES算法。
完成SM4算法的代碼
from gmssl.sm4 import CryptSM4, SM4_ENCRYPT, SM4_DECRYPT key = b'3l5butlj26hvv313' value = b'111' # bytes類型 iv = b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' # bytes類型 crypt_sm4 = CryptSM4() crypt_sm4.set_key(key, SM4_ENCRYPT) encrypt_value = crypt_sm4.crypt_ecb(value) # bytes類型 print('加密成功!') print('加密結果為:\n', encrypt_value) print('\n') crypt_sm4.set_key(key, SM4_DECRYPT) decrypt_value = crypt_sm4.crypt_ecb(encrypt_value) # bytes類型 print('解密成功!\n解密結果為:', decrypt_value) print('\n') assert value == decrypt_value print('decrypt_value==value?',value == decrypt_value) print('完成加解密!')
五、實驗中遇到的問題
在安裝gmssl時遇到了如下問題:
由紅色報錯內容可猜測是權限問題
更換至管理員權限的命令行,成功解決:
六、設計體會及收獲
我負責的部分是實現sm4算法,中途和老師交流以后發現我們小組對題目理解有偏差,應該做的是用Python語句調用gmssl以實現相應的功能。
從前兩周的探索到最終成功,從學習基本語言到深入理解算法再到最終實現自己負責的板塊,收獲很大,同時也要感謝老師和隊友整個過程的幫助!