專利名稱:橢圓曲線密碼芯片的寄存器堆的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及電子簽名技術(shù)領(lǐng)域。
技術(shù)領(lǐng)域Diffie和Hellman提出公開密鑰思想之后,現(xiàn)今各種公開密鑰密碼體制廣泛應(yīng)用于通信和電子商務(wù)等領(lǐng)域,其中比較典型的是RSA和橢圓曲線(ECC)公鑰密碼體制。由于RSA密鑰較長,造成運(yùn)算代價較大,所以近來人們開始關(guān)注ECC密碼體制。它與RSA密碼體制相比,在同樣的安全性下,橢圓曲線密碼體制具有較短的密鑰長度,其運(yùn)算時間和空間也相應(yīng)地較小。
以下介紹橢圓曲線簽名和認(rèn)證的運(yùn)算步驟符號說明如下(s,W)為簽名方的密鑰對,s為私鑰,W為公鑰;橢圓曲線的參數(shù)包括橢圓曲線系數(shù)a、b;G為橢圓曲線上的“基點(diǎn)”;r為G點(diǎn)的階;f為待簽名的消息,f′為待簽名的消息;c、d為消息f的簽名,c′、d′為待認(rèn)證的消息f的簽名;認(rèn)證時只有c′=c才能通過認(rèn)證。在簽名和認(rèn)證的雙方對橢圓曲線參數(shù)達(dá)成一致后,橢圓曲線數(shù)字簽名算法(ECDSA)簽名和認(rèn)證步驟如表1所示
表1 ECDSA算法主要步驟從表中看出,簽名的主要運(yùn)算為一次大數(shù)模逆和一次橢圓曲線標(biāo)量乘;認(rèn)證的主要運(yùn)算為一次大數(shù)模逆和兩次橢圓曲線標(biāo)量乘。值得注意的是,若采用正規(guī)基的橢圓曲線,以上的運(yùn)算實(shí)際上在兩個有限域內(nèi)進(jìn)行。素數(shù)域(GF(p))內(nèi)的運(yùn)算有2、4、5、6、7式,特征2域(GF(2m))內(nèi)的運(yùn)算有3、8式。
普通的正規(guī)基橢圓曲線芯片寄存器架構(gòu)如下
橢圓曲線ECC的簽名和認(rèn)證需要完成表1中的8種運(yùn)算,整個架構(gòu)分為三大模塊,分別為I/O模塊、GF(2m)域運(yùn)算模塊和GF(p)域運(yùn)算模塊,見圖1。
I/O模塊包括I/O控制邏輯和I/O寄存器。輸入時,I/O控制邏輯從片外依次接收32位數(shù)據(jù),并寄存在其寄存器中,存滿233位后,發(fā)送給GF(2m)域運(yùn)算模塊和GF(p)域運(yùn)算模塊;輸出時從GF(2m)域運(yùn)算模塊和GF(p)域運(yùn)算模塊接收233位的數(shù)據(jù),控制其自己的寄存器將之依次轉(zhuǎn)化為一組為32位數(shù)據(jù)輸出到片外。
GF(2m)域運(yùn)算模塊和GF(p)域運(yùn)算模塊分別完成ECC簽名和認(rèn)證時GF(2m)和GF(p)兩個域上的各種運(yùn)算。GF(2m)域運(yùn)算模塊由一個GF(2m)域運(yùn)算器和一個寄存器堆組成,其中GF(2m)域運(yùn)算器進(jìn)行橢圓曲線上的點(diǎn)運(yùn)算即表1中的3、8式;寄存器堆用于寄存中間運(yùn)算結(jié)果。GF(p)域運(yùn)算模塊由一個GF(p)域運(yùn)算器和一個寄存器堆組成。GF(p)域運(yùn)算器進(jìn)行大數(shù)的模加和模乘運(yùn)算即表1中的2、4、5、6、7式,寄存器堆用于寄存中間運(yùn)算結(jié)果。以上涉及的所有運(yùn)算的具體定義均遵守IEEE1363標(biāo)準(zhǔn)。
從圖1看出,整個芯片有3個模塊I/O模塊,GF(2m)域運(yùn)算模塊和GF(p)域運(yùn)算模塊。每個模塊有自己獨(dú)立的運(yùn)算器和寄存器堆。這樣的結(jié)構(gòu)寄存器堆不能在各個模塊之間復(fù)用,造成寄存器的數(shù)目增多,而且為了使各個寄存器堆之間的數(shù)據(jù)傳遞又需要額外的控制單元,不但增加了系統(tǒng)的復(fù)雜度也降低了數(shù)據(jù)的數(shù)據(jù)的吞吐率。
發(fā)明內(nèi)容
本發(fā)明的目的在于提供了一種可有效解決上述問題的橢圓曲線密碼芯片的寄存器堆。
本發(fā)明的特征在于該寄存器堆是用數(shù)字集成電路構(gòu)成的所述橢圓曲線密碼芯片的一個組成部分,該橢圓曲線密碼芯片的在GF(p)域運(yùn)算器在GF(p)域內(nèi)執(zhí)行大數(shù)的模和及模乘運(yùn)算,GF(2m)域運(yùn)算器在GF(2m)域內(nèi)執(zhí)行正規(guī)基橢圓曲線上的點(diǎn)運(yùn)算;所述寄存器堆包括REG0~REG31共32個子寄存器;在執(zhí)行該橢圓曲線數(shù)字簽名運(yùn)算過程中在初始化階段子寄存器REG10~REG14內(nèi)存入從所述橢圓曲線密碼芯片的I/O模塊中寫入的簽名方的私鑰s、待簽名的消息f以及設(shè)定的隨機(jī)數(shù)u;子寄存器REG15~REG20內(nèi)存入從所述橢圓曲線密碼芯片的I/O模塊中寫入的橢圓曲線參數(shù)a、b為定義曲線形狀的系數(shù)、G為橢圓曲線上的基點(diǎn)、r為G的階;
在GF(2m)域運(yùn)算器運(yùn)算的階段子寄存器REG21~REG30內(nèi)存入所述GF(2m)域運(yùn)算器從所述子寄存器REG15~REG20讀出所述參數(shù)a、b、G后進(jìn)行Q(c,-)=u*G運(yùn)算所得到的中間結(jié)果;子寄存器REG31內(nèi)存入所述Q(c,-)=u*G的運(yùn)算終值即簽名c;在GF(p)域運(yùn)算器運(yùn)算的階段子寄存器REG0~REG9內(nèi)存入所述GF(p)域運(yùn)算器先從子寄存器REG10~REG14中讀出所述簽名方的私鑰s、待簽名的消息f和隨機(jī)數(shù)u后,再從子寄存器REG31讀出簽名c,進(jìn)行v=u-1mod r和d=v*(f+s*c)mod r運(yùn)算過程中所得的中間結(jié)果;最后把簽名c和d依次分別寫入子寄存器REG0和REG1;在執(zhí)行該橢圓曲線數(shù)字認(rèn)證算法過程中在初始化階段子寄存器REG10~REG14內(nèi)存入從所述橢圓曲線密碼芯片的I/O模塊中寫入的待認(rèn)證的消息f′,待認(rèn)證的簽名c′和d′;c′、d′在數(shù)值上和簽名方產(chǎn)生的簽名c、d在一次成功的簽名/認(rèn)證過程中應(yīng)該是一致的。
子寄存器REG15~REG20內(nèi)存入從所述橢圓曲線密碼芯片的I/O模塊中寫入的橢圓曲線的參數(shù)a、b和G,以及簽名方的公鑰W;在GF(p)域運(yùn)算器運(yùn)算的階段子寄存器REG0~REG9內(nèi)存入該運(yùn)算器先從子寄存器REG10~REG14中讀出的待認(rèn)證的消息f′,帶認(rèn)證的簽名c′和d′,進(jìn)行h=d′-1mod r、h1=f′*h mod r和h2=c′*h mod r運(yùn)算過程中得到的運(yùn)算結(jié)果,然后將h1和h2的值一次分別寫入子寄存器REG0和REG1;在GF(2m)域運(yùn)算器運(yùn)算的階段子寄存器REG21~REG30內(nèi)存入該運(yùn)算器先從子寄存器REG15~REG20中讀出的橢圓曲線參數(shù)a、b和G,以及簽名方的公鑰W,再從子寄存器REG0、REG1中一次分別讀出h1、h2后,進(jìn)行P(c′,-)=h1*G+h2*W運(yùn)算過程中得到的中間結(jié)果;子寄存器RETG31內(nèi)存入所述P(c′,-)運(yùn)算的認(rèn)證結(jié)果c′;子寄存器REG0內(nèi)存入該運(yùn)算器把子寄存器REG31內(nèi)存的c′值與所述REG0內(nèi)存的c值進(jìn)行比較得到的結(jié)果若一致,則向REG0存入“1”,否則,存入“0”。
本發(fā)明具有寄存器結(jié)構(gòu)簡單,數(shù)目少,不需增加用于傳遞個寄存器堆間數(shù)據(jù)的額外控制單元,不但簡化了結(jié)構(gòu)而且也提高了數(shù)據(jù)的吞吐率。
圖1.普通的正規(guī)基橢圓曲線芯片架構(gòu);圖2.改進(jìn)的正規(guī)基橢圓曲線芯片架構(gòu);圖3.本發(fā)明所述寄存器堆的讀寫地址分配;圖4.I/O模塊讀寫寄存器堆流程;圖5.GF(2m)域運(yùn)算模塊讀寫寄存器堆流程;圖6.GF(p)域運(yùn)算模塊讀寫寄存器堆流程。
具體的實(shí)施方式本發(fā)明的系統(tǒng)架構(gòu)如圖2所示,3個模塊對同一寄存器堆進(jìn)行讀寫操作。這種結(jié)構(gòu)有效地解決了上述的問題。
改進(jìn)的正規(guī)基橢圓曲線芯片寄存器架構(gòu)從圖1看出,整個芯片有3個模塊I/O模塊,GF(2m)域運(yùn)算模塊和GF(p)域運(yùn)算模塊。每個模塊有自己獨(dú)立的運(yùn)算器和寄存器堆。這樣的結(jié)構(gòu)寄存器堆不能在各個模塊之間復(fù)用,造成寄存器的數(shù)目增多,而且為了使各個寄存器堆之間的數(shù)據(jù)傳遞又需要額外的控制單元,不但增加了系統(tǒng)的復(fù)雜度也降低了數(shù)據(jù)的數(shù)據(jù)的吞吐率。
本發(fā)明的系統(tǒng)架構(gòu)如圖2所示,3個模塊對同一寄存器堆進(jìn)行讀寫操作。這種結(jié)構(gòu)有效地解決了上述的問題。
非對稱寄存器堆讀寫地址分配方案但是直接使用普通的寄存器也帶來兩個問題地址譯碼復(fù)雜引起面積增大速度減慢;不同的模塊對同一個寄存器同時寫造成競爭。而本發(fā)明的非對稱寄存器讀寫地址分配方案可解決上述問題。具體的3個模塊各自的讀寫地址分配見圖3。
簽名時寄存器堆調(diào)度按如下操作●I/O模塊將片外的相關(guān)數(shù)據(jù)簽名方的私鑰、等待簽名的消息、隨機(jī)數(shù)和橢圓曲線的參數(shù)依次寫入從REG10到REG20的寄存器內(nèi),其中REG10到REG14中的數(shù)據(jù)為簽名方的私鑰s、等待簽名的消息f,隨機(jī)數(shù)u,用于GF(p)有限域的計算,REG15到REG20中的數(shù)據(jù)為橢圓曲線的參數(shù)a、b、G,用于GF(2m)有限域的計算。經(jīng)過兩個有限域內(nèi)的計算后,I/O模塊從REG0和REG1讀出簽名或者認(rèn)證的結(jié)果。
●GF(2m)域的運(yùn)算器從REG15到REG20中讀出所需的橢圓曲線的參數(shù)a、b、G進(jìn)行GF(2m)域內(nèi)的計算Q(c,-)=u*G,REG21到REG30的寄存器用于保存中間運(yùn)算,然后將運(yùn)算結(jié)果即c寫入REG31。
●GF(p)有限域的運(yùn)算器先從REG10到REG14中讀出所需的數(shù)據(jù)簽名方的私鑰s、等待簽名的消息f和隨機(jī)數(shù)u,再從寄存器REG31讀出簽名c,進(jìn)行GF(p)域計算v=u-1mod r和d=v*(f+s*c)mod r,REG0到REG9的寄存器用于保存中間運(yùn)算結(jié)果,最后將簽名c和d寫入REG0和REG1。
認(rèn)證時寄存器堆調(diào)度按如下操作●I/O模塊將片外的相關(guān)數(shù)據(jù)待認(rèn)證的消息、消息的簽名、橢圓曲線的參數(shù)、簽名方的公鑰依次寫入從REG10到REG20的寄存器內(nèi),其中REG10到REG14中的數(shù)據(jù)為,待認(rèn)證的消息f、消息的簽名c和d用于GF(p)有限域的計算,REG15到REG20中的數(shù)據(jù)為橢圓曲線的參數(shù)a、b、G和簽名方的公鑰W,用于GF(2m)有限域的計算。經(jīng)過兩個有限域內(nèi)的計算后,I/O模塊從REG0讀出簽名或者認(rèn)證的結(jié)果“1”表示認(rèn)證通過,“0”表示認(rèn)證失敗。
●GF(p)有限域的運(yùn)算器先從REG10到REG14中讀出待認(rèn)證的消息f、消息的簽名c和d,進(jìn)行GF(p)域計算h=d-1mod r、h1=f*h mod r和h2=c*h mod r,REG0到REG9的寄存器用于保存中間運(yùn)算結(jié)果,最后將h1和h2寫入REG0和REG1。
●GF(2m)域的運(yùn)算器從REG15到REG20中讀出所需的橢圓曲線的參數(shù)a、b、G和簽名方的公鑰W,并從REG0到REG1讀出h1和h2,進(jìn)行GF(2m)域內(nèi)的計算P(c′,-)=h1*G+h2*W,REG21到REG30的寄存器用于保存中間運(yùn)算,然后將認(rèn)證結(jié)果即c′寫入REG31。
●GF(p)有限域的運(yùn)算器從REG31中讀出認(rèn)證結(jié)果c′,將之與寄存的原簽名c相比較,若二者一致則向REG0種寫入“1”,反之寫“0”。
這種寄存器讀寫地址分配機(jī)制使3個模塊得以獨(dú)立有序地讀寫同一個寄存器堆。而且時間和空間的開銷都比較小。I/O模塊、GF(2m)域運(yùn)算模塊和GF(p)域運(yùn)算模塊對寄存器的讀寫操作的具體流程分別如圖4、圖5、圖6所示。
本設(shè)計硬件上用FGPA實(shí)現(xiàn),Verilog進(jìn)行行為級、RTL級編碼和功能仿真,并基于SMIC0.18微米工藝庫完成邏輯綜合(DC),并提取門延時信息,進(jìn)行門級仿真驗(yàn)證。測試的結(jié)果表明與普通的寄存器架構(gòu)相比,本發(fā)明在面積、效率、功率方面的確有較大的改善。
權(quán)利要求
1.橢圓曲線密碼芯片的寄存器堆,其特征在于該寄存器堆是用數(shù)字集成電路構(gòu)成的所述橢圓曲線密碼芯片的一個組成部分,該橢圓曲線密碼芯片的在GF(p)域運(yùn)算器在GF(p)域內(nèi)執(zhí)行大數(shù)的模和及模乘運(yùn)算,GF(2m)域運(yùn)算器在GF(2m)域內(nèi)執(zhí)行正規(guī)基橢圓曲線上的點(diǎn)運(yùn)算;所述寄存器堆包括REG0~REG31共32個子寄存器;在執(zhí)行該橢圓曲線數(shù)字簽名運(yùn)算過程中在初始化階段子寄存器REG10~REG14內(nèi)存入從所述橢圓曲線密碼芯片的I/O模塊中寫入的簽名方的私鑰s、待簽名的消息f以及設(shè)定的隨機(jī)數(shù)u;子寄存器REG15~REG20內(nèi)存入從所述橢圓曲線密碼芯片的I/O模塊中寫入的橢圓曲線參數(shù)a、b為定義曲線形狀的系數(shù)、G為橢圓曲線上的基點(diǎn)、r為G的階;在GF(2m)域運(yùn)算器運(yùn)算的階段子寄存器REG21~REG30內(nèi)存入所述GF(2m)域運(yùn)算器從所述子寄存器REG15~REG20讀出所述參數(shù)a、b、G后進(jìn)行Q(c,-)=u*G運(yùn)算所得到的中間結(jié)果;子寄存器REG31內(nèi)存入所述Q(c,-)=u*G的運(yùn)算終值即簽名c;在GF(p)域運(yùn)算器運(yùn)算的階段子寄存器REG0~REG9內(nèi)存入所述GF(p)域運(yùn)算器先從子寄存器REG10~REG14中讀出所述簽名方的私鑰s、待簽名的消息f和隨機(jī)數(shù)u后,再從子寄存器REG31讀出簽名c,進(jìn)行v=u-1mod r和d=v*(f+s*c)mod r運(yùn)算過程中所得的中間結(jié)果;最后把簽名c和d依次分別寫入子寄存器REG0和REG1;在執(zhí)行該橢圓曲線數(shù)字認(rèn)證算法過程中在初始化階段子寄存器REG10~REG14內(nèi)存入從所述橢圓曲線密碼芯片的I/O模塊中寫入的待認(rèn)證的消息f′,待認(rèn)證的簽名c′和d′;c′、d′在數(shù)值上和簽名方產(chǎn)生的簽名c、d在一次成功的簽名/認(rèn)證過程中應(yīng)該是一致的。子寄存器REG15~REG20內(nèi)存入從所述橢圓曲線密碼芯片的I/O模塊中寫入的橢圓曲線的參數(shù)a、b和G,以及簽名方的公鑰W;在GF(p)域運(yùn)算器運(yùn)算的階段子寄存器REG0~REG9內(nèi)存入該運(yùn)算器先從子寄存器REG10~REG14中讀出的待認(rèn)證的消息f′,帶認(rèn)證的簽名c′和d′,進(jìn)行h=d′-1mod r、h1=f′*h mod r和h2=c′*h mod r運(yùn)算過程中得到的運(yùn)算結(jié)果,然后將h1和h2的值一次分別寫入子寄存器REG0和REG1;在GF(2m)域運(yùn)算器運(yùn)算的階段子寄存器REG21~REG30內(nèi)存入該運(yùn)算器先從子寄存器REG15~REG20中讀出的橢圓曲線參數(shù)a、b和G,以及簽名方的公鑰w,再從子寄存器REG0、REG1中一次分別讀出h1、h2后,進(jìn)行P(c′,-)=h1*G+h2*W運(yùn)算過程中得到的中間結(jié)果;子寄存器RETG31內(nèi)存入所述P(c′,-)運(yùn)算的認(rèn)證結(jié)果c′;子寄存器REG0內(nèi)存入該運(yùn)算器把子寄存器REG31內(nèi)存的c′值與所述REG0內(nèi)存的c值進(jìn)行比較得到的結(jié)果若一致,則向REG0存入“1”,否則,存入“0”。
全文摘要
本發(fā)明屬于電子簽名技術(shù)領(lǐng)域,其特征在于所述寄存器堆含有32個子寄存器,在進(jìn)行簽名或認(rèn)證時,分別把需要進(jìn)行模乘和橢圓曲線點(diǎn)運(yùn)算的數(shù)據(jù)固定地存在不同的子寄存器域內(nèi),并且為進(jìn)行不同域運(yùn)算的中間結(jié)果配置于不同的另一個子寄存器域內(nèi),同時把簽名和認(rèn)證兩階段的不同運(yùn)算結(jié)果分別存入兩個不同的子寄存器,并為認(rèn)證階段的簽名比較時所公用。因而,本發(fā)明用的寄存器堆少,簡化了橢圓曲線密碼芯片的結(jié)構(gòu),提高了數(shù)據(jù)的吞吐率。
文檔編號G06F7/60GK1822539SQ20051013062
公開日2006年8月23日 申請日期2005年12月16日 優(yōu)先權(quán)日2005年12月16日
發(fā)明者李樹國, 毛天然 申請人:清華大學(xué)