数据处理系统以及数据处理方法

文档序号:6440778阅读:259来源:国知局
专利名称:数据处理系统以及数据处理方法
技术领域
本发明涉及用于素数判定的数据处理系统以及数据处理方法,例如涉及应用于在公有密钥加密方式的系统结构等中使用的加密密钥的高效生成有效的技术。
背景技术
公有密钥加密方式被广泛公知,且当前被用于很多的应用、例如银行业务或电子商务。在此,经由不安全的网络,在用户之间使用数字签名文件、加密数据、变换密钥键等。 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 的保有者,而且假设成鲍勃希望向艾丽斯发送加密后的消息M。鲍勃计算C = Me mod N,向艾丽斯发送密文。接下来,艾丽斯计算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。为了发行RSA密钥,选择二个随机的素数P以及Q,其他密钥元素来自于二个素数。为了生成随机的素数,一方面,如下所述进行处理。第一,选择随机的整数,然后对该任意的数进行素数判定、例如费马(Fermat)判定。在该数无法通过素数判定的情况下,被更新成新的素数候补而进行处理。更新的处理根据方法而不同,例如设为新的任意的整数,或者增加最初的随机的整数。在生成RSA密钥的计算机处理中,生成任意的素数的步骤花费的计算机资源最多。过去,对于进行这样的成本较大的处理,计算机处理能力过低,对于在IC卡中生成RSA密钥的情况,无疑也是如此。其结果,只能使用功能强大的工作站来生成RSA密钥, 并拷贝到IC卡。但是,最近的IC卡开始享受针对公有密钥加密处理特化的硬件加速器 (accelerator)带来的利益。上述硬件加速器是加密处理用的辅助处理器(coprocessor), 从而使IC卡生成加密密钥变成现实。其具有二个效果。第一效果为,防止单一障碍点,即防止如在工作站生成密钥的情况那样,如果工作站发生障碍则由此生成的全部密钥变得危险的现象。第二效果为,卡发行者可以不知道私有密钥这一点。即,对于卡发行者来说,不会被视为负有泄漏私有密钥或将这些误用的责任。专利文献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卡那样的便携设备在多数情况下处于其计算能力低且存储资源也不充分的非常有限的环境中。但是,其终端用户通常不希望在发生加密密钥时等待较长的时间。因此,期望开发无需大量的计算机资源而可以高效地生成该种加密密钥的技术。另外,在非专利文献1中,记载有生成随机的素数的几种方法。但是,其中记载的技术几乎无法通过仅具备不充分的存储器资源的IC卡来实现。在非专利文献2中,虽然详述了生成随机的素数的简单的技术但未能提供有效的方法。

发明内容
本发明是鉴于上述情况而完成的,其目的在于提供一种素数判定技术,即使例如如IC卡那样仅具有有限的存储资源也可以实现高效的加密处理。换言之,本发明的目的在于提供一种技术,即使如便携机器那样具有不充分的存储资源也可以高速地生成随机的素数。本发明的上述以及其他目的和新的特征通过本说明书的记述以及附图将更加明确。如果简单说明本申请中公开的发明中的代表性的发明的概要,则如下所述。即,本发明为了能够用较少的计算机资源高效地进行处理,而被应用于数据的编码和重编码。特别,在素数生成步骤的期间,为了再次生成多个小的素数,而使用预定的紧凑的表。另外,对素数判定中处理的素数候补进行重编码,将它们的表现形式从二进制码变换成恰当的码。例如,生成加密密钥的数据处理系统具备运算单元,用于重构多个小的素数;筛选单元,用于检查整数是否被小的素数整除;重编码单元,用于改变整数的表现;以及素数性判定测试单元。筛选单元检查整数是否被最初由运算单元重构的小的素数整除,由此去除“不恰当的”素数候补。之后,使用素数性判定测试单元对剩余的素数候补进行测试。此时,使用重构单元,变换素数候补的表现,使用所变换的表现形式,素数性判定测试单元进行判定动作。由此,无需大的存储器容量,而可以减少用于素数性判定的运算处理数。如果简单说明通过本申请公开的发明中的代表性的发明而得到的效果,则如下所述。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主机系统(银行主机)
903主机系统(卡发行源主机)
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与银行的主机系统(银行主机)902连接,卡读出器905与卡发行源的主机系统(卡发行源主机)903连接。942是从IC卡901向网络941发送的数据,943是IC卡从网络941接收的数据。前面描述了在IC卡901中安装有具有作为事实上的标准的RSA的数字签名的情况下,由IC卡901直接生成加密密钥是有利的。为了将其实现,密钥生成单元912可以利用作为用于生成素数的专用电路的素数生成单元914。在RSA中的密钥生成中,在素数生成中在数据处理上成本最高,所以通过利用素数生成单元914来降低该成本。“ IC卡的动作,,图2示出RSA对应的IC卡902的典型的使用例子。最初,RSA的密钥是在IC卡 901的步骤1011中发生的。RSA的密钥由私有密钥922以及公有密钥923构成。然后,它们被保存在存储器921中。之后,IC卡901在步骤1012中向卡发行源主机903发送公有密钥923。之后,通过发行数字证书924,确认公有密钥。数字证书拟4在步骤1013中回送到IC卡,并保存到存储器921。至少在IC卡的认证动作的最初必需发生RSA的密钥,而且,大概在数字证书的有效性日期以后,发给数字证书924。在数字证书拟4有效时,IC卡可以用作被认证的标记 (token)卡(认证标记)。IC卡在步骤1021中向银行主机902发送处理请求。银行主机发出步骤1022的认证请求而响应。在步骤1023中,IC卡901生成使用签名生成单元913以及其私有密钥922的数字签名,发送所生成的数字签名、其公有密钥923以及从卡发行源主机903发行的数字证书924。在签名以及数字证书有效的情况下,由银行主机902赋予认证。在证书有效时,步骤1021至1023的处理根据需要可执行多次。其几乎允许无限制的数字处理次数。“素数生成单元”图3示出素数生成单元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执行费马测试,判定素数候补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。“素数生成控制单元”图4详细例示出素数生成控制单元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那样的条目,于是,直到发现素数P为止必需多次调出费马测试。为了减少费马测试的调出次数并使素数生成加速,费马测试单元在步骤1222中被激活时,与其同时生成新的小的素数z,位阵列被该新的小的素数更新。其结果,更多的条目在位排列中被清0,费马测试的调出变得更少。步骤1223、1224以及1225生成这样的新的小的素数,用ζ更新位排列。这些步骤由小的素数生成单元1161以及位排列单元1131执行,并由小的素数生成单元1161以及位排列装置1131进行处理,而与费马测试并行执行。在图4中,用虚线箭头表示这样的并行计算机处理。在步骤1223中,小的素数ζ的16位的寄存器1171被z+2更新。实际上ζ是奇数, 其原因为偶数的整数被2整除,从而明确可知并非素数。接下来,ζ成为使用米勒罗宾单元 1162进行素数性的测试的对象。在图6中详细记载了米勒罗宾单元1162的功能。米勒罗宾单元是判定16位整数的素数性的电路,构成为与费马测试单元相比速度非常高,且处理更大的整数。其结果,在执行一个费马测试的期间,可以进行多次米勒罗宾测试。在由米勒罗宾测试单元发现16位的小的素数时,利用位阵列填充单元1132更新位阵列1141 (步骤 1225)。在进行费马测试的期间反复进行这些三个步骤1223、1224以及1225。在费马测试结束且成功时,该概素数(probable prime)P通过素数生成单元返回到步骤1231,另一方面,素数生成单元使位排列1233的激活索引递增,再次从步骤1212开始,从而搜索位排列的接下来的正确的候补。在对位排列的全部索引进行扫描而未发现素数时,素数生成单元在步骤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 字节。于是, 被最佳化的窗口方法常常使用这种好几个预先被计算机运算出的值。其对于IC卡并不现实。例如,在窗口尺寸W = 5的情况下,预先被计算机运算出的所需的值在RAM中大约占有 4k字节。本发明的费马测试无需为了存储计算机运算出的数据而要求存储器,而可以利用大的窗口的窗口法。在费马测试中,在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时的其考虑方法。据此继续说明。在步骤1302中,幂指数P-I的最初的10个位被扫描,被写入到缓冲器j。计数器i被初始化成P-11。该计数器的值与接下来应读入的位、即Pp-n—致。在步骤1303中,累加器(aCCUmUlator)A(寄存器A)1121被设置成即,向A最初写入0,第j位被设置成 1。之后,开始幂乘运算。在步骤1312中,由余数乘法单元1113连续10次运算A2 mod
P。其原因为窗口尺寸为W= 10。在步骤1313中从幂指数P-I读入连续的10个位Pi.....
Pm。此处,P被存储到寄存器1123,整数值(Pi. . . PiJ2被写入到缓冲器j。在j是零的情况下,无需进行乘法,在费马测试中可以继续接下来的处理。在j > 0的情况下,寄存器B 1122在步骤1322中被设置成2j。S卩,寄存器Bl 122被清零,并在其第j位的位置设置成1。 一旦寄存器B 1122被设置,则在步骤1323中使用带余数的运算操作单元1113执行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。之后,连续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。如果连续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 中执行乘方的余数乘法21勺mod ζ (此处z-1 = 2^女d)。累加器χ被初始化成1,在步骤 1411中循环计数器i被初始化成15。接下来,在循环计数器i大于j的期间,执行接下来的步骤。首先,在步骤1413中执行余数乘法χ2 mod ζ.此处,χ以及ζ是16位整数。之后, 在ζ的位Zi是1的情况下,使用左移χ << 1以及模数ζ的减法,在步骤1415中计算出2 女χ mod ζ的运算。在乘方计算之后,累加器χ包括值1的情况下,算法停止动作而在步骤1441中返回测试结果“成功”。否则,χ在步骤1431中与z-1进行比较。在它们相等的情况下,算法停止动作而在步骤1443中返回测试结果“成功”。在不相等的情况下,在步骤1432中运算出余数乘法χ2 mod ζ,循环计数器被进行减法运算。直到计数器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,为素数。“位排列的更新”位排列是由用于去除作为被小的素数整除的候补P = 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满足全部的状态而索引i在步骤1515中被设置成0。另一方面,由于X并非零,且Pinit = χ mod ζ、Pinit+z-x = 0 mod z,所以将其得知是容易的。另一方面,如果χ 是奇数,则z-x是偶数,Pinit+z_x是奇数,满足所要求的全部状态。其结果,在步骤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中返回位排列。“位排列更新的具体例子”在该例子中,位排列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中进行,则该步骤继续。米勒罗宾测试用短的整数(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的值。“扩展”本发明不限于上述实施方式1中说明的内容。例如,上述系统还可以用于便携电话、PDA、利用公有密钥加密方式且使用有限的计算机资源、存储器资源的任意电子设备。乘方的类型可以不同。例如,代替乘方的余数乘法单元,而还可以利用蒙哥马利乘法装置。小的素数的重构方法不限于上述例子中说明的内容。例如,还可以利用具有与2不同的底数的米勒罗宾测试、或者利用费马测试、其他组合测试那样的不同的测试。同样地,还可以采维-斯特拉森(Solovay-Strassen)测试那样针对素数候补的不同的素数性判定测试。进而,重构的种类不限于窗口方法,还可以使用NAF (Non-Adjacement Form) 或FAN的重构法、或者其他恰当的重构法。3.实施方式2进行着眼于板载(on borad)的加密生成的说明。(便携机器)图8示出便携式电子装置(便携机器)101,例如是IC卡、或强化了安全性功能的设备。便携机器101经由其输入输出接口 131与网络141连接,可以发送数据142并接收数据143。通过该网络141,便携机器10可以与ATM 151、计算机153或其他便携机器154 进行通信。如果网络141上的通信路径中的安全性无法得到保障,则消息有可能被恶意的用户窃取。因此,在便携机器中需要搭载安全性机构。这些安全性机构包括消息加密以及数字签名,而且,在实施方式2中,应用作为事实上的标准的被称为RSA的公有密钥加密法。便携机器101包括输入输出接口 131、计算单元121以及存储器111三种单元。便携机器可以利用输入输出接口 131与一个或多个网络连接。在实施方式2中, 便携机器101包括二个输入输出接口 132以及133。其实现接触接口和非接触接口。数据处理部121包括CPU 122、蒙哥马利乘法辅助处理器123以及随机数发生器124。CPU(中央运算处理装置)应用32位命令,其包括存储器操作命令、加法、减法、乘法或除法等那样的算术命令、移位、AND或OR等逻辑运算命令、控制命令。CPU可以执行由32位命令构成的程序。一般,RSA关联的动作对512位以上的非常大的整数进行操作。将该种大的整数算术运算处理用作由CPU 122执行的程序的作法是不现实的。其原因为,便携机器仅具有非常有限的计算机处理能力。因此,便携机器为了 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。随机数发生器IM可以连续生成随机的位。而且,它们可以被用于包括RSA的加密应用。三种存储器111如下那样区别。用于存储缓冲数据以及临时数据的易失性存储器 112、用于存储用户数据的可写入的非易失性存储器113、用于存储程序的只读非易失性存储器114。三个蒙哥马利乘法寄存器A 115、B 116以及N 117是与蒙哥马利乘法辅助处理器123连接的基本的易失性存储器。在实施方式2中,在易失性存储器中应用RAM(随机访问存储器),在可写入的非易失性存储器中应用EEPR0M(可以电擦除PR0M),在只读的非易失性存储器中应用掩模R0M(读出专用存储器)。虽然没有特别限定,但在实施方式2中假定以软件方式实现与在实施方式1中说明的加密单元911对应的结构。即,在非易失性存储器114等中存储所需的程序,并由数据处理部121的CPU 122等执行该程序,从而进行后述的流程图中示出的处理。(RSA的密钥对的生成)为了以数字方式签名或解读消息而使用便携机器101上的RSA加密系统之前,必需发生RSA密钥对(keypair)。如上所述,在便携机器上生成密钥对是有意义的。图9详细记载了其步骤。密钥对生成的输入201包括η (公有模数N的位长度)、ρ (私有素数P
15的位长度)、q (私有素数Q的位长度)、E (公有幂指数)、b(l位阵列的尺寸)、预定的表 (T
.....T [t-1])、以及mri (米勒罗宾反复数)。在后面说明位排列B
.....B [b-Ι]、表T
.....T [t-Ι]以及米勒罗宾反复数
的作用。在步骤S202中,由随机数发生器IM发生二个最初的奇数的随机数?^^以及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中新发生最初的随机数Pinit以及(iinit。一旦最初的随机数Pinit以及Anit满足全部要求的状态,则开始素数生成步骤。b位
的位阵列B
.....B[b-1]被保存到RAM 112,在步骤211中被初始化。位B[i]对应于整
数卩㈨斤?丨。整数Pinit+2i全部是奇数。其原因为,Pinit是奇数,2i是偶数。实际上,素数生
成步骤的目标是以间隔[Pinit.....Pinit+2(b-l)]发现素数。偶数显然并非素数,可以没有
问题地忽视。在位排列中被设置成1的位B[i]是正确的候补,其必需进一步判定素数性。 被清零的位B[i]对应于已知并非素数的不恰当的候补。首先最初,全部候补在步骤211中被设置成“正确”,然后,在步骤212中,向不恰当的候补在位阵列中写入零,按照图11记载的步骤进行这些处理。在步骤212中去除了不恰当的候补之后,在步骤213中判定剩余的正确的候补的素数性,由此,输出素数P以及Dp ^E= Imod P-I那样的逆元DP,或者返回 “失败”。图10详细示出步骤213。在发现素数P的情况下,在步骤221至步骤224中针对最初的候补Anit反复相同步骤。在步骤214或224中是“失败”的情况下,在步骤202中发生新的初始随机数Pinit以及&nit。在发现了二个素数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的私有密钥要素。可以使用蒙哥马利乘法辅助处理器123 计算出幂乘的余数乘法Qp-2Hiod P。例如,使用专利文献1记载的蒙哥马利乘方算法。最后, 在步骤233中向EEPROM 113写入包括公有模数N、私有密钥D、私有密钥要素RSA-CRT、P、 Q、DP、Dq以及Gjinv的全部密钥元素。“素数生成”在图9中,在步骤213以及223中,发生素数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必需满足进一步的状态。即,为了可靠地确保存在逆元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°。换言之,在选择了通过三次米勒罗宾测试的候补时发生错误的概率是2_8°。其概率极小。在步骤341中,计数器j在RAM 112上被初始化成0。只要j小于反复数mri,则在步骤342中执行图14记载的米勒罗宾测试,在步骤343中通过CPU 122计数器j被递增。 如果P成功通过用mri表示的次数的米勒罗宾测试,则P大概是素数,利用素数生成步骤在步骤351中,与逆元Dp—起选择。但是,在位排列、费马测试、逆、米勒罗宾测试中的任意一
个失败的情况下,在步骤361中i被递增,测试接下来的候#Pinit+2i+2。在期间[Pinit.....
Pinit+2(b-l)]中的步骤中未发现满足的素数的情况下,在步骤352中,步骤失败。(位阵列)t存在最佳值,其是用于进行筛选以使素数生成步骤的速度成为最大的小的素数的数量。即,一方面,使用更小的素数,可以从位阵列筛选出更多的要素,其减少调出进一步精细的素数判定测试的次数,另一方面,在使用更小的素数ζ时,减少位阵列中的P mod ζ 和写入操作。但是,小的素数的最佳值典型地大至1,000以上。在筛选中使用较多的小的素数时,需要大的表来存储它们。为简化说明,按照素数位长度,可以用一个字节(8位)或二个字节(16位)存储各个小的素数。遗憾的是,8位的素数不多。小的素数表中的要素的大部分占据ROM 114的二个字节。例如,在筛选中使用 2,048的素数的情况下,表在ROM 114中占据4k字节。其对于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字节和用于蒙哥马利常数的4k字节的存储器。更恶劣的是,蒙哥马利常数依赖于素数候补P的位长度P。例如,在程序必需支持10M位以及2048位的RSA的情况下,为了蒙哥马利常数,需要二个不同的表。从上述说明可容易理解,为了筛选需要使用多个小的素数,但该途径几乎不适合于IC卡的不充分的存储器资源。在实施方式2中,使用多个小的素数,但使所需的存储器量适合于IC卡。有二个解决课题的点。第一点在于,与这些全部值相比,还不如存储连续的小的素数之间的相异。第二点在于,与存储这些相比,还不如在执行时运算出蒙哥马利常数 2P mod ζ。利用上述第一点,用于存储小的素数的存储器容量减少一半。其原因为,二个连续的小的素数之间的相异通常情况下较小,可以用一个字节存储而并非二个字节。实际上,可以用一个字节存储的二个连续的素数之间的最大差是Δ = 118,在zl = 1,349,533与ζ2 =1,349,651之间产生。换言之,比zl = 1,349,533小的素数之间的差异可以总是存储到
一个字节。第二点的优点在于,对蒙哥马利常数完全不要求存储器的容量。另外,伴随充分的调度,可以使由CPU 122计算的蒙哥马利常数的运算与由辅助处理器123运算的蒙哥马利乘法 MontMult (Pinit、2p modz、z)的处理并行。因此,通过使用实施方式2的途径和t = 2,048的小的素数,可以将为了在ROM
114中存储小的素数之间的差的表T
.....T[t-1]而所需的存储器容量设为业字节,不
会对筛选操作造成动作速度上的恶化,并且,可以减少处理成本大的素数判定处理的调出次数而提高处理效率。接下来,图11详细例示出位阵列填充的操作步骤。步骤401的输入由ρ位的初始
奇数随机数Pinit (或者q位的Qinit)、最初用1填入的位排列B
.....B[b-1]、以及存储连
续的小的素数之间的相异的表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执行的运算z3 = z2+T[i+l]而访问表要素T[i+1]。此处,z3是与索引i+1 对应的接下来的小的素数。同样地计算出其蒙哥马利常数2P mod z3。在i = t-l或i = t时步骤414的处理被跳过。其原因为,表T仅具有t个要素。在该状态下,使用在前面的步骤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。在执行了步骤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的乘方。如果假设成该步骤执行第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来说它们不具有优势这样的事实,但在实施方式2中为了费马测试而使用符号表现。实际上,A女B—1 mod P是一般需要大的运算成本的动作。但是,在B =2的情况下,动作成为A/2mod P。进而,利用2的除法仅仅成为右移,也许为P的加法之后。总之,在A是偶数的情况下进行A >> 1(右移一位),在A是奇数的情况下进行(A+P) >> 1(右移一位)。NAF重编码是从右向左进行的,幂乘是从左向右进行的,所以无法结合这双方的处理。即,最初,幂指数(exponent)被重构,而该新的表现的数存储到不同的RAM区域,第二, 进行幂乘计算。该方法的缺点是幂指数非常大,必需在RAM中预约用于存储该重构的样式 (form)的区域。所重构的样式至少比初始的幂指数大。如果从左向右一起进行上述重构和幂乘运算,则无需为了存储新的表现而分配RAM。其原因为,可以将上述双方的处理结合成一个。实施方式2中的费马测试可以得到如下结果。即,可以将重构和幂乘运算综合成一个固有的处理阶段(Phase),因此,无需追加用于存储所重构的指数的存储器。为了达成这一点,费马测试利用FAN表现,其通常以椭圆曲线使用,对于椭圆曲线例如有专利文献2 的记载,此处,被称为wMOF。FAN在其成长的点上与NAF相同,但FAN重构是从左向右执行的,而无法与幂乘运算阶段综合。在FAN幂乘运算中的一个反复中,至多对Pi+1、Pi, Ph这三位的幂指数进行扫描。 其内容可以分类成情形1 情形6。“情形1”(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。可知在蒙哥马利乘法之后也仍存在要素2P。在步骤602中,利用2p+1mod P来初始化辅助处理器寄存器115,其原因为ρ 不是很大,通常P = 512或ρ = 1024,在二进制中,以1和后续的ρ+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,则必需执行与情形1、2、或3对应的操作。在?1 = 0时,必需执行与情形4、5、或 6对应的操作。在Pi = 1的情况下,在步骤612中检查位Pw的值。其检查内容如下所述。“情形1” 如果Pi+1 = 0,则进行与所检测出的情形1对应的位处理。情形1仅要求一个蒙哥马利乘法处理,而无需其他处理,对接下来的位的值进行检查。在?《 = 0的情况下,为了区分情形2以及3,必需对位Ph进行检查。因此,在步骤622中,对位PH的值进行检查。“情形2”:在Pg = 0的情况下,进行与所检测出的情形2对应的位处理。因此,在步骤623中由CPU 122使辅助处理器寄存器A 115的数据右移一位。在移位操作之后,寄存器A 115的数据比ρ位多。即,在该情况下,在步骤625中根据需要必需从A减去几次P。“情形3” 在Pi^1 = 1的情况下,进行与所检测出的情形3对应的位处理。在步骤 641中进而进行蒙哥马利乘法,计数器i还被递减一次。之后,在步骤623中使辅助处理器寄存器A 115的数据左移一位,在步骤625中如果A比ρ位多,则从A减去P。但是,在i = 1的情况下,代替而执行情形2。在Pi = 0的情况下,在步骤631中检查位Pw的值。其检查内容如下所述。“情形4”:在Pi+1 = 0的情况下,无需进一步的动作。在Pi+1 = 1的情况下,为了区别情形5以及6,必需对P"进行检查。“情形5”:在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之后, 在蒙哥马利乘法之后继续步骤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是合数。“费马测试的具体例子”在该例子中,假设成整数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是偶数,所以直接执行右移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。由此,执行费马测试的最终步骤。P1 = 0、执行二个蒙哥马利乘法。艮口, 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中,直到发现被设置成1的位为止,扫描P的最下位的位。为了各个0,由CPU对计数器j进行递增操作。一旦j被决定,则在步骤711中随机地选择乘方的底数。随机数发生器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稳定。其结果,乘方结果是 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在蒙哥马利乘法之后再次稳定、即不变化。但是,由于蒙哥马利平方运算的结果与-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中输出“失败”。“扩展”本发明不限于上述实施方式2中说明的内容。例如,图8的便携机器还可以是便携电话、PDA、以及使用公有密钥加密且计算机资源和存储器资源有限的其他各种电子设备。 特别,便携机器无需具备蒙哥马利乘法辅助处理器。也可以是种类不同的辅助处理器。例如既可以是古典的余数乘法辅助处理器,也可以是不使用辅助处理器而由CPU以软件方式实现的余数乘法处理。代替存储小的素数之差,为了重构小的素数,还可以使用恰当的其他任意方法。费马测试中的重编码也可以是如NAF法、窗口法、或滑动窗口法那样不同的重编码法。实施方式2着眼于RSA密钥的生成,但本发明不限于RSA,即使是DSA或 Diffie-Hellman那样的其他公有密钥加密方式,也可以得到用于高效地生成素数的上述发明的效果。另外,本发明不限于素数判定测试的结构、种类。例如,也可以代替费马测试而使用米勒罗宾测试,也可以采用弗洛比尼斯(Frobenius)、Solovay-Mrassen或AKS测试等其他测试。另外本发明不限于特定的RSA参数。例如,可以省略DP、Dq以及Qinv那样的 CRT参数,并且还可以省略D。另外,还可以在P以及Q的追加状态下使用强素数(strong primes)。实施方式1中说明的图1的加密单元还可以以软件形式实现,并且还可以用硬件逻辑来构成以图8的结构实现的功能。
权利要求
1.一种数据处理系统,将整数除以多个小的素数而计算出余数,该数据处理系统的特征在于,包括计算单元,生成上述小的素数;以及余数运算单元,根据上述整数和上述生成的小的素数计算上述余数, 上述小的素数是由上述计算单元重构的。
2.根据权利要求1所述的数据处理系统,其特征在于,上述余数运算单元是古典的余数乘法单元。
3.根据权利要求1所述的数据处理系统,其特征在于,上述余数运算单元是蒙哥马利乘法单元。
4.根据权利要求3所述的数据处理系统,其特征在于,还具备蒙哥马利常数运算单元, 用于运算上述小的素数的蒙哥马利常数。
5.根据权利要求1所述的数据处理系统,其特征在于,上述计算单元具有 用于存储连续的素数之间的差的表的存储单元;用于存储小的素数的存储单元;以及追加单元,上述追加单元进行将上述小的素数与上述差的表的要素相加的运算。
6.根据权利要求1所述的数据处理系统,其特征在于,上述计算单元具有 存储小整数的存储单元;素数性的测试单元;以及更新单元,由上述素数性测试单元测试上述小整数的素数性,在上述小整数并非素数的情况下, 由上述更新单元更新该小整数。
7.根据权利要求6所述的数据处理系统,其特征在于,上述素数性测试单元包括米勒罗宾测试单元。
8.根据权利要求6所述的数据处理系统,其特征在于,上述素数性测试单元包括费马测试单元。
9.一种数据处理方法,将整数除以多个小的素数而计算出余数,该数据处理方法的特征在于,包括如下处理重构一个小的素数的处理;以及利用上述重构的小的素数计算上述整数的除法的余数的处理。
10.根据权利要求9所述的数据处理方法,其特征在于,还包括计算蒙哥马利常数的步马聚ο
11.根据权利要求9所述的数据处理方法,其特征在于,重构至少一个小的素数的步骤与计算余数的步骤是并行执行的。
12.根据权利要求10所述的数据处理方法,其特征在于,重构至少一个小的素数的步骤、计算余数的步骤以及计算蒙哥马利常数的步骤是并行执行的。
13.根据权利要求9所述的数据处理方法,其特征在于,重构至少一个小的素数的步骤包括如下处理存储连续的小的素数之间的差的表的处理;存储小的素数的处理;以及计算出上述小的素数的追加和上述差的表的要素的处理。
14.根据权利要求9所述的数据处理方法,其特征在于,重构至少一个小的素数的步骤包括如下处理存储小整数的处理;判定上述小整数的素数性的处理;以及在上述小整数并非素数的情况下更新该小整数的处理。
15.根据权利要求14所述的数据处理方法,其特征在于,判定上述小整数的素数性的处理包括进行米勒罗宾测试的处理。
16.根据权利要求14所述的数据处理方法,其特征在于,判定上述小整数的素数性的处理包括进行费马测试的处理。
全文摘要
本发明提供一种数据处理系统以及数据处理方法。提供一种即使如IC卡那样仅具有有限的存储资源也可以实现高效的加密处理的技术。加密密钥的生成系统具备运算单元,用于重构多个小的素数;筛选单元,用于检查是否利用小的素数整除了整数;重编码单元,用于改变整数的表现;以及素数性判定测试单元。筛选单元检查是否利用最初由运算单元重构的小的素数整除了整数,由此去除“不恰当的”素数候补。之后,使用素数性判定测试单元对剩余的素数候补进行测试。此时,使用重构单元,变换素数候补的表现,使用所变换的表现形式,素数性判定测试单元进行判定。由此,无需大的存储器容量,而可以减少用于素数性判定的运算处理数。
文档编号G06F7/72GK102393813SQ20111041023
公开日2012年3月28日 申请日期2009年2月10日 优先权日2008年3月21日
发明者卡米尔·维尧姆, 吉野雅之, 桶屋胜幸 申请人:瑞萨电子株式会社
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1