專利名稱:擴(kuò)展整數(shù)的計(jì)算域的范圍的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種用于加速加密協(xié)處理過程的外圍設(shè)備,特別涉及但并不局限于一種用于基于多項(xiàng)式和素?cái)?shù)域算法的加速處理裝置,它擴(kuò)展了整數(shù)的計(jì)算域的范圍,以及在為橢圓曲線和RSA類型的計(jì)算所設(shè)計(jì)公開密鑰加密協(xié)處理器中的模運(yùn)算的串行輸入的操作數(shù)的寬度。
發(fā)明的背景計(jì)算設(shè)備的安全性增強(qiáng)和性能加速在下列文獻(xiàn)中予以描述本申請(qǐng)人的美國(guó)專利5,742,530,及其后續(xù)的“P1”,5,513,133,5,448,639,5,261,001;以及5,206,824和出版的PCT專利申請(qǐng)PCT/IL98/00148(WO98/50851);以及相應(yīng)的美國(guó)專利申請(qǐng)09/050958,及其后續(xù)的“P2”,Onyszchuk等人的美國(guó)專利4,745,568;Omura等人的美國(guó)專利4,5877,627,以及本申請(qǐng)人的美國(guó)專利09/480,102;上述公開內(nèi)容作為參考被引入本文。本申請(qǐng)人的美國(guó)專利5,206,824顯示了一個(gè)用于實(shí)現(xiàn)基于多項(xiàng)式的乘法和平方的早期的裝置,但它不能在素?cái)?shù)域上執(zhí)行運(yùn)算,而且不是為基于多項(xiàng)式的計(jì)算中的交錯(cuò)過程而設(shè)計(jì)的。在Paar,C.,F(xiàn).Fleischmann和P.Soria-Rodriguez,“Fast Arithmetic forPublic-Key Algorithms in Galois Fields with Composite Exponents”,IEEETransactions on Computers,vol.48,No 10,October 1999(以下稱為“Paar”),一文中利用基于多項(xiàng)式運(yùn)算中的擴(kuò)展域的方法做了進(jìn)一步的分析。在MIT Press,Cambridge,Mass.1972年出版的“Error-Correcting Codes”第二版的第174-179頁(yè),W.Wesley Peterson和E.J.Weldon Jr.展示了一個(gè)執(zhí)行基于多項(xiàng)式的留數(shù)系統(tǒng)GF(2q)除法的電路,以下稱為“Peterson”。Peterson的電路只能用于乘數(shù)恰好等于模的長(zhǎng)度的設(shè)備中。典型地,這要求一個(gè)設(shè)備的長(zhǎng)度超過本設(shè)備的兩倍,并且這將不是對(duì)于緊湊型的應(yīng)用有效的成本。它不能用于有交錯(cuò)的實(shí)施方案,并且當(dāng)l長(zhǎng)于1時(shí)也沒有用處,因?yàn)樗鼪]有提供一個(gè)用于多比特字符Y0的裝置。
盡管,Knuth[D.Knuth,The art of computer programming,vol.2Seminumerical algorithms,Addison-Wesley,Reading Mass.,1981]407頁(yè),暗示了在單l比特字符的基于多項(xiàng)式的除法中采用一種常規(guī)的除法,我們采取一種用于預(yù)測(cè)商的下一個(gè)字符的方法,本發(fā)明公布了一種用于預(yù)測(cè)商的下一個(gè)字符的方法,它確定性地采用一種邏輯結(jié)構(gòu)。
發(fā)明的概述本發(fā)明的一個(gè)目的是提供一種用于在基于多項(xiàng)式和基于素整數(shù)的數(shù)域中執(zhí)行大數(shù)計(jì)算的微電子電路的專用運(yùn)算單元,采用用于同時(shí)進(jìn)行交錯(cuò)的模數(shù)乘法和可變基數(shù)的乘數(shù)的約簡(jiǎn)的相同的預(yù)測(cè)法。
本發(fā)明的進(jìn)一步的目的還涉及一種緊湊型的微電子電路專用的算術(shù)邏輯單元,用于在非常大的整數(shù)上執(zhí)行模數(shù)的和正規(guī)的(自然數(shù),整數(shù)的非負(fù)域)乘法、除法、加法、減法和冪運(yùn)算。當(dāng)提到模數(shù)乘法和平方,其中既采用了蒙哥馬利方法又采用了反向形式的方法用于簡(jiǎn)化的基于多項(xiàng)式乘法和平方時(shí),指的是本設(shè)備的某一特定部分,所述的設(shè)備是超標(biāo)量模數(shù)算術(shù)協(xié)處理器,或SMAP,或MAP或SuperMAPTM,同時(shí)涉及存在于本申請(qǐng)人1998年3月31日提交的,并在審理中的美國(guó)專利申請(qǐng)09/050,958以及2000年1月10日提交的部分繼續(xù)申請(qǐng)09/480,102中增補(bǔ)方案。
這里描述的本發(fā)明優(yōu)選實(shí)施例提供了一個(gè)模數(shù)計(jì)算算符,用于在便攜式智能卡(Smart Card)上的公開密鑰加密應(yīng)用,這種卡一般的形狀和大小與流行的磁條信用卡和銀行卡相同。類似的智能卡,象本申請(qǐng)人的美國(guó)專利5,513,133和5,742,530中的技術(shù),以及本申請(qǐng)人上面提到的審理中的申請(qǐng)正被用于新一代的公開密鑰加密設(shè)備,這些設(shè)備用于控制對(duì)計(jì)算機(jī)、數(shù)據(jù)庫(kù)、和關(guān)鍵設(shè)備的訪問;在商業(yè)、軍事、以及國(guó)內(nèi)交易中的數(shù)據(jù)流的管理和安全防范;擾頻的付費(fèi)電視節(jié)目的解擾等等,以及類似應(yīng)用的終端設(shè)備。一般,這些設(shè)備也組裝在計(jì)算機(jī)和傳真終端中、門鎖上、自動(dòng)售貨機(jī)里等等。
優(yōu)選的結(jié)構(gòu)是集成在多個(gè)微處理器或數(shù)字信號(hào)處理設(shè)備中的裝置,以及用于精簡(jiǎn)指令集計(jì)算設(shè)計(jì)中,而該裝置同主機(jī)的處理單元并行工作。
本實(shí)施例優(yōu)選地僅采用一個(gè)乘法設(shè)備,它自然地可提供二或三個(gè)乘法裝置的功能,基本上類似于在本申請(qǐng)人的5,513,133和進(jìn)一步在美國(guó)專利申請(qǐng)09/050,958增補(bǔ)的以及PCT申請(qǐng)PCT/IL98/0048中所描述的結(jié)構(gòu)。采用當(dāng)前的常規(guī)的微電子電路技術(shù),本發(fā)明的裝置可以和帶存儲(chǔ)器的控制單元集成在一個(gè)智能卡的微電子電路上。
在基于多項(xiàng)式域上和在素?cái)?shù)域上的硬件實(shí)現(xiàn)的主要區(qū)別是基于多項(xiàng)式加法和減法是簡(jiǎn)單的XOR邏輯運(yùn)算,不需要從LS傳播到MS的進(jìn)位信號(hào)。因此,在硬件實(shí)現(xiàn)中鄰近的單元之間沒有交互作用,并且減法和加法是相同的過程。本申請(qǐng)人所知的最早的公開是在1994年theFondazione Ugo Bordoni的Marco Bucci在意大利的佩魯賈在Eurocrypt大會(huì)的后期會(huì)議的一個(gè)短訊,從那以后,這個(gè)結(jié)構(gòu)為本技術(shù)領(lǐng)域中的工程師們所熟知。
在P1和P2中描述的本申請(qǐng)人以前的裝置是典型地為有效地在GF(p)域中計(jì)算橢圓曲線加密協(xié)議而準(zhǔn)備的。對(duì)于在GF(2q)中的應(yīng)用,在本發(fā)明中,我們證明由于在多項(xiàng)式域中相鄰的二進(jìn)制位之間沒有交互,計(jì)算可以更有效地執(zhí)行,在超標(biāo)量乘法設(shè)備上同時(shí)進(jìn)行約簡(jiǎn)和乘法而不用引入蒙哥馬利函數(shù)和蒙哥馬利寄生。進(jìn)行在GF(2q)的乘法,作為計(jì)算機(jī)優(yōu)選地從最高有效位部分乘積開始。約簡(jiǎn)是通過相加所需的足夠數(shù)量的模而把MS的1復(fù)位為0進(jìn)行的。由于沒有進(jìn)位,在這些加法中,結(jié)果被自動(dòng)地模數(shù)約簡(jiǎn)。在本發(fā)明中,多項(xiàng)式計(jì)算采用同樣的結(jié)構(gòu)進(jìn)行,這里,在GF(2q)中操作數(shù)首先被送入MS字符,這里所有內(nèi)部的進(jìn)位信號(hào)被強(qiáng)制為零。GF(p)計(jì)算優(yōu)選地執(zhí)行,如P1和P2中所述,這里首先處理LS字符而最后處理MS字符。
該結(jié)構(gòu)已被擴(kuò)展為允許一種潛在的更快的進(jìn)程,方法是串行乘數(shù)是l比特寬的字符,并且在每一個(gè)時(shí)鐘脈沖,從進(jìn)位保存累加器CSA中發(fā)出一個(gè)l比特的字符。這是稍微使預(yù)測(cè)過程(Y0)變得復(fù)雜,因?yàn)閷?duì)于單比特寬的總線,在模2x的基數(shù)上對(duì)一個(gè)奇數(shù)的求逆仍然是一個(gè)奇數(shù),并且被乘數(shù)(J0)的最低有效位總是1。然而,對(duì)這兩個(gè)數(shù)域,其約簡(jiǎn)過程是相同的,其中假定斷開(抑制)進(jìn)位,只要我們記住我們的唯一目的是要輸出一個(gè)k字符的零串,并且我們認(rèn)為Y0函數(shù)僅是一個(gè)零強(qiáng)制向量。
本發(fā)明也尋求提供一種用于數(shù)字設(shè)備的結(jié)構(gòu),它是常規(guī)數(shù)字處理器的一個(gè)外圍設(shè)備,它在計(jì)算、邏輯和結(jié)構(gòu)上相對(duì)于在美國(guó)專利5,513,133中所描述的處理器具有新的特性。
本發(fā)明提供了一種并發(fā)進(jìn)程和一個(gè)硬件結(jié)構(gòu),它們執(zhí)行模數(shù)冪,不必象典型的,傳統(tǒng)的乘/除設(shè)備所執(zhí)行的那樣,把冪運(yùn)算分為相同次數(shù)的操作,這里傳統(tǒng)的設(shè)備一般地在每一次操作中既要執(zhí)行一個(gè)大規(guī)模的乘法又要執(zhí)行除法。本發(fā)明的一個(gè)優(yōu)選的實(shí)施例的特別的特性是更大規(guī)模預(yù)測(cè)零強(qiáng)制函數(shù)的并發(fā),數(shù)域的擴(kuò)展,以及把這種類型的單元集成用于安全通信的能力。
本發(fā)明的一個(gè)優(yōu)選的實(shí)施例所實(shí)現(xiàn)的優(yōu)點(diǎn)源于串行進(jìn)程的同步序列。這些進(jìn)程經(jīng)合并同時(shí)地(并行)在n字符操作數(shù)上完成了3個(gè)乘法運(yùn)算,在n個(gè)有效的時(shí)鐘周期內(nèi)用到了一個(gè)多路的k字符串行/并行乘法器,其中結(jié)果中的左邊最后k個(gè)字符駐留在乘法設(shè)備的輸出緩存器中。就象蒙哥馬利所描述的那樣對(duì)素?cái)?shù)域該過程完成了相當(dāng)于在兩個(gè)域中的三個(gè)乘法計(jì)算,以及在GF(2q)中相當(dāng)于兩個(gè)乘法和一個(gè)除法的處理。
通過對(duì)到SuperMAP操作數(shù)的同步裝載和快速地檢測(cè)操作數(shù)的值,以及快速地預(yù)裝載并同時(shí)與下一個(gè)要用到的操作數(shù)相加,該裝置可以以一種確定性方式執(zhí)行計(jì)算。所有的乘法和冪電路都優(yōu)選地加上,在快速地預(yù)裝載中用于下一次迭代的平方序列的前三個(gè)k字符變量。優(yōu)選地,要提供一個(gè)檢測(cè)設(shè)備,其中三個(gè)操作數(shù)中僅選兩個(gè)用作下次迭代的被乘數(shù),省掉了k個(gè)有效時(shí)鐘周期的等待狀態(tài)。條件分支被替換為本地檢測(cè)和補(bǔ)償設(shè)備,這為簡(jiǎn)單控制機(jī)制提供了基礎(chǔ)。這里所描述的基本操作被典型地在GF(p)中的確定性時(shí)間內(nèi)執(zhí)行,其中采用Gressel等人在美國(guó)專利5,513,133中所描述的設(shè)備或在法國(guó)Rousset的STMicroelectronics的商品名為ST19-CF58的設(shè)備。
對(duì)于大多數(shù)操作,本發(fā)明的裝置對(duì)外部易失性存儲(chǔ)器的需求是非常少的,因?yàn)閷?duì)于操作中所需的操作數(shù)的全部長(zhǎng)度都裝載并存儲(chǔ)在本裝置中。本裝置優(yōu)選地使用這種CPU,它可使本裝置附加于其上,為本裝置執(zhí)行簡(jiǎn)單地加載和卸載以及指令隊(duì)列,而MAP執(zhí)行其大數(shù)計(jì)算。目前應(yīng)用于智能卡的大數(shù)的范圍是從128比特到2048比特的基本應(yīng)用。冪處理的時(shí)間實(shí)際上不依賴于控制它的CPU。實(shí)踐中,當(dāng)把本裝置附加在任何CPU上時(shí),結(jié)構(gòu)的改變一般是不必要的。該硬件設(shè)備是自包含的,并且優(yōu)選地是添加在任何CPU總線上。
總之,本發(fā)明還涉及大整數(shù)的算法處理。這些大整數(shù)一般地是在整數(shù)的自然(非負(fù))域或者在素?cái)?shù)的伽羅瓦域,GF(p),復(fù)合素?cái)?shù)模,以及在GF(2q)中基于多項(xiàng)式的數(shù)。更特別地,本發(fā)明的優(yōu)選的實(shí)施例尋求提供可以實(shí)現(xiàn)大數(shù)的模運(yùn)算和冪的設(shè)備。這些設(shè)備適于執(zhí)行公開密鑰加密認(rèn)證和加密協(xié)議的操作,這種操作是在素?cái)?shù)域上在非常大的操作數(shù)上進(jìn)行,并且它在當(dāng)前一般的模運(yùn)算協(xié)處理器上不能有效地執(zhí)行,同時(shí),在軟件實(shí)現(xiàn)中不能安全地執(zhí)行。優(yōu)選地,同樣的通用結(jié)構(gòu)用于在數(shù)量級(jí)較小的整數(shù)上橢圓曲線。采用乘法的新的反轉(zhuǎn)模式方法,多項(xiàng)式算法具有優(yōu)勢(shì),因?yàn)樯闪悴环恋K寄生的2-n因數(shù)的計(jì)算。
本結(jié)構(gòu)提供了一個(gè)大整數(shù)操作數(shù)運(yùn)算的模數(shù)實(shí)現(xiàn),同時(shí)也允許普通的,更小的操作數(shù)運(yùn)算,這是通過加寬串行單字符總線,即采用大的基數(shù)實(shí)現(xiàn)的。一般地,這對(duì)于加速計(jì)算、減小實(shí)現(xiàn)SuperMAP的硅區(qū)域、以及制造與流行的數(shù)字信號(hào)處理器(DSP)的長(zhǎng)度相兼容的設(shè)備是有用的。
對(duì)于在素?cái)?shù)和奇數(shù)復(fù)合域上的模數(shù)乘法,A和B本別被定義為被乘數(shù)和乘數(shù),而N被定義為模運(yùn)算中的模。N一般地大于A或B。N同時(shí)表示存儲(chǔ)模值的復(fù)合寄存器。在某些時(shí)候,N一般地比A小。A、B和N一般地是n個(gè)字符長(zhǎng),其中字符一般地是1到8比特長(zhǎng)。k是在由乘法設(shè)備的大小(單元的數(shù)目)定義的組大小的l比特字符的數(shù)目。類似地在基于多項(xiàng)式的GF(2q)計(jì)算中,模數(shù)N是n比特長(zhǎng)的,其中MS比特是1(首項(xiàng)系數(shù)為1),并且A、S和B操作數(shù)在適當(dāng)約簡(jiǎn)后也是n比特長(zhǎng)的。如果一個(gè)GF(2q)的計(jì)算結(jié)果是首項(xiàng)系數(shù)為1的,最好把它“約簡(jiǎn)”為一個(gè)值,這個(gè)值的MS位為零,約簡(jiǎn)的方法是把所述的結(jié)果與模進(jìn)行異或。在優(yōu)選的實(shí)施例中,當(dāng)一個(gè)GF(2q)的第一有效比特以反向模式構(gòu)成時(shí),MAP可以判斷該比特是否為1并執(zhí)行適當(dāng)?shù)募s簡(jiǎn)。
在素域中,“≡”,或者在某些情況下“=”,用于表示模數(shù)的同余,例如16≡2 mod 7。16被稱為“同余”為2模7,因?yàn)楫?dāng)16除以7時(shí)余數(shù)為2。當(dāng)Y mod N≡X mod N時(shí);Y和X都可以比N大;然而,對(duì)于正數(shù)X和Y,其余數(shù)是相等的。還要注意負(fù)整數(shù)Y的同余數(shù)是Y+uN,其中N是模,并且如果Y的同余小于N,則u是給出正結(jié)果的最小的整數(shù)。
在GF(2q)中的同余更為簡(jiǎn)單,因?yàn)榧臃ê蜏p法是相同的,并且普通的計(jì)算一般不會(huì)有潛在的溢出問題。例于N=1101和A=1001,由于A的左邊MS比特是1,我們必須通過采用模2運(yùn)算從A中約簡(jiǎn)(“減法”)N,A XOR N=1001 XOR 1101=0100。
符號(hào)¥用來表示狹義的同余,這在GF(p)中特別有用。在這里所描述的過程中,一個(gè)值通?;?yàn)樗枰闹?,或等于所需要的值加上模。例如X2 mod 7。X可以等于2或9。X定義為狹義同余為2 mod 7。當(dāng)¥符號(hào)用于上標(biāo)時(shí),就象在B中,那么0≤B<2N,或換一種說法,B或者等于與B同余的最小的正數(shù)B,或者等于最小的正同余數(shù)B加上模N。在本發(fā)明中專用的其它符號(hào)在本概述的后面出現(xiàn)。
當(dāng)X=A mod N,X定義為A除以N的余數(shù);例如,3=45 mod 7,而在GF(2q)中更簡(jiǎn)單一1111 mod 1001≡0110。
在數(shù)論中,X的模數(shù)乘法的逆記為X-1,其定義為X·X-1mod N=1。如果X=3,而N=13,則X-1=9,即在GF(p)中3·9除以13的余數(shù)是1。
對(duì)于兩種數(shù)域,我們一般地選擇用指數(shù)函數(shù)計(jì)算A的乘法逆,例如,A-1mod q≡Aq-2mod q。
在提及比特、字符、以及整個(gè)操作數(shù)值時(shí),縮寫MS和LS用來分別表示“最高位”和“最低位”,就象在數(shù)字術(shù)語(yǔ)中常用的那樣,但在基于多項(xiàng)式的求逆模式中,操作數(shù)被裝載為MS數(shù)據(jù)在先LS數(shù)據(jù)在后,其中數(shù)據(jù)字的比特順序在裝載時(shí)被反轉(zhuǎn)。
在本說明書中N既表示值N,又表示存儲(chǔ)N的移位寄存器的名稱。值的星號(hào)上標(biāo)表示這個(gè)值作為中間值可能不完整或?qū)?huì)改變。A是將需要求冪的數(shù)字的值,而n是操作數(shù)N的比特長(zhǎng)度。初始化后當(dāng)A被“蒙哥馬利P域歸一化”為A*(A*=2nA-P1中已說明)A*和N在冪運(yùn)算的整個(gè)中間步驟中一般為常量。在GF(2q)計(jì)算中,當(dāng)計(jì)算需要在正常的非逆的比特位置上執(zhí)行時(shí),我們將遵循同樣的協(xié)議。然而,采用逆的形式,我們的計(jì)算導(dǎo)致最高有效位為0,這將被忽視,并且它不代表一個(gè)乘法的移位,因?yàn)檫@沒有進(jìn)位。
在第一次迭代,在求冪的初始化之后,B等于A*。B也是寄存器的名稱,其中累加值最后會(huì)等于所需要的求冪的結(jié)果,它駐留在這個(gè)寄存器中。S或S*表示一個(gè)臨時(shí)的值;并且S表示存儲(chǔ)在GF(p)的數(shù)S的除了單MS比特外的所有比特的一個(gè)或若干寄存器。(S*連接上這個(gè)MS比特就等于S。)S(i-1)表示在第i次迭代輸出端的S的值。在這些多項(xiàng)式計(jì)算中,在S上不需要執(zhí)行模數(shù)約簡(jiǎn)。
一般地,在素?cái)?shù)域上X和Y的蒙哥馬利乘法實(shí)際上是執(zhí)行(X·Y·2-n)mod N,其中n一般是在一個(gè)模數(shù)中字符的數(shù)量。這被記為,P(A·B)N,并記MM或在P域中的乘法。在蒙哥馬利算法的上下文中,我們把在P域中和基于多項(xiàng)式域中乘法和平方稱為乘法和平方操作。
我們將重新定義在GF(2q)中蒙哥馬利型算法的這個(gè)創(chuàng)新性的擴(kuò)展,使其表示逆形式的數(shù)據(jù)序列,其中MS零強(qiáng)制不會(huì)改變同余或產(chǎn)生一個(gè)繁重的寄生因子。因此,我們可以引入一套新的符號(hào)以適應(yīng)運(yùn)算的擴(kuò)展,并且允許一種更寬的串行乘法器總線結(jié)構(gòu)。這個(gè)不止一比特的串行乘法器流優(yōu)先于允許一個(gè)自然整數(shù)的超標(biāo)量的乘法器。這個(gè)乘法器設(shè)備可以接受32比特被乘數(shù)和4比特乘數(shù),到一個(gè)可以同時(shí)執(zhí)行模數(shù)算術(shù)乘法和約簡(jiǎn)的裝置。
串行/并行超標(biāo)量模數(shù)乘法器增強(qiáng)型符號(hào)l一個(gè)字符(數(shù)字)中的比特?cái)?shù)。
r乘法器字符的基數(shù),r=2l。
n操作數(shù)(乘數(shù)、被乘數(shù)和模)的大小,以字符計(jì)。在蒙哥馬利算法GF(p)域中計(jì)算的示例中,l等于1,而n為模數(shù)操作數(shù)的比特長(zhǎng)度。
k串行-并行乘法器的長(zhǎng)度,以字符計(jì)。
m被乘數(shù)的交錯(cuò)片(段)的數(shù)目m=n/k。
Si第i次MM迭代的部分積;0≤i≤m-1;S0=0。
Si0第i次迭代的結(jié)果的右邊的字符,在丟棄Z的右邊前k字符的0后。
Si第i次迭代的結(jié)果左邊n-k字符。
SijSi的第j個(gè)字符。
A并行的被乘數(shù),由m·k個(gè)字符組成。
AiA的第i個(gè)k字符的片,(和/或存儲(chǔ)Ai的寄存器)。
AitAi的第t個(gè)字符。
B一個(gè)串行乘數(shù)(和/或存儲(chǔ)B的寄存器)。
B0B的右邊最前面的k個(gè)字符。
BB的左邊最后(n-k)個(gè)字符。
B0jB0的第j個(gè)字符。
BjB的第j個(gè)字符。
N模數(shù)操作數(shù)。(和/或存儲(chǔ)所述的乘數(shù)的寄存器)。
N0N的右邊k個(gè)字符。
{在GF(p)上的LS字符,在GF(2q)上的MS字符}NN的左邊(n-k)個(gè)字符。
{在GF(p)上的MS字符,在GF(2q)上的LS字符}N0jN0的第j個(gè)字符。
NjN的第j個(gè)字符。
Y0在GF(p)域中蒙哥馬利乘法和約簡(jiǎn)所需的零強(qiáng)制變量。Y0有k個(gè)字符長(zhǎng)。
Y0jY0的第j個(gè)字符。
R駐留在進(jìn)位保留累加器中的和值,(包括未解析的內(nèi)部進(jìn)位ins)以及來自最后的串行加法器進(jìn)位,460。
J00對(duì)于“快速的”有限域乘法和約簡(jiǎn),模數(shù)N的零強(qiáng)制字符函數(shù)。對(duì)于l=1,J00總是等于1。
Carryj基數(shù)r的串行-并行乘法器的第j個(gè)內(nèi)部進(jìn)位字符。
Carrya對(duì)于GF(p)計(jì)算,串行加法器輸出的基數(shù)r的進(jìn)位。
Sumj基數(shù)r的串行-并行乘法器第j個(gè)內(nèi)部和字符。
LS最低有效位MS最高有效位‖串聯(lián),也就是A=110,B=1011;A‖B=1101101。
Right Hand所有GF(p)計(jì)算數(shù)據(jù)塊的低位部分和求逆的GF(2q)格式的MS部分。
Left Hand所有GF(p)計(jì)算數(shù)據(jù)塊的高位部分和求逆的GF(2q)格式的LS部分。
GF(p)伽羅瓦域,嚴(yán)格說來,在素?cái)?shù)上的有限域,我們也使用復(fù)合整數(shù)(兩個(gè)很大的素?cái)?shù)的乘積)并允許做加、減、乘和偽除法。
GF(2q)伽羅瓦域,使用模2運(yùn)算的有限域。
為了適應(yīng)特殊的數(shù)字系統(tǒng),用來外部地切換帶進(jìn)位或不帶進(jìn)位的加或減整數(shù)的算符或設(shè)備。
用于切換或者在GF(p)上或者在GF(2q)上執(zhí)行乘法的算符或設(shè)備。
S數(shù)字域切換器,假如S=1,切換器使能所有進(jìn)位輸入/輸出為GF(p)計(jì)算。
S=0,切換器禁用所有進(jìn)位輸入/輸出為GF(2q)計(jì)算。
SuperMap私有的超標(biāo)量模運(yùn)算處理器系列的任何一個(gè)成員是從屬于這個(gè)發(fā)明的。SuperMap商標(biāo)是在歐洲登記的并且在美國(guó)正在審理中。
根據(jù)本發(fā)明的第一個(gè)方面,因此這里提供了一個(gè)作用于執(zhí)行在基于多項(xiàng)式GF(2q)和GF(p)域的運(yùn)算的乘法和平方的微電子電路裝置,平方和約簡(jiǎn)采用一個(gè)串行饋送的基數(shù)為2l的乘數(shù),B,和k字符的被乘數(shù)段,Ai,和一個(gè)k字符的累加器,其中約簡(jiǎn)到一個(gè)狹義同余是以“快速的”方式執(zhí)行的,以一種收縮的方式,這里Ai是被乘數(shù),乘以B,乘數(shù),在模為N的條件下,并且其結(jié)果最多有2n+1個(gè)字符長(zhǎng),包括k個(gè)首先出現(xiàn)的被忽略的零字符,這些零字符不被保存,這里的k個(gè)字符沒有比模數(shù)低的比特位,所述的操作在兩個(gè)階段里執(zhí)行,本裝置包括第一(B)、和第二(N)主存儲(chǔ)寄存器部件,每個(gè)寄存器用于保持至少n比特長(zhǎng)的操作數(shù),分別用來存儲(chǔ)一個(gè)乘數(shù)值,用B表示,以及一個(gè)模數(shù),用N表示,這里這個(gè)模數(shù)小于2n;一個(gè)數(shù)字邏輯判斷檢測(cè)器,Y0,用于“快速的”預(yù)測(cè)何時(shí)需要把模數(shù)值的加到加法累加器中的值上,以使從該設(shè)備中發(fā)出的前k個(gè)字符被強(qiáng)制為零;對(duì)至少k字符輸入乘數(shù)的一個(gè)模數(shù)乘法設(shè)備,它僅有一個(gè),至少k字符長(zhǎng)的加法器,求和設(shè)備用于接受k字符的乘數(shù),乘法設(shè)備用依次換到累加器設(shè)備,乘數(shù)的值也依次從B寄存器中接收乘數(shù)值,并且一個(gè)“快速的”,同時(shí)生成的的預(yù)測(cè)值作為乘數(shù),用于在第一階段強(qiáng)制首先發(fā)出的k個(gè)零輸出字符,其中在每個(gè)有效的機(jī)器周期里,至少一個(gè)指定的乘數(shù)被地加到累加器設(shè)備;被乘數(shù)值被依次切換到包括下面三個(gè)被乘數(shù)中的一個(gè)或兩個(gè)的累加器設(shè)備,第一個(gè)被乘數(shù)是全零的字符串值,第二個(gè)值是被乘數(shù)Ai,而第三個(gè)值是模的N0段;一個(gè)預(yù)測(cè)器用于預(yù)測(cè)l比特的k字符串行輸入乘數(shù)值Y0;本裝置可用于輪流輸入乘數(shù)值到乘法裝置,所述的值在第一階段首先是B操作數(shù),而同時(shí),由Y0組成的第二個(gè)乘數(shù)值,“快速的”預(yù)測(cè)k字符的字符串,用來強(qiáng)制首先出現(xiàn)的輸出為零;本裝置進(jìn)一步包括一個(gè)累加器設(shè)備,,用于在被乘數(shù)被到累加器設(shè)備的同時(shí)輸出值;
一種輸出傳遞機(jī)制,在第二階段用于從累加器設(shè)備上輸出最終的模數(shù)乘法結(jié)果。
根據(jù)優(yōu)選的實(shí)施例,到累加器設(shè)備的加法是通過每次重新串行地加載的更高階乘數(shù)字符串來實(shí)現(xiàn)的。
優(yōu)選地,乘數(shù)字符串可以保證在輸入B字符和相應(yīng)的輸入Y0字符都為零時(shí),使到累加器設(shè)備的求和不發(fā)生;可以保證在輸入B字符為1而相應(yīng)的Y0字符為零時(shí),僅加到被乘數(shù)Ai上;可以保證在輸入B字符為0而相應(yīng)的Y0字符為1時(shí),僅加到模N上;并且可以保證在輸入B字符和相應(yīng)的Y0字符都為1時(shí),加到模數(shù)N和被乘數(shù)Ai的求和上。
優(yōu)選地,本裝置可用于預(yù)裝載被乘數(shù)值A(chǔ)i和N到兩個(gè)專門的預(yù)裝載緩沖器,并把這些值加到第三個(gè)被乘數(shù)預(yù)裝載緩沖器,消除了單獨(dú)對(duì)每個(gè)被乘數(shù)進(jìn)行加操作的必要性。
優(yōu)選地,乘數(shù)字符值為輸入排列成串行的單字符形式,并且其中的Y0檢測(cè)裝置用于在一個(gè)時(shí)鐘序中僅預(yù)測(cè)一個(gè)字符。
在一個(gè)優(yōu)選的實(shí)施例中,其中的累加設(shè)備執(zhí)行模2計(jì)算,異或加法/減法,其中加法和減法部件中的所有進(jìn)位比特都被忽略,因此,排除了在計(jì)算中溢出和進(jìn)一步限制的收斂條件。
優(yōu)選地,進(jìn)位輸入被無(wú)效為零,用S=0來表示,一般用于進(jìn)行基于多項(xiàng)式乘法。
優(yōu)選地,本裝置通過進(jìn)位刪除電路提供無(wú)進(jìn)位運(yùn)算,當(dāng)S等于零時(shí),它的作用是在GF(2q)中執(zhí)行方程計(jì)算的電路單元,S指示刪除電路和所有的加法器和減法器,專用的為XOR,模2加/減法單元。
一個(gè)優(yōu)選的實(shí)施例被調(diào)整,使得從操作單元發(fā)出的前k個(gè)字符段為零,在下一個(gè)依次Y0字符的預(yù)測(cè)中通過下面四個(gè)量進(jìn)行控制i.Ai寄存器的右邊字符乘以B流的Bd字符,A0Bdmod 2l的l比特乘l比特模2l的乘法的結(jié)果中的l比特的Sout比特;ii.從累加器,S(CO0)中首先發(fā)出的進(jìn)位字符;iii.從累加器,SO1,的右邊字符發(fā)出單元中的第二個(gè)l比特的Sout字符;iv.l比特的J0值,它是N0模數(shù)被乘數(shù)寄存器中的右邊字符負(fù)乘性逆,其中,值A(chǔ)0Bdmod 2l,S(CO0),以及SO1按字符相加到一起,并且“快速的”乘以J0字符,輸出一個(gè)有效的Y0零強(qiáng)制預(yù)測(cè)字符以強(qiáng)制一個(gè)l比特的輸出字符串為零。
本裝置優(yōu)選地用于執(zhí)行基于多項(xiàng)式操作數(shù)的乘法以逆模式執(zhí)行,乘法從右邊的MS字符向左邊的LS字符執(zhí)行,用于執(zhí)行模數(shù)約簡(jiǎn)的乘法,而不需要蒙哥馬利型的寄生函數(shù)。
優(yōu)選地,本裝置進(jìn)一步包括串行饋送的預(yù)裝載緩沖器,被乘數(shù)從一個(gè)或多個(gè)存儲(chǔ)器設(shè)備中“快速的”預(yù)裝載進(jìn)預(yù)裝載緩沖器。
本裝置優(yōu)選地用于相加到一個(gè)被乘數(shù)流,一個(gè)從附加的n比特S寄存器發(fā)出的先前的值,通過一個(gè)l比特加法電路,使得當(dāng)Y0檢測(cè)器檢測(cè)在累加器設(shè)備中把模加到求和的必要性時(shí),首先發(fā)出的輸出字符為零,其中Y0檢測(cè)器用于檢測(cè)、利用下一個(gè)依次的相加字符A0Bdmod 2l、S(CO0)、SO1、Sd和S(COz),合成的相加的字符被“快速地”有限域乘以l比特的J0值,其中定義了加法而定義了乘法,它們?cè)诒具^程中適用于有限域。
優(yōu)選地,對(duì)于l=1,J0固定為1,并且J0的乘法是固有的,不需要額外硬件。
優(yōu)選地,一個(gè)比較器用于判斷一個(gè)來自模數(shù)乘法設(shè)備的有限域輸出,它工作在GF(p),這里發(fā)出的右邊前k個(gè)零字符被忽略,這里輸出大于模數(shù)N,它就控制一個(gè)模數(shù)約簡(jiǎn),其中所述的值是來自乘發(fā)器設(shè)備的輸出流的目標(biāo)存儲(chǔ)寄存器的輸出,因此避免了為較小的積值分配第二個(gè)存儲(chǔ)寄存器設(shè)備。
優(yōu)選地,對(duì)于在GF(2q)中的模數(shù)乘法,本裝置用于乘法,而無(wú)需一個(gè)額外的預(yù)先計(jì)算的超過l比特的零強(qiáng)制因子。
一個(gè)優(yōu)選的實(shí)施例是,通過把A操作數(shù)值或B操作數(shù)值復(fù)位為零,并且設(shè)置部分結(jié)果值S0為1,來計(jì)算J0常數(shù)。
根據(jù)本發(fā)明的第二個(gè)方面,提供了一個(gè)微電子電路裝置,用于執(zhí)行整數(shù)A和B的交錯(cuò)有限域模數(shù)乘法,可以產(chǎn)生一個(gè)A乘以B模N的輸出流,其中在模數(shù)操作數(shù)寄存器中的字符數(shù)目,n,大于k個(gè)字符的段長(zhǎng)度,其中乘法過程以大量的交錯(cuò)迭代方式進(jìn)行,在每一次交錯(cuò)的迭代中,操作數(shù)包括模數(shù)N、乘數(shù)B、上一步計(jì)算的部分結(jié)果S、以及被乘數(shù)A的k字符的字符串段被送入乘法設(shè)備,分段地處理從A0字符串段到Am-1字符串段,每次的迭代結(jié)果被依次加到序列中的下一個(gè)臨時(shí)結(jié)果S,這里迭代結(jié)果的前面發(fā)出的字符是零,該裝置包括第一(B)、第二(S)和第三(N)主存儲(chǔ)寄存器,每個(gè)寄存器分別用于存儲(chǔ)乘數(shù)值、部分結(jié)果值和模數(shù);一個(gè)模數(shù)乘法設(shè)備用于在大量的乘法迭代過程的階段中的每一步,把按順序的大量的被乘數(shù)值中的一個(gè)或兩個(gè)加到累加器設(shè)備,并且按順序作為乘數(shù)輪流接收,輸入來自所述的B寄存器,
一個(gè)“快速的”先行值Y0,作為乘數(shù)它用于強(qiáng)制在每次迭代中右邊首先輸出零字符,以及所述的N寄存器;被乘數(shù)并行寄存器用于至少依次接收來自A、B、和N寄存器源的值,以及依次地還有一個(gè)被乘數(shù)零強(qiáng)制Y0值;本裝置進(jìn)一步利用了Y0檢測(cè)裝置,它用于產(chǎn)生一個(gè)二進(jìn)制字符串,在第一階段用作乘數(shù),在第二階段用作被乘數(shù);本裝置用于獲得適用于第一階段切換到累加器設(shè)備的被乘數(shù)值,它包括第一個(gè)零值、第二個(gè)值A(chǔ)i,它是被乘數(shù)A的k字符的字符串段、以及第三個(gè)值N0,它是模數(shù)N發(fā)出的前k個(gè)字符;本裝置進(jìn)一步作用于,利用一個(gè)臨時(shí)的結(jié)果值S,它是上一次迭代的結(jié)果,用于和來自累加器設(shè)備發(fā)出的值相加,為順序地下一次迭代產(chǎn)生一個(gè)部分結(jié)果;本裝置進(jìn)一步用于,利用依次輸入的被乘數(shù)值,它送入累加器設(shè)備用于乘法的第二階段,它包括第一個(gè)開頭零值、第二個(gè)在第一階段留在原位的Ai操作數(shù)、以及第三個(gè)在第一階段已經(jīng)預(yù)測(cè)得到的Y0值;乘數(shù)值在第一階段被送入乘法裝置,它首先是發(fā)出的字符串B0,所述的乘法裝置用于,乘以所述的字符串段同時(shí)乘以第二個(gè)由預(yù)測(cè)值Y0字符串組成的乘數(shù)值,它是按字符同時(shí)裝載的,它為第二階段被生成到預(yù)裝載被乘數(shù)緩沖器;兩個(gè)乘數(shù)值在第二階段輸入到本裝置,它們分別是B操作數(shù)的左邊的n-k個(gè)字符值,記為B,以及模數(shù)N的左邊的n-k個(gè)字符值,記為N;以及所述的裝置還包括一個(gè)乘法輸出設(shè)備,它在最后一個(gè)階段作用于傳送駐留在累加器設(shè)備上的結(jié)果的值的左邊的段到一個(gè)結(jié)果寄存器。
優(yōu)選地,本裝置在基于多項(xiàng)式操作數(shù)上以逆模式執(zhí)行乘法,乘法從MS字符到LS字符,用于執(zhí)行模數(shù)約簡(jiǎn)而不需要象本申請(qǐng)人的美國(guó)專利5,742,530中那樣的蒙哥馬利類型的寄生函數(shù)。
根據(jù)本發(fā)明的第三個(gè)方面,提供了利用被乘數(shù)的首先輸出值來預(yù)測(cè)Y0值的裝置,而該輸入有乘數(shù)B、來自累加器的進(jìn)位值、來自累加器的累加值、來自上一步計(jì)算的部分結(jié)果的當(dāng)前值、以及來自的加法器的進(jìn)位值,這個(gè)加法器把來自累加器的結(jié)果和上一次的部分結(jié)果相加。
優(yōu)選地,本裝置被改造以確保來自該設(shè)備的前k個(gè)發(fā)出值為零字符,所述的改造包括對(duì)下一個(gè)依次的Y0字符的預(yù)測(cè),它用到下列量i.Ai寄存器的右邊字符乘以B流的Bd字符,A0Bdmod 2l的l比特乘l比特模2l的乘法的結(jié)果中的l比特的Sout比特;ii.從累加器,S(CO0)中首先的進(jìn)位字符;iii.從累加器,SO1,的右邊字符發(fā)出單元中的第二個(gè)l比特的Sout字符;iv.來自S流的依次下一個(gè)字符值,Sd;v.來自Z輸出全加器的l比特的進(jìn)位字符,S(COz);vi.l比特的J0值,它是N0模數(shù)被乘數(shù)寄存器中的右邊字符負(fù)乘性逆,其中,值A(chǔ)0Bdmod 2l,S(CO0),SO1,Sd按字符相加到一起,并且“快速的”乘以J0字符,輸出一個(gè)有效的Y0零強(qiáng)制預(yù)測(cè)字符。
在進(jìn)一步的實(shí)施例中還提供了至少一個(gè)檢測(cè)器用于比較輸出結(jié)果和模數(shù)N,其機(jī)制在于在結(jié)果寄存器的輸出上啟動(dòng)一個(gè)第二減法器,以輸出一個(gè)模約簡(jiǎn)的值,它是輸出結(jié)果值的狹義同余,免除了為較小結(jié)果分配第二個(gè)內(nèi)存存儲(chǔ)的必要。
在更進(jìn)一步的實(shí)施例中,兩個(gè)被乘數(shù)的和值被裝載進(jìn)一個(gè)預(yù)裝載字符緩沖器,它有至少k字符的記憶部件的寄存器,而同時(shí),前面的值之一被裝載進(jìn)另一個(gè)預(yù)裝載緩沖器。
根據(jù)本發(fā)明的第四個(gè)方面,提供的裝置具有一個(gè)累加器和一個(gè)具有零強(qiáng)制預(yù)測(cè)機(jī)制,用于執(zhí)行一系列交錯(cuò)的模數(shù)乘法和平方,并被改造成并行執(zhí)行等效于三個(gè)自然整數(shù)的乘法操作,使得結(jié)果是一個(gè)冪。
在一個(gè)實(shí)施例中,下一個(gè)依次地用到的被乘數(shù)被快速地預(yù)裝載進(jìn)一個(gè)預(yù)裝載寄存器緩沖器。
在進(jìn)一步的實(shí)施例中,緩沖器和寄存器裝置作用于裝載來自外部存儲(chǔ)器源的值,所述的緩沖器和寄存器在計(jì)算時(shí)卸載到外部存儲(chǔ)器源中,這樣,操作數(shù)的最大尺寸就取決于可用的存儲(chǔ)器部件。
在更進(jìn)一步的實(shí)施例中,還提供了記憶寄存器部件,所述的記憶部件一般是串行單字符輸入/串行單字符輸出,并行至少k字符輸入/并行至少k字符輸出,串行單字符輸入/并行至少k字符輸出,以及并行k字符輸入/串行單字符輸出。
優(yōu)選地本裝置提供,在乘法型迭代的最后階段,乘數(shù)輸入為零的字符,它用于刷新進(jìn)位保存累加器內(nèi)存的左邊段。
優(yōu)選地,本裝置先于迭代需要時(shí),下一個(gè)順序的被乘數(shù)快速地預(yù)裝載到預(yù)裝載記憶緩沖器。
優(yōu)選地,本裝置快速地從中心存儲(chǔ)器部件上預(yù)裝載被乘數(shù)值到預(yù)裝載緩沖器。
同樣的裝置計(jì)算k字符的蒙哥馬利常數(shù)J0,相對(duì)于模數(shù)的右邊的k字符段,優(yōu)選地通過把A和B都復(fù)位為零并設(shè)置S0=1,然后執(zhí)行一個(gè)k比特的乘法。結(jié)果將駐留在Y0寄存器中。
使用蒙哥馬利類型算法的模數(shù)乘法序列
k字符進(jìn)位保存加法器,CSA,是用在多項(xiàng)式域和素?cái)?shù)域的串行/并行超標(biāo)量模數(shù)乘法的基礎(chǔ)?;诙囗?xiàng)式GF(2q)的算法最好在所有進(jìn)位機(jī)制關(guān)閉下執(zhí)行。
串行-并行超標(biāo)量蒙哥馬利乘法器分三個(gè)階段計(jì)算蒙哥馬利模數(shù)乘積,其中在一個(gè)最優(yōu)的實(shí)施例中,最后一個(gè)階段可能是帶CAS進(jìn)位的整個(gè)左邊k個(gè)字符段的單時(shí)鐘轉(zhuǎn)儲(chǔ)(MS用于通常的乘法,LS用于逆模式的多項(xiàng)式計(jì)算),并且在一個(gè)更簡(jiǎn)潔的實(shí)施例中,最后階段可能是k個(gè)有效的時(shí)鐘串行刷新CSA的內(nèi)容。
在前面P2的公布中,Y0因子被1比特1比特的計(jì)算,因此,通過定義一個(gè)1和模數(shù)右邊比特的方程,只有J0右邊的比特是有意義的。在這個(gè)增強(qiáng)的設(shè)備中,設(shè)備是字符串行的,在每一個(gè)時(shí)鐘周期Y0的一個(gè)l比特字符被產(chǎn)生。正如在前面P1中公布的,Y0是第一階段的零強(qiáng)制函數(shù),它在模數(shù)的值上增加必要的倍數(shù)到一個(gè)累加值,以致相關(guān)的結(jié)果是適合的,并且不會(huì)長(zhǎng)于mk+1個(gè)字符,同時(shí)最右邊出現(xiàn)的字符是全零的。X+ON≡X,當(dāng)ON≡0modN。
模數(shù)乘法序列最初計(jì)算前,我們假設(shè)設(shè)備中沒有以前暫時(shí)的或隨機(jī)的值;操作數(shù)N,B和A的至少第一段值存在于設(shè)備的寄存器中。S0=0;初始化時(shí)部分乘積是典型值0。特別地,在操作數(shù)上執(zhí)行的模數(shù)算法包括兩個(gè)或多個(gè)k字符段,特別在三個(gè)不同的階段。對(duì)于一個(gè)通常的完全乘法中,其中模數(shù)有m段,特別地有m個(gè)超標(biāo)量乘法交錯(cuò)反復(fù),因此被乘數(shù)的每一段被乘上一個(gè)總乘數(shù),通常是B。
第一階段的過程,在(i=0段)每一個(gè)交錯(cuò)超標(biāo)量乘法的是通常的相互超標(biāo)量乘法累加SiAI·B0Y0·N0(B0和Y0是饋送到乘法器的第一段操作數(shù)字符的串行字符,Ai和N0是并行單限操作數(shù),Si是前一個(gè)迭代/計(jì)算產(chǎn)生的部分乘積。在第0次迭代時(shí)Si=0)第一個(gè)階段使用帶前一個(gè)結(jié)果的右邊段的兩個(gè)超標(biāo)量乘積的累加。零的k字符串從乘法設(shè)備中送出,并被丟棄;部分的第一段結(jié)果放在設(shè)備緩存器中,并被求和成為第二階段的結(jié)果。
第一階段結(jié)果一般包括R,CSA的內(nèi)容被與全零的右邊段的串行輸出聯(lián)接。(在GF(p)計(jì)算中,R有另外的LS進(jìn)位比特)第二階段的過程是通常的相互超標(biāo)量乘法累加RSiAI·BY0·N(注意,畫線的變量,舉例來說B是一個(gè)操作數(shù)保留的左邊值。它一般地有一個(gè)或多個(gè)段,也就是,m-1個(gè)段。B和N是1比特1比特地串行饋送到乘法器中的,并且Ai是從第一個(gè)階段保留下來的,Y0在第一個(gè)階段是一個(gè)乘數(shù),并在第一個(gè)階段裝載進(jìn)機(jī)器,在后面的迭代中成為被乘數(shù),是一個(gè)并行操作數(shù))。
在第二個(gè)階段的后面,一般包括m-1次迭代,保留在CSA中的Si的左邊段-準(zhǔn)備被傳輸-并且右邊段(k字符段)從設(shè)備中發(fā)出,一般地進(jìn)入一個(gè)S寄存器。注意在素?cái)?shù)域的乘法是以通常的進(jìn)位保留加法來執(zhí)行的。在GF(2q)的逆形式乘法是從最高有效位到最低有效位進(jìn)行的。當(dāng)一個(gè)模數(shù)值必須被加到累加器中時(shí),將使用Y0函數(shù)。除了在設(shè)備中禁用進(jìn)位,機(jī)制過程對(duì)兩個(gè)數(shù)字系統(tǒng)來說一般是一致的。
我們公布用于在有限域?qū)С隽銖?qiáng)制向量Y0j字符的方法。
計(jì)算J0j≡-N00-1mod2l對(duì)一個(gè)模數(shù)是互素?cái)?shù)的所有的自然整數(shù)在兩個(gè)數(shù)域是乘性逆的。N00是奇數(shù),因此沒有2的因子。mod2l的所有因子是2,因此所有的數(shù)至少有最低有效位1,并且模數(shù)僅有因子2,是互素?cái)?shù),J0j總是存在的。形式上,對(duì)于素?cái)?shù)N00和2l,gcd(N00,2l)=1。
方程的單字符可被用隨機(jī)邏輯、帶簡(jiǎn)單電路、或者帶簡(jiǎn)單查找表的硬件實(shí)現(xiàn)。只有2k-1個(gè)不同的值必須能從查找表中推出。在逆模式格式中,多項(xiàng)式模數(shù)必須被右對(duì)齊,名義上是奇數(shù)。在典型的求冪方程中,兩個(gè)數(shù)域,模數(shù)比特的右邊比特位是1,名義上是奇數(shù),并且一個(gè)奇數(shù)mod2k的乘性逆必須總是奇數(shù)。
假如l=1,J00的乘數(shù)顯式的等于1,并且不需要被計(jì)算。
在第一個(gè)階段被Y0方程所強(qiáng)制的一個(gè)字符輸出的結(jié)果總是0,因此SuperMAP的第j個(gè)字符的輸出Zij是0=(2lRSijAi0·B0jY0j·N00)mod2l=Zij;因此,(RSijAi0·B0j)≡-Y0j·N00;并且Y≡-N00-l(RSijAi0·B0j)mod r。
從上面的等式,我們可以知道在兩個(gè)數(shù)域,J00最好是模數(shù)右邊k個(gè)字符的模乘性逆的負(fù)值;注意模2運(yùn)算,正值和負(fù)值是一樣的。
R是CSA中的駐留值加上從圖2中最后的串行加法器460輸出的進(jìn)位位的和。Sij是在第i次迭代的部分乘積的第j位。Ai0是A的第i片的最右邊的字符(在GF(p)中的LS)。B0j是B的第j個(gè)字符。在蒙哥馬利乘法的所有迭代中B0是常數(shù)(乘數(shù))。Y0是在每一次(第i次)迭代中產(chǎn)生的k字符向量。Y0j是在迭代的第一個(gè)階段的第j個(gè)時(shí)鐘周期產(chǎn)生的第j個(gè)字符。N是一m模數(shù)。N0是模數(shù)的右邊片。N00是N0的右邊字符。
兩個(gè)域標(biāo)準(zhǔn)化超標(biāo)量模數(shù)乘法的方法S0=0對(duì)于i=0到m-1(交錯(cuò)迭代)
第一階段(每一次交錯(cuò))R=0對(duì)于j=0到k-1(第一階段的每一個(gè)字符)Y0j=(J00(RS0jAi0B0j))mod 2lZij=(RS0jAi0B0jY0jN0)mod 2l;并且R=[(2lRS0jAi0B0jY0jN0)]/2lk個(gè)有效的時(shí)鐘周期后,Z流的第一個(gè)段是全零,并被丟棄;相關(guān)的Y0、k字符向量,被準(zhǔn)備用做下一個(gè)階段的被乘數(shù),并且和值R將被用在下一個(gè)階段。
第二階段對(duì)于j=k到n-1Zij=(RSijAi0B0jY0jN0j)mod 2lR=[(2lRSijAi0·B0jY0j·N0j)]/2l上面的基于串行-并行乘法器帶一個(gè)字符的算法實(shí)現(xiàn)是上面的協(xié)議的簡(jiǎn)單擴(kuò)展。
(Quotient(x,y)是不帶余數(shù)的整數(shù)除法函數(shù)。例如,假如x=10101b,并且y=10000b,那么Quotient(x,y)=1)。
S0=0對(duì)于i=0到m-1(交錯(cuò)循環(huán))第一階段對(duì)于j=0到k-1Y0j=(J00Si0Ai0B0jSCarry0Sum1Quotient(Si0Sum0,r)))mod r對(duì)于t=0到k-1(帶一個(gè)時(shí)鐘周期的整個(gè)循環(huán))Sumt=(Sumt+1SCarrytAitB0jY0jN0t)mod rCarryt=(Quotient((Sumt+1CarrytAitB0jY0jN0t),r)(在這個(gè)階段乘法器輸出是0)第二階段
主要部分Carrya=0對(duì)于j=k到n-1對(duì)于t=0到k-1(帶一個(gè)時(shí)鐘周期的整個(gè)循環(huán))Sumt=(Sumt+1SCarrytAitBjY0tNj)mod rCarryt=(Quotient((Sumt+1CarrytAitBjY0tNj),r)Si,j-k=(Si,j-2kSum0SCarrya)mod rCarrya=Quotient((Si,j-2kSum0SCarrya),r)乘法器的刷新對(duì)于j=n到(n+k-1)對(duì)于t=0到k-1(帶一個(gè)時(shí)鐘周期的整個(gè)循環(huán))Sumt=(Sumt+1SCarryt)mod rCarryt=Quotient((Sumt+1Carryt),r)Si,j-k=(Si,j-2kSum0SCarrya)mod rCarrya=Quotient((Si,j-2kSum0SCarrya),r)在GF(p)中,對(duì)當(dāng)l=1這個(gè)特殊情況例子的正式的解釋,見P1。
上面描述了用于進(jìn)行交錯(cuò)有限域整數(shù)A和B模數(shù)乘法運(yùn)行產(chǎn)生A乘以B模N的輸出流的一個(gè)微電子電路的方法和裝置,其中n是在模操作數(shù)寄存器中的字符的數(shù)量,并且大于k,其中乘法過程是交錯(cuò)進(jìn)行的,其中在每一個(gè)帶操作數(shù)輸入到乘法設(shè)備的交錯(cuò)迭代中,包括模數(shù)N、乘數(shù)B、前面計(jì)算的部分結(jié)果S和被乘數(shù)A的k字符串段、字符串段是從A0字符串段到Am-1字符串段,其中每一個(gè)迭代結(jié)果是加到S依次的下一個(gè),暫時(shí)結(jié)果,依次地,其中,迭代結(jié)果第一個(gè)輸出的字符是0,本裝置包括一般地,這有四個(gè)用來給乘法器饋送串行l(wèi)比特字符寄存器,第一個(gè)(B),第二個(gè)(S)和第三個(gè)(N)和被配置成乘法器有效負(fù)載的優(yōu)選的(A)。為了計(jì)算那些特別在MAP內(nèi)部積存器中不適用的長(zhǎng)的操作數(shù),CPU可從輔助存儲(chǔ)器中裝載操作數(shù)。
特別地,這些主存儲(chǔ)寄存器存儲(chǔ)和輸出操作數(shù),分別存儲(chǔ)一個(gè)乘數(shù),部分結(jié)果值和模數(shù)N。
在迭代乘法過程的階段中,按順序,模數(shù)乘法設(shè)備運(yùn)行加到累加器,依次加上多個(gè)被乘數(shù)值的1個(gè)或2個(gè),并且順序地接受作為乘數(shù),順序地從第一個(gè)B寄存器中輸入,第二個(gè)是一個(gè)快速的先行值Y0,在每一個(gè)迭代中作為乘數(shù)來強(qiáng)制輸出字符先輸出的右邊為零,第三個(gè)值從模N寄存器中來。
被乘數(shù)并行寄存器運(yùn)行順序地接收從A、B和N寄存器來的值,和一個(gè)被乘數(shù)零強(qiáng)制Y0值。
零強(qiáng)制Y0值檢測(cè)到設(shè)備運(yùn)行產(chǎn)生了在運(yùn)行的第一階段作為乘數(shù)的二進(jìn)制串,并作為每一個(gè)迭代乘法的第二階段的被乘數(shù)。
用于第一階段被切換到累加器的被乘數(shù)值可能包括四個(gè)值,第一個(gè)值是零,第二個(gè)值是Ai,是被乘數(shù)A的k字符串段,第三個(gè)值N0,作為模數(shù)N的發(fā)出的前k個(gè)字符。假如有如圖6所示第四預(yù)裝載緩存器在乘法的開始N0值特別地被切換。然后當(dāng)A的k字符片被輸入,Ai值被串行地與N0值累加并存儲(chǔ)在第四個(gè)寄存器中。
假如一個(gè)計(jì)算是典型的單k字符模數(shù),那么不需要S寄存器,或者用于臨時(shí)結(jié)果的值S。假如操作數(shù)是2k個(gè)字符或更長(zhǎng),那么操作必須是Ai片的迭代。對(duì)于B的平方運(yùn)算片特別地是從B流上抓取并預(yù)先裝載到裝載緩存器中。
乘法過程的第一次迭代,臨時(shí)結(jié)果是零。
從前一次迭代來的后續(xù)的臨時(shí)結(jié)果,被與從累加器產(chǎn)生的值累加,來產(chǎn)生用于下一次迭代的部分結(jié)果。
被輸入的被乘數(shù),依次進(jìn)入用于第二階段的累加器,第一個(gè)零值是偽寄存器值,第二個(gè)Ai操作數(shù)是在第一個(gè)階段保留下來的,第三個(gè)值Y0是在第一個(gè)階段預(yù)測(cè)用來繼續(xù)乘以模N余下的字符。
在第一個(gè)階段輸入到乘法器設(shè)備的乘數(shù)值是先產(chǎn)生的串B0,是B操作數(shù)先產(chǎn)生的字符串段,同時(shí)乘以由先行值Y0字符串組成的第二個(gè)乘數(shù),在第二階段當(dāng)它被產(chǎn)生到預(yù)裝載緩存器是被一個(gè)字符一個(gè)字符地同時(shí)裝載的。
在第二個(gè)階段兩個(gè)乘數(shù)輸入進(jìn)裝置,分別地,從B操作數(shù)的左邊n-k個(gè)字符值標(biāo)記為B,從N操作數(shù)的左邊n-k個(gè)字符值標(biāo)記為N。
第三個(gè)階段是刷新設(shè)備,它傳輸保留在累加器中的結(jié)果值的左邊段。這或者是單個(gè)時(shí)鐘數(shù)據(jù)轉(zhuǎn)儲(chǔ),或者是單個(gè)串行卸載,被饋送在乘法器輸入的零字符驅(qū)動(dòng)。
假如轉(zhuǎn)儲(chǔ)是并行轉(zhuǎn)儲(chǔ),一些部件被用來比較以決定是否結(jié)果要求模的額外的約減。
在本發(fā)明中,多個(gè)創(chuàng)新增強(qiáng)中的一個(gè)是在GF(29)的逆模式乘法。因?yàn)樵谶@個(gè)算法中缺乏累加器單元間的相互作用,從乘積的MS端進(jìn)行乘法和約減成為可能,因此乘積是沒有因丟棄零導(dǎo)致的繁瑣的寄生函數(shù)的模約減結(jié)果,這與在傳統(tǒng)的蒙哥馬利乘法中進(jìn)行右移位是等價(jià)的。
第二個(gè)創(chuàng)新是允許自動(dòng)零強(qiáng)制為專利申請(qǐng)P2的Y0函數(shù)的擴(kuò)展,它描述了一個(gè)設(shè)備一次只有一個(gè)比特被預(yù)測(cè)。只有J00比特乘上單比特異或值。一個(gè)奇數(shù)的乘性逆和它的負(fù)數(shù)產(chǎn)生一個(gè)奇數(shù)。被保存的查詢表或一個(gè)隨機(jī)邏輯電路用來計(jì)算l=1時(shí)的J0值。注意,在非類似的數(shù)字系統(tǒng)中,J0是一個(gè)不同的量。在這個(gè)擴(kuò)展中,對(duì)于相關(guān)的數(shù)域,我們證明Y0值是如何被推導(dǎo)出的。
下面描述來預(yù)測(cè)Y0值的電路單元,其利用被乘數(shù)的第一發(fā)出值,和乘數(shù)B的現(xiàn)有輸入、累加器設(shè)備的進(jìn)位值、來自累加器的求和值、來自前面計(jì)算的部分結(jié)果的現(xiàn)有值、以及來自加法器的進(jìn)位值來預(yù)測(cè)Y0值,所述加法器把來自累加器設(shè)備的結(jié)果和上一次的部分結(jié)果相加。
不同的表述,用于控制零強(qiáng)制函數(shù)的六個(gè)值是i.Ai寄存器的右邊字符乘以B流的Bd字符,A0Bdmod 2l的l比特乘l比特模2l的乘法的結(jié)果中的l比特的Sout比特;ii.從累加器,S(CO0)中首先發(fā)出的進(jìn)位字符;iii.從累加器,SO1,的右邊字符發(fā)出單元中的第二個(gè)l比特的Sout字符;iv.來自S流的按順序的下一個(gè)字符值,Sd;v.來自Z輸出全加器的l比特的進(jìn)位字符,S(COz);vi.l比特的J0值,它是N0模數(shù)被乘數(shù)寄存器中的右邊字符負(fù)乘性逆,其中,值A(chǔ)0Bdmod 2l,S(CO0),SO1,Sd按字符相加到一起,并且“快速的”乘以J0字符,輸出一個(gè)有效的Y0零強(qiáng)制先行字符來強(qiáng)制一個(gè)l比特為零的輸出字符串。正如P1,為了確定是否一個(gè)輸出必須是模約簡(jiǎn)的,一個(gè)檢測(cè)器用來與N比較輸出結(jié)果,其機(jī)制在于在結(jié)果寄存器的輸出上啟動(dòng)一個(gè)第二減法器,以輸出一個(gè)模約簡(jiǎn)的值,它是輸出結(jié)果值的狹義同余,負(fù)除了為較小結(jié)果分配第二個(gè)內(nèi)存存儲(chǔ)的必要。
被配置執(zhí)行乘法的單累加器,和預(yù)測(cè)零強(qiáng)制機(jī)制一起執(zhí)行一系列的交織模乘法和平方。所有的設(shè)備的執(zhí)行相當(dāng)于三個(gè)整數(shù)乘法,象在傳統(tǒng)的蒙哥馬利方法一樣,J0是一個(gè)k字符的設(shè)備乘以B0Ai和Si的前k個(gè)字符,并且最后使用Y0來乘上N。
當(dāng)SuperMAP在計(jì)算乘法的最后迭代,下一個(gè)乘法的第一片可被快速預(yù)裝載進(jìn)預(yù)裝載寄存緩沖器裝置。這個(gè)值可能是前一個(gè)乘法的結(jié)果或駐留在
圖1或圖5的寄存器塊中的一個(gè)寄存器段中的被乘數(shù)的一片。
預(yù)裝載值是兩個(gè)被乘數(shù)的累加和,它被加進(jìn)一個(gè)k字符寄存器,僅用于GF(2q)計(jì)算。在GF(p)計(jì)算中,必須用額外進(jìn)位位規(guī)定。
特別地,對(duì)很長(zhǎng)的模,緩存器和寄存器鄰接SuperMAP典型地沒有足夠的存儲(chǔ)器資源。用來直接裝載操作數(shù)到預(yù)裝載緩存器的裝置將被提供,用來在CPU的存儲(chǔ)器圖中存儲(chǔ)操作數(shù)。對(duì)于逆模式乘法,從CPU來是輸入字的比特順序一般在數(shù)據(jù)的輸入和數(shù)據(jù)輸出設(shè)備中被反向。
附圖的簡(jiǎn)要說明在圖中粗實(shí)線表示k字符(kl比特)寬的并行總線。細(xì)的相鄰信號(hào)線描述l比特寬的線,大多數(shù)控制線沒有畫出;那些被認(rèn)為是理解過程所必須的,特別地用點(diǎn)劃線來畫出。
圖1是根據(jù)本發(fā)明是實(shí)施例裝置的方框圖,其中描述了四個(gè)主寄存器,并且顯示了串性數(shù)據(jù)到運(yùn)行部件的的流程,圖3中到主CPU的輸入和輸出數(shù)據(jù)流程;圖2是用來控制從圖1的數(shù)據(jù)的運(yùn)行單元的實(shí)施例的方框圖;圖3是一個(gè)完整的單芯片、單塊集成電路的加密計(jì)算機(jī)的優(yōu)選實(shí)施例的簡(jiǎn)化方框圖,特別地在一個(gè)小卡中表示;圖4是一個(gè)完整的單芯片、單塊集成電路的加密計(jì)算機(jī)的優(yōu)選實(shí)施例的簡(jiǎn)化方框圖,其中數(shù)據(jù)禁用開關(guān)被用來提供加速卸載從運(yùn)行單元來的數(shù)據(jù)。
圖5是用來產(chǎn)生J0的數(shù)據(jù)寄存器塊的簡(jiǎn)化方框圖;圖6是一個(gè)運(yùn)行單元的簡(jiǎn)化方框圖,其中Y0檢測(cè)器是用來強(qiáng)制第一階段零輸出的設(shè)備;圖7A是圖6主計(jì)算部分的方框圖,帶計(jì)數(shù)圓圈的圖標(biāo)與圖7B、7C和7D的時(shí)序圖和流程圖有關(guān)。
圖7B是一個(gè)事件的時(shí)序指針圖,顯示了進(jìn)程的逐級(jí)引入,并包括平方運(yùn)算的第一次迭代;圖7C是一個(gè)詳細(xì)的事件序列,用于在平方序列第一次迭代中消除“下一次蒙哥馬利平方”的延時(shí),圖標(biāo)指針與圖7A、圖7B和圖7C有關(guān);圖7D描述計(jì)算輸出的時(shí)序,與圖7A、圖7B和圖7C有關(guān);圖8A和8B,一起描述在GF(2q)和GF(p)中向量Y0的產(chǎn)生。圖8A是一套查詢表用來在l=2和l=4時(shí)確定N0右邊字符的負(fù)乘性逆,圖8B用簡(jiǎn)單的框圖描述在兩個(gè)數(shù)域中當(dāng)l=2和l=4時(shí)產(chǎn)生Y0函數(shù)的信號(hào)。對(duì)優(yōu)選的實(shí)施例的描述在圖中粗線表示k字符(kl比特)寬的并行總線。連接信號(hào)線的細(xì)實(shí)線表示l比特寬的線。特別地,控制線不顯示;被認(rèn)為是理解過程必須的,特別用點(diǎn)劃線畫出。
圖1-2,一起構(gòu)成了一個(gè)簡(jiǎn)化的串行-并行算術(shù)邏輯單元(ALU)的框圖,它是按照本發(fā)明的優(yōu)選的實(shí)施例構(gòu)造并工作的。圖1-2的裝置,優(yōu)選地包括下列部件單復(fù)接器-受控切換元件,它從多個(gè)信號(hào)的輸入中選擇一個(gè)信號(hào)和字符流,并把這個(gè)選出的信號(hào)引向一個(gè)單獨(dú)的輸出。復(fù)接器標(biāo)記為M1到M13,并且是更大的組件中的一個(gè)固有的元件。
復(fù)接器和預(yù)加器,390,是一個(gè)kl+1個(gè)復(fù)接器的陣列,它選擇四個(gè)k或k+1字符的輸入中的哪一個(gè)將被加入CSA,410。
B(70)和(80),SA(130),SB(180)和N(200)和(210)是在優(yōu)選實(shí)施例中的四個(gè)主要的主串行寄存器。SA是在概念上和實(shí)際上冗余的,但卻可以極大地加速非常長(zhǎng)的數(shù)字的計(jì)算,并節(jié)省易失性存儲(chǔ)器資源,特別是在模的長(zhǎng)度是2·k·m字符長(zhǎng)的情況下。
串行加法器和串行減法器是邏輯單元,它們有兩個(gè)串行字符輸入和一個(gè)串行字符輸出,并且在兩個(gè)長(zhǎng)字符串的字符上執(zhí)行加或減法。部件90和500是減法器,330和460是串行加法器。從輸入到輸出的傳播時(shí)間非常短。串行減法器90和500如果B*大于或等于N,從B上減去B*,并且/或者,如果S*大于或等于N,從S上減去S*。串行減法器480作為比較器部件的一部分用于檢測(cè)B*是否大于或等于N。全加器330,把送到裝載緩沖器340的兩個(gè)字符流加上一個(gè)等于290和320裝載緩沖器中值的和的值。
快速裝載器和卸載器10和20,以及30和40,分別地是加速CPU控制器的數(shù)據(jù)流的設(shè)備。特別地,這些設(shè)備消除了對(duì)其它直接內(nèi)存訪問部件的必要。20和40是用于反轉(zhuǎn)數(shù)據(jù)字的,因?yàn)樵贕F(2q)的逆格式的乘法中反轉(zhuǎn)數(shù)據(jù)字是必需的。
數(shù)據(jù)輸入50,是一個(gè)并行輸入串行輸出的設(shè)備,因?yàn)楫?dāng)前的ALU設(shè)備是一個(gè)串行饋送的脈動(dòng)處理器,數(shù)據(jù)是并行輸入的,但處理是串行的。
數(shù)據(jù)輸出60,是一個(gè)串行輸入并行輸出的設(shè)備,用于從協(xié)處理器輸出結(jié)果。商產(chǎn)生器是圖2的一部分,它在除法機(jī)制的每一次迭代中產(chǎn)生一個(gè)商字符。
刷新信號(hào),Bd上的240,S*d上的250,和Nd上的260用于確保最后k+1個(gè)字符能從CSA中輸出。第二個(gè)實(shí)施例將在第二階段的結(jié)尾調(diào)整R數(shù)據(jù),并將執(zhí)行一個(gè)單并行數(shù)據(jù)轉(zhuǎn)儲(chǔ)以刷新CSA。
裝載緩沖器R1,290;R2,320;和R3,340是串行輸入并行輸出的移位寄存器,適于接收三個(gè)可能的大于零的被乘數(shù)組合。
鎖存器L1,360;L2,370;和L3,380;是用于接收來自裝載緩沖器的輸出,因此允許裝載緩沖器可以在這個(gè)數(shù)據(jù)很好地鎖存進(jìn)L1,L2和L3之前臨時(shí)地啟動(dòng)下一階段數(shù)據(jù)的處理。鎖存器L0是特別地到390的常數(shù)的全零的虛擬輸入,它特別地不是用鎖存邏輯實(shí)現(xiàn)的。
Y0檢測(cè)器430,是邏輯設(shè)備,它確定模累加的次數(shù),以使在乘法中的Z上存在LS的k字符的零字符串。
一字符延遲設(shè)備100,220和230插入到關(guān)鍵的數(shù)據(jù)流上,在圖1的數(shù)據(jù)準(zhǔn)備裝置和圖1的數(shù)據(jù)處理裝置之間提供計(jì)算同步。
k字符延遲移位寄存器470,同步N,在丟棄輸出的右邊的零字符字符串后,對(duì)于大于N的比較,減法器從結(jié)果中減去N。
進(jìn)位保持累加器幾乎和串行/并行乘法器一樣,不同的是三個(gè)大于零的不同的值可以相加,而不是象常規(guī)地鎖存進(jìn)s/p乘法器的輸入的單一值。當(dāng)用于基于多項(xiàng)式計(jì)算時(shí)所有“進(jìn)位相關(guān)”的功能都被關(guān)閉。
最后進(jìn)位插入440,用于插入S流中的第(m·k·l+1)個(gè)比特,因?yàn)镾寄存器僅有m·k個(gè)字符長(zhǎng)。
借位/溢出檢測(cè)490,檢測(cè)結(jié)果是否大于或等于模數(shù)(源于N),或者在GF(p)計(jì)算中。在基于多項(xiàng)式計(jì)算中溢出檢測(cè)結(jié)果的第一有效比特是否為1。
控制機(jī)制沒有顯示出,但最好把它理解為一套用于特殊功能的在有限狀態(tài)機(jī)上的級(jí)聯(lián)的計(jì)數(shù)設(shè)備,以及在GF(p)和GF(2q)上用于脈動(dòng)數(shù)據(jù)流的一系列開關(guān)。
對(duì)于在素?cái)?shù)和復(fù)合素?cái)?shù)域上的模數(shù)乘法,我們定義A和B為被乘數(shù)和乘數(shù),而N是模數(shù),它一般大于A或B。N同時(shí)表示存儲(chǔ)模數(shù)值的寄存器。N,可能在某些時(shí)候,小于A。我們定義A、B和N為m·k=n字符長(zhǎng)的操作數(shù)。每個(gè)k字符組被稱為一個(gè)段,組的大小由乘法設(shè)備的大小決定。因此,A、B和N每個(gè)都是m字符長(zhǎng)。為了簡(jiǎn)化,下面按步驟的過程解釋,假設(shè)A、B和N是512比特長(zhǎng),(n=512);根據(jù)當(dāng)前的成本有效的這種乘法器的長(zhǎng)度,假設(shè)k為64字符長(zhǎng),并且是簡(jiǎn)單CPU的數(shù)據(jù)操作速度;m=8是一個(gè)操作數(shù)的段的數(shù)量,也是512比特操作數(shù)的乘法和平方循環(huán)的迭代次數(shù)。所有的操作數(shù)是正整數(shù)。更一般地,A、B、N、n、k和m可以假設(shè)為任意合適的值。
在非模數(shù)的函數(shù)中,N和S寄存器可被用于臨時(shí)存儲(chǔ)其它算術(shù)操作數(shù)。
我們用符號(hào),≡,表示模數(shù)的同余,例如16≡2模7,并且我們說16同余為2 mod 7,因?yàn)楫?dāng)16除以7時(shí)余數(shù)為2。當(dāng)我們寫Y mod N≡X mod N時(shí),Y和X都可以大于N;然而對(duì)于正數(shù)X和Y,余數(shù)是一樣的。還要注意負(fù)整數(shù)Y的同余,是Y+u·N,其中N是模數(shù),而且如果Y的同余小于N,u將是給出正結(jié)果的最小的整數(shù)。
我們用符號(hào),,表示更狹義的同余。在這里描述的過程中,一個(gè)值要么是所需要的值,要么等于所需要的值加上模。例如X2 mod 7,X可以等于2或9。我們說X是狹義同余為2 mod 7。在基于多項(xiàng)式域中,類似的是一個(gè)首一的值,我們說它大于N,并且通過和模數(shù)異或進(jìn)行約簡(jiǎn)。因?yàn)樵贕F(2q)中沒有溢出,這個(gè)值一般被忽略。
當(dāng)我們寫X=A mod N,我們定義X是A除以N的余數(shù);例如,3=45 mod 7。
在數(shù)論中,模數(shù)的乘性逆是一個(gè)基本概念。例如,X的模數(shù)乘性逆寫作X-1,其定義為X X-1mod N=1。如果X=3及N=13,那么X-1=9,即3·9除以13的余數(shù)為1。
縮寫MS和LS用于表示最高位和和最低位,它可以指比特、字符、段以及整個(gè)操作數(shù)值,就像常規(guī)的數(shù)字術(shù)語(yǔ)一樣。
在本說明書中N既表示N的值,又表示包含N的移位寄存器的名稱。一個(gè)值上的星號(hào)上標(biāo)表示這個(gè)值作為中間值可能不完整或?qū)?huì)改變。A是將需要求冪的數(shù)字的值,而n是操作數(shù)N的字符長(zhǎng)度。初始化后當(dāng)A被“蒙哥馬利歸一化”為A*(A*=2n·A-以后說明)A*和N在冪運(yùn)算的整個(gè)中間步驟中一般是常數(shù)。在第一次迭代,在求冪的初始化之后,B等于A*。B也是寄存器的名稱,其中累加值最后會(huì)等于所需要的求冪的結(jié)果,它駐留在這個(gè)寄存器中。S*表示一個(gè)臨時(shí)的值,并且S、SA和SB還表示存儲(chǔ)除了單MS比特外的S的所有比特的一個(gè)或若干寄存器。(S*連接上這個(gè)MS比特就等于S。)S(i-1)表示在第i次迭代輸出端的S的值。S0表示第S(i)的值的LS段。
我們稱在GF(p)域(以后定義)中的P(A·B)N過程為在P域中的乘法,或者有時(shí),簡(jiǎn)單地是一個(gè)乘法操作。
因?yàn)槲覀兪褂昧舜?并行乘法器的標(biāo)準(zhǔn)結(jié)構(gòu)作為構(gòu)造一個(gè)兩用的串行并行乘法器的基礎(chǔ),我們區(qū)分乘法器的求和部分,它是基于保留進(jìn)位累加器的,(不同于超前進(jìn)位加法器、或進(jìn)位傳送加法器,前者非常地復(fù)雜,后者非常地慢),并稱之為保留進(jìn)位加法器或累加器,分別處理預(yù)裝載機(jī)制以及復(fù)接和鎖存,這允許我們同時(shí)進(jìn)行A乘以B和C乘以D的乘法,而連續(xù)地把這兩個(gè)結(jié)果和前一次的結(jié)果S相加,例如A·B+C·D+S,把這個(gè)累加器轉(zhuǎn)換為一個(gè)更加多用途的引擎。附加的邏輯被添加到這個(gè)乘法器上以便為模數(shù)約簡(jiǎn)和串行求和提供一個(gè)預(yù)測(cè)的檢測(cè)操作,這是在非常大的數(shù)上進(jìn)行模運(yùn)算和普通整型運(yùn)算所必需的。
在GF(p)上的蒙哥馬利模數(shù)乘法下面的描述是指在GF(p)上的數(shù)的蒙哥馬利算法。本設(shè)備可用于在GF(2q)上的基于多項(xiàng)式數(shù)蒙哥馬利運(yùn)算,但性能會(huì)下降,因?yàn)橛?jì)算將在P域執(zhí)行,而所有可執(zhí)行的操作數(shù)都要乘以一個(gè)因子2n。
在一個(gè)計(jì)算模數(shù)乘法A·B mod N的傳統(tǒng)的方法中,積A·B的余數(shù)是依靠除法過程計(jì)算的,在大操作數(shù)上實(shí)現(xiàn)一個(gè)傳統(tǒng)的除法比執(zhí)行串行/并行乘法更難。
用蒙哥馬利的模數(shù)約簡(jiǎn)方法,除法基本上被采用兩個(gè)預(yù)先計(jì)算的常數(shù)的乘法代替。在這里所展示的過程中,僅有一個(gè)預(yù)先計(jì)算的常數(shù),它是模數(shù)的一個(gè)函數(shù)。這個(gè)常數(shù)是,或可以是,用本ALU設(shè)備計(jì)算的。
一個(gè)簡(jiǎn)化的蒙哥馬利過程的表達(dá),就像在本設(shè)備中所采用的,現(xiàn)在將被提供,同時(shí)后面還有一個(gè)完整的優(yōu)選描述。
如果我們令一個(gè)奇數(shù)(LS比特為1),例如1010001(=8110)我們總可以把這個(gè)奇數(shù)轉(zhuǎn)換為一個(gè)偶數(shù)(單LS比特為0),方法是把它加上一個(gè)修正的、補(bǔ)償性的奇數(shù),例如,1111(=1510);因?yàn)?111+1010001=1100000(9610)。在這種情況下,我們發(fā)現(xiàn)一個(gè)數(shù)能產(chǎn)生5個(gè)低位的零,因?yàn)槲覀兪孪戎勒麄€(gè)字符串,81,并可以容易地確定能讓我們加到81上的二進(jìn)制數(shù),將產(chǎn)生一個(gè)新的二進(jìn)制數(shù),它有我們所需的一些低位零的數(shù)量。這個(gè)修正數(shù)必須有一個(gè)右邊的1,否則它對(duì)一個(gè)結(jié)果的順序的LS字符串不起作用。
如果我們的進(jìn)程是由時(shí)鐘控制的串行/并行保留進(jìn)位進(jìn)程,我們希望有一個(gè)連續(xù)數(shù)量的LS零,這里面,在每一個(gè)時(shí)鐘周期我們只要修正下一個(gè)比特,在每個(gè)時(shí)鐘里,如果下一個(gè)比特是1就加上修正值,如果預(yù)期的比特是0就不加修正值,這就足夠了。然而,為了不導(dǎo)致比特間的溢出(雙進(jìn)位),這個(gè)修正值最好事先和被乘數(shù)相加,當(dāng)相應(yīng)的乘數(shù)比特是1時(shí),它要被加入累加器,而Y檢測(cè)也預(yù)期為1。
現(xiàn)在,因?yàn)樵谀_\(yùn)算中,我們只關(guān)心一個(gè)值除以模的余數(shù),我們知道我們可以在一個(gè)值上加任意多次的模,仍然得到一個(gè)值,它有同樣的余數(shù)。這意味著我們可以加Y N=∑yiriN到任意整數(shù)而仍然具有同樣的余數(shù);Y是我們加入模N的次數(shù),它可以產(chǎn)生所需的kl個(gè)右邊零。如所描述的,我們加的模數(shù)只能是奇數(shù)。(存在這種方法,偶數(shù)模被定義為ri乘以所得的奇數(shù),其中i為偶數(shù)中LS的零的數(shù)量)蒙哥馬利交錯(cuò)的約簡(jiǎn)特別地減小了對(duì)存儲(chǔ)的需求,以及乘法設(shè)備的有效成本的尺寸。這在執(zhí)行公開密鑰加密函數(shù)時(shí)特別有用,在公開密鑰加密函數(shù)中,我們要把一個(gè)大整數(shù),例如,n等于1024比特,乘以一個(gè)同樣長(zhǎng)度的大整數(shù);這一過程一般會(huì)產(chǎn)生一個(gè)兩倍長(zhǎng)度的整數(shù)。
在乘法(或平方)的過程中我們可以在若干N(模數(shù))中加入足夠到A·B=X或A·B+S=X,使我們得到一個(gè)數(shù)Z,它有n個(gè)LS零位,同時(shí)最多有n+1個(gè)MS字符。
我們可以繼續(xù)使用這些數(shù),忽略LS的n個(gè)字符,只要我們記住通過忽略這些零,相當(dāng)于我們把所要的結(jié)果除以了rn。
當(dāng)LS的n個(gè)字符被忽略,而我們僅用到最高有效的n(或n+1)個(gè)字符時(shí),我們有效地把結(jié)果乘以了r-n,rn的模數(shù)倒數(shù)。如果我們接下來把這個(gè)結(jié)果再乘以rnmod N(或rn),我們將獲得一個(gè)值,它和所需的A·B+S mod N的值同余(有同樣的余數(shù))。如所看到的,采用MM,結(jié)果被恰當(dāng)?shù)爻松蟫2n來克服MM所引入的r-n寄生因子。
舉例A·B+S mod N=(12#11+10)mod 13=(1100·1011+1010)2mod10112l=1,r=2無(wú)論何時(shí),在n個(gè)LS比特上之一上的修正是必須的,我們將累加2iN。
B 1011X A1100add S 1010add A(0)·B 0000----- LS比特的和等于0不加Nadd 20(N·0)0000sum and shift 0101→為零的LS比特留在保留進(jìn)位加法器中adderadd A(1)·B 0000------ LS比特的和等于0-加Nadd 21(N·1)1101sum and shift 1001→0 LS比特留在CS加法器中add A(2)·B 1011------ LS比特的和等于0不加Nadd 22(N·0)0000sum and shift 1010→為零的LS比特留在CS加法器中add A(3)·B 1011------ LS比特的和等于1加Nadd 23(N·1)1101sum and shift 10001→為零的LS比特留在CS加法器中結(jié)果是1000100002mod 13=17·24mod 13。
因?yàn)?7大于13,我們約減13,結(jié)果是17·24≡4·24mod 13形式上2-n(A·B+S)mod N=9(12·11+10)mod 13≡4在蒙哥馬利算法中,我們僅使用了MS的非零結(jié)果4,并一定要記住實(shí)際的結(jié)果已經(jīng)被除以了2n;n個(gè)零已經(jīng)被強(qiáng)制到MM結(jié)果上。
我們已經(jīng)在有效地用24mod 13≡3乘以這個(gè)結(jié)果加到(8+2)·13=10·13。實(shí)際上,假如我們使用了多余的零,我們可以說我們已經(jīng)在一個(gè)過程中執(zhí)行了A·B+Y·N+S-(12·11+10·13+10),它在優(yōu)選的實(shí)施例中被描述是可能的。
檢查-(12·11+10)mod 13=12;4·3=12。
總的說來,蒙哥馬利乘法的結(jié)果是希望的結(jié)果乘以2-n。
為了使用同樣的乘法來將前面結(jié)果恢復(fù)到希望的結(jié)果,我們將前面的結(jié)果蒙哥馬利乘以22n,我們稱之為H,而每一個(gè)MM留給我們一個(gè)寄生因子2-n。
蒙哥馬利乘法函數(shù)P(A·B)N將A·B乘積的乘法模N轉(zhuǎn)換到P域。(在上面的示例中,我們推導(dǎo)出4)。從P域恢復(fù)到普通的模數(shù)域是通過使用預(yù)先計(jì)算的常數(shù)H在P(A·B)N的結(jié)果上執(zhí)行P來實(shí)現(xiàn)的?,F(xiàn)在假如P≡P(A·B)N,則P(P·H)N≡A·B mod N;因此兩個(gè)P域乘法執(zhí)行了一個(gè)普通的模數(shù)乘法。
蒙哥馬利模數(shù)約簡(jiǎn)避免了n個(gè)或2n個(gè)字符長(zhǎng)的操作數(shù)上一序列的乘法和除法操作,在n個(gè)或n+1個(gè)字符長(zhǎng)的操作數(shù)上執(zhí)行一序列的乘法、加法和加法。整個(gè)過程產(chǎn)生的結(jié)果小于或等于N。對(duì)于給定的A,B和奇數(shù)N,總是有一個(gè)Q,使得A·B+Q·N的結(jié)果為n個(gè)LS字符是零的數(shù)字,或者
P·2n=A·B+Q·N這意味著我們有一個(gè)2n字符長(zhǎng)的表達(dá)式(可能帶一比特的溢出),它的n個(gè)LS字符是零。
現(xiàn)在,對(duì)于基數(shù)r=2l;讓I·rn≡1 mod N(對(duì)于所有的奇數(shù)N,I都存在)。前面等式的兩邊都乘以I將產(chǎn)生下面的同余從等式的左邊P·I·rn≡P mod N(記住I·rn≡1 mod N)從右邊A·B·I+Q·N·I≡A·B·I mod N;(記住Q·N·I≡0 mod N)因此P≡A·B·I mod N這也意味著寄生因子I=r-nmod N在每一次執(zhí)行P域乘法時(shí)若P被引入。
我們定義P操作數(shù)使得P≡A·B·I mod N≡P(A·B)N并且我們稱其為“在P域A乘以B的乘法”,或者蒙哥馬利乘法。
從P域的恢復(fù)可通過在P·H上執(zhí)行操作P來計(jì)算,使得P(P·H)N≡A·B mod N我們可通過在前一個(gè)同余中取代P來推導(dǎo)出H的值我們發(fā)現(xiàn)P(P·H)N≡(A·B·I)(H)(I)mod N(注意A·B·I←P;H←H;I←任意的乘法操作將引入寄生值I)假如H和I2的乘性倒數(shù)同余,那么同余是有效的,因此H=I-2mod N≡r2nmod N(H是N的一個(gè)函數(shù)并且我們稱它為H參數(shù))在通常的蒙哥馬利方法中,在A·B上執(zhí)行P操作,并使用了預(yù)先計(jì)算的常數(shù)J,下面的過程將被使用
1)X=A·B2)Y=(X·J)mod rn(只有n個(gè)LS字符是被需要的)3)Z=X+Y·N4)S=Z/rn(J上的要求是它強(qiáng)制Z可被rn除)5)PS mod N(N從S上約簡(jiǎn),假如S≥N)最后,在步驟5)PP(A·B)N,[假如需要,約減N后P=P(A·B)N]接著上面Y=A·B·J mod rn(僅使用n個(gè)LS字符)并且Z=A·B+(A·B·J mod rn)·N為了Z可被rn除(Z的n個(gè)LS字符最好是零),下面的同余將存在[A·B+(A·B·J mod rn)N]mod rn≡0為了使這個(gè)同余存在,N·Jmod rn與-1同余或者J≡-N-1mod rn并且我們已經(jīng)發(fā)現(xiàn)常數(shù)J。
因此J是一個(gè)預(yù)先計(jì)算的僅是一個(gè)N的函數(shù)的常數(shù)。然而在一個(gè)字符一個(gè)字符地輸出MM結(jié)果的機(jī)器中,當(dāng)使用硬件邏輯Y可以被一個(gè)字符一個(gè)字符地檢測(cè)到時(shí),在LS字符串的輸出字符中有零的每一個(gè)實(shí)例中應(yīng)制定在若干N中累加的規(guī)定,從而避免了預(yù)先計(jì)算J和后續(xù)計(jì)算Y=A·B·J mod rn的必要。我們也提到了這個(gè)方法僅能用于奇數(shù)N。
因此,顯然,被描述的過程使用了三次乘法,一次累加和最多一次減法,對(duì)于給定的A、B、N和預(yù)先計(jì)算的常數(shù)以獲得P(A·B)N。使用這個(gè)結(jié)果,同樣的過程和一個(gè)預(yù)先計(jì)算的常數(shù)H(模N的一個(gè)函數(shù)),我們能夠得到A·B mod N。當(dāng)A也等于B時(shí),這個(gè)基本的操作可被用做平方的裝置或在模算法中的乘法。
交錯(cuò)的蒙哥馬利模乘法前面的部分描述了一種方法,它涉及均是n個(gè)字符長(zhǎng)的操作數(shù)乘法的模乘法,它的結(jié)果要求有2n+1個(gè)字符的存儲(chǔ)空間。
正如P1中描述的使用蒙哥馬利的交錯(cuò)約簡(jiǎn),帶較短操作數(shù)、寄存器和硬件乘法器的乘法操作的執(zhí)行;使帶相對(duì)少的邏輯門的電子設(shè)備的執(zhí)行有效都是可能的。
首先我們將描述這個(gè)設(shè)備是如何工作的,假如在交錯(cuò)的任何一次迭代,我們使用J0常數(shù)計(jì)算N被累加的次數(shù)。然后我們使用Y0的硬件推導(dǎo)描述如何交錯(cuò),它將消除每一次乘法{(2)在下面的例子中}的J0+階段,并使我們將兩個(gè)單獨(dú)的串行/乘法器的功能集成到一個(gè)新的,使用較小的硅資源,并能夠以兩倍多的速度執(zhí)行A·B+C·N+S的單個(gè)普通的乘法器中。
使用一個(gè)k字符乘法器是為了方便定義k個(gè)字符長(zhǎng)的段;在n個(gè)字符中有m個(gè)段;也就是,m·k=n。
J0將是J的LS段。
因此J0≡-N0-1mod rk(當(dāng)N是奇數(shù)時(shí),J0存在)注意,當(dāng)在非約簡(jiǎn)輸出執(zhí)行時(shí)J和J0常數(shù)是修正數(shù),告訴我們?yōu)榱说臀坏牧阌蓄A(yù)定義的個(gè)數(shù)模數(shù)上累加了多少次。我們將在后面描述本串行設(shè)備的額外的優(yōu)點(diǎn);因?yàn)橄筝敵龅南乱粋€(gè)串行比特可以被容易的確定一樣,我們總是加上模數(shù)(總是奇數(shù))到下一個(gè)中間結(jié)果。假如沒有這個(gè)累加的情況,輸出字符,從CAS發(fā)出的LS串行比特將是1;因此在模數(shù)中加到前面的偶中間結(jié)果,將有希望在輸出字符串中有另外一個(gè)LS零。記住,一致性必須被保持,無(wú)論模數(shù)被累加到結(jié)果多少次,這個(gè)余數(shù)是一個(gè)常數(shù)。
在蒙哥馬利交錯(cuò)約簡(jiǎn)的傳統(tǒng)應(yīng)用中,P(A·B)N正如步驟(1)到(5)描述的在m迭代中執(zhí)行最初S(0)=0(在第一次迭代的起始S的值)對(duì)于i=1,2 m1)X=S(i-1)+Ai-1·B(Ai-1是A的第i-1個(gè)字符;S(i-1)是S在第i次迭代的值。)2)Y0=X0·J0mod rk(X0·J0的乘積的k個(gè)LS字符)(過程僅使用和計(jì)算了k個(gè)LS字符,舉例來說,64個(gè)低位字符)在優(yōu)選實(shí)施例中,這個(gè)步驟被避免,因?yàn)樵诖性O(shè)備中,Y0可被一個(gè)字符一個(gè)字符的預(yù)測(cè))3)Z=X+Y0N4)S(i)=Z/rk(Z的K個(gè)LS字符總是0,因此Z總是能被rk除)。
5)S(i)=S(i)modN(N將被從那些大于N的S(i)中約tuj)。最后,在最后一次迭代(必要時(shí),在約簡(jiǎn)N后)C=S(m)=P(A·B)N。
為了推導(dǎo)F=A·B mod N,P域計(jì)算,P(C·H)N被執(zhí)行。
在優(yōu)選實(shí)施例中,希望知道對(duì)于所有的S(i)的S(i)小于2N。這也意味著,最后結(jié)果(S(m))可總是被約簡(jiǎn)到一個(gè)小于N的量,最多約簡(jiǎn)一次N。
我們發(fā)現(xiàn)對(duì)于用在過程中的操作數(shù)S(i-1)<rn+1(暫存器可比B或N寄存器長(zhǎng)1比特),B<N<rn和Ai-1<rk。
定義S(i)=Z/rk(在一個(gè)可能約簡(jiǎn)前,在過程的最后S的值)對(duì)于所有的Z,Z(i)<rn+k+1
Xmax=Smax+AI·B<rn+1-1(rk-1)(rn-1)Qmaz=Y(jié)0N<(rk-1)(rn-1)因此Zmax<rk+n+1-rk+1+1<rk+n+1-1并且Zmax被rk除S(m)<rn+1-rl因?yàn)镹min>rn-r,S(m)maz總是小于2·Nmin,因此,在最后的結(jié)果上一次約簡(jiǎn)是全部所必須的。
S(m)maz-Nmin=(rn+1-rl-1)-(rn-1)=rn-4<Nmin交錯(cuò)的蒙哥馬利模乘法的例子在十六進(jìn)制格式中的下面的計(jì)算闡明了交錯(cuò)方法的意義N=a59,(模數(shù)),A=99b,(乘數(shù)),B=5c3(被乘數(shù)),n=12,r=2,(N的字符長(zhǎng)度),k=4,(乘數(shù)的字符大小,也是段的大小),及m=3,當(dāng)n=k·m。
J0=7,當(dāng)7·9≡-1mod16和H≡22·16mod a59≡44b。
期望的值是F≡A·Bmod N≡99b·5c3 mod a59≡375811 moda59=22016。
初始時(shí)S(0)=0步驟1 X=S(0)+A0·B=0+b·5c3=3f61Y0=X0·J0mod rk=7(Y0是在SuperMAP中的硬件預(yù)測(cè))Z=X+Y0·N=3f61+7·a59=87d0S(1)=Z/rk=87d步驟2 X=S(1)+A1·B=87d+9·5c3=3c58Y0=X0·J0mod rk=8·7 mod 24=8(硬件預(yù)測(cè))Z=X+Y0·N=3c58+52c8=8f20S(2)=Z/rk=8f2步驟3 X=S(2)+A2·B=8f2+9·5c3=3ccdY0=d·7 mod 24=b(硬件預(yù)測(cè))Z=X+Y0·N=3ccd+b·a59=aea0
S(3)=Z/rk=aea當(dāng)S(3)>N,S(m)=S(3)-N=aea-a59=91因此C=P(A·B)N=9116。
P域的檢索是通過計(jì)算P(C·H)N來執(zhí)行的再一次初始化S(0)=0步驟1 X=S(0)+C0·H=0+1·44b=44bY0=d(在SuperMAP中的硬件預(yù)測(cè))Z=X+Y0·N=44b+8685=8ad0S(1)=Z/rk=8ad步驟2 X=S(1)+C1·H=8ad+9·44b=2f50Y0=0(在SuperMAP中的硬件預(yù)測(cè))Z=X+Y0·N=2f50+0=2f50S(2)=Z/rk=2f5步驟3 X=S(2)+C2·H=2f5+0·44b=2f5Y0=3(在SuperMAP中的硬件預(yù)測(cè))Z=X+Y0·N=2f5+3·a59=2200S(3)=Z/rk=2201699b·5c3 mod a59的值是可以預(yù)測(cè)的。
假如在每一步我們丟棄k個(gè)LS零,我們本質(zhì)上將n個(gè)MS字符乘以了rk。同樣地,在每一步,乘數(shù)的第i段也是一個(gè)數(shù)乘以了rik,給它與S(i)同樣的等級(jí)。
在另外一個(gè)優(yōu)選實(shí)施例中也必須注意,在其中知道J0常數(shù)是有一些隱含的值的,假如AI·B+S=1;那么Y0=-N0-1=J0求冪一個(gè)序列[D.Knuth,The art of computer programming,vol.2Seminumerical algorithms,Addison-Wesley,Reading Mass.,1981]下述推導(dǎo)在下面稱為“Knuth”,解釋了使用了模求冪的平方和乘法序列。
預(yù)先計(jì)算蒙哥馬利常數(shù)后,H=22n,當(dāng)在P域這個(gè)設(shè)備平方和乘都可進(jìn)行,我們計(jì)算C=AEmodN。
E(j)代表指數(shù)E的二進(jìn)制表示的j比特,從序號(hào)是1的MS比特開始并包括序號(hào)是q的LS比特,我們能夠如下方法對(duì)奇數(shù)指數(shù)取冪A*P(A·H)N A*現(xiàn)在等于A·2n。
B=A*FOR j=2 TO q-1BP(B·B)NIF E(j)=1 THENBP(B·A*)N*ENDFORBP(B·A)N E(0)=1;B是最終希望的臨時(shí)結(jié)果乘以2nA是最初的AC=BC=C-N if C≥N。
最后迭代后,B值是為AEmod N,并且C是最后的值。
為了闡明,我們將使用下面的例子E=1011→E(1)=1;E(2)=0;E(3)=1;E(4)=1;尋找A1011mod N;q=4A*=P(A·H)N=A·I-2I=A·I-1mod NB=A*對(duì)于j=2到qB=P(B·B)N它的過程是A2(I-1)2·I=A2·I-1E(2)=0;B=A2·I-1j=3 B=P(B·B)N=A2(I-1)2·I=A4·I-1E(3)=1 B=P(B·A*)N=(A4·I-1)(A·I-1)·I=A5·I-1j=4 B=P(B·B)N=A10·I-2·I=A10·I-1當(dāng)E(4)是奇數(shù)時(shí),最后的乘法將是乘以A,不需要寄生函數(shù)I-1。
B=P(B·A)N=A10·I-1·A·I=A11C=B用倒數(shù)過程來計(jì)算H參數(shù)的方法在美國(guó)專利5,513,133中描述。
現(xiàn)在參考圖3,圖3是顯示本發(fā)明如何在智能卡和其他安全設(shè)備中執(zhí)行的簡(jiǎn)化方框圖。內(nèi)部總線500,連接包括CPU 502、RAM 504、非易失性存儲(chǔ)器506、被控制的可訪問EEPROM 508和模算法協(xié)處理器510在內(nèi)的部件。在這里所顯示的,協(xié)處理器510通過數(shù)據(jù)總線512和控制總線514,內(nèi)部總線的寄存器500連接。被控制的可訪問ROM508通過地址和數(shù)據(jù)鎖存裝置516和一個(gè)控制和測(cè)試寄存器518連接的。各種不同的設(shè)備可分別連接到總線上,例如物理序列隨機(jī)發(fā)生器520、安全邏輯522、智能卡和外部接口電路524和526。
當(dāng)一個(gè)加密程序,例如確認(rèn)一個(gè)RSA簽名被執(zhí)行,是要求模算法函數(shù)的,例如模求冪。調(diào)用加密函數(shù)的密碼程序優(yōu)先運(yùn)行在CPU 502上。
現(xiàn)在參考圖4,圖4是本發(fā)明用在智能卡上的一個(gè)實(shí)施例的另外一個(gè)簡(jiǎn)化的方框圖。與圖3所示相同的部分給出了相同的參考數(shù)字,除了哪些理解本實(shí)施例所必須的并且不再次描述。圖4中,所示的CPU502帶外部累加器7350。當(dāng)從算術(shù)協(xié)處理器上卸載數(shù)據(jù)來使能從SMAP到存儲(chǔ)器數(shù)據(jù)的直接傳輸,數(shù)據(jù)禁用開關(guān)7340從數(shù)據(jù)總線500上分離CPU累加器。
圖5是數(shù)據(jù)寄存器塊6250在協(xié)處理器6075中的優(yōu)選實(shí)施例的一個(gè)簡(jiǎn)化方框圖,如在圖2、6和7中的協(xié)處理器中所描述的,帶一個(gè)J0產(chǎn)生器,其中J0產(chǎn)生器特別匯編了一個(gè)l比特的首零強(qiáng)制函數(shù)。
如前圖所示,協(xié)處理器6075被連接到帶CPU的數(shù)據(jù)總線上。一個(gè)寄存器塊6205包括一個(gè)B寄存器6070,一個(gè)A寄存器6130,一個(gè)S寄存器6180和一個(gè)N寄存器6200。每一個(gè)寄存器的輸出被連接到一個(gè)串行數(shù)據(jù)開關(guān)和串行處理調(diào)節(jié)裝置6020,它依次被連接到一個(gè)執(zhí)行模算法操作的運(yùn)行部件6206。連接在N寄存器6200和運(yùn)行部件6206間的是一個(gè)J0產(chǎn)生器552。
在實(shí)施例中,J0產(chǎn)生器匯編了一個(gè)l比特的首零強(qiáng)制函數(shù),用于上面描述的模算法函數(shù)中。
圖6是圖5運(yùn)行部件的簡(jiǎn)化的內(nèi)部方框圖。因?yàn)樵诘谝浑A段額外的Y0B0串行緩存器接收Y0,在第二階段模約簡(jiǎn)B0用于后續(xù)的平方操作,其中將發(fā)現(xiàn)B大于N,部件更適合支持加速的平方操作。
現(xiàn)在參考圖7A,它是圖6的運(yùn)行部件的主要計(jì)算部分的方框圖。圓圈里的數(shù)字與圖7B和7D的時(shí)序圖有關(guān)。
現(xiàn)在參考圖7B,它是是一個(gè)事件的時(shí)序指針圖,顯示了過程的進(jìn)程并包括平方運(yùn)算的第一次迭代。
現(xiàn)在參考圖7C,被歸納的事件序列表示了用于在平方序列第一次迭代中消除下一次蒙哥馬利平方的延時(shí)的方法,畫圈的數(shù)字參考圖7A、圖7B和圖7D。
現(xiàn)在參考7D,被歸納的時(shí)間時(shí)序指針圖描述了平方運(yùn)算的第一次迭代計(jì)算輸出的時(shí)序。
現(xiàn)在參考圖8A,一套查詢表特別地表示了J0的選擇,它是N0的右邊字符的模2l的乘性逆的負(fù)值。當(dāng)N0或者對(duì)于GF(2q)首項(xiàng)系數(shù)為一或者對(duì)于GF(p)是奇數(shù),則J0總是存在的。
在圖8A和8B中,我們將模的右邊字符認(rèn)為是N0。我們將N0j認(rèn)為是本地定義的N0字符的第j比特。
圖8B是用于設(shè)計(jì)或者一個(gè)4比特或者一個(gè)2比特的Y0零強(qiáng)制函數(shù)字符的示意圖。輸入進(jìn)強(qiáng)制函數(shù)的變量是N0比特(整個(gè)乘法中是常數(shù)),l、S0比特,和l乘數(shù)Aj0和被乘數(shù)B0j比特的乘積的l右邊比特,進(jìn)位開關(guān)S,它確定函數(shù)是工作在GF(2q)還是GF(p)。A和B比特被輸入到乘法器并累加到S0上。當(dāng)S=0,所有的進(jìn)位被禁用。
可以理解發(fā)明的不同特性,為了闡明,被描述在分開的實(shí)施例的內(nèi)容中,也可以在一個(gè)單實(shí)施例中共同提供。相反地,本發(fā)明的不同特性,為了簡(jiǎn)潔,在一個(gè)單實(shí)施例中描述,也可以分別或在任何適宜的子組合中被提供。
本領(lǐng)域的專業(yè)人員可以理解本發(fā)明并不限制于在上文中所特別表示和描述。本發(fā)明的范圍包括上文所描述的不同特性及由此的變形和修正的組合或子組合,對(duì)于閱讀在現(xiàn)有技術(shù)中沒有的前面的描述的本領(lǐng)域的專業(yè)人員是可能發(fā)生的。
在權(quán)利要求書中,符號(hào)的含義在前面的描述中給出。
權(quán)利要求
1.一種預(yù)測(cè)Y0值的裝置,其利用被乘數(shù)的第一發(fā)出值,和乘數(shù)B的現(xiàn)有輸入、累加器設(shè)備的進(jìn)位值、來自累加器的求和值、來自前面計(jì)算的部分結(jié)果的現(xiàn)有值、以及來自加法器的進(jìn)位值來預(yù)測(cè)Y0值,所述加法器把來自累加器設(shè)備的結(jié)果和上一次的部分結(jié)果相加。
2.如權(quán)利要求1所述的裝置,其中k個(gè)第一次發(fā)出的零將從設(shè)備中輸出,該設(shè)備由依次預(yù)測(cè)下一個(gè)Y0字符的下面六個(gè)量來控制i.Ai寄存器的右邊字符乘以B流的Bd字符,A0·Bdmod 2l的l比特乘l比特模2l的乘法的結(jié)果中的l比特的Sout比特;ii.從累加設(shè)備中第一次發(fā)出的進(jìn)位字符,S(CO0);iii.來自累加設(shè)備,SO1,的發(fā)出單元的右邊第二個(gè)字符中l(wèi)比特的Sout字符;iv.來自S流的按順序的下一個(gè)字符值,Sd;v.來自Z輸出全加器的l比特的進(jìn)位字符,S(COz);vi.l比特的J0值,它是N0模數(shù)被乘數(shù)寄存器中的右邊字符的負(fù)乘法的逆,其中,值A(chǔ)0·Bdmod 2l,s(CO0),SO1,Sd按字符相加到一起,并且“快速的”乘以J0字符,輸出一個(gè)有效的Y0零強(qiáng)制預(yù)測(cè)字符,以強(qiáng)制一個(gè)l比特零字符串的輸出。
3.一種僅有一個(gè)累加器和具有零強(qiáng)值預(yù)測(cè)機(jī)制的裝置,用于執(zhí)行一系列交錯(cuò)的并行執(zhí)行的模數(shù)乘法和平方,等效于三個(gè)自然整數(shù)的乘法操作,使得結(jié)果是一個(gè)冪。
全文摘要
一種對(duì)能同時(shí)約簡(jiǎn)的串行/并行蒙哥馬利模乘法的擴(kuò)展,這種方法與本申請(qǐng)人以前所采用的方法一樣,其創(chuàng)新性的改造是它既可以在素?cái)?shù)上執(zhí)行又可以在基于GF(文檔編號(hào)G06F7/60GK1758212SQ200510079518
公開日2006年4月12日 申請(qǐng)日期2001年5月14日 優(yōu)先權(quán)日2000年5月15日
發(fā)明者伊泰·德羅爾, 卡爾米·戴維·格雷賽爾, 邁克爾·莫斯托瓦, 亞歷克賽·莫爾恰諾夫 申請(qǐng)人:艾蒙系統(tǒng)股份有限公司