基於Verilog硬體描述語言實現SHA-1算法的設計

2020-11-28 電子發燒友

基於Verilog硬體描述語言實現SHA-1算法的設計

黃諄,白國強,陳弘 發表於 2020-11-28 10:16:16

單向散列函數是密碼學中一種重要的工具,它可以將一個較長的位串映射成一個較短的位串,同時它的逆函數很難求解。許多安全技術中都會用到單向散列函數的這種特殊性質,比如數字籤名、密碼保護、消息鑑別等。鑑於單向散列函數在密碼系統中的重要地位,密碼學家們設計了各種各樣的安全散列函數。目前最常用的散列函數是NIST於1995年頒布的安全散列算法SHA-1。

SHA-1算法和之前的MD4、MD5等安全散列算法原理很接近,但是安全性更好。它可以通過一系列的迭代計算把任意長度的比特串壓縮成長度為160bit的位串。而且一般認為它的這個計算過程在密碼學意義上是單向的,也就是說很難找到兩個不同的位串可以壓縮成相同的160bit。到目前為止,還沒有對SHA-1有效的攻擊方法。

由於SHA-1算法的良好特性,它被廣泛使用在諸如電子商務這樣的現代安全領域,尤其是被大量應用於公鑰密碼系統的數字籤名中。目前幾乎所有相關密碼協議、標準或者系統中,都包括了SHA-1算法,其中比較著名的有SSL、IPSec和PKCS。在這些場合下,能否快速計算出消息的散列值直接影響到整個系統的處理能力。但是,由於SHA-1算法本身是一個很複雜的算法,計算量也較大,加上每次迭代都需要依賴上次的計算結果,因此不論是硬體還是軟體實現,計算速度都很有限,這大大限制了算法的適用場合。

本文提出一種新的硬體實現方法,通過改變迭代結構,達到縮短關鍵路徑的目的,進而提高SHA-1的計算速度。

SHA-1算法

算法描述

SHA-1算法能夠將任意長的輸入壓縮成160bit的輸出。但是,SHA-1算法中的基本迭代只能處理512bit的數據塊,因此為了處理任意長度的數據,首先需要將輸入的消息每512bit分成一塊,並且將最後一塊不足512bit的消息按一定規則補齊。(限於篇幅,SHA-1算法的詳細描述見文[1],下面是算法進一步的簡單描述。)

分塊之後就可以對每塊消息按下述方法依次進行處理。

1)在5個中間變量H0、H1、H2、H3和H4中置入特定初值。

2)對每塊消息依次執行步驟a)到e)

a)將512bit的消息塊分成16個32bit的字W0,W1,…,W15;

b)For t=16 to 79l etWt=S1(W t-3W t-8

W t-14

W t-16);

c)LetA=H0,B=H1,C=H2,D=H3,E=H4;

d)For t=0 to 79 do

i)TEMP=S 5 (A)+f t(B,C,D)+E+Wt+Kt;

ii)E=D;D=C;C=S30(B);B=A;A=TEMP;

e)LetH0=H0+A,H1=H1+B,H2=H2+C,H3=H3+D,H4=H4+E。

所有消息塊處理完後得到的5個32bit變量H0到H4構成了160bit的數據,這就是SHA-1算法輸出的散列值。

算法中使用了一些簡單的邏輯函數和常數,其中函數ft()和常數Kt分別為

算法中S1(*)、S5(*)和S30(*)分別表示按位循環左移1bit、5bit和30bit。算子「∧」、「∨」、「?」和「+」分別表示按位「與」、按位「或」、按位「異或」以及32bit整數加法。

算法分析

從算法描述可以看出,SHA-1最核心的計算是一個計算5個中間變量的迭代:

An=S5(A n-1)+f n(B n-1,C n-1,D n-1)+

E+Wn+Kn,

Bn=A n-1,

Cn=S30(B n-1),

Dn=C n-1,

En=D n-1.

在硬體實現中,5個變量在一個周期內同時由組合邏輯電路根據上次迭代的計算值產生,因此每次迭代所需要的時間是由最慢的計算過程決定。這樣一條最慢的計算路徑也就是所謂的關鍵路徑。如果完全按照SHA-1的原始算法進行硬體設計,那麼很明顯的關鍵路徑是變量A的計算。在每次迭代過程中,計算變量A需要進行4次32bit的整數加法和若干組合邏輯。這些計算一共需要的時間也就是算法硬體實現的最短周期。正是因為變量A的計算比較複雜,造成SHA-1算法硬體實現的工作頻率難以提高。

因此,加快SHA-1硬體實現的計算速度關鍵就是改變迭代結構,從而縮短每次迭代過程的關鍵路徑。

硬體快速實現的新結構

觀察算法可發現,除了變量A以外,其他4個變量的計算都相當簡單。因此,如果將變量A的計算過程通過一定方式分解成若干並行的計算,那麼就可以在不增加迭代次數的前提下,縮短整個計算的關鍵路徑。

出於這種目的,1997年A.Bosselaers等人對SHA-1算法的結構進行了分析,發現SHA-1算法的數據流圖可以分解成並行的7路數據處理,每路數據上一個周期只需一個基本操作:加法、「異或」或者循環移位。

在此關於SHA-1結構結論的基礎上,本文通過引入中間變量的方法,將計算的關鍵路徑分解成若干個較短的路徑,從而達到加速硬體計算的效果。考慮到硬體實現中32bit整數加法的延時遠遠大於循環移位和普通邏輯運算,所以分析關鍵路徑時只考慮加法的代價,而忽略其他邏輯運算的延時。

首先引入中間變量P n-1=fn(B n-1,C n-1,D n-1)+E n-1+Wn+Kn,那麼可以得到An=S5(A n-1)+P n-1。也就是說,將第n次迭代的部分計算提前到第n-1次迭代中進行計算。變形後,第n次迭代中A的計算只需要進行一次32bit整數加法。

但是這種方式下,變量P的計算仍然需要依賴於同一次迭代中的其他變量,也就是說在一次迭代中需要在計算完其他變量後才能計算出P,這樣的話計算的關鍵路徑還是沒有縮短。所以還要充分利用A到E5個變量之間的相互關係

B n-1=A n-2,

C n-1=S30(B n-2),

D n-1=C n-2,

E n-1=D n-2.

將P的計算變化為P n-1=f n(A n-2,S30(B n-2),C n-2)+D n-2+Wn+Kn。如此之後,第n-1輪的P值可以完全依賴於前一輪也就是第n-2輪的變量值計算而得。迭代計算的關鍵路徑就分裂成變量A和P兩路並行的計算。

類似的再引入其他中間變量,不斷的分解關鍵路徑,最終的迭代可變形為

An=S5(A n-1)+P n-1,

Pn=f n+1(A n-1,S30(B n-1),C n-1)+Q n-1,

Qn= C n-1+R n-1,

Rn=W n+3+K n+3,

Bn=A n-1,

Cn=S30(B n-1)。

可以發現通過引入中間變量,使得計算變量A的關鍵路徑分解成A、P、Q、R的4路並行計算,所需要的4次加法平均在4個周期內完成。這樣每次迭代過程中任何一個變量的計算最多只需要一次32bit整數加法和少量組合邏輯。在此基礎上,SHA-1算法可以通過如下方法來計算

1)將輸入的512bit消息分成16個字W0,W1, …,W15;

2)For t=16 to 79 let Wt=S1(W t-3

W t-8

W t-14

W t-16);

3)LetA=H0,B=H1,C=H2,D=H3;

4)LetP=f 0 (B,C,D)+E+W0+K0,Q=D+W1+K1,R=W2+K2;

5)Fort=0 to 79 do

a)TEMP=S5(A)+P;

b)P=f t+1(A,S30(B),C)+Q;

c)Q=C+R;

d)R=W t+3+K t+3;

e)B=A;C=S30(B);A=TEMP;

6)LetH0=H0+A,H1=H1+B,H2=H2+C,H3=H3+S30(A76),H4=H4+S30(A75)。

雖然引入中間變量的計算後,每塊數據需要額外增加一個預計算的步驟4),但是因為關鍵路徑得以縮短,整體硬體實現的速度仍然會大大提高。

實現結果

使用Verilog硬體描述語言按本文提出的優化方法實現了SHA-1算法,並使用Synopsys Design Compiler在0.18Lm標準單元庫下綜合,得到表1中的結果。表1中還包括了文[6]的實現結果。文[6]同樣使用了0.18Lm工藝,但是實現SHA-1算法的方法仍然是傳統的直接計算ABCDE5個中間變量的方法。

表1ASIC實現結果比較

從前文的算法分析可以看出,傳統實現方法的關鍵路徑上有4次加法,如果把這4次加法按樹型組織,那麼關鍵路徑的延時大約為3個32bit加法器的延時;通過本文方法改進後,關鍵路徑延時可以縮短為1個32bit加法器延時加上少量組合邏輯延時。因此理論上速度大約可以提高為傳統方法的2~3倍。從表1和使用傳統方法實現的文[6]對比可以發現,實現結果和理論分析完全一致。改進方法因為計算中引入了中間變量,所以面積比傳統方法要略大;同時為了計算中間變量的初值,每塊數據也需要多兩個周期的計算。但是因為關鍵路徑得以明顯縮短,整體的計算速度大大提高,吞吐量達到傳統方法的兩倍以上。

