1. 程式人生 > 其它 >國密演算法SM1-SM4簡介

國密演算法SM1-SM4簡介

參考bolg:https://www.cnblogs.com/blankicefire/p/9129202.html
SM1 為對稱加密。其加密強度與AES相當。該演算法不公開,呼叫該演算法時,需要通過加密晶片的介面進行呼叫。
SM2 非對稱加密演算法,基於ECC。該演算法已公開。由於該演算法基於ECC,故其簽名速度與祕鑰生成速度都快於RSA。ECC 256位(SM2採用的就是ECC 256位的一種)安全強度比RSA 2048位高,但運算速度快於RSA。
SM3 訊息摘要。可以用MD5作為對比理解。該演算法已公開。校驗結果為256位。
SM4 無線區域網標準的分組資料演算法。對稱加密,金鑰長度和分組長度均為128位。

SM2演算法
SM2演算法:SM2橢圓曲線公鑰密碼演算法是我國自主設計的公鑰密碼演算法,包括SM2-1橢圓曲線數字簽名演算法,SM2-2橢圓曲線金鑰交換協議,SM2-3橢圓曲線公鑰加密演算法,分別用於實現數字簽名金鑰協商和資料加密等功能。SM2演算法與RSA演算法不同的是,SM2演算法是基於橢圓曲線上點群離散對數難題,相對於RSA演算法,256位的SM2密碼強度已經比2048位的RSA密碼強度要高
學習sm2演算法,首先學習ECC演算法
ECC演算法描述:
  1、使用者A選定一條適合加密的橢圓曲線Ep(a,b)(如:y2=x3+ax+b),並取橢圓曲線上一點,作為基點G。
  2、使用者A選擇一個私有金鑰k,並生成公開金鑰(公鑰PB)K=kG。
  3、使用者A將Ep(a,b)和點(公鑰)K,G傳給使用者B。
  4、使用者B接到資訊後 ,將待傳輸的明文(M)編碼到Ep(a,b)上一點M,併產生一個隨機整數r(r<n)。加密開始
  5、使用者B計算點C1=M+rK;C2=rG。
  6、使用者B將C1、C2傳給使用者A。
  7、使用者A接到資訊後,計算C1-kC2,結果就是點M。因為C1-kC2=M+rK-k(rG)=M+rK-r(kG)=M
  再對點M進行解碼就可以得到明文。
  密碼學中,描述一條Fp上的橢圓曲線,常用到六個參量:
  T=(p,a,b,G,n,h)。
  (p 、a 、b 用來確定一條橢圓曲線,G為基點,n為點G的階,h 是橢圓曲線上所有點的個數m與n相除的整數部分)
  這幾個參量取值的選擇,直接影響了加密的安全性。參量值一般要求滿足以下幾個條件:
  1、p 當然越大越安全,但越大,計算速度會變慢,200位左右可以滿足一般安全要求;
  2、p≠n×h;
  3、pt≠1 (mod n),1≤t<20;
  4、4a3+27b2≠0 (mod p);
  5、n 為素數;
  6、h≤4。

SM2演算法就是ECC橢圓曲線密碼機制,但在簽名、金鑰交換方面不同於ECDSA、ECDH等國際標準,而是採取了更為安全的機制。另外,SM2推薦了一條256位的曲線作為標準曲線。
SM2標準包括總則,數字簽名演算法,金鑰交換協議,公鑰加密演算法四個部分,並在每個部分的附錄詳細說明了實現的相關細節及示例。
SM2演算法主要考慮素域Fp和F2m上的橢圓曲線,分別介紹了這兩類域的表示,運算,以及域上的橢圓曲線的點的表示,運算和多倍點計算演算法。然後介紹了程式語言中的資料轉換,包括整數和位元組串,位元組串和位元串,域元素和位元串,域元素和整數,點和位元組串之間的資料轉換規則。
詳細說明了有限域上橢圓曲線的引數生成以及驗證,橢圓曲線的引數包括有限域的選取,橢圓曲線方程引數,橢圓曲線群基點的選取等,並給出了選取的標準以便於驗證。最後給橢圓曲線上金鑰對的生成以及公鑰的驗證,使用者的金鑰對為(s,sP),其中s為使用者的私鑰,sP為使用者的公鑰,由於離散對數問題從sP難以得到s,並針對素域和二元擴域給出了金鑰對生成細節和驗證方式。總則中的知識也適用於SM9演算法。
在總則的基礎上給出了數字簽名演算法(包括數字簽名生成演算法和驗證演算法),金鑰交換協議以及公鑰加密演算法(包括加密演算法和解密演算法),並在每個部分給出了演算法描述,演算法流程和相關示例。
數字簽名演算法,金鑰交換協議以及公鑰加密演算法都使用了國家密管理局批准的SM3密碼雜湊演算法和隨機數發生器。數字簽名演算法,金鑰交換協議以及公鑰加密演算法根據總則來選取有限域和橢圓曲線,並生成金鑰對。
SM2演算法在很多方面都優於RSA演算法(RSA發展得早應用普遍,SM2領先也很自然)

SM3演算法
SM3演算法:SM3雜湊演算法是我國自主設計的密碼雜湊演算法,適用於商用密碼應用中的數字簽名和驗證訊息認證碼的生成與驗證以及隨機數的生成,可滿足多種密碼應用的安全需求。為了保證雜湊演算法的安全性,其產生的雜湊值的長度不應太短,例如MD5輸出128位元雜湊值,輸出長度太短,影響其安全性SHA-1演算法的輸出長度為160位元,SM3演算法的輸出長度為256位元,因此SM3演算法的安全性要高於MD5演算法和SHA-1演算法。
對長度為l(l<2^64)位元的訊息m,SM3雜湊演算法經過填充和迭代壓縮,生成雜湊值,雜湊值長度為256位元。
假設訊息m的長度為l位元。首先將位元“1”新增到訊息的末尾,再新增k個“0”,k是滿足l+1+k448mod512的最小的非負整數。然後再新增一個64位位元串,該位元串是長度l的二進位制表示。
填充後的訊息m′的位元長度為512的倍數。
例如:對訊息01100001 01100010 01100011,其長度l=24,經填充得到位元串:
01100001 01100010 01100011 1 00...00(423位元)00...011000(64位元l的二進位制表示)
下面的是實現了SM3的標準輸出

SM4
此演算法是一個分組演算法,用於無線區域網產品。該演算法的分組長度為128位元,金鑰長度為128位元。加密演算法與金鑰擴充套件演算法都採用32輪非線性迭代結構。解密演算法與加密演算法的結構相同,只是輪金鑰的使用順序相反,解密輪金鑰是加密輪金鑰的逆序。
此演算法採用非線性迭代結構,每次迭代由一個輪函式給出,其中輪函式由一個非線性變換和線性變換複合而成,非線性變換由S盒所給出。其中rki為輪金鑰,合成置換T組成輪函式。輪金鑰的產生與上圖流程類似,由加密金鑰作為輸入生成,輪函式中的線性變換不同,還有些引數的區別。
過程:

基本運算:SM4密碼演算法使用模2加和迴圈移位作為基本運算。
  基本密碼部件:SM4密碼演算法使用了S盒、非線性變換τ、線性變換部件L、合成變換T基本密碼部件。
  輪函式:SM4密碼演算法採用對基本輪函式進行迭代的結構。利用上述基本密碼部件,便可構成輪函式。SM4密碼演算法的輪函式是一種以字為處理單位的密碼函式。
  加密演算法:SM4密碼演算法是一個分組演算法。資料分組長度為128位元,金鑰長度為128位元。加密演算法採用32輪迭代結構,每輪使用一個輪金鑰。
  解密演算法:SM4密碼演算法是對合運算,因此解密演算法與加密演算法的結構相同,只是輪密鋁的使用順序相反,解密輪金鑰是加密輪金鑰的逆序。
  金鑰擴充套件演算法:SM4密碼演算法使用128位的加密金鑰,並採用32輪法代加密結構,每一輪加密使用一個32位的輪金鑰,共使用32個輪金鑰。因此需要使用金鑰擴充套件演算法,從加密金鑰產生出32個輪金鑰。
  SM4的安全性:SM4密碼演算法經過我國專業密碼機構的充分分析測試,可以抵抗差分攻擊、線性攻擊等現有攻擊,因此是安全的。