SM2橢圓曲線公鑰密碼算法(ECC)於2010年12月首次公開發布,2012年成爲中國商用密碼標準,2016年成爲中國國家密碼標準,國家公鑰密碼算法標準。SM2算法主要內容包括3部分:數字簽名算法;密鑰交換協議和公鑰加密算法。在實際使用中,國密局推薦使用素數域256位橢圓曲線,其曲線方程爲y^2= x^3+ax+b。a;b ∈ Fp,且(4a^3 +27b^2) modp ̸= 0。python
目前支持SM2算法的產品已達1000餘款,普遍應用於電子政務、移動辦公、電子商務、移動支付、電子證書等基礎設施、雲服務等領域。以《中華人民共和國電子簽名法》爲依據,各種應用數字簽名/驗籤的旺盛需求,催生出一批支持SM2算法高性能產品,如中國科學院DCS中心研製的高性能金融數據密碼機SM2簽名速率超過33萬次/秒;清華大學微電子所研製的單顆算法芯片SM2簽名速率達81763.03次/秒。在公鑰基礎設施(PKI)領域,以基於SM2算法的數字證書應用最具備表明性,尤爲是自2011年國家密碼管理局發佈公鑰算法升級工做通知以來,全國總計有45家第三方電子認證服務機構(CA)完成了支持SM2算法的系統新建或升級改造,工行、農行、建行、交行、稅務、海關、交通、教育等12家系統性電子認證服務系統也實現了對SM2算法的支持,累計證書發行量近億張,支持SM2算法的智能密碼鑰匙、IC卡的芯片出貨量達5億顆,有力地促進了SM2算法在交通、能源、金融、稅務、公安、衛生、社保、教育等多個領域的應用。SM2算法也已被納人可信計算組織(TCG)發佈的可信平臺模塊庫規範(TPM2.0),由國民技術研製的支持TPM2.0的Z32H320TC系列芯片集成了SM2算法,被應用在微軟於中國發售的Microsoft Surface Pro 3 pad中.算法
數字簽名算法由一個簽名者對數據產生數字簽名,並由一個驗證者驗證簽名的可靠性.每一個簽名者有一個公鑰和一個私鑰,其中私鑰用於產生簽名,驗證者用簽名者的公鑰驗證簽名.
SM2數字簽名算法中,做爲簽名者的用戶A的密鑰對包括其私鑰dA,和公鑰pA =[dA]G=(xA,yA),用戶A具備位長爲entlenA的可辨別標識IDA,記ENTLA,是由整數entlenA轉換而成的2B數據,簽名者和驗證者都須要用密碼雜湊算法求得用戶A的雜湊值zA=H256 (ENTLA || IDA || a || b || xG || yG || xA || yA). SM2數字簽名算法規定H256爲SM3密碼雜湊算法.安全
密鑰交換協議是2個用戶A和B經過交互的信息傳遞,用各自的私鑰和對方的公鑰來商定一個只有他們知道的祕密密鑰.這個共享的祕密密鑰一般用在某個對稱密碼算法中.
SM2密鑰交換協議中,用戶A的密鑰對包括其私鑰dA和公鑰pA=[dA]G=(xA,yA),用戶B的密鑰對包括其私鑰dB和公鑰pB=[dB]G=(xB,yB).用戶A具備位長爲entlenA的可辨別標識IDA,記ENTLA是由整數entLenA轉換而成的2B數據;用戶B具備位長爲entlenB的可辨別標識IDB,記ENTLB是由整數entlenB轉換而成的2B數據.A,B雙方都須要用密碼雜湊算法求得用戶A的雜湊值ZA = H256 ( ENTLA || IDA || a || b || xG || yG || xA || yA)和用戶B的雜湊值ZB = H256 ( ENTLB || IDB || a || b || xG || yG || xB || yB).網絡
公鑰加密算法規定發送者用接收者的公鑰將消息加密成密文,接收者用自已的私鑰對收到的密文進行解密還原成原始消息.
SM2公鑰加密算法中,用戶B的密鑰對包括其私鑰dB和公鑰PB=[dB]G.函數
SM3密碼雜湊算法採用Merkle-Damgard結構,消息分組長度爲512 b,摘要長度256 b.壓縮函數狀態256b,共64步操做。
SM3算法做爲標準雜湊算法使用很是普遍。目前支持SM3算法的產品包括安全芯片、終端、設備和應用系統,採用SM3算法的產品和系統運行安全穩定。如在智能電網領域,截至2016年10月,採用SM3算法的智能電錶已經安裝近6億用戶,均能安全穩定運行。在金融系統,目前大約有7億多銀行磁條卡更新爲密碼芯片卡,動態令牌累計發行7726萬支,這些卡片及令牌均使用了SM3算法。SM3算法也支持可信計算組織(TCG)發佈的可信平臺模塊庫規範(TPM2.0)。該算法業已成爲我國電子簽名類密碼系統、計算機安全登陸系統、計算機安全通訊系統、數字證書、網絡安全基礎設施、安全雲計算平臺與大數據等領域信息安全的基礎技術。性能
SM3密碼雜湊算法壓縮函數總體結構與SHA-256類似,可是增長了多種新的設計技術,包括增長16步全異或操做、消息雙字介人、增長快速雪崩效應的屍置換等.可以有效地避免高几率的局部碰撞,有效地抵抗強碰撞性的差分分析、弱碰撞性的線性分析和比特追蹤法等密碼分析。
SM3密碼雜湊算法合理使用字加運算,在不顯著增長硬件開銷的狀況下,採用P置換,加速了算法的雪崩效應,提升了運算效率。同時,SM3密碼雜湊算法採用了適合32 b微處理器和8b智能卡實現的基本運算,具備跨平臺實現的高效性和普遍的適用性。測試
SM3密碼雜湊算法的設計主要遵循如下原則:大數據
壓縮函數的設計具備結構清晰、雪崩效應強等特色,採用瞭如下設計技術:雲計算
消息擴展算法將512b的消息分組擴展成2176b的消息分組。經過線性反饋移位寄存器來實現消息擴展,在較少的運算量下達到較好的擴展效果.消息擴展算法在SM3密碼雜湊算法中做用主要是增強消息比特之間的相關性,減少經過消息擴展弱點對雜湊算法的攻擊可能性。消息擴展算法有如下要求:加密
部分代碼:
SMS4分組加密算法是中國無線標準中使用的分組加密算法,在2012年已經被國家商用密碼管理局肯定爲國家密碼行業標準,標準編號GM/T 0002-2012而且更名爲SM4算法,是國內官方公佈的第一個加密算法。該算法的分組長度爲128比特,密鑰長度爲128比特。加密算法與密鑰擴展算法都採用32輪非線性迭代結構。解密算法與加密算法的結構相同,只是輪密鑰的使用順序相反,解密輪密鑰是加密輪密鑰的逆序。
1.讀入數據
2.計算輪密鑰中間變量
3.計算輪密鑰
4.SMS4算法第i+1輪加密
5.SMS4算法最終加密輸出
SMS4算法做爲我國專業機構設計的商用密碼算法,通過充分分析和測試,能夠抵抗差分攻擊、線性攻擊等。根據相關分析,SMS4算法的S盒設計得至關好。在設計原理上,SMS4比AES的S盒設計多了一個仿射變換,具備很高的靈活性,能夠隨時被替換以應對突發性安全威脅。SMS4的S盒在非線性度、自相關性、差分均勻性、代數免疫性等主要密碼學指標方面都達到了至關高的水平。
執行SM4算法,測試結果保存在log_file_0.txt下: