① 在FPGA上快速實現MD5演算法的新方法論文
在FPGA上快速實現MD5演算法的新方法論文
摘 要 文章介紹了一種在FPGA上快速實現MD5演算法的新方法,給出了優化設計的原理、實現的具體方法及其重要模塊的設計實現方案。
關鍵詞 MD5;FPGA;Verilog語言;集成電路;關鍵路徑
1 引言
隨著電子商務和網路通信的發展,網路信息安全的重要性越來越顯著,信息加密、數字簽名、數據的完整性認證、身份驗證等成為信息安全領域的重要內容。MD5演算法本身是為數字簽名應用而設計的,隨後也應用在信息驗證技術當中。作為應用最廣泛的安全散列演算法,MD5演算法的高效實現就成為研究的需要,MD5演算法本身可以採用軟體實現,但其性能受到處理器件性能的制約不能滿足網路通信帶寬日益增長的要求,因而通過硬體實現高速MD5 運算就成為需要。
2 MD5演算法介紹
MD5 演算法可以對任何長度不超過 264二進制位的消息產生128 位的單向散列消息摘要輸出, RFC1321 標准中的MD5 演算法主要步驟如下:
在一些初始化處理後,MD5以512位分組來處理輸入文本,每一分組又劃分為16個32位子分組。演算法的輸出由四個32位分組組成,將它們級聯形成一個128位散列值。
(1)附加填充比特:填充消息使其長度恰好為一個比512位的倍數僅小64位的數。即對報文進行填充使報文的長度(比特數)與448模512同餘。填充方法是附一個1在消息後面接所要求的多個比特0。
(2)附加長度值:在其後附上64位的消息長度(填充前)。如果消息長度大於 264,僅使用該長度的低64比特。這樣,該域包含的長度值為初始長度模264 的值。
這兩步的作用是使消息長度恰好是512位的整數倍(演算法的其餘部分要求如此),同時確保不同的消息在填充後不相同。
(3)初始化寄存器:四個32位初始化變數為:
它們也被稱為鏈接變數(chaining variable)
(4)進行演算法的主循環:這一步是演算法的核心,它是一個包含四個大循環的64步函數,四個大循環結構相同,但每次使用的邏輯函數不同,每一個大循環由對512比特的16步操作組成,即每16步為一輪大循環。
每次操作如下(設 Ai+1、Bi+1 、Ci+1 、Di+1 為第 +1個時鍾周期時打入寄存器的值):
以一下是每輪中用到的四個非線性函數(每輪一個)。
常數ti可以如下選擇:在第i步中,ti是4294967296*abs(sin(i))的整數部分,i的單位是弧度。Wi是512位消息分組中的一個,Si是每次循環移位的次數。對每次而言也是固定的常數。
(5)結果輸出:所有64步完成之後,將第64步的輸出加到四個初始化變數上作為新的初始化變數,進行下一個512比特分組的運算,直到所有分組處理完畢,單次操作圖如下:
圖1. MD5演算法單步操作圖
3 演算法優化
由上圖可以看到,硬體實現時,MD5演算法每一步操作中的關鍵路徑在於B的求取(其他三個變數都是直接傳遞),這個關鍵路徑包括了四個模 232加法運算、三輸入變數的邏輯運算、"兩個查找表運算及一個循環左移運算,而在FPGA設計中,加法運算最為耗時,四個加法運算至少需要三個加法器級聯完成,加法運算嚴重製約了整個操作的速度,可見要加快演算法運行速度就必須在簡化這一關鍵路徑上下工夫,經過觀察我們發現,在
中 對每個周期都是已知的常數,是輸入的512比特的一個32位分組,這樣,在512比特輸入初始化完成後,也可看作固定常數,
Ai是第i時鍾周期里寄存器D 的值,而 Di的值又是第i-1周期里的Ci-1 ,即Ai 的`值是第i-1周期里Ci-1的值。
若在第i周期設中間寄存器變數 ,並令
那麼在第i+1周期,
就可以表示為
操作就可以用下面幾個式子代替:
其中, Ai+1沒有參與任何運算,因此上式可以接著化簡為
這樣一來,原來一個周期內需要完成三級加法和相應的組合邏輯,現在只需要完成兩級加法和部分組合邏輯就行了,大大提高了演算法速度,只要在運算開始時加-個周期的初始化即可,簡化後的系統框圖如下:
圖2. 改進後的單步操作圖
4 結果比較
由上文中的演算法分析部分不難看出,傳統的實現方式關鍵路徑是3級32比特加法器延遲和組合邏輯的延遲,而改進的實現方式減少了一級加法器的延遲,並把組合邏輯的延遲分散到不同路徑上,因此,採用改進的實現方式大約可以將速度提高到原來的1.5倍左右。同時,為了實現數據的初始化,需要提前一個周期計算出寄存器A的值,因此整個演算法的實現需要65個周期。我們採用 VerilogHDL 描述,選擇Altera Stratix II EP2S15F672C5 FBGA晶元,在QuartusII6.0上驗證通過。由於在FPGA中,連線延時也很關鍵,而這部分延時不能像加法延時那樣通過預先計算並存儲在寄存器中來消除一部分,所以實際的MD5改進演算法與傳統型相比較,速度的提高約為1.3,資源方面由於只是增加了一個時鍾節拍,寄存器數量和組合邏輯並沒有增加,所以改進型在資源方面和傳統型相當。下表為演算法改進前後在資源、頻率、流量上的比較。
表1. 改進前後資源比較
5 結束語
由表1可見,改進型MD5演算法實現,使用的資源並沒有明顯增加,但速度的改善十分明顯,基本實現了用較少的資源得到較高速率的目標,證明了結構的正確性和合理性。實驗結果也說明,這種利用寄存器來減少加法器級聯從而減少關鍵路徑的實現方法也可用於一般的FPGA硬體設計中。
參考文獻
[1] R.Rivest. The MD5 Message-Digest Algorithm,RFC1321 1992。
[2] Jarvinen K, Tommiska M,Skytta J.Hardware implementation analysis of the MD5 hash algorithm.System Sciences,2005.HICSS』05.Proceedings of the 38th Annual Hawaii International conference on 03-06 Jan.2005:298
[3] Bruce Schneier. 應用密碼學.北京:機械工業出版社,2000:188~194
[4] William Stallings. 密碼編碼學與網路安全:原理與實踐.北京:電子工業出版社,2001: 216~222。
[5] 夏宇聞.Verilog 數字系統設計教程.航空航天大學出版社,2005
;② 阿裡面試官:恕我直言,搞懂這10道演算法題,輕松拿20K不是問題
01打怪獸
難度:容易
現在有3隻怪獸,他們的都有自己的血量a,b,c(1<=a,b,c<=100),當Tom打死第一怪獸的時候花費的代價為0,其餘的怪獸的代價為當前的怪獸的血量減去上一個怪獸的血量的絕對值。問Tom打死這些怪獸所需要的最小代價
02數組變換
難度:中等
給出一個長度為 n 的數組,和一個正整數 d。 你每次可以選擇其中任意一個元素 a[i] 將其變為 a[i] + d 或 a[i] - d,這算作一次操作。你需要將所有的元素全部變成相等元素,如果有解,請輸出最小操作次數,如果無解請輸出-1。
01超級區間
難度:中等
Tom現在有一個長度為n的數組,Jerry給Tom定義了一種超級區間,如果區間[l,r]滿足(a[l]+…+a[r])>=k,則區間[l,r]被稱為超級區間,現在Jerry想讓Tom告訴他數組中有多纖岩少個超級區間。
02能量半徑
難度:中等
codancer來到了一個能量平面上的中心,坐標為(0,0),接下來巫師Tom會在q個坐標上放置能量點,每個信凳能量點的能量值為1,為了打敗哥斯拉,他需要至少k點的能量,因此他想確定一個最小的整數半徑r使得codancer能夠從這個圓心為(0,0),半徑為r的圓形區域內得到至少k個能量值,請你幫他確定最小的整數半徑r。
01找出二叉搜索樹的第2大的數
難度:容易
給定一個二叉搜索樹,找出其第二大的數。
02字元配對
難度:中等
給你一個字元串,字元串中僅包含"A","B",現在有四種字元串"AA","AB","BA","BB",每種字元串都有他們的權值,問從給出的字元串中能夠得到的最大權值為多少(一個字元只能屬於一個子字元串)?
01斐波那契字元串
難度:中等
Tom發現了一種神奇的字元串-斐波那契字元串,定義f[1]=0,f[2]=1,對於所有的i>2都有f[i]=f[i-2]+f[i-1],其中「+」代表拼接,比如01+10=0110,現在對於字元串f[n],請判斷f[n]的第k項是0,還是1?
01Hikari and Interstellar Experience
難度:容易
在無垠的宇宙中,有 n 個星球,第 i 個星球有權值vi 。由於星球之間距離極遠,因此想在有限的時間內在星際間旅行,就必須要在星球間建立傳送通道。 任意兩個星球之間均可以建立傳送通道毀坦御,不過花費並不一樣。 第 i 個星球與第 j 個星球的之間建立傳送通道的花費是lowbit(vi ⊕ vj) ,其中⊕為二進制異或,而lowbit(x)為 x 二進制最低位的值,例如lowbit(5) = 1,lowbit(8) = 8 。 特殊地,lowbit(0) = 0。 Hikari 想在這 n 個星球間穿梭,於是――你需要告訴 Hikari,要使這 n 個星球相互可達,需要的花費最少是多少?
02二進制字元串
難度:中等
Tom得到了一個二進制字元串s,即s只由Ɔ'和Ƈ'組成,現在令d(t)代表二進制字元串t在十進制下的值。 那麼d(「011」)=3,d(「0001000」)=4,如果t的長度等於d(t),那麼就稱t是奇妙串,現在Tom想知道s中有多少個子串是奇妙串?
01小明的數學作業
難度:容易
眾所周知,小明是一個數學小能手,有一天數學老師給了小明一個長度為n(2<=n<=5000)的序列,其中第i個數是ai(0<=ai<=1e9),數學老師想知道這個序列排序後,其中最長的等差子序列的長度是多長,聰明的你能幫小明解決這個問題嗎?
02Codancer上樓
codancer來到了一棟大樓前,現在他要上樓。
如果codancer從第x層走樓梯到第y層(y>x),那麼他所花費的時間是a[x]+a[x+1]+…+a[y];
如果他從x層坐電梯到第y層,那麼他所花費的時間是c+(b[x]+b[x+1]+…+b[y]),因為他等電梯的時間為c。
現在codancer想知道從第1層到第n層需要最少需要多長時間?
01變換的秘鑰
難度:中等
Tom最開始有一個密鑰s1,s1是長度為n的由小寫字母組成的字元串。Jerry也有一個長度為n的由小寫字母組成的密鑰s2。現在有m組關系,每組關系由兩個數字[u,v]構成(1<=u,v<=26),表示26個字母表中的第u個小寫字母可以直接轉換為第v個小寫字母。假設u=1,v=2,那麼說明字母'a'可以直接轉換為字母'b'。現在Tom對於s1的每個字母使用無數次轉換,請判斷s1能否轉換為s2?
01最大邊權和
難度:簡單
現在有n個點(1<=n<=1000),每個點都有一個值稱為點權ai(ai為偶數,1<=ai<=1000),現在可以將任意兩個點相連,連起來以後這條邊也有一個值稱為邊權,這個邊的邊權為這兩個點的點權之和的一半。現在需要你添加n-1條邊,問將這n個點連通以後(連通是指任意兩個點都能互相到達)的最大的邊權和是多少?
02錢庄
難度:中等
錢庄每天能夠收到很多散錢,第i個散錢的值2 wi。為了便於管理,錢庄每天都會向中央銀行申請兌換錢幣,假設錢庄有一些散錢使得2 k1+2 k2+...+2 km=2^x(x為非負整數),那麼就可以將這些散錢兌換成一個大錢幣,問在錢庄收到的這些散錢最終最少能變成幾個錢幣?
01codancer的旅行
難度:困難
期末考試終於結束啦,Codancer開始了他的旅行,現在整個地圖上有n個城市,這些城市之間有n-1條道路相連,每條道路都有一個距離,並且保證整個圖是連通的,即這個地圖可以看作是一棵樹,現在假設Codancer要從城市A到城市B,那麼他的路費就是從A-B的路徑上邊權最大的邊的權值wmaxx元。現在Codancer有k元,他想知道他能選擇那些(A,B)並且A<B使得codancer能夠到達?
HashMap是一個用於存儲Key-Value鍵值對的集合,每一個鍵值對也叫做Entry。這些個鍵值對(Entry)分散存儲在一個數組當中,這個數組就是HashMap的主幹。
01全奇數組
難度:中等
codancer現在有n個正整數a[1],a[2]…a[n],Tom告訴codancer他可以進行下列操作,選擇某個偶數x,把這n個數中全部等於x的數字除2,Tom想知道把這n個數字全部變成奇數最少需要幾次這樣的操作?
以上十道演算法題你都能搞定嘛?備戰大廠每日刷一道演算法題來提升自己,堅持堅持再堅持,必然會有收獲。為大家整理一份781頁的高分寶典,知識較為全面,可分享給想要學習提升自己的朋友。
領取方式:私信【面試寶典】或點擊右方鏈接: https://shimo.im/docs/QVy8HrQgPYkx9Ddg/ 即可免費領取,喜歡本文不妨關注+轉發支持一下~~
③ 求 機器學習周志華pdf
鏈接:
《機器學習》展示了機器學習中核心的演算法和理論,並闡明了演算法的運行過程。
④ 在加密演算法中屬於公鑰密碼體制的是什麼
演算法介紹:
現有矩陣M,N和P,P=M*N。如果M(或N)的行列式為零,則由P和M(或P和N)計算N(或M)是一個多值問題,特別是M(或N)的秩越小,N(或M)的解越多。
由以上問題,假設Tom和Bob相互通信,現做如下約定:
1. 在正式通信之前,二人約定一個隨機奇異矩陣M。
2. Tom和Bob各自選取一個n*n的隨機矩陣作為他們的私有密鑰,設Tom的為A,Bob的為B。
3. 然後Tom計算矩陣Pa=A*M作為他的公鑰,Bob計算矩陣Pb=M*B作為他的公鑰。
4. 當Tom向Bob發送消息時,計算加密矩陣K=A*Pb,用K對消息加密後發送到Bob端,Bob收到消息後,計算解密矩陣K』= Pa*B,由以上代數關系可以看出,K= K』,也既加密和解密是逆過程,可以參照對稱加密標准AES。
5. Bob向Tom發送消息時,計算解密矩陣K= Pa*B,加密。Tom收到消息後計算解密矩陣K=A*Pb,原理同上。
演算法分析:
由以上介紹可容易看出,此演算法比RSA和ECC的加密效率要高4-6個數量級,且加密強度在增大n的基礎上,可獲得與以上兩演算法相當的加密強度。
該演算法仍在論證階段,歡迎此方面高手攜手參與或提出缺點.
email:[email protected]