通過縮短關鍵路徑加速SHA-1計算的方法不僅適用於ASIC設計,而且一樣適用於基於FPGA的硬體設計。文[6,7]是目前常用的兩種SHA-1算法的商業IP核。使用本文提出的改進方法在和文[6,7]同樣的FPGA晶片上(XilinxVirtex2II系列XC2V50025)實現SHA-1算法。具體結果以及和文[6,7]結果的對比見表2。

表2FPGA實現結果比較

結論

針對有理分式擬合中的保證生成二埠網絡無源性的問題,本文提出了一種簡單且有效的局部補償方法,其主要思想在於:在生成網絡的Y參數矩陣的對角元素上加上(相當於並聯)一個RLC串聯的濾波迴路,使得該迴路可以以恰好補償原網絡違反無源性條件的頻率段,而儘量少的引入誤差。經過實驗表明,該方法能很好的達到預期的目的,在保證無源性條件的同時,能使引入的誤差限制在2%以內。

責任編輯:gt

打開APP閱讀更多精彩內容

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容圖片侵權或者其他問題,請聯繫本站作侵刪。 侵權投訴

相關焦點

  • 基於Verilog硬體描述語言的AES密碼算法實現
    目前,分組密碼算法AES以其高效率、低開銷、實現簡單等特點被廣泛應用於密碼模塊的研製。隨著計算機信息技術和超大規模集成電路技術的成熟與發展,通過硬體來實現密鑰模塊的內部運作,可保證在外界無密鑰的明文流動,能夠實現真正意義上的保密。此外,硬體實現還具有高速、高可靠性等特點。目前許多AES算法的硬體實現採用基於RAM查找表方式來實現算法中最關鍵的SubBytes部分。
  • 基於Verilog HDL的SVPWM算法的設計與仿真
    摘要:空間矢量脈寬調製算法是電壓型逆變器控制方面的研究熱點,廣泛應用於三相電力系統中。基於硬體的FPGA/CPLD晶片能滿足該算法對處理速度、實時性、可靠性較高的要求,本文利用Verilog HDL實現空間矢量脈寬調製算法,設計24矢量7段式的實現方法,對轉速調節和轉矩調節進行仿真,驗證了設計的實現結果與預期相符。
  • 基於Verilog HDL的SPWM全數字算法的FPGA實現
    實現SPWM控制算法的方法很多,其中模擬比較法因電路複雜、且不易與數字系統連接而很少採用;傳統的微處理器因不能滿足電機控制所要求的較高採樣頻率(≥1 kHz)而逐漸被高性能的DSP硬體系統所取代,但該系統成本高、設計複雜。
  • 基於FPGA的FFT算法硬體實現
    基於FPGA的FFT算法硬體實現
  • 基於Xilinx FPGA 實現FFT算法的電力諧波檢測的設計方案詳解
    基於Xilinx FPGA 實現FFT算法的電力諧波檢測的設計方案詳解 工程師青青 發表於 2018-07-16 18:22:00 基於FFT算法的電力系統諧波檢測裝置
  • 基2 FFT 算法的模塊化硬體實現與比較
    通過時序調用可組成不同結構的 FFT 處理器,實現流水結構與遞歸結構兩種方案,分別側重於處理速度與資源佔用量兩方面的優勢。在FPGA硬體設計中使用 Verilog 語言完成代碼編程,實現了兩種結構的 512 點基 2 算法的快速傅立葉變換,使用 Modelsim 完成功能仿真。與 MATLAB 中 FFT 函數對比驗證了結果的正確性。
  • 基於ADSP-TS101S的超分辨測向算法硬體設計
    本文主要研究基於ADSP-TS101S多處理器系統的空間譜估計超分辨測向算法的硬體實現。1 空間譜估計超分辨測向基本原理空間譜估計超分辨測向的基本原理為通過對多元天線陣接收的空中無線電信號進行放大、變頻、採樣以及A/D變換後的數位訊號進行數學處理來估計信號的來波方向,其中最常用的算法是多重信號分類(MUSIC)算法。
  • 基於DSP Builder的JPEG靜態圖像壓縮算法的實現
    採用這種方法實現了硬體級的仿真驗證。1 DSP Builder介紹 DSP Builder開發工具是Altera公司提供的數位訊號處理平臺,它是一個系統級(或算法級)設計工具,架構在多個軟體工具之上,並把系統級和RTL級兩個設計領域的設計工具連接起來,最大程度地發揮了兩種工具的優勢。
  • Verilog HDL基礎之:與C語言的區別與聯繫(獨家)
    用硬體描述語言(HDL)的程序設計硬體的好處在於易於理解、易於維護,調試電路速度快,有許多的易於掌握的仿真、綜合和布局布線工具,還可以用C語言配合HDL來做邏輯設計的前後仿真,驗證功能是否正確。在算法硬體電路的研製過程中,計算電路的結構和晶片的工藝對運行速度有很大的影響。所以在電路結構確定之前,必須經過多次仿真。
  • 基於C語言的設計流優化語音識別晶片結構設計
    在ASIC中實現複雜DSP算法的要求通常極為苛刻,但採用Frontier的結構合成工具A|RT Designer工具能迅速優化RTL描述,該工具還允許自由選擇備用結構以優化應用設計。  通過應用基於C語言的設計流,能在結構設計階段對新特性進行設計和硬體優化,這能降低50%的矽片面積,通過加快 C語言原型硬體的設計,可以進一步擴展設計的性能以滿足用戶對產品規格的嚴格要求。
  • 基於Cyclone II FPGA開發平臺實現語音識別算法程序的設計
    基於Cyclone II FPGA開發平臺實現語音識別算法程序的設計 瀋陽;馮良;洪誠 發表於 2021-01-12 10:21:38 SOPC可編程片上系統是一種獨特的嵌入式微處理系統。
  • 基於Verilog的順序狀態邏輯FSM設計與仿真
    硬體描述語言Verilog為數字系統設計人員提供了一種在廣泛抽象層次上描述數字系統的方式,同時,為計算機輔助設計工具在工程設計中的應用提供了方法。該語言支持早期的行為結構設計的概念,以及其後層次化結構設計的實現。
  • 基於NETFPGA的可重構科學計算平臺
    目前可重構計算面臨的主要問題是大量設計工作依靠手工方法完成,並要求用戶掌握算法、並行計算、硬體描述語言和電路設計等大量相關知識及豐富的設計經驗,設計難度很大,設計周期較長,嚴重製約著可重構計算技術的推廣和普及。
  • 基於Nios的FFT算法軟硬體協同設計
    利用自定製的FFT運算指令,在Nios中利用C語言 編寫基於Nios的FFT算法程序,實現了FFT運算的軟硬體協同設計。經測試表明,將FFT算法加入到Nios嵌入式處理器指令集中,可以幫助系統完成 複雜的數據處理任務,增強Nios系統的實時處理能力。該設計方法打破了軟硬體間的屏障,大大加快了系統的功能驗證。
  • 硬體描述語言Verilog HDL設計進階之: 典型實例-狀態機應用
    本文引用地址:http://www.eepw.com.cn/article/201706/348829.htm4.6典型實例6:狀態機應用4.6.1實例的內容及目標1.實例的主要內容狀態機設計是HDL設計裡面的精華,幾乎所有的設計裡面都或多或少地使用了狀態機的思想。
  • 基於FPGA的高速卷積硬體設計及實現
    本文從實際工程應用出發,使用快速傅立葉變換(FFT)技術,探討卷積的高速硬體實現方法。本文引用地址:http://www.eepw.com.cn/article/148300.htm1 卷積算法的原理設線性時不變系統的衝激響應為h(n),則衝激響應和輸入δ(n)之間有關係
  • 基於凌華科技與System Generator的GPS快速捕獲算法的實現與驗證
    串行搜索方法硬體實現簡單,但其捕獲時間較長,每更改一次本地碼相位,就需要花費1ms,完成一個搜索約2min左右時間。導航接收機在很多應用領域要求高的數據更新率,這就要求捕獲時間變得更短才行。目前GPS信號捕獲電路的主要實現手段是通過使用DSP晶片,DSP可以通過C語言編寫程序,屬於軟體工作,可以在較高的層次進行設計,為設計工作提供了方便。
  • 基於FPGA的幀內預測編碼器硬體架構設計詳解
    基於FPGA的幀內預測編碼器硬體架構設計詳解 工程師青青 發表於 2018-07-17 10:42:00 針對幀內預測的快速算法,由於DSP 架構軟體順序執行的局限性難以滿足實時性要求
  • 基於FPGA和IP核的FIR低通濾波器的設計與實現
    打開APP 基於FPGA和IP核的FIR低通濾波器的設計與實現 秩名 發表於 2012-12-03 11:50:23   FIR
  • AES加解密算法IP核的設計與實現
    前9輪完全相同,依次經過字節代替、行移位、列混合、輪密鑰加,最後一輪不同,跳過了列混合,解密與加密過程類似,但執行順序與描述內容有所不同,因此AES算的加解密過程需要分別實現。我們可以調整操作順序,先進行密鑰加操作,再進行列混合操作,密鑰擴展部分的列混合操作就可去掉,從而密鑰擴展模塊被簡化,AES IP核的硬體複雜度得到降低。