【正文】
RAM9_ADDR : OUT STD_LOGIC_VECTOR(4 downto 0 )。3) RS232接口輸出記錄設(shè)計(jì)一個(gè)RS232接口,把模冪乘結(jié)果從RS232接口輸出到PC機(jī)上,方便觀察記錄。end MEM_8。 RAM5ADR : in STD_LOGIC_VECTOR(3 downto 0 )。 RAM1ADR : in STD_LOGIC_VECTOR(3 downto 0 )。 Z4_EE : in STD_LOGIC。entity MMUL_CTRL32 is port ( E_MODMUL : in STD_LOGIC。 RAM9_ : in STD_LOGIC_VECTOR(127 downto 0 )。當(dāng)i=0時(shí),Z0=0,Z1_0=a0 * B0+λ0 * n0, ,在第一周期,做a0 * B0,λ0 * n0,且把兩個(gè)結(jié)果取出低32位做加法運(yùn)算。entity MMUL_32 is port ( C40M_CLK : in STD_LOGIC。 CLK_N : in STD_LOGIC。 同樣有推論:對(duì)于不能被質(zhì)數(shù)p整除的正整數(shù)a,有a ≡ a mod p2) 模乘算法功能實(shí)現(xiàn)設(shè)求B=M1*M2 mod n (M、n均為整數(shù))(1) B1=M1*M2*R1 mod n,( Montgomery算法實(shí)現(xiàn))(2) B=B1*R2*R1 mod n[1]中的模運(yùn)算結(jié)合率,可由((a*b) mod p * c)mod p = (a * (b*c) mod p) mod p,B =(M1*M2*R1 mod n )* R2*R1 mod n 得到B= M1*M2*R1*R2*R1 mod n = M1*M2 mod n 模冪乘算法功能實(shí)現(xiàn) 設(shè)求A=Me mod n (M、e、n均為整數(shù),e=3)1) 設(shè)s=1,求B=M*M mod n2) 求A1=B*M mod n ,s=s1,3) 判斷s=e? 若s=e,則完成運(yùn)算,否則跳到2步執(zhí)行 模冪乘算法功能實(shí)現(xiàn)圖狀態(tài)說明:第0狀態(tài):初始狀態(tài),等待模冪乘MMC_E使能信號(hào)第2狀態(tài):執(zhí)行模乘運(yùn)算B1=M1*M2*R1 mod n;當(dāng)模乘運(yùn)算結(jié)束后,信號(hào)MMUL_OV有效,跳至狀態(tài)3第3狀態(tài):將運(yùn)算結(jié)果B1存入原M1所存的存儲(chǔ)器中;并對(duì)信號(hào)DD進(jìn)行判斷,若DD為0,則跳至狀態(tài)4,若DD為1,則跳至狀態(tài)6第4狀態(tài):將R2 存入原M2所存的存儲(chǔ)器中;跳至狀態(tài)2第5狀態(tài):將底數(shù)M存入原M2所存的存儲(chǔ)器中;跳至狀態(tài)2第6狀態(tài):判斷冪指數(shù)信號(hào)E是否為0,若為0,則跳至結(jié)束狀態(tài)7;若為1,則跳至第5狀態(tài) 3 模冪乘IP結(jié)構(gòu)分析 模冪乘主控模塊實(shí)現(xiàn)模冪乘主控模塊編碼說明:1) 通過循環(huán)調(diào)用模乘模塊來實(shí)現(xiàn)模冪乘運(yùn)算。但在實(shí)際的硬件實(shí)現(xiàn)時(shí)Rn,所以必須對(duì)此算法做適當(dāng)?shù)男薷模鶕?jù)文獻(xiàn)[17,18]證明,在模乘循環(huán)過程中增加一次循環(huán),就可免去在模乘循環(huán)結(jié)束時(shí)的Zsn及其相關(guān)的判斷操作,修改后的(免減)Montgomery算法描述如下:設(shè)nRs,且GCD(n,R)=1,整數(shù)A,B滿足An,Bn,A=,B=,n=則:Z=M(A,B)≡ABR(s+1) mod n的計(jì)算算法如下:Function M(A,B)Z0←0 For i =0 to s do λi= (Zi+aib0) n/L mod R Zi+1=Zi +aiB+λin Zi+1=Zi+1 /R Endfori 式() 其中n/L=n/ mod R。=C39。 + A*B + q*N) %r =0== (C39。=C39。 %N,需要循環(huán)1024次之多,我么必然希望找到更有效的計(jì)算A*B*R39。設(shè)R=2**k %N,R39。=C39。+C39。=0FOR i FROM 0 TO kC39。事實(shí)上,二元一次不定方程有整數(shù)解的充要條件是c為a、b的最大公約數(shù)。人們都在應(yīng)用各種算法和技術(shù)去實(shí)現(xiàn)。之二是安全性,對(duì)運(yùn)行在沒有物理保護(hù)的一般的計(jì)算機(jī)上的某個(gè)加密算法,敵對(duì)方可以用各種跟蹤工具修改算法而不讓其他人知道。其加密密鑰是公開的,而解密密鑰是保密的。信息數(shù)據(jù)加密既可用硬件來實(shí)現(xiàn),也可以通過軟件來完成。其后,古代人使用的密碼術(shù)有如把字母表的順序顛倒過來、進(jìn)行字母替代,或者用錯(cuò)后一定數(shù)目的位置的字母替代前面的字母。2 模冪乘硬核IP實(shí)現(xiàn)原理分析 RSA算法基礎(chǔ)1) 歐幾里得方程在RSA 算法中,往往要在已知A、N的情況下,求 B,使得 (A*B)%N=1。4) Montgomery模乘根據(jù)文獻(xiàn)[2]證明,假設(shè)A=Sum[i=0 to k](A*2**i),0=A=1,則:C= A*B = Sum[i=0 to k](A*B*2**i)可用循環(huán)處理為:C=0FOR i FROM k TO 0C=C*2C=C+A*BRETURN C若令 C39。[0]*N 就是偶數(shù),而當(dāng)C39。=C39。 %N 就可以很簡(jiǎn)單地在結(jié)束循環(huán)后用一次減法來完成,即在求A*B*2**(k) %N的過程中不用反復(fù)求模,達(dá)到了我們避免做除法的目的。以上討論的是蒙哥馬利模乘最簡(jiǎn)單,最容易理解的二進(jìn)制形式。=C39。的最終返回值就是A*B*R39。=(C39。由于0≤m+λn≤Rn+Rn,M(m)的運(yùn)算結(jié)果范圍是0≤t2n。p,得出a ≡ b mod p 如果a = b,則a ≡ b mod p成立,得證。entity MMUL_32 is port ( C40M_CLK : in STD_LOGIC。use 。要完成這個(gè)功能,請(qǐng)見如下時(shí)序圖,圖 運(yùn)算模塊時(shí)序簡(jiǎn)圖B和n為128bit數(shù)據(jù),那么可得i = 4。 NL : in STD_LOGIC_VECTOR(31 downto 0 )。use 。 RAM_WE : out STD_LOGIC。entity MEM_8 is port ( CLK : in STD_LOGIC。 RAM4 : out STD_LOGIC_VECTOR(127 downto 0 )。 RAM8 : out STD_LOGIC_VECTOR(127 downto 0 )。3)芯片管腳鎖定,如下圖, FPGA測(cè)試鎖管腳圖4 ) 邏輯分析管腳編輯 抓出一些重要的信號(hào),待測(cè)試FPGA時(shí),能起重要作用,圖如下, FPGA測(cè)試借用邏輯分析儀抓信號(hào)5 ) 綜合編譯,下載FPGA 測(cè)試準(zhǔn)備及結(jié)果記錄1) 數(shù)據(jù)準(zhǔn)備: 2048位規(guī)格FPGA測(cè)試數(shù)據(jù)A(底數(shù))12345688585854475845123456885858544758451234568858585447584512345688585854475845585447584512345854475845123475845585447584512345854477584558544758451234585447998884512345854479988845123458544799888451234585447998898884512345854479988845123458544799888451234585447998898884512345854479988845123458544799888451234585447998884512345854479988845123458544799888451234585447998811111111111111122222222222222222223333333333333333333333555555555554444444444444444888888888881234585447998884512345854479988845123458533333B(底數(shù))12345688585854475845123456885858544758451234568858585447584512345688585854475845585447584512345854475845123475845585447584512345854477584558544758451234585447998884512345854479988845123458544799888451234585447998898884512345854479988845123458544799888451234585447998898884512345854479988845123458544799888451234585447998884512345854479988845123458544799888451234585447998811111111111111122222222222222222223333333333333333333333555555555554444444444444444888888888881234585447998884512345854479988845123458533333N(模數(shù))35566224568997441254231556874912554549125545231556874912554523155687315568745525771123155687491255454912554523155687491255452315568731556874552577115568745525771112554549125545231556812554549125545231556812554549125545231556812554549125545231556845525771155687455257711125545491255452315568125545491255452315568125545491255452345525771155687455257711125545491255452315568125545491255452315568125545491255452345525771155687455257711125545491255452315568125545491255452315568125545491255452345525771155687455257713R134DF2AF20EA713703B16B01BCDFD8EB803A9040923E427FC358AC9D69623D7D8C032E6E95887ED5622C8E69660C0FCC2646E8CE0637DB0D6F5FA07C7A91B939CC83EDDF00D4A336D4B8F224E749EDD05B569B6CD46F27DC75D61C79802EFF0C6F93FA424CFEB9BC9009AA6C14B14E1A2600822530CB84178EF81282570E446302E5DA22952345D2B253A3DE8601B1A230179141D54B324FD9E5D37624A403DAAAFDF93673C4D129C8B3E465BD2361BA0948505956F477CC7D47FB1A621CDC05A85551ECF23CFBE454708DC8212B6FC639CED14202D51C2FEA41799139FECA831E24313809BEF4FEDC7D4AC1C034E26B05EFE9A76D866AF8AA3A4F3AE2E5D47922) 時(shí)鐘準(zhǔn)備與拔碼開關(guān)準(zhǔn)備利用FPGA芯片上的11M時(shí)鐘進(jìn)行2倍頻,得到22M的時(shí)鐘,作為模冪乘工作時(shí)鐘。 RESET : in STD_LOGIC。 RAM10_ADDR : OUT STD_LOGIC_VECTOR(4 downto 0 )。按道理FPGA芯片不應(yīng)該存在延時(shí)問題。每種規(guī)格都準(zhǔn)備大中小三類數(shù)據(jù)進(jìn)行前仿測(cè)試,仿真環(huán)境為ModsSim SE PLUS 。 RAM6_WE : in STD_LOGIC。 RAM2_WE : in STD_LOGIC。 MMUL_OV : out STD_LOGIC。 MMUL_SCYC : in STD_LOGIC_VECTOR(5 downto 0 )。 RESET : in STD_LOGIC。如下,Z1_1=a0*B1 + λ0 * n1,這時(shí),在第二周期,做a0 * B1,λ0 * n1,可知,分別能得到64位數(shù)據(jù),那么低32便和第一周期得到的高32位數(shù)做加,得到兩個(gè)加法過后的結(jié)果。 CLK_N : in STD_LOGIC。 NL : in STD_LOGIC_VECTOR(31 downto 0 )。所以可得B= M1*M2 mod n)。模p加法:(a + b) mod p ,其結(jié)果是a+b算術(shù)和除以p的余數(shù),也就是說,(a+b) = kp +r,則 (a+b) mod p = r。=(C39。 %r =1,q=(C39。 + A*