專利名稱:數據處理系統(tǒng)以及數據處理方法
技術領域:
本發(fā)明涉及用于素數判定的數據處理系統(tǒng)以及數據處理方法,例如涉及應用于在公有密鑰加密方式的系統(tǒng)結構等中使用的加密密鑰的高效生成有效的技術。
背景技術:
公有密鑰加密方式被廣泛公知,且當前被用于很多的應用、例如銀行業(yè)務或電子商務。在此,經由不安全的網絡,在用戶之間使用數字簽名文件、加密數據、變換密鑰鍵等。 RSA是用于公有密鑰加密法的事實上的標準,并且在需要數字簽名或公有密鑰加密的應用中被一般化。例如,由用于信用卡的EMV(Europay-Mastercard-Visa)財團推薦有效利用 RSA,更準確而言,直到2010年為止,由EMV推薦具有IOM位的鍵長度的RSA,在此以后推薦 2048位的鍵。在RSA中,消息被編碼成η位整數。RSA公有密鑰由冪指數E (其一般較小)、η位的模數N構成。RSA私有密鑰是η位整數D,具有E * D = Imod(P-I) * (Q-I)的關系。記號*意味著乘法。此處,P和Q是私有的素數,其滿足P * Q = N的關系。關于任意的消息 0 < = M < N、(Me)d mod N = M進行說明。假設成例如艾麗斯是作為RSA密鑰的(E、N)、D 的保有者,而且假設成鮑勃希望向艾麗斯發(fā)送加密后的消息M。鮑勃計算C = Me mod N,向艾麗斯發(fā)送密文。接下來,艾麗斯計算Cd= (Me) d = M mod N而恢復原來的文章。由此,可知RSA的中心動作是乘方的余數乘法Xy mod N.。在N大時,例如在2048位時,其乘方計算花費時間。為了提高RSA的運算速度,可以利用中國的余數定理。其提及了乘方的余數乘法Cd mod N可以交換成二個乘方的模P和Q。N = P * Q且P以及Q是模N的大約一半的數據尺寸,所以根據利用該中國的余數定理的途徑(RSA-CRT),可以實際上加快進行運算。 在RSA-CRT中,該加密的步驟與標準的RSA同樣地,是C = Me mod N。相異點是從加密的解碼手法。例如,設為被定義成 Dp = D mod P-I = E"1 mod P_l、Dq = D mod Q-I = E"1 mod Q-UQinv = GT1 mod P。其中,在 Z = X-1 modY 滿足 Z * X = 1 mod Y 的整數是 1 <= Z < Y 時,利用計算機的RSA-CRT的解碼處理成為Mp = CDp mod P,Mq = C"DQ mod Q、M = Mq+Q * [Qinv ^ (Mp-Mq)mod P]。因此,此時的RSA的密鑰對是作為公有密鑰的E、N、作為用于標準 RSA的私有密鑰的D以及用于RSA-CRT的P、Q、DQ、DP、&nv。RSA密鑰的長度例如與公有密鑰N的位數的尺寸相關。例如在2048位RSA中,公有密鑰N具有2048位,素數P、Q—般分別具有10M位。其結果,成為N = P* Q。為了發(fā)行RSA密鑰,選擇二個隨機的素數P以及Q,其他密鑰元素來自于二個素數。為了生成隨機的素數,一方面,如下所述進行處理。第一,選擇隨機的整數,然后對該任意的數進行素數判定、例如費馬(Fermat)判定。在該數無法通過素數判定的情況下,被更新成新的素數候補而進行處理。更新的處理根據方法而不同,例如設為新的任意的整數,或者增加最初的隨機的整數。在生成RSA密鑰的計算機處理中,生成任意的素數的步驟花費的計算機資源最多。過去,對于進行這樣的成本較大的處理,計算機處理能力過低,對于在IC卡中生成RSA密鑰的情況,無疑也是如此。其結果,只能使用功能強大的工作站來生成RSA密鑰, 并拷貝到IC卡。但是,最近的IC卡開始享受針對公有密鑰加密處理特化的硬件加速器 (accelerator)帶來的利益。上述硬件加速器是加密處理用的輔助處理器(coprocessor), 從而使IC卡生成加密密鑰變成現實。其具有二個效果。第一效果為,防止單一障礙點,即防止如在工作站生成密鑰的情況那樣,如果工作站發(fā)生障礙則由此生成的全部密鑰變得危險的現象。第二效果為,卡發(fā)行者可以不知道私有密鑰這一點。即,對于卡發(fā)行者來說,不會被視為負有泄漏私有密鑰或將這些誤用的責任。專利文獻1 美國專利第7113595號說明書非專禾丨J文獻 1 :Alfred Menezes, Paul van Oorschot, ScottVanstone ,Handbook of Applied Cryptography", Chapter 4, Public-Key Parameters. CRC Press, ISBN 0-8493-8523-7非專利文獻 2 :Katsuyuki Okeya, Katja Schmidt-Samoa, Christian Spahn and Tsuyoshi Takagi "Signed BinaryRepresentations Revisited,,, Proceedings of Advances in Cryptology, CRYPTO 2004, LNCS 3152, Springer-Verlag, 2004即使利用加密處理用的輔助處理器來促進了其計算處理,但IC卡那樣的便攜設備在多數情況下處于其計算能力低且存儲資源也不充分的非常有限的環(huán)境中。但是,其終端用戶通常不希望在發(fā)生加密密鑰時等待較長的時間。因此,期望開發(fā)無需大量的計算機資源而可以高效地生成該種加密密鑰的技術。另外,在非專利文獻1中,記載有生成隨機的素數的幾種方法。但是,其中記載的技術幾乎無法通過僅具備不充分的存儲器資源的IC卡來實現。在非專利文獻2中,雖然詳述了生成隨機的素數的簡單的技術但未能提供有效的方法。
發(fā)明內容
本發(fā)明是鑒于上述情況而完成的,其目的在于提供一種素數判定技術,即使例如如IC卡那樣僅具有有限的存儲資源也可以實現高效的加密處理。換言之,本發(fā)明的目的在于提供一種技術,即使如便攜機器那樣具有不充分的存儲資源也可以高速地生成隨機的素數。本發(fā)明的上述以及其他目的和新的特征通過本說明書的記述以及附圖將更加明確。如果簡單說明本申請中公開的發(fā)明中的代表性的發(fā)明的概要,則如下所述。即,本發(fā)明為了能夠用較少的計算機資源高效地進行處理,而被應用于數據的編碼和重編碼。特別,在素數生成步驟的期間,為了再次生成多個小的素數,而使用預定的緊湊的表。另外,對素數判定中處理的素數候補進行重編碼,將它們的表現形式從二進制碼變換成恰當的碼。例如,生成加密密鑰的數據處理系統(tǒng)具備運算單元,用于重構多個小的素數;篩選單元,用于檢查整數是否被小的素數整除;重編碼單元,用于改變整數的表現;以及素數性判定測試單元。篩選單元檢查整數是否被最初由運算單元重構的小的素數整除,由此去除“不恰當的”素數候補。之后,使用素數性判定測試單元對剩余的素數候補進行測試。此時,使用重構單元,變換素數候補的表現,使用所變換的表現形式,素數性判定測試單元進行判定動作。由此,無需大的存儲器容量,而可以減少用于素數性判定的運算處理數。如果簡單說明通過本申請公開的發(fā)明中的代表性的發(fā)明而得到的效果,則如下所述。S卩,即使如IC卡等那樣僅具有有限的存儲資源也可以在素數判定或素數生成中實現高效的加密處理。另外,即使如便攜機器那樣具備不充分的存儲資源也可以高速地生成隨機的素數。
圖1是IC卡的框圖。圖2是例示出RSA對應的IC卡的典型的動作工序的時序圖。圖3是示出素數生成單元的具體例子的框圖。圖4是詳細例示出素數生成控制單元的說明圖。圖5是示出費馬測試控制單元的功能的說明圖。圖6是示出米勒羅賓(Miller Rabin)單元的功能的說明圖。圖7是示出位陣列的更新功能的說明圖。圖8是便攜式電子裝置(便攜機器)的框圖。圖9是示出RSA密鑰對(keypair)的生成功能的說明圖。圖10是關于素數生成功能的說明圖。圖11是詳細例示出位陣列填充的操作步驟的說明圖。圖12是示出蒙哥馬利(Montgomery)常數的運算功能的說明圖。圖13是示出費馬測試的功能的說明圖。圖14是示出米勒羅賓測試的功能的說明圖。(附圖標記說明)
901IC卡
931輸入輸出接口
912密鑰生成單元
911加密單元
922私有密鑰
924數字證書
921存儲器
941網絡
904ATM
905卡讀出器
902主機系統(tǒng)(銀行主機)
903主機系統(tǒng)(卡發(fā)行源主機)
923公有密鑰
1111費馬測試單元1131位排列單元1161小的素數生成單元1102素數生成控制單元1123素數候補P1121 寄存器 A1122 寄存器 B1113余數乘法單元1102費馬測試控制單元1141 位陣列1132位陣列填充單元1163小的素數表1162米勒羅賓單元1171存儲器寄存器101便攜式電子裝置(便攜機器)131輸入輸出接口141 網絡151 ATM153計算機154便攜機器111存儲器132、133輸入輸出接口121數據處理部122 CPU123蒙哥馬利乘法輔助處理器124 RNG
具體實施例方式1.定義首先,對以下說明中使用的詞匯的定義和標記法進行敘述。A或B那樣的大寫文字的變量意味著例如如IOM位的整數那樣的大的整數。用X或y那樣的小寫文字表示的變量一般意味著比32位小的位長度的小的整數。R = A * B mod N表示古典的余數乘法式。此處,P = A * B是通常的乘法,而且, R是除法P/N的余數。換言之,R是整數0 < = R < N,成為R+Q * N = A * B,Q是某整數。 Ad mod N是冪乘的余數乘法,對應于伴隨D-I的A * A * . . . * A mod N的余數乘法。其同樣地也還被記述成A~D mod N。記號~意味著冪乘或乘方。gcd(A、B)是A與B的最大公約數。例如3是6以及15的最大公約數。其原因為 6 = 3 女 2U5 = 3 女 5。
A—1 mod N 參照 A * B = 1 mod N 那樣的整數 B。如果 gcd(A、N) = 1,則存在 B。素數是具有其自身和1這二個除數的整數。例如整數2、3、5、7、11是素數。合成整數(合數)是可以因數分解成至少二個素數的整數。21 = 3 * 7,所以21 是合成整數,4 = 2女2,所以4是合數。MontMult (A、B、N)是蒙哥馬利乘法,等于將N設為η位的模數的余數乘法A * B 女 2_n mod N。2.實施方式1首先以素數生成電路為主進行說明,“ IC 卡,,圖1示出IC卡的框圖。IC卡901至少具備以下部件。即,具備輸入輸出接口 931、 包括密鑰生成單元912以及簽名生成單元913的加密單元911、以及至少存儲有私有密鑰 922、公有密鑰923及數字證書擬4的存儲器921。雖然沒有特別限制,但在實施方式1中假設由硬件邏輯構成加密單元911。上述IC卡可以經由網絡941例如與ATM 904以及卡讀出器905連接。ATM 904與銀行的主機系統(tǒng)(銀行主機)902連接,卡讀出器905與卡發(fā)行源的主機系統(tǒng)(卡發(fā)行源主機)903連接。942是從IC卡901向網絡941發(fā)送的數據,943是IC卡從網絡941接收的數據。前面描述了在IC卡901中安裝有具有作為事實上的標準的RSA的數字簽名的情況下,由IC卡901直接生成加密密鑰是有利的。為了將其實現,密鑰生成單元912可以利用作為用于生成素數的專用電路的素數生成單元914。在RSA中的密鑰生成中,在素數生成中在數據處理上成本最高,所以通過利用素數生成單元914來降低該成本。“ IC卡的動作,,圖2示出RSA對應的IC卡902的典型的使用例子。最初,RSA的密鑰是在IC卡 901的步驟1011中發(fā)生的。RSA的密鑰由私有密鑰922以及公有密鑰923構成。然后,它們被保存在存儲器921中。之后,IC卡901在步驟1012中向卡發(fā)行源主機903發(fā)送公有密鑰923。之后,通過發(fā)行數字證書924,確認公有密鑰。數字證書擬4在步驟1013中回送到IC卡,并保存到存儲器921。至少在IC卡的認證動作的最初必需發(fā)生RSA的密鑰,而且,大概在數字證書的有效性日期以后,發(fā)給數字證書924。在數字證書擬4有效時,IC卡可以用作被認證的標記 (token)卡(認證標記)。IC卡在步驟1021中向銀行主機902發(fā)送處理請求。銀行主機發(fā)出步驟1022的認證請求而響應。在步驟1023中,IC卡901生成使用簽名生成單元913以及其私有密鑰922的數字簽名,發(fā)送所生成的數字簽名、其公有密鑰923以及從卡發(fā)行源主機903發(fā)行的數字證書924。在簽名以及數字證書有效的情況下,由銀行主機902賦予認證。在證書有效時,步驟1021至1023的處理根據需要可執(zhí)行多次。其幾乎允許無限制的數字處理次數?!八財瞪蓡卧眻D3示出素數生成單元914的具體例子。圖1的密鑰生成單元912為了生成素數 P、Q而具有素數生成單元914。關于P、Q,具有P * Q等于公有模數N這樣的關系。為了生成素數P或Q,素數生成單元914采用最初的隨機的候補Pinit,找到比候補Pinit大的第一素數P。素數生成單元914具有三個子單元、即費馬測試單元1111、位排列單元1131以及小的素數生成單元1161,它們是通過素數生成控制單元1102起動并控制的。在后面參照圖4 敘述素數生成控制單元1102的詳細功能。費馬測試單元1111檢查素數候補的素數性。費馬測試單元1111具有三個存儲器寄存器、即存儲素數候補P1123的一個寄存器、寄存器A1121以及寄存器B1122。三個寄存器與余數乘法單元1113連接,余數乘法單元1113計算出A * B mod P(或A * A mod P), 將其結果存儲到寄存器A 1121。在該例子中,寄存器A、B以及存儲P的寄存器的尺寸被限定成IOM位。其結果,所生成的素數最大具有IOM位。費馬測試控制單元1102起動余數乘法單元1113而控制向該單元1113的信號路徑,使該單元1113執(zhí)行費馬測試,判定素數候補P1123的素數性。在后面參照圖5對該功能進行詳細敘述。位排列單元1113具有位陣列1141,它們由B
.....B[b_l]這b位構成。在位
陣列1141中各個位B[i]表示素數候補Pinit+2i。在B[i] = 0的情況下,Pinit+2i是不恰當的候補而被拒絕。但是,在B[i] = 1的情況下,Pinit+2i是正確的候補,進而必需通過費馬測試單元1111進行測試。位排列是由位陣列填充單元1132填充(填滿)的。位陣列填充單元1132采用最初的素數候補Pinit以及小的素數作為輸入,在位排列的恰當的位置寫入零。在后面參照圖7對位陣列填充單元1132進行詳細敘述。小的素數生成單元1161生成比16位少的位數的小的素數(小素數),其被設成可用于識別上述不恰當的整數。小的素數生成單元1161具有存儲第一 t個小的素數的小的素數表1163,但可以生成比用于米勒羅賓單元1162的t個素數多的個數。在后面參照圖6 對該功能進行詳細敘述。所生成的小的素數被存儲到16位的存儲器寄存器1171?!八財瞪煽刂茊卧眻D4詳細例示出素數生成控制單元1102。初始候補Pinit被拷貝到寄存器P1123,
最初,位排列B
.....B[b-1]全部被設置成1。在步驟1202、1203以及1204中,位排列
是利用存儲在表T 1163中的第一 t個素數而初始化的。更準確而言,在步驟1204中,從表 T讀出一個小的素數z,并拷貝到小的素數寄存器1171。之后,通過由位陣列填充單元1132 使用小的素數z,從而位排列1141被更新,向恰當的位置寫入0,去除不恰當的候補。圖7 詳細示出該位陣列填充單元。在從表T 1163使用小的素數對位排列進行了初始化之后,素數生成控制單元調查位陣列1141,搜索索引(index) i以在步驟1213中使所對應的條目(entry) B [i]包括1。 這樣的條目參照整數Pinit+2i,該整數是正確的候補,進而必需通過費馬測試單元1111被進一步測試。這樣,值?㈨斤?丨在步驟1221中被寫入到寄存器P1123,在步驟1222中成為費馬測試的對象。圖5中記載了費馬測試單元的功能。另外,由于硬件尺寸的限制,表T無法包含很多的小的素數,其結果,位陣列仍保有較多的B[i] = 1那樣的條目,于是,直到發(fā)現素數P為止必需多次調出費馬測試。為了減少費馬測試的調出次數并使素數生成加速,費馬測試單元在步驟1222中被激活時,與其同時生成新的小的素數z,位陣列被該新的小的素數更新。其結果,更多的條目在位排列中被清0,費馬測試的調出變得更少。步驟1223、1224以及1225生成這樣的新的小的素數,用ζ更新位排列。這些步驟由小的素數生成單元1161以及位排列單元1131執(zhí)行,并由小的素數生成單元1161以及位排列裝置1131進行處理,而與費馬測試并行執(zhí)行。在圖4中,用虛線箭頭表示這樣的并行計算機處理。在步驟1223中,小的素數ζ的16位的寄存器1171被z+2更新。實際上ζ是奇數, 其原因為偶數的整數被2整除,從而明確可知并非素數。接下來,ζ成為使用米勒羅賓單元 1162進行素數性的測試的對象。在圖6中詳細記載了米勒羅賓單元1162的功能。米勒羅賓單元是判定16位整數的素數性的電路,構成為與費馬測試單元相比速度非常高,且處理更大的整數。其結果,在執(zhí)行一個費馬測試的期間,可以進行多次米勒羅賓測試。在由米勒羅賓測試單元發(fā)現16位的小的素數時,利用位陣列填充單元1132更新位陣列1141 (步驟 1225)。在進行費馬測試的期間反復進行這些三個步驟1223、1224以及1225。在費馬測試結束且成功時,該概素數(probable prime)P通過素數生成單元返回到步驟1231,另一方面,素數生成單元使位排列1233的激活索引遞增,再次從步驟1212開始,從而搜索位排列的接下來的正確的候補。在對位排列的全部索引進行掃描而未發(fā)現素數時,素數生成單元在步驟1232中返回失敗。“費馬測試”對費馬測試進行說明。在費馬測試中,輸入底數B以及素數候補P,運算Bim mod P。如果運算結果不是1,則素數候補P是合成整數。如果運算結果是1,則P幾乎肯定是素數。Bim mod P是數據處理上成本高的處理,即使在位排列中較多的不恰當的候補被去除時,仍殘留應成為費馬測試的對象的較多的正確的候補。因此,費馬測試中的處理速度改善具有非常大的潛力。提高乘方運算的性能的公知方法是使用窗口(window)方法。在具有窗口尺寸w 的窗口方法中,從冪指數的w位被同時掃描。換言之,冪指數(其通常被保存成存儲器的相應的二進制的表現)以2W為基礎而被重編碼(recoded)。這些w位表示整數j (0 < = j <21,預先計算出數據妒mod P,并且在窗口乘方技術中運算出A2 mod P以及A* Bj mod P。如果代替而使用標準的二進制法,則雖然A2的運算相同,但新需要w/2的乘法。因此窗口方法可以減少乘法次數。但是,窗口方法所需的預先運算的值必需保存到RAM。在IC卡中,RAM的存儲容量被限制。于是,在10 位的乘方的情況下,上述預先運算出的一個值占有1 字節(jié)。于是, 被最佳化的窗口方法常常使用這種好幾個預先被計算機運算出的值。其對于IC卡并不現實。例如,在窗口尺寸W = 5的情況下,預先被計算機運算出的所需的值在RAM中大約占有 4k字節(jié)。本發(fā)明的費馬測試無需為了存儲計算機運算出的數據而要求存儲器,而可以利用大的窗口的窗口法。在費馬測試中,在Bim mod P的運算中一般在B中使用特別的底數、特別是B = 2。在該情況下,無論是否為大的w,都無需預先計算機運算或保持屮mod P.的值。例如,假設成w = 10、j < 210 = 1024、以及Bj = 2J < 21024。進而,Bj = 2J以二進制數表述作為(1000... 000) 2而被賦予,在該二進制數表述中在位的位置j成為“1”。其結果, 無需預先運算出的表。即,在位的位置j中建立“1”,而用“0”填入剩余位的位置即可。圖5詳細例示出將窗口尺寸設為W= 10時的其考慮方法。據此繼續(xù)說明。在步驟1302中,冪指數P-I的最初的10個位被掃描,被寫入到緩沖器j。計數器i被初始化成P-11。該計數器的值與接下來應讀入的位、即Pp-n—致。在步驟1303中,累加器(aCCUmUlator)A(寄存器A)1121被設置成即,向A最初寫入0,第j位被設置成 1。之后,開始冪乘運算。在步驟1312中,由余數乘法單元1113連續(xù)10次運算A2 mod
P。其原因為窗口尺寸為W= 10。在步驟1313中從冪指數P-I讀入連續(xù)的10個位Pi.....
Pm。此處,P被存儲到寄存器1123,整數值(Pi. . . PiJ2被寫入到緩沖器j。在j是零的情況下,無需進行乘法,在費馬測試中可以繼續(xù)接下來的處理。在j > 0的情況下,寄存器B 1122在步驟1322中被設置成2j。S卩,寄存器Bl 122被清零,并在其第j位的位置設置成1。 一旦寄存器B 1122被設置,則在步驟1323中使用帶余數的運算操作單元1113執(zhí)行A女 Bmod P的余數乘法。最后,在步驟1331中,從表示冪指數的被掃描的位Pi的位置的索引i 減去10。只要i大于9 (保證最右邊的被掃描的位Pi_9是P1以上),則反復上述步驟。當i小于9時,費馬試驗另外處理最后的剩余的位。在步驟1341中剩余的位的值(Pi. . . P1Oh被寫入到緩沖器j。著重考慮P是奇數,所以P-I是偶數且其最下位的位是 0。接下來,由余數乘法單元1113運算i+Ι次A2 mod P (步驟1342、1 。之后,寄存器B 1122進行最后的乘法的準備。即,其被清0,然后,其第j位在步驟1351中被設置成1。其結果,在寄存器B 1122中在該步驟之后存儲值在步驟1352中計算最終的余數乘法A ★ B mod P。在步驟1361中累加器寄存器A 1221包含值1的情況下,P是概素數(probable prime),所以費馬試驗輸出“成功”并結束處理。如果寄存器A還包括其他值的情況下,P是合數,所以輸出“失敗”并結束處理。“費馬測試的具體例子”在該例子中設為向素數判定測試提供整數P = 1971577。此處,P的值用16進制來表示。在二進制數中,P是21位,設為P = (111100001010101111001)2。j的第一值成為 P的最上位側的10位、即j= (IIIIOOOOIO)2 = 962。A被初始化成2962、即以二進制表示時在末尾具有962個零的(1000. . . 000) 2。計數器i被設成10。之后,連續(xù)10次進行A2 mod P的運算,由此A包括值824444。接下來的10位是j = (1010111100)2 = 700。因此,27°°被寫入到寄存器B,然后, 計算出A * B mod P。此處A = 824444、B = 27°°以及P = 1971577。其運算結果是1,而且,之后還進行一次平方運算。因此,乘方的最終結果是1,其實際上意味著1971577是素數。由此可知在上述費馬測試中關于乘法僅要求11次的平方運算(squares)和一次的乘法(multiplication),與其相比在二進制法中要求20次的平方運算和11次的乘法。這次考慮整數P = 1686499 = (110011011101111100011)2。由于是 j = (1100110111) = 823,所以A被初始化成2823。如果連續(xù)10次進行了 A2 mod P的運算,則 A包括值129007,接下來的10位是j = (0111110001)2 = 497。值2497被寫入到B,然后, 計算余數乘法A女B mod P。其運算結果是A = 217983。然后,最后還進行一次平方運算。 最終結果是1165463,與1不同,P并非素數。實際上,P = 1686499 = 1093 * 1543,P是合數。“米勒羅賓測試”米勒羅賓測試和費馬測試這兩者是素數性的概率性的判定測試。如果它們的測試結果失敗,則被測試的整數絕對是合數。但是,在測試結果成功的情況下,僅被推測成被測試的整數大概為素數,而無法說絕對是素數。通過這兩者的測試,存在其結果失敗的較多的整數、即合數,但其中有時包括在其測試中輸出成功的結果的合數。幸運的是,這樣的合數不多。特別在米勒-羅賓測試的情況下非常少。特別,在使用底數2的米勒羅賓測試中產生這樣的錯誤的 16 位整數 ζ 是 2047、3277、4033、4681、8321、15841、29341、42799、49141、 52633。其結果,如果米勒羅賓測試針對并非上述整數的任意一個的16位整數ζ返回“成功”的測試結果,則該ζ絕對是可靠的素數。本質上,米勒羅賓測試與費馬測試類似。但是,具有重要的差異。要進行測試的整數是z,z-l記述成2”1女d。此處,j+1是z-1的二進制標記中的下位側的位零的個數。為了使用底數2的米勒羅賓測試,計算出余數乘方乘法χ = 2d mod Z0如果其運算結果是1 或z-1,則測試結果是“成功”,可以說ζ大概是素數。否則對χ進行j次乘法,在各自的乘法之后χ再次與z-1進行比較。在它們一致的情況下,測試返回“成功”。如果在j次乘法之后,χ絕對不等于z-1的情況下,測試返回“失敗”,ζ為合數。圖6示出在保存于寄存器1171中的16位的整數ζ = (ζ15. ..ζ0)2的素數判定中應用了米勒羅賓測試的情況。在 ζ 是 2047、3277、4033、4681、8321、15841、29341、42799、 49141、52633的任意一個的情況下,ζ是合數,在步驟1403中返回“失敗”。否則,在步驟 1404至1406中計算出z-1的二進制表現中的末尾的零的個數即j。在步驟1411至1416 中執(zhí)行乘方的余數乘法21勺mod ζ (此處z-1 = 2^女d)。累加器χ被初始化成1,在步驟 1411中循環(huán)計數器i被初始化成15。接下來,在循環(huán)計數器i大于j的期間,執(zhí)行接下來的步驟。首先,在步驟1413中執(zhí)行余數乘法χ2 mod ζ.此處,χ以及ζ是16位整數。之后, 在ζ的位Zi是1的情況下,使用左移χ << 1以及模數ζ的減法,在步驟1415中計算出2 女χ mod ζ的運算。在乘方計算之后,累加器χ包括值1的情況下,算法停止動作而在步驟1441中返回測試結果“成功”。否則,χ在步驟1431中與z-1進行比較。在它們相等的情況下,算法停止動作而在步驟1443中返回測試結果“成功”。在不相等的情況下,在步驟1432中運算出余數乘法χ2 mod ζ,循環(huán)計數器被進行減法運算。直到計數器i成為1為止反復上述操作。當累加器絕對不等于z-1時,算法在步驟1442中返回測試結果“失敗”?!懊桌樟_賓測試的具體例子”在小的素數表T 1163中,假設存儲有17個第一小的素數T
= 3、T[l] =5、 T [2] = 7、T[3] = 1UT[4] = 13、T[5] = 17,T[6] = 23、Τ[7] = 29、Τ[8] = 31、Τ[9]= 37、Τ[10] =41、Τ[11] =43、Τ[12] = 47、Τ[13] =53、Τ[14] = 59、Τ[15] =61、Τ[16]= 67。也許是小的素數的整數是ζ = 69 = (0000000001000101)2Ο ζ并非可以逃過使用底數 2的米勒羅賓測試的16位整數之一,所以測試可以從伴隨自z-1 = (0000000001000100)2 中的末尾的0的數減去1而得到的數j、即j = 1的計算開始。接下來,累加器χ被初始化成1,計數器i被初始化成15。直到i = 6為止,z-1的被掃描的位全部是零,累加器的值未被修正。在反復i = 6中,χ在步驟1415的左移之后成為2,之后,進行四次平方運算和一次左移。其結果,在步驟1422中,χ取得值41。由于χ與1或68不同,所以還進行一次平方運算,χ成為25,仍與68不同。在該時刻,測試返回“失敗”。其原因預料為,z = 69 = 3 * 23是合數。
接下來的奇數是ζ = 71 = (0000000001000111),在該情況下,j = 0。直到i = 6 為止,X仍相同、即仍為X= 1,但i =6的一位左移之后,X成為2。之后,進行四次平方運算,χ = 3,進行一位移位,χ = 6,進行一次平方運算,χ = 36,然后,進行一位移位,最后,χ 成為1。其結果,試驗在步驟1422中停止,χ = Uz = 71,為素數?!拔慌帕械母隆蔽慌帕惺怯捎糜谌コ鳛楸恍〉乃財嫡暮蜓aP = Pinit+2i的合數的埃拉托色尼(Eratosthenes)的篩選啟示的公知方法。位排列法的大概構思在于,為了小的素數ζ而計算Pinit mod ζ,在用于P = Pinit+2i mod ζ = 0 (P由ζ整除)那樣的全部位置i的位排列中向B[i]寫入0。在圖7中說明在位排列的恰當的位置處寫入零的方法。向位陣列填充單元1132的輸入由位排列1141、初始候補Pinit1103以及小的素數 ζ 1171構成。最初,緩沖器χ在步驟1513中通過值Pinit mod ζ被初始化。該運算的計算容易。其理由如下所述。其原因為,盡管Pinit是大的整數,但ζ僅為16位。接下來,位陣列填充單元計算P是奇數且P mod ζ = 0那樣的第一個整數P = Pinit+2i。在Pinit mod ζ = 0的情況下,Pinit滿足全部的狀態(tài)而索引i在步驟1515中被設置成0。另一方面,由于X并非零,且Pinit = χ mod ζ、Pinit+z-x = 0 mod z,所以將其得知是容易的。另一方面,如果χ 是奇數,則z-x是偶數,Pinit+z_x是奇數,滿足所要求的全部狀態(tài)。其結果,在步驟1522中, 值(z-x)/2通過減法和右移(z-x) >> 1,被寫入到緩沖器i。另一方面,在χ是偶數的情況下,Pinit+z-x同樣是偶數,但?㈨斤?^乂是奇數。因此,在步驟1523中,通過減法和右移 z-x >> 1,值Oz-x)/2 = z-x/2被寫入到緩沖器。接下來,不僅是奇數的Pinit+2i 滿足 Pinit+2i = 0 mod z,而且 Pinit+2 (i+z)、 Pinit+2(i+2z)、Pinit+2(i+3z)也如此。因此,在步驟1532中,為了與具有在排列中最大的可能性的索引b相比,i+k女ζ更小的全部索引i+k女z,位B[i]被清零。最后,位陣列填充單元在步驟1551中返回位排列?!拔慌帕懈碌木唧w例子”在該例子中,位排列1141具有尺寸b = 64,而且,小的素數表1163存儲16個小的素數、即 0] = 3、T[1] = 5、T[2] = 7、T[3] = 1UT[4] = 13、T[5] = 17,T[6] = 23、 T[7] = 29、T[8] = 31、T[9] = 37、Τ[10] = 41、Τ[11] = 43、Τ[12] = 47、Τ[13] = 53、 Τ[14] = 59、Τ[15] = 61。最初的候補1103的輸入假設成512位的奇數。例如是Pinit = 7 25677969310650765549069385917107626700373958842507405025602140952672592627402 9082141310206427691245639055995711774350480838509929519895128627108485116697。首先最初,位排列僅包括位1。換言之,在B被表現成整數的情況下,其二進制的表現成為B = (1111111111111111111111111111111111111111111111111111111111111111 )2。B由64位構成。最初,素數生成控制單元向使用小的素數表T
.....Τ[15]的
位排列的恰當的位置寫入零。例如,T
= 3以及Pinit mod 3 = 1。1是奇數,因此,在該位陣列中在(3-1)/2 = 1的位置處寫入0,然后,在位置1+3 = 4以及4+3 = 7的位置處也如此。在利用T
=3進行篩選之后,位排列成為B = (1011011011011011011011011011011011011011011011011011011011011011)2。為了表T的全部的小的素數,反復該步驟,位排列成為B = (1001011000000001010011000010000001010010000001011001000010000010)2。由此,可知存在與通過費馬測試確認了僅18位仍被設置成1的整數Pinit+2i對應的、更小的索引i的值。由于BW] = 1,所以必需通過費馬測試確認Pinit。同時小的素數生成單元1161搜索接下來的小的素數。16位寄存器ζ 1171在其表中存儲最后的小的素數(即61)。由米勒羅賓單元1162對照接下來的奇數的整數63。然后,得到63并非素數的結論。其原因為,63 = 3 * 21。同樣地,65并非素數。其原因為,65 =13 * 5。但是,米勒羅賓單元得到67是素數的結論。之后,位排列通過ζ = 67被更新。Pinit mod 67 = 24,在位陣列中在67-24/2 = 55 的位置處被寫入0。遺憾的是,B[55]已經是0。因此,利用67來篩選的作法在該例子中并未得到任何好轉。事實上,其與接下來的小的素數71、73、79、83、89、97以及101相同。但是,在由米勒羅賓單元1162生成了小的素數ζ = 103時,運算Pinit mod 103提供13,其對應于索引(103-13)/2 = 45。因此之前是1的虹45]被寫入0。位陣列成為B = (1001011000000001010011000010000001010010000000011001000010000010 )2。只要費馬測試1111在步驟1222中進行,則該步驟繼續(xù)。米勒羅賓測試用短的整數(16位)進行處理,相對于此費馬測試處理長的整數(在該例子中512位),所以在進行費馬測試的期間可以生成較多的小的素數,可以去除所追加的部分。例如,如果假設在費馬測試中為了 512位的各自的余數乘法可以生成一個小的素數,則在該費馬測試期間可以追加生成512個小的素數。在該情況下,位排列成為B = (00010110000000000000000000000 00001000010000000011000000010000000) 2。其結果,在最初的費馬測試之后,在位陣列中僅殘留八個。最初的費馬測試采用Pinit作為輸入。但是,乘方的運算2~ (Pinit-Dmod Pinit的結果并非1。因此,Pinit并非素數。接下來的位陣列的零以外的條目是B[3],接下來的素數候補是Pinit+6。即是P = 7256779693106507655490693859171076267003739588425074050256 02140952672592627402908214131020642769124563905599571177435048083850992951989 5128627108485116703。值Pinit+6存儲在寄存器P 1123中,然后,費馬測試開始2~ (Pinit+5) mod Pinit+6的計算。在乘方計算的期間,可以生成新的小的素數,以去除位排列中的較多的零以外的條目。但是,在該例子中,關于512個追加的小的素數,在排列中未寫入任何零。 幸運的是,第二費馬測試2~(Pinit+5)mod Pinit+6的結果是1,實際上,Pinit+6是素數。根據該點,素數生成單元914返回Pinit+6的值?!皵U展”本發(fā)明不限于上述實施方式1中說明的內容。例如,上述系統(tǒng)還可以用于便攜電話、PDA、利用公有密鑰加密方式且使用有限的計算機資源、存儲器資源的任意電子設備。乘方的類型可以不同。例如,代替乘方的余數乘法單元,而還可以利用蒙哥馬利乘法裝置。小的素數的重構方法不限于上述例子中說明的內容。例如,還可以利用具有與2不同的底數的米勒羅賓測試、或者利用費馬測試、其他組合測試那樣的不同的測試。同樣地,還可以采維-斯特拉森(Solovay-Strassen)測試那樣針對素數候補的不同的素數性判定測試。進而,重構的種類不限于窗口方法,還可以使用NAF (Non-Adjacement Form) 或FAN的重構法、或者其他恰當的重構法。3.實施方式2進行著眼于板載(on borad)的加密生成的說明。(便攜機器)圖8示出便攜式電子裝置(便攜機器)101,例如是IC卡、或強化了安全性功能的設備。便攜機器101經由其輸入輸出接口 131與網絡141連接,可以發(fā)送數據142并接收數據143。通過該網絡141,便攜機器10可以與ATM 151、計算機153或其他便攜機器154 進行通信。如果網絡141上的通信路徑中的安全性無法得到保障,則消息有可能被惡意的用戶竊取。因此,在便攜機器中需要搭載安全性機構。這些安全性機構包括消息加密以及數字簽名,而且,在實施方式2中,應用作為事實上的標準的被稱為RSA的公有密鑰加密法。便攜機器101包括輸入輸出接口 131、計算單元121以及存儲器111三種單元。便攜機器可以利用輸入輸出接口 131與一個或多個網絡連接。在實施方式2中, 便攜機器101包括二個輸入輸出接口 132以及133。其實現接觸接口和非接觸接口。數據處理部121包括CPU 122、蒙哥馬利乘法輔助處理器123以及隨機數發(fā)生器124。CPU(中央運算處理裝置)應用32位命令,其包括存儲器操作命令、加法、減法、乘法或除法等那樣的算術命令、移位、AND或OR等邏輯運算命令、控制命令。CPU可以執(zhí)行由32位命令構成的程序。一般,RSA關聯的動作對512位以上的非常大的整數進行操作。將該種大的整數算術運算處理用作由CPU 122執(zhí)行的程序的作法是不現實的。其原因為,便攜機器僅具有非常有限的計算機處理能力。因此,便攜機器為了 RSA而具備蒙哥馬利乘法輔助處理器123 那樣的專用計算單元。蒙哥馬利乘法輔助處理器與寄存器A 115、B 116以及N 117接口連接,在該寄存器117保有η-位奇數的整數的情況下,計算蒙哥馬利乘法A * B * 2_n mod N 或蒙哥馬利乘法A * A * 2_n mod N。此處,在寄存器115以及116中分別保存有整數A以及B。隨機數發(fā)生器IM可以連續(xù)生成隨機的位。而且,它們可以被用于包括RSA的加密應用。三種存儲器111如下那樣區(qū)別。用于存儲緩沖數據以及臨時數據的易失性存儲器 112、用于存儲用戶數據的可寫入的非易失性存儲器113、用于存儲程序的只讀非易失性存儲器114。三個蒙哥馬利乘法寄存器A 115、B 116以及N 117是與蒙哥馬利乘法輔助處理器123連接的基本的易失性存儲器。在實施方式2中,在易失性存儲器中應用RAM(隨機訪問存儲器),在可寫入的非易失性存儲器中應用EEPR0M(可以電擦除PR0M),在只讀的非易失性存儲器中應用掩模R0M(讀出專用存儲器)。雖然沒有特別限定,但在實施方式2中假定以軟件方式實現與在實施方式1中說明的加密單元911對應的結構。即,在非易失性存儲器114等中存儲所需的程序,并由數據處理部121的CPU 122等執(zhí)行該程序,從而進行后述的流程圖中示出的處理。(RSA的密鑰對的生成)為了以數字方式簽名或解讀消息而使用便攜機器101上的RSA加密系統(tǒng)之前,必需發(fā)生RSA密鑰對(keypair)。如上所述,在便攜機器上生成密鑰對是有意義的。圖9詳細記載了其步驟。密鑰對生成的輸入201包括η (公有模數N的位長度)、ρ (私有素數P
15的位長度)、q (私有素數Q的位長度)、E (公有冪指數)、b(l位陣列的尺寸)、預定的表 (T
.....T [t-1])、以及mri (米勒羅賓反復數)。在后面說明位排列B
.....B [b-Ι]、表T
.....T [t-Ι]以及米勒羅賓反復數
的作用。在步驟S202中,由隨機數發(fā)生器IM發(fā)生二個最初的奇數的隨機數?^^以及Anit。
在密鑰對的生成步驟中,希望在[Pinit.....Pinit+2 (b-1)]與Klinit.....Qinit+2 (b-1)]之間
搜索素數P以及Q。因此,在步驟203中,保證檢索間隔總是正確的范圍,保證P以及Q分別具有P位和q位。在步驟204中,結果Pinit女Qinit正確地具有η位的情況被確認。如果其正確,則模數N = P*Q可靠地具有η位。在步驟203或204中的任意一個失敗的情況下, 在步驟202中新發(fā)生最初的隨機數Pinit以及(iinit。一旦最初的隨機數Pinit以及Anit滿足全部要求的狀態(tài),則開始素數生成步驟。b位
的位陣列B
.....B[b-1]被保存到RAM 112,在步驟211中被初始化。位B[i]對應于整
數卩㈨斤?丨。整數Pinit+2i全部是奇數。其原因為,Pinit是奇數,2i是偶數。實際上,素數生
成步驟的目標是以間隔[Pinit.....Pinit+2(b-l)]發(fā)現素數。偶數顯然并非素數,可以沒有
問題地忽視。在位排列中被設置成1的位B[i]是正確的候補,其必需進一步判定素數性。 被清零的位B[i]對應于已知并非素數的不恰當的候補。首先最初,全部候補在步驟211中被設置成“正確”,然后,在步驟212中,向不恰當的候補在位陣列中寫入零,按照圖11記載的步驟進行這些處理。在步驟212中去除了不恰當的候補之后,在步驟213中判定剩余的正確的候補的素數性,由此,輸出素數P以及Dp ^E= Imod P-I那樣的逆元DP,或者返回 “失敗”。圖10詳細示出步驟213。在發(fā)現素數P的情況下,在步驟221至步驟224中針對最初的候補Anit反復相同步驟。在步驟214或224中是“失敗”的情況下,在步驟202中發(fā)生新的初始隨機數Pinit以及&nit。在發(fā)現了二個素數P以及Q之后,在步驟231中計算出滿足D * E = Imod(P-I) 女(Q-I)的私有密鑰D和公有模數N = P女Q0可以使用蒙哥馬利乘法輔助處理器(還簡稱為輔助處理器)123計算出公有模數N,可以利用非專利文獻1中記載的公知的二進制擴展G⑶算法計算出公有密鑰D。使用由于P是素數所以成為(Τ = Qp-2HiodP這樣的事實,在步驟232中計算出RSA-CRT Qinv的私有密鑰要素??梢允褂妹筛珩R利乘法輔助處理器123 計算出冪乘的余數乘法Qp-2Hiod P。例如,使用專利文獻1記載的蒙哥馬利乘方算法。最后, 在步驟233中向EEPROM 113寫入包括公有模數N、私有密鑰D、私有密鑰要素RSA-CRT、P、 Q、DP、Dq以及Gjinv的全部密鑰元素?!八財瞪伞痹趫D9中,在步驟213以及223中,發(fā)生素數P以及Q、私有密鑰元素Dp = E—1 mod P-UDq = E-1 mod Q_1。針對該素數生成步驟的輸入301是最初的偶數隨機數Pinit (或、 公有冪指數E、位排列B
.....B[b-1]、以及mri (用于米勒羅賓測試的反復數)。在步驟302中,存儲在RAM 112中的計數器i被初始化成0。該計數器用于對位排列B[i]的要素進行尋址,表示素數候補Pinit+2i。在步驟311以及312中,掃描位排列B[i] 的條目。在B[i] = 1時,候#Pinit+2i被設為“正確”,進而必需判定接下來步驟中的素數性。在B[i] =0時,候補被設成“不恰當”,接下來的候補被設成測試對象。在步驟321中,由CPU 122運算出候補P = Pinit+2i,運算結果被存儲到輔助處理器寄存器117。接下來,在步驟322中使用費馬測試判定P的素數性。圖6示出費馬測試。在P可以通過費馬測試的情況下,P實際上是素數這樣的可能性非常大。但是,P必需滿足進一步的狀態(tài)。即,為了可靠地確保存在逆元Dp = E.1 mod P-I, P-I與公有冪指數E的最大公約數必須是l(gcd(P-l、E) =1)。因此,在步驟331中,例如使用非專利文獻1中記載的二進制擴展GCD算法計算出DP。在步驟為“失敗”的情況下, gcd(P-UE)并非1,P被拒絕,測試接下來的候補。費馬測試盡管為了盡快去除作為合數的候補而有用,但其無法充分良好可靠地確立這些素數。例如,存在被稱為卡邁克爾(Carmichael)數的合數,且在多數情況下其可以通過費馬試驗。為了高可靠性地保證P的素數性,在實施方式2中,在順利地進行了費馬測試之后,反復幾次米勒-羅賓測試。必需恰當地選擇反復數(mri)。在非專利文獻1中,記載了可以順利地反復通過三次米勒羅賓測試的IOM位的隨機整數并非為素數這樣的概率是2_8°。換言之,在選擇了通過三次米勒羅賓測試的候補時發(fā)生錯誤的概率是2_8°。其概率極小。在步驟341中,計數器j在RAM 112上被初始化成0。只要j小于反復數mri,則在步驟342中執(zhí)行圖14記載的米勒羅賓測試,在步驟343中通過CPU 122計數器j被遞增。 如果P成功通過用mri表示的次數的米勒羅賓測試,則P大概是素數,利用素數生成步驟在步驟351中,與逆元Dp—起選擇。但是,在位排列、費馬測試、逆、米勒羅賓測試中的任意一
個失敗的情況下,在步驟361中i被遞增,測試接下來的候#Pinit+2i+2。在期間[Pinit.....
Pinit+2(b-l)]中的步驟中未發(fā)現滿足的素數的情況下,在步驟352中,步驟失敗。(位陣列)t存在最佳值,其是用于進行篩選以使素數生成步驟的速度成為最大的小的素數的數量。即,一方面,使用更小的素數,可以從位陣列篩選出更多的要素,其減少調出進一步精細的素數判定測試的次數,另一方面,在使用更小的素數ζ時,減少位陣列中的P mod ζ 和寫入操作。但是,小的素數的最佳值典型地大至1,000以上。在篩選中使用較多的小的素數時,需要大的表來存儲它們。為簡化說明,按照素數位長度,可以用一個字節(jié)(8位)或二個字節(jié)(16位)存儲各個小的素數。遺憾的是,8位的素數不多。小的素數表中的要素的大部分占據ROM 114的二個字節(jié)。例如,在篩選中使用 2,048的素數的情況下,表在ROM 114中占據4k字節(jié)。其對于IC卡來說是非常大的尺寸。進而,使用輔助處理器123計算出ζ小的素數的運算Pinit mod z,但是,雖然ζ小, 但Pinit大。因此,由作為Pinit的位尺寸的P決定使用輔助處理器123計算的蒙哥馬利乘法的位尺寸。其結果,蒙哥馬利乘法的結果是MontMult (Pinit、l、z) =Pinit * 2_p mod ζ。而且,其與期望的結果Pinit mod ζ不同。代替地,必需計算操作MontMult (Pinit、2p mod ζ、ζ) = Pinit ^ 2Ρ ^ 2_ρ = Pinit mod ζ0結果,需要蒙哥馬利常數的表,其保有用于全部小的素數 ζ的全部蒙哥馬利常數2P mod Z0在2,048的小的素數的情況下,其需要用于小的素數的 4k字節(jié)和用于蒙哥馬利常數的4k字節(jié)的存儲器。更惡劣的是,蒙哥馬利常數依賴于素數候補P的位長度P。例如,在程序必需支持10M位以及2048位的RSA的情況下,為了蒙哥馬利常數,需要二個不同的表。從上述說明可容易理解,為了篩選需要使用多個小的素數,但該途徑幾乎不適合于IC卡的不充分的存儲器資源。在實施方式2中,使用多個小的素數,但使所需的存儲器量適合于IC卡。有二個解決課題的點。第一點在于,與這些全部值相比,還不如存儲連續(xù)的小的素數之間的相異。第二點在于,與存儲這些相比,還不如在執(zhí)行時運算出蒙哥馬利常數 2P mod ζ。利用上述第一點,用于存儲小的素數的存儲器容量減少一半。其原因為,二個連續(xù)的小的素數之間的相異通常情況下較小,可以用一個字節(jié)存儲而并非二個字節(jié)。實際上,可以用一個字節(jié)存儲的二個連續(xù)的素數之間的最大差是Δ = 118,在zl = 1,349,533與ζ2 =1,349,651之間產生。換言之,比zl = 1,349,533小的素數之間的差異可以總是存儲到
一個字節(jié)。第二點的優(yōu)點在于,對蒙哥馬利常數完全不要求存儲器的容量。另外,伴隨充分的調度,可以使由CPU 122計算的蒙哥馬利常數的運算與由輔助處理器123運算的蒙哥馬利乘法 MontMult (Pinit、2p modz、z)的處理并行。因此,通過使用實施方式2的途徑和t = 2,048的小的素數,可以將為了在ROM
114中存儲小的素數之間的差的表T
.....T[t-1]而所需的存儲器容量設為業(yè)字節(jié),不
會對篩選操作造成動作速度上的惡化,并且,可以減少處理成本大的素數判定處理的調出次數而提高處理效率。接下來,圖11詳細例示出位陣列填充的操作步驟。步驟401的輸入由ρ位的初始
奇數隨機數Pinit (或者q位的Qinit)、最初用1填入的位排列B
.....B[b-1]、以及存儲連
續(xù)的小的素數之間的相異的表T
.....T[t-1]構成。例如,假設成表T存儲與t = 4個
小的素數相關的信息。T
= 3存儲比2大的第一素數例如3。接下來的素數是5 = 3+2, 所以是T[l] =2。接下來的素數是7 = 5+2,所以是Τ[2] =2。接下來的素數是11 = 7+4, 所以是Τ[3] =4。在步驟402中,二個緩沖器zl和r在RAM 112中被初始化。上述緩沖器zl存儲第一個素數T
的值,緩沖器r是第一蒙哥馬利常數2P mod T
o圖12示出 r = 2p mod zl的計算。接下來,zl被拷貝到輔助處理器寄存器N 117,r被拷貝到寄存器 A丄巧沖^^被拷貝到寄存器B 116。之后,輔助處理器123開始MontMult (r、Pinit、zl)的運算。如果計算結束,則運算結果Pinit mod zl被寫回到RAM 112的緩沖器xl。在輔助處理器123運算MontMult (r、Pinit、zl)的處理中,由CPU 122準備第二個小的素數以及蒙哥馬利常數。第二個小的素數是zl+T[l],此處,T[l]存儲第一個素數與第二個素數之間的差。在其接下來的步驟中,使用由表T
.....T [t-Ι]重構的所有小的素數來更新位
排列。表T
.....T[t-1]使用對其結構要素進行索引的計數器i。位排列的更新步驟的
基本考慮方法如下所述。即,第一,使用輔助處理器123計算出x2 = Pinit mod z2,此處,z2 對應于在表T中具有索引i的激活的小的素數。第二,與第一處理同時,CPU122運算出與索引i+Ι對應的接下來的小的素數z3。第三,用xl =Pinit mod zl更新位陣列,此處,zl是與索引i_l對應的前面的小的素數。在步驟412中,使用輔助處理器123計算出Pinit mod z2。此處,z2是與索引i對應的小的素數。更準確而言,小的素數z2被拷貝到輔助處理器寄存器117,蒙哥馬利常數被拷貝到輔助處理器寄存器115,寄存器116已經保持有Pinit。接下來,輔助處理器開始運算 MontMult (r、Pinit、z2),其運算結果被存儲到RAM 112的緩沖器x2。同時,在步驟414中,為了由CPU 122執(zhí)行的運算z3 = z2+T[i+l]而訪問表要素T[i+1]。此處,z3是與索引i+1 對應的接下來的小的素數。同樣地計算出其蒙哥馬利常數2P mod z3。在i = t-l或i = t時步驟414的處理被跳過。其原因為,表T僅具有t個要素。在該狀態(tài)下,使用在前面的步驟i-Ι中運算出的值xl = Pinit modzl來更新位陣列。在xl = 0的情況下,?_被21整除,于是,在步驟432中向B
直接寫入零。在xl 是奇數的情況下,P = Pinit+zl-xl滿足P = Omod Zl0另外,Pinit, xl以及zl是奇數,因此 P是奇數。于是,與P對應的索引j是j = (zl-xl)/2,其是由CPU 122在步驟423中代替利用2的除法而使用右移來運算出的。如果Xl是偶數,則Pinit+zl_xl是偶數,并非位陣列的要素。代替其,而選擇接下來的奇數。即,是P = Pinit+2zl-xl。在步驟423中由CPU 122 使用右移計算出所對應的索引,為j = zl-xl/2。在執(zhí)行了步驟422或423之后,Pinit+2j =Omod zl那樣的第一索引j已經變得有效。但是,實際上,整數Pinit+2j+hl、Pinit+2j+4zl、Pinit+2j+6zl以及其他也被zl整除。因
此,在步驟432中,向位B [j]寫入零,只要j處于范圍[O.....b-Ι],則通過CPU 122,zl被
追加到索引j。這樣,Pk那樣的全部奇數Pk = Pinit+2 * k * (j+zl)存在于位陣列中,Pk mod zl = O被識別成“不恰當”的候補。為了表T[2]、T[3].....T[t_l]的全部要素,而反復上述步驟。在步驟441中,值
z2以及x2 = Pinit mod z2被拷貝到zl以及xl,在步驟442中,z3被拷貝到z2,并且指示表T[i]的要素的計數器i被遞增。(蒙哥馬利常數的運算)在圖11中,在步驟402以及414中計算出與小的素數ζ關聯的蒙哥馬利常數r = 2P mod Z0圖12詳細例示出其步驟。向該步驟的輸入是素數候補P的位長度P、以及小的素數ζ。由于小的素數ζ小,所以其位長度通常小于16位,可以利用CPU 122容易地處理與小的素數ζ關聯的全部運算。此處無需使用蒙哥馬利乘法輔助處理器123。其結果,可以與輔助處理器動作并行地計算蒙哥馬利常數。在實施方式2中使用配置在RAM 112中的三個緩沖器計算蒙哥馬利常數,在步驟 502中緩沖器被初始化。緩沖器存儲2的乘方,χ是存儲部分結果的累加器,i用于計算2P mod ζ的運算中的冪指數ρ的掃描。實施方式2中使用的技術是從右向左的二進制的乘方。 基本的考慮方法在于,計算出 1 = 2"(2"0) =21 = 2mod ζ、y = 2"(2"1) = 22 = 4mod ζ、 y = 2"(2"2) = 24 = 16mod z、y = 2" (2" 3) = 28 = 2 56modz 以及其他,從右向左掃描 ρ 的二進制表現,在所掃描的位是1時,計算χ = χ * y mod ζ。在ρ = 0的情況下,向步驟M2返回χ = 1。否則,在步驟512中使用CPU 122使 i右移一位。在i的最下位的位是1時,右移動作生成進位(carry)。在該情況下,χ在步驟 522中被更新成χ * y mod ζ。在實施方式2中,CPU不直接支持χ * y mod ζ那樣的的余數乘法。因此,動作被分成二個部分。一個是古典的乘法χ * y,另一個是余數運算χ mod z,利用CPU來支持這兩者。接下來,只要緩沖器i并非零,則計算出接下來要求的2的乘方。如果假設成該步驟執(zhí)行第k個反復,則是y = 2、2~k)。接下來要求的2的乘方是2~2~(k+l) =2"(2"k)女 2"(2"k) = y * y mod z,在步驟532中進行運算,在其中利用一個乘法y * y和具有一個余數的除法y mod z,其是利用CPU 122運算的。緩沖器i在每次反復時被右移,所以i最終成為0。在該點中,冪乘的余數乘法2P mod ζ完成,可以返回運算結果χ = 2P mod ζ。(費馬測試)公知在橢圓曲線加密的情況下乘方運算的速度得到改善。例如使用Non-AdjacentForm(NAF)那樣的用于冪乘數的符號表現。NAF的速度比單純的二進制的乘方高,且無需再次計算。但是,在橢圓曲線乘方和RSA乘方之間存在大的差異。即,在前者的情況下,可以得到位置的逆轉而幾乎不會造成運算成本,但在后者的情況下,在稍微的整數的反轉運算中需要大的運算成本。由于在符號表現中的負數中需要反轉運算,所以該方法對于RSA通常是不恰當的。盡管通常對于RSA來說它們不具有優(yōu)勢這樣的事實,但在實施方式2中為了費馬測試而使用符號表現。實際上,A女B—1 mod P是一般需要大的運算成本的動作。但是,在B =2的情況下,動作成為A/2mod P。進而,利用2的除法僅僅成為右移,也許為P的加法之后。總之,在A是偶數的情況下進行A >> 1(右移一位),在A是奇數的情況下進行(A+P) >> 1(右移一位)。NAF重編碼是從右向左進行的,冪乘是從左向右進行的,所以無法結合這雙方的處理。即,最初,冪指數(exponent)被重構,而該新的表現的數存儲到不同的RAM區(qū)域,第二, 進行冪乘計算。該方法的缺點是冪指數非常大,必需在RAM中預約用于存儲該重構的樣式 (form)的區(qū)域。所重構的樣式至少比初始的冪指數大。如果從左向右一起進行上述重構和冪乘運算,則無需為了存儲新的表現而分配RAM。其原因為,可以將上述雙方的處理結合成一個。實施方式2中的費馬測試可以得到如下結果。即,可以將重構和冪乘運算綜合成一個固有的處理階段(Phase),因此,無需追加用于存儲所重構的指數的存儲器。為了達成這一點,費馬測試利用FAN表現,其通常以橢圓曲線使用,對于橢圓曲線例如有專利文獻2 的記載,此處,被稱為wMOF。FAN在其成長的點上與NAF相同,但FAN重構是從左向右執(zhí)行的,而無法與冪乘運算階段綜合。在FAN冪乘運算中的一個反復中,至多對Pi+1、Pi, Ph這三位的冪指數進行掃描。 其內容可以分類成情形1 情形6?!扒樾?”(Pi+1Fi) = (Il)2 被,■構成(Si) = (0),1被設置成1-1。
“情形2”(Pi+1FiPi-i) = (oil),被重構成(SiSH)=⑴,i被設置成i-1。
“情形3”(Pi+1FD = (010),被重構成(Si) = (01),i被設置成i-2。
“情形4”(Pi+1Fi) = _ 2被,■構成(Si) = (0),i被設置成i-i。
“情形5”(Pi+1FD = (100),被重構成(SiSiJ = ("I),i被設置成i-1
“情形6”(Pi+1FiPi-i) = (101),被重構成(Si) = (0-1),i被設置成i-2。
在情形1以及4的情況下,由輔助處理器123進行一次平方運算(square)
形2的情況下,由輔助處理器123進行一次平方運算,由CPU進行一次左移運算。在情形5 的情況下,由輔助處理器123進行一次平方運算,由CPU進行一次右移運算。在情形3的情況下,由輔助處理器123進行二次平方運算,由CPU進行一次左移。在情形6的情況下,由輔助處理器123進行二次平方運算,由CPU進行一次右移。 根據圖13對其內容進行詳細敘述。步驟601中的向費馬測試的輸入由ρ位的奇數的整數P構成,其成為素數性的判定對象。在IC卡的存儲器112中,P被存儲成一連串的P位(Plri. . . P0) 2ο蒙哥馬利乘法輔助處理器運算MontMult (A、A、P) = A * A * 2_p mod P,所以輔助處理器寄存器A 115以2 * 2P mod P初始化,而并非以2初始化。該方法成為 MontMult (A、A、P) = 2 * 2 * 22P * = 2 * 2 * 2p!nodP??芍诿筛珩R利乘法之后也仍存在要素2P。在步驟602中,利用2p+1mod P來初始化輔助處理器寄存器115,其原因為ρ 不是很大,通常P = 512或ρ = 1024,在二進制中,以1和后續(xù)的ρ+1個0這樣的形式單純地表現2Μ。接下來,直到215-1小于P為止,根據需要對P進行幾次減法。進而,在RAM 112 中計數器i被初始化成P-2。在情形1、2、3、4、5以及6這全部中,總是進行平方運算。因此,在步驟612中計算蒙哥馬利乘法。更準確而言,利用蒙哥馬利乘法MontMult (A、A、P)更新輔助處理器寄存器 A 115,此處,素數候補P的輸入被存儲到輔助處理器寄存器N 117中。接下來,有依賴于P 的值的不同的模式,此處,各個模式對應于情形1、2、3、4、5或6中的一個。在步驟613中判定P的第i位即Pi,而P被存儲到輔助處理器寄存器117中,計數器i處于RAM 112中。如果Pj = 1,則必需執(zhí)行與情形1、2、或3對應的操作。在?1 = 0時,必需執(zhí)行與情形4、5、或 6對應的操作。在Pi = 1的情況下,在步驟612中檢查位Pw的值。其檢查內容如下所述?!扒樾?” 如果Pi+1 = 0,則進行與所檢測出的情形1對應的位處理。情形1僅要求一個蒙哥馬利乘法處理,而無需其他處理,對接下來的位的值進行檢查。在?《 = 0的情況下,為了區(qū)分情形2以及3,必需對位Ph進行檢查。因此,在步驟622中,對位PH的值進行檢查?!扒樾?”:在Pg = 0的情況下,進行與所檢測出的情形2對應的位處理。因此,在步驟623中由CPU 122使輔助處理器寄存器A 115的數據右移一位。在移位操作之后,寄存器A 115的數據比ρ位多。即,在該情況下,在步驟625中根據需要必需從A減去幾次P?!扒樾?” 在Pi^1 = 1的情況下,進行與所檢測出的情形3對應的位處理。在步驟 641中進而進行蒙哥馬利乘法,計數器i還被遞減一次。之后,在步驟623中使輔助處理器寄存器A 115的數據左移一位,在步驟625中如果A比ρ位多,則從A減去P。但是,在i = 1的情況下,代替而執(zhí)行情形2。在Pi = 0的情況下,在步驟631中檢查位Pw的值。其檢查內容如下所述?!扒樾?”:在Pi+1 = 0的情況下,無需進一步的動作。在Pi+1 = 1的情況下,為了區(qū)別情形5以及6,必需對P"進行檢查?!扒樾?”:在Ph = 0的情況下,A被右移一位。在A是偶數的情況下,其最下位的位是0,在步驟635中由CPU 122對A直接進行移位。但是,在A是奇數的情況下,在步驟 634中由CPU 122向A加上P。由于A和P這兩方都是奇數,因此A+P是偶數,在步驟635 中進行右移。“情形6” 在P" = 1的情況下,進行蒙哥馬利乘法,在步驟642中計數器i被遞減,之后,接著步驟633進行右移。反復進行上述步驟,直到成為0為止在步驟614中對計數器i進行遞減。分別對 P-I的二個最下位的位進行處理。從P-I的最后開始數起第二個位是Pi。在?工=0的情況下,在步驟651中運算蒙哥馬利乘法,在P1 = 1的情況下,根據需要加上步驟肪4的P之后, 在蒙哥馬利乘法之后繼續(xù)步驟655的右移。由于P-I是偶數,所以P-I的最后的位總是0, 因此,在步驟661中計算蒙哥馬利乘法。在該點上,計算出全部位,但必需刪除蒙哥馬利常數的2P mod P。因此,在步驟663中,數據1被寫入到輔助處理器寄存器B 116,由輔助處理器123運算蒙哥馬利乘法MontMult (A、l、P) = A * 2_pmod P。在該最后的乘法中,消除蒙哥馬利常數的2P mod P,然后,向步驟662返回存儲在輔助處理器寄存器A中的數據。在A 是1的情況下,P大概是素數,在A并非1的情況下,P是合數?!百M馬測試的具體例子”在該例子中,假設成整數P = 109是素數性的判定對象。使用圖13的費馬測試, 計算冪乘的余數乘法21(l8m0d 109。在二進制數時,是108 = (1101100)2,在具備基于二進制法的左移的費馬測試中,進行三次左移,其原因為,除了其最上位的位的1以外還有三個位的1。另一方面,108的FAN表現是108 = (100-10-100),僅存在二次右移。進行詳細說明。P = 109的位長度是ρ = 7。最初,用2P+1 mod P = 28 mod 109初始化Α。其原因為,28 = 256,28-2 * 109 = 38,寄存器A = 38,計數器i是p_2 = 5。在“i= 5”的情況下,利用 MontMult (A、A、P) = MontMult (38,38,109) = 76 來更新寄存器A。接下來的P5= 1、P6= 1,而且所對應的重編碼是0,因此,無需進一步的操作。在“i = 4”的情況下,利用MontMult (76、76、109) = 86來更新寄存器A。接下來的 P4 = 0、P5 = 1、P3 = 1,而且所對應的重編碼是 0-1。用 MontMult (86、86、109) = 68 來更新寄存器A,計數器i被遞減。68是偶數,所以直接執(zhí)行右移A > > 1,寄存器A被更新成 34。在“i = 2”的情況下,利用MontMult (34、;34、109) = 101來更新A。接下來的P2
=UP3 = 1,而且所對應的重編碼是0。在“i = 1”的情況下,利用MontMult (101、101、109) = 55來更新A。接下來的P1 =0、P2 = UP0 = 0,而且所對應的重編碼是-1。寄存器A是偶數,所以對A加上109,計算右移,其結果,得到A = 82。由此,執(zhí)行費馬測試的最終步驟。P1 = 0、執(zhí)行二個蒙哥馬利乘法。艮口, MontMult (82,82,109) = 90 以及MontMult (90、90、109) = 19。由于是MontMult (19、1、109) =1,所以費馬測試輸出1。其與109是素數這樣的事實匹配?!懊桌樟_賓測試”在米勒羅賓測試中P-I被寫成2”1女D0此處,j+Ι是P-I的二進制的表現中的末尾的0的數量。第一,為了某底數B,計算乘方B —Xd mod P。在Xd mod P = 1的情況下,P 大概是素數。另一方面,在B = Xd mod P并非1的情況下,B與-1進行比較。在B并非-1 的情況下,B被進行j次平方運算,在各個平方運算之后,再次對運算結果與-1進行比較。 在進行了一個這些平方運算之后,當B = -1時,費馬測試停止,得到P大概是素數這樣的結果。否則P是合數。如費馬測試那樣,向米勒羅賓測試的輸入由步驟701的ρ-位的奇數P = (Pim. . . P0)構成。配置在RAM 112中的計數器j存儲從P-I中的末尾的0的數減去1而得到的數。在步驟703以及704中,直到發(fā)現被設置成1的位為止,掃描P的最下位的位。為了各個0,由CPU對計數器j進行遞增操作。一旦j被決定,則在步驟711中隨機地選擇乘方的底數。隨機數發(fā)生器IM生成 “P-位”的隨機的整數X,其被存儲到輔助處理器寄存器A 115,同樣地被拷貝到輔助處理器寄存器B 116。計數器i在RAM 112中被初始化成p-2。該計數器i在接下來的步驟中運算乘方的余數乘法Bd mod P的期間,表示P-I的哪個位被掃描。從左向右使用二進制的方法,按照蒙哥馬利乘法和蒙哥馬利平方運算的步驟,運算乘方的余數乘法。在步驟713中,進行蒙哥馬利平方運算,向輔助處理器寄存器115存儲運算結果。S卩,存儲MontMult (A、A、 P) = A * A * 2_p mod P。進而,在位Pi是1的情況下,在步驟715中進行蒙哥馬利乘法。 即進行MontMult (A、B、P) = A * B * 2_p mod P。最后,在步驟716中計數器i被遞減。由于在步驟713以及715中使用蒙哥馬利乘法輔助處理器123,所以在各個乘法或平方運算之后導入要素2_p mod P。但是,當將X稱為在步驟711中生成的初始隨機位X的情況下,X被考慮成X = Y * 2P mod P。此處,Y是其他“ρ-位”的整數。當前,是MontMult (Y、 γ、Ρ) = γ ^ γ ^ 2P mod P,在蒙哥馬利乘法之后,要素2P mod P穩(wěn)定。其結果,乘方結果是 Xd * 2P mod P.而并非Xd mod P。但是,Xd mod P在步驟721中可以容易恢復。此處,前面步驟的結果,成為使用蒙哥馬利乘法輔助處理器的1的乘法。S卩,是MontMult (A、1、P) =Yd * 2P * 1 * 2_pm0d P = Yd mod P。在步驟721之后,如果輔助處理器寄存器A 115存儲數據1,則米勒羅賓測試在步驟741中輸出“成功”。否則,如已經說明那樣,存儲在輔助處理器寄存器A 115中的數據被平方,與-1進行比較。在步驟733中反復j次蒙哥馬利平方運算??芍谝粋€蒙哥馬利乘法之后,寄存器 A存儲Yai女2P mod P,要素2P mod P在蒙哥馬利乘法之后再次穩(wěn)定、即不變化。但是,由于蒙哥馬利平方運算的結果與-1進行比較,所以必需用步驟733中的操作MontMult (A、1、P) = Y2d mod P去除要因2P,向輔助處理器寄存器B 116存儲該結果數據。如果著眼于-1 = P-I mod P,則在步驟731中對存儲在輔助處理器寄存器B中的數據與P-I進行比較。如果其一致,則P大概是素數,所以米勒羅賓測試在步驟742中返回“成功”。在寄存器B的數據與P-I不同的情況下,整體上反復j次上述步驟。在反復了 j次之后,寄存器B的值與P-I 絕對不一致,而P是合數,所以米勒-羅賓測試在步驟743中輸出“失敗”。“擴展”本發(fā)明不限于上述實施方式2中說明的內容。例如,圖8的便攜機器還可以是便攜電話、PDA、以及使用公有密鑰加密且計算機資源和存儲器資源有限的其他各種電子設備。 特別,便攜機器無需具備蒙哥馬利乘法輔助處理器。也可以是種類不同的輔助處理器。例如既可以是古典的余數乘法輔助處理器,也可以是不使用輔助處理器而由CPU以軟件方式實現的余數乘法處理。代替存儲小的素數之差,為了重構小的素數,還可以使用恰當的其他任意方法。費馬測試中的重編碼也可以是如NAF法、窗口法、或滑動窗口法那樣不同的重編碼法。實施方式2著眼于RSA密鑰的生成,但本發(fā)明不限于RSA,即使是DSA或 Diffie-Hellman那樣的其他公有密鑰加密方式,也可以得到用于高效地生成素數的上述發(fā)明的效果。另外,本發(fā)明不限于素數判定測試的結構、種類。例如,也可以代替費馬測試而使用米勒羅賓測試,也可以采用弗洛比尼斯(Frobenius)、Solovay-Mrassen或AKS測試等其他測試。另外本發(fā)明不限于特定的RSA參數。例如,可以省略DP、Dq以及Qinv那樣的 CRT參數,并且還可以省略D。另外,還可以在P以及Q的追加狀態(tài)下使用強素數(strong primes)。實施方式1中說明的圖1的加密單元還可以以軟件形式實現,并且還可以用硬件邏輯來構成以圖8的結構實現的功能。
權利要求
1.一種數據處理系統(tǒng),將整數除以多個小的素數而計算出余數,該數據處理系統(tǒng)的特征在于,包括計算單元,生成上述小的素數;以及余數運算單元,根據上述整數和上述生成的小的素數計算上述余數, 上述小的素數是由上述計算單元重構的。
2.根據權利要求1所述的數據處理系統(tǒng),其特征在于,上述余數運算單元是古典的余數乘法單元。
3.根據權利要求1所述的數據處理系統(tǒng),其特征在于,上述余數運算單元是蒙哥馬利乘法單元。
4.根據權利要求3所述的數據處理系統(tǒng),其特征在于,還具備蒙哥馬利常數運算單元, 用于運算上述小的素數的蒙哥馬利常數。
5.根據權利要求1所述的數據處理系統(tǒng),其特征在于,上述計算單元具有 用于存儲連續(xù)的素數之間的差的表的存儲單元;用于存儲小的素數的存儲單元;以及追加單元,上述追加單元進行將上述小的素數與上述差的表的要素相加的運算。
6.根據權利要求1所述的數據處理系統(tǒng),其特征在于,上述計算單元具有 存儲小整數的存儲單元;素數性的測試單元;以及更新單元,由上述素數性測試單元測試上述小整數的素數性,在上述小整數并非素數的情況下, 由上述更新單元更新該小整數。
7.根據權利要求6所述的數據處理系統(tǒng),其特征在于,上述素數性測試單元包括米勒羅賓測試單元。
8.根據權利要求6所述的數據處理系統(tǒng),其特征在于,上述素數性測試單元包括費馬測試單元。
9.一種數據處理方法,將整數除以多個小的素數而計算出余數,該數據處理方法的特征在于,包括如下處理重構一個小的素數的處理;以及利用上述重構的小的素數計算上述整數的除法的余數的處理。
10.根據權利要求9所述的數據處理方法,其特征在于,還包括計算蒙哥馬利常數的步馬聚ο
11.根據權利要求9所述的數據處理方法,其特征在于,重構至少一個小的素數的步驟與計算余數的步驟是并行執(zhí)行的。
12.根據權利要求10所述的數據處理方法,其特征在于,重構至少一個小的素數的步驟、計算余數的步驟以及計算蒙哥馬利常數的步驟是并行執(zhí)行的。
13.根據權利要求9所述的數據處理方法,其特征在于,重構至少一個小的素數的步驟包括如下處理存儲連續(xù)的小的素數之間的差的表的處理;存儲小的素數的處理;以及計算出上述小的素數的追加和上述差的表的要素的處理。
14.根據權利要求9所述的數據處理方法,其特征在于,重構至少一個小的素數的步驟包括如下處理存儲小整數的處理;判定上述小整數的素數性的處理;以及在上述小整數并非素數的情況下更新該小整數的處理。
15.根據權利要求14所述的數據處理方法,其特征在于,判定上述小整數的素數性的處理包括進行米勒羅賓測試的處理。
16.根據權利要求14所述的數據處理方法,其特征在于,判定上述小整數的素數性的處理包括進行費馬測試的處理。
全文摘要
本發(fā)明提供一種數據處理系統(tǒng)以及數據處理方法。提供一種即使如IC卡那樣僅具有有限的存儲資源也可以實現高效的加密處理的技術。加密密鑰的生成系統(tǒng)具備運算單元,用于重構多個小的素數;篩選單元,用于檢查是否利用小的素數整除了整數;重編碼單元,用于改變整數的表現;以及素數性判定測試單元。篩選單元檢查是否利用最初由運算單元重構的小的素數整除了整數,由此去除“不恰當的”素數候補。之后,使用素數性判定測試單元對剩余的素數候補進行測試。此時,使用重構單元,變換素數候補的表現,使用所變換的表現形式,素數性判定測試單元進行判定。由此,無需大的存儲器容量,而可以減少用于素數性判定的運算處理數。
文檔編號G06F7/72GK102393813SQ20111041023
公開日2012年3月28日 申請日期2009年2月10日 優(yōu)先權日2008年3月21日
發(fā)明者卡米爾·維堯姆, 吉野雅之, 桶屋勝幸 申請人:瑞薩電子株式會社