國密算法SM3與SM4簡介與應用

2021-02-13 Pou光明

點擊上方藍字可直接關注!方便下次閱讀。如果對你有幫助,麻煩點個在看或點個讚,感謝~

最近0基礎在學習國密算法的相關應用,故此和大家分享下自己的一些經歷。

程序平臺: Ubuntu16.04  x64

一、國密SM3與SM4

國產密碼算法(國密算法)是指國家密碼局認定的國產商用密碼算法,目前主要使用公開的SM2、SM3、SM4三類算法,分別是非對稱算法、哈希算法和對稱算法。不懂也沒關係,以後別人說SM2、SM3、SM4知道它們是幹啥的就行。這次主要和大家從簡單的SM3、SM4說起。

SM3算法:SM3雜湊算法是我國自主設計的密碼雜湊算法,適用於商用密碼應用中的數字籤名和驗證消息認證碼的生成與驗證以及隨機數的生成,可滿足多種密碼應用的安全需求。為了保證雜湊算法的安全性,其產生的雜湊值的長度不應太短,例如MD5輸出128比特雜湊值,輸出長度太短,影響其安全性SHA-1算法的輸出長度為160比特,SM3算法的輸出長度為256比特,因此SM3算法的安全性要高於MD5算法和SHA-1算法。

SM4算法:SM4分組密碼算法是我國自主設計的分組對稱密碼算法,用於實現數據的加密/解密運算,以保證數據和信息的機密性。要保證一個對稱密碼算法的安全性的基本條件是其具備足夠的密鑰長度,SM4算法與AES算法具有相同的密鑰長度分組長度128比特,因此在安全性上高於3DES算法。

裡面的一些術語不知道也沒關係,以後會再梳理的.

二、信息摘要(SM3)一些特性

消息摘要或者哈希函數以任意消息(任意內容或者任何長度)作為輸入,然後產生一個固定長度大小的哈希值作為結果輸出。具體來說,該函數具有以下特性:

· 對於任意給定的消息,生成哈希值很簡單

· 從任意給定的哈希值去計算出一條消息是不可行的(即函數是單向的)

· 修改消息而不修改哈希值是不可行的

· 找到兩條具有相同哈希值的消息是不可行的

三、開源程序使用舉例

測試文件結構如圖:

測試源碼:

#include <SM3.h>#include <stdio.h>#include <stdlib.h>#include <string.h>
# define EVP_MAX_MD_SIZE 32#define ALLOC_OBJ(type, size) (type *)calloc(1, (sizeof(type)*size))
int main(){ unsigned char msgbuf[] = "abc"; unsigned char msgbuf1[] = "abc"; unsigned char dgst[EVP_MAX_MD_SIZE]; unsigned int dgstlen = (unsigned int)sizeof(dgst);
SM3_state *ctx = ALLOC_OBJ(SM3_state, 1); SM3_Init(ctx); SM3_Update(ctx, msgbuf, sizeof(msgbuf)-1); SM3_Final(dgst, dgstlen, ctx, sizeof(msgbuf)-1);
printf("Digest1 is: "); for (int i = 0; i < dgstlen; i++) printf("%02x", dgst[i]); printf("\n");
SM3_Hash(msgbuf1 , sizeof(msgbuf1)-1, dgst, dgstlen); printf("Digest2 is: "); for (int i = 0; i < dgstlen; i++) printf("%02x", dgst[i]); printf("\n");

free(ctx); return 0;}

測試效果:

SM4簡單舉例:

int main(){    unsigned char key[] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};    unsigned char iv[] = {1,2,3,4,5,6,7,8};    unsigned char plain_text[] = "hello world!";    unsigned char out_plain_text[sizeof(plain_text)];    unsigned char cipher_text[16];
SM4_EncCBC(key, iv, plain_text, cipher_text, sizeof(plain_text)-1);
SM4_DecCBC(key, iv, cipher_text, out_plain_text, sizeof(plain_text)-1); printf("%s\n",cipher_text);

printf("%s\n",out_plain_text);
return 0;}

四、小結與資源連結

①國密C語言實現的git連結:

https://github.com/JulongChain/julongchain-csp-sdt

②相關術語連結:

http://gmssl.org/docs/evp-api.html

 

③純初學入門,為了快速應用。最開始用的GmSSL,這個文檔相對全一些,對初學者會友好一些,但是還是需要一點兒密碼學的基礎,我是兩個結合一起看的。

 

需要完整程序的可在公眾號後臺留言說明。

 

每日××× :有機會一定要體驗不同的生活方式與工作方式!

相關焦點

  • 【微課堂】國密算法專題(四)——對稱算法SM4簡介
    上講我們學習密碼雜湊算法SM3的知識,接下來我們介紹一下對稱算法SM4的基礎知識。
  • 國密SM4分組密碼算法(對稱加密)的JS和JAVA類庫
    前言SM4分組密碼算法,是由國家密碼局發布的國產商用密碼算法
  • 關於國密算法 SM1,SM2,SM3,SM4 的筆記
    隨著金融安全上升到國家安全高度,近年來國家有關機關和監管機構站在國家安全和長遠戰略的高度提出了推動國密算法應用實施、加強行業安全可控的要求。擺脫對國外技術和產品的過度依賴,建設行業網絡安全環境,增強我國行業信息系統的「安全可控」能力顯得尤為必要和迫切。
  • 應用|國密安全瀏覽器
    目前,我國電子政務的應用系統絕大多數採用B/S架構,並大量利用PKI和USBKey實現安全認證和通信加密,其中很大一部分在使用SSL/TLS連結來保護瀏覽器與伺服器之間的認證和通信安全
  • 【國密算法那點事兒】解讀DES和SM4、RSA和SM2及SM3
    國密算法由國家密碼局發布,包含SM1\ SM2\ SM3\ SM4\ SSF33算法;國際算法由美國的安全局發布,是現今最通用的商用算法。今天小鈔就以分組密碼算法(DES和SM4)、公鑰密碼算法(RSA和SM2)、摘要算法(SM3)為例,和大家談談國際算法和國密算法的區別。
  • 淺談國密算法在Linux內核文件完整性保護上的實踐
    Linux內核和OpenSSL作為網際網路的基礎軟體底座,近幾年才對國密算法做了有限的支持,比如內核只實現了基礎的SM3摘要算法和SM4對稱加密,鑑於以上原因,近期我們在Linux上遊社區實現了SM2非對稱算法和國密證書,補齊了國密算法在內核的這塊短板
  • 安全工具系列 : SM3國密算法工具開發
    前言國密即國家密碼局認定的國產密碼算法.主要有 SM1,SM2,SM3,SM4.密鑰長度和分組長度均為 128 位.SM3是我國採用的的一種密碼散列函數標準,由國家密碼管理局於2010年12月17日發布。相關標準為「GM/T 0004-2012 《SM3密碼雜湊算法》」。SM3密碼雜湊算法採用Merkle-Damgard結構,消息分組長度為512b,摘要長度256b。
  • 信息安全如此重要,國密算法(SM3)終於支持
    基於我國還沒有獨立自主的密碼標準的背景下,自2012年以來,國家密碼管理局以《中華人民共和國密碼行業標準》的方式,陸續公布了SM2/SM3/SM4等密碼算法標準及其應用規範。ISA-L可以應用到多種作業系統中,它通過了在Linux,BSD以及Windows server上的測試,全面支持Intel 64位硬體平臺。ISA-L中的算法函數覆蓋了數據保護,數據完整性,數據安全,數據壓縮以及數據加密。
  • DPLSLAB敲黑板啦:「SM系列國密算法」大盤點
    (如RSA、DES、HASH、MD5)相比具有一定的優越性;DPLSLAB的技術工程獅將SM系列國密算法做了個大盤點,詳細如下:     眾所周知,為了保障商用密碼的安全性,國家商用密碼管理辦公室制定了一系列密碼標準,包括SM1(SCB2)、SM2、SM3、SM4、SM7、SM9、祖衝之密碼算法(ZUC)那等等。
  • SM3密碼雜湊算法簡介
    SM3密碼雜湊算法由王小雲等中國密碼學家自主設計,可用於數字籤名、完整性保護、安全認證、口令保護等。SM3算法消息分組長度為512比特,輸出摘要長度為256比特。SM3算法在M-D結構的基礎上,新增了16步全異或操作、消息雙字介入、加速雪崩效應的P置換等多種設計技術,能夠有效避免高概率的局部碰撞,有效抵抗強碰撞性的差分分析、弱碰撞性的線性分析和比特追蹤法等密碼分析方法。
  • 科普一下SM系列國密算法(從零開始學區塊鏈 189)
    其中SM1、SM4、SM7、祖衝之密碼(ZUC)是對稱算法;SM2、SM9是非對稱算法;SM3是哈希算法。目前,這些算法已廣泛應用於各個領域中,期待有一天會有採用國密算法的區塊鏈應用出現。其中SM1、SM7算法不公開,調用該算法時,需要通過加密晶片的接口進行調用;比較少人了解這些算法,在這裡對這些國密算法做簡單的科普 SM1 算法是分組密碼算法,分組長度為128位,密鑰長度都為 128 比特,算法安全保密強度及相關軟硬體實現性能與 AES 相當,算法不公開,僅以IP核的形式存在於晶片中。
  • RJMU401的DES和SM4分組密碼算法原理
    RJMU401國密安全晶片採用業內領先的低功耗高效率32位安全處理器SC100內核,內置SM1/SM2/SM3/SM4/DES/RSA/AES等多種加密算法
  • 支持國密SM2/SM3/SM4/SM9/ZUC/SSL的密碼工具箱GmSSL
    GmSSL介紹     GmSSL是一個開源的密碼工具箱,支持SM2/SM3/SM4/SM9/ZUC等國密(國家商用密碼)算法、SM2國密數字證書及基於
  • 【案例分享】動態令牌國密改造方案
    一、項目背景動態令牌是根據專門的算法產生變化的隨機數字組合,屬於身份認證的強認證手段,使用便捷且與平臺無關性
  • RSA算法和SM2算法對比
    國家密碼管理局於2010年12月17日發布了SM2算法,並要求現有的基於RSA算法的電子認證系統、密鑰管理系統、應用系統進升級改造,使用SM2算法。RSA公鑰加密算法是美國計算機學家Ron Rivest、AdiShamir和Leonard Adleman於1977年提出,是最早的公鑰加密算法之一,在全球範圍被廣泛使用。
  • 飛利信大數據技術與區塊鏈研究院 | SM3密碼雜湊算法簡介
    散列函數( Hash function )又稱散列算法、哈希函數,是一種從任何一種數據中創建小的數字「指紋」的方法。散列函數把消息或數據壓縮成摘要,使得數據量變小,將數據的格式固定下來。MD4算法一般使用在32位的計算機處理器模塊內,通過軟體系統來實現其算法功能。然而,由於MD4算法本身存在的安全性漏洞,目前它已經被更為先進安全的算法所淘汰。
  • HMAC 算法簡介
    AS(4):HMAC 算法簡介在《借我借我一雙慧眼吧》一文中,我們介紹了消息認證碼(Message
  • HASH算法簡介
    前段時間和幾位計算機專業的粉絲聚餐,聊著聊著聊到了HASH算法。於是請了KK為大家科普一下HASH算法,KK寫的知識水平非常高。
  • 廣泛兼容,國密支持,龍芯瀏覽器深度完善信創生態
    瀏覽器是桌面應用中最複雜的軟體平臺,一方面其本身框架和代碼的複雜度極高,同時依賴大量作業系統第三方庫,其穩定性和可靠性在一定程度上決定著桌面應用的穩定性和可靠性。龍芯瀏覽器通過兩大手段確保穩定可靠屬性:(1)瀏覽器自帶的海量測試集。
  • 紅蓮花國密安全瀏覽器升級最新Chromium85 內核,繼續引領政企瀏覽器市場
    紅蓮花國密安全瀏覽器V6.0版的此次發布,是國內最早一批基於Chromium85內核的國密瀏覽器,讓政企用戶在提升瀏覽器安全性的同時,同步享受到最新瀏覽器內核帶來的諸多優勢。網絡時代,瀏覽器掌握了網際網路的入口;在政企業務中,瀏覽器是各個應用之間的橋梁和信創產業必不可缺的關鍵一環,其重要性不亞於作業系統和基礎應用軟體。