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

文档序号:7944610阅读:261来源:国知局
专利名称:数据处理系统以及数据处理方法
技术领域
本发明涉及用于素数判定的数据处理系统以及数据处理方法,例 如涉及应用于在公有密钥加密方式的系统结构等中使用的加密密钥 的高效生成有效的技术。
背景技术
公有密钥加密方式被广泛公知,且当前被用于很多的应用、例如 银行业务或电子商务。在此,经由不安全的网络,在用户之间使用数
字签名文件、加密数据、变换密钥键等。RSA是用于公有密钥加密法 的事实上的标准,并且在需要数字签名或公有密钥加密的应用中被一 般化。例如,由用于信用卡的EMV ( Europay - Mastercard - Visa ) 财团推荐有效利用RSA,更准确而言,直到2010年为止,由EMV 推荐具有1024位的键长度的RSA,在此以后推荐2048位的键。
在RSA中,消息被编码成n位整数。RSA公有密钥由幂指数E (其一般较小)、n位的模数N构成。RSA私有密钥是n位整数D, 具有EAD-lmod (P-1)*(Q-l)的关系。记号*意味着乘法。此 处,P和Q是私有的素数,其满足PAQ-N的关系。关于任意的消息 0< = M<N、 ( ME) D mod N = M进行说明。假设成例如艾丽斯是作为 RSA密钥的(E、 N) 、 D的保有者,而且假设成鲍勃希望向艾丽斯 发送加密后的消息M。鲍勃计算C-MEmodN,向艾丽斯发送密文。 接下来,艾丽斯计算CD- (ME) D = M mod N而恢复原来的文章。 由此,可知RSA的中心动作是乘方的余数乘法XY mod N.。在N大 时,例如在2048位时,其乘方计算花费时间。为了提高RSA的运算 速度,可以利用中国的余数定理。其提及了乘方的余数乘法CD modN 可以交换成二个乘方的模P和Q。 N- P*Q且P以及Q是模N的大约一半的数据尺寸,所以根据利用该中国的余数定理的途径(RSA-CRT),可以实际上加快进行运算。在RSA-CRT中,该加密的步 骤与标准的RSA同样地,AC-MEmodN。相异点是从加密的解码 手法。例如,设为^皮定义成Dp-D mod P-1 = E 1 mod P-1、 DQ = D mod Q - 1 = E 1 mod Q - 1 、 Qinv = Q 1 mod P。其中,在Z = X 1 mod Y满足Z*X= 1 mod Y的整数是1<=Z<Y时,利用计算机的RSA-CRT的解码处理成为MP = CADP mod P、 MQ = CADQ mod Q、 M = MQ+Q*[Qinv* (Mp-Mq) mod P。因此,此时的RSA的密钥对是 作为公有密钥的E、 N、作为用于标准RSA的私有密钥的D以及用于 RSA-CRT的P、 Q、 DQ、 DP、 Qinv。
RSA密钥的长度例如与公有密钥N的位数的尺寸相关。例如在 2048位RSA中,公有密钥N具有2048位,素数P、 Q—般分别具有 1024位。其结果,成为N-P头Q。为了发行RSA密钥,选择二个随 机的素数P以及Q,其他密钥元素来自于二个素数。为了生成随机的 素数, 一方面,如下所述进行处理。第一,选择随机的整数,然后对 该任意的数进行素数判定、例如费马(Fermat)判定。在该数无法通 过素数判定的情况下,被更新成新的素数候补而进行处理。更新的处 理根据方法而不同,例如设为新的任意的整数,或者增加最初的随机 的整数。在生成RSA密钥的计算机处理中,生成任意的素数的步骤
花费的计算机资源最多。
过去,对于进行这样的成本较大的处理,计算机处理能力过低, 对于在IC卡中生成RSA密钥的情况,无疑也是如此。其结果,只能 使用功能强大的工作站来生成RSA密钥,并拷贝到IC卡。但是,最 近的IC卡开始享受针对公有密钥加密处理特化的硬件加速器 (accelerator)带来的利益。上述硬件加速器是加密处理用的辅助处 理器(coprocessor),从而使IC卡生成加密密钥变成现实。其具有 二个效果。第一效果为,防止单一障碍点,即防止如在工作站生成密 钥的情况那样,如果工作站发生障碍则由此生成的全部密钥变得危险 的现象。第二效果为,卡发行者可以不知道私有密钥这一点。即,对于卡发行者来说,不会被视为负有泄漏私有密钥或将这些误用的责 任。
专利文献l:美国专利第7113595号说明书
非专利文献1: Alfred Menezes , Paul van Oorschot , Scott Vanstone: "Handbook of Applied Cryptography", Chapter 4, Public - Key Parameters. CRC Press, ISBN 0 - 8493 - 8523 - 7
非专利文献2: Katsuyuki Okeya, Katja Schmidt — Samoa, ChristianSpahnandTsuyoshiTakagi :"Signed Binary Representations Revisited", Proceedings of Advances in Cryptology, CRYPTO 2004, LNCS3152, Springer - Verlag, 2004
即使利用加密处理用的辅助处理器来促进了其计算处理,但IC 卡那样的便携设备在多数情况下处于其计算能力低且存储资源也不 充分的非常有限的环境中。但是,其终端用户通常不希望在发生加密 密钥时等待较长的时间。因此,期望开发无需大量的计算机资源而可 以高效地生成该种加密密钥的技术。
另外,在非专利文献l中,记载有生成随机的素数的几种方法。 但是,其中记载的技术几乎无法通过仅具备不充分的存储器资源的IC 卡来实现。在非专利文献2中,虽然详述了生成随机的素数的简单的 技术但未能提供有效的方法。

发明内容
本发明是鉴于上述情况而完成的,其目的在于提供一种素数判定 技术,即使例如如IC卡那样仅具有有限的存储资源也可以实现高效 的加密处理。换言之,本发明的目的在于提供一种技术,即使如便携 机器那样具有不充分的存储资源也可以高速地生成随机的素数。
及附图将更加明确。
如果筒单说明本申请中公开的发明中的代表性的发明的概要,则 如下所述。即,本发明为了能够用较少的计算机资源高效地进行处理,而被 应用于数据的编码和重编码。特别,在素数生成步骤的期间,为了再 次生成多个小的素数,而使用预定的紧凑的表。另外,对素数判定中 处理的素数候补进行重编码,将它们的表现形式从二进制码变换成恰 当的码。
例如,生成加密密钥的数据处理系统具备运算单元,用于重构
多个小的素数;筛选单元,用于检查整数是否被小的素数整除;重编
码单元,用于改变整数的表现;以及素数性判定测试单元。筛选单元
检查整数是否被最初由运算单元重构的小的素数整除,由此去除"不
恰当的"素数候补。之后,使用素数性判定测试单元对剩余的素数候
补进行测试。此时,使用重构单元,变换素数候补的表现,使用所变
换的表现形式,素数性判定测试单元进行判定动作。由此,无需大的
存储器容量,而可以减少用于素数性判定的运算处理数。
如果简单说明通过本申请公开的发明中的代表性的发明而得到
的效果,则如下所述。
即,即使如IC卡等那样仅具有有限的存储资源也可以在素数判 定或素数生成中实现高效的加密处理。
另夕卜,即使如便携机器那样具备不充分的存储资源也可以高速地 生成随机的素数。


图1是IC卡的框图。
图2是例示出RSA对应的IC卡的典型的动作工序的时序图。
图3是示出素数生成单元的具体例子的框图。
图4是详细例示出素数生成控制单元的说明图。
图5是示出费马测试控制单元的功能的说明图。
图6是示出米勒罗宾(Miller Rabin)单元的功能的说明图。
图7是示出位阵列的更新功能的说明图。
图8是便携式电子装置(便携机器)的框图。图9是示出RSA密钥对(keypair)的生成功能的说明图。 图IO是关于素数生成功能的说明图。 图ll是详细例示出位阵列填充的操作步骤的说明图。 图12是示出蒙哥马利(Montgomery )常数的运算功能的说明图。 图13是示出费马测试的功能的说明图。 图14是示出米勒罗宾测试的功能的说明图。 (附图标记说明) 卯l IC卡 931输入输出接口 912密钥生成单元 911加密单元 922私有密钥 924数字证书 921存储器 941网络
904 ATM
905卡读出器
902主机系统(银行主机)
903主机系统(卡发4亍源主机)
923公有密钥
914素数生成单元
1111费马测试单元
1131位排列单元
1161小的素数生成单元
1102素数生成控制单元
1123素数4吳补P
1121寄存器A
1122寄存器B
1113余数乘法单元1102费马测试控制单元
1141位阵列
1132位阵列填充单元
1163小的素数表
1162米勒罗宾单元
1171存储器寄存器
101便携式电子装置(便携机器)
131输入输出才妄口
141网络
151 ATM 153计算机 154便携机器 111存储器
132、 133输入输出接口 121数据处理部 122 CPU
123蒙哥马利乘法辅助处理器 124 RNG
具体实施方式
1.定义
首先,对以下说明中使用的词汇的定义和标记法进行叙述。A或 B那样的大写文字的变量意味着例如如1024位的整数那样的大的整 数。用x或y那样的小写文字表示的变量一般意味着比32位小的位 长度的小的整数。
R-AABmodN表示古典的余数乘法式。此处,P-AAB是通常 的乘法,而且,R是除法P/N的余数。换言之,R是整数0〈-R〈N, 成为R + (^N-AAB, Q是某整数。ADmodN是幂乘的余数乘法,对 应于伴随D-1的A论A气.,AmodN的余数乘法。其同样地也还被记述成AADmodN。记号A意味着幂乘或乘方。
gcd(A、 B)是A与B的最大/^约数。例如3是6以及15的最 大/>约数。其原因为6 = 3*2、 15 = 3*5。
A^modN参照A六B-lmodN那样的整数B。如果gcd(A、 N) =1,则存在B。
素数是具有其自身和1这二个除数的整数。例如整数2、 3、 5、 7、 ll是素数。
合成整数(合数)是可以因数分解成至少二个素数的整数。21 =3*7,所以21是合成整数,4 = 2*2,所以4是合数。
MontMult(A、 B、 N)是蒙哥马利乘法,等于将N"i殳为n位的 模数的余数乘法A*B*2 —n mod N。
2.实施方式l
首先以素数生成电路为主进行说明, "IC卡,,
图l示出IC卡的框图。IC卡901至少具备以下部件。即,具备 输入输出接口 931、包括密钥生成单元912以及签名生成单元913的 加密单元911、以及至少存储有私有密钥922、公有密钥923及数字 证书924的存储器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的典型的^f吏用例子。最初,RSA 的密钥是在IC卡901的步骤1011中发生的。RSA的密钥由私有密钥 922以及公有密钥923构成。然后,它们被保存在存储器921中。之 后,IC卡901在步骤1012中向卡发行源主机903发送公有密钥923。 之后,通过发行数字证书924,确认公有密钥。数字证书924在步骤 1013中回送到IC卡,并保存到存储器921。
至少在IC卡的认证动作的最初必需发生RSA的密钥,而且,大 概在数字证书的有效性日期以后,发给数字证书924。在数字证书924 有效时,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,找到比候补Pjnit大的第一素数
P。素数生成单元914具有三个子单元、即费马测试单元llll、位排 列单元1131以及小的素数生成单元1161,它们是通过素数生成控制 单元1102起动并控制的。在后面参照图4叙述素数生成控制单元1102 的详细功能。
费马测试单元1111检查素数候补的素数性。费马测试单元1111 具有三个存储器寄存器、即存储素数候补P1123的一个寄存器、寄存 器A1121以及寄存器B1122。三个寄存器与佘数乘法单元1113连接, 余数乘法单元1113计算出A*B mod P (或A*A mod P ),将其结果存储到寄存器A1121。在该例子中,寄存器A、 B以及存储P的寄存 器的尺寸被限定成1024位。其结果,所生成的素数最大具有1024位。
费马测试控制单元1102起动余数乘法单元1113而控制向该单元 1113的信号路径,使该单元1113执行费马测试,判定素数候补P1123 的素数性。在后面参照图5对该功能进行详细叙述。
位排列单元1113具有位阵列1141,它们由B[OI..... B[b-l
这b位构成。在位阵列1141中各个位B[i]表示素数候补Pinit + 2i。在 B[i]-O的情况下,Pinit + 2i是不恰当的候补而被拒绝。但是,在Bi
-1的情况下,Pinit + 2i是正确的候补,进而必需通过费马测试单元 1111进行测试。位排列是由位阵列填充单元1132填充(填满)的。
位阵列填充单元1132采用最初的素数候补Pinit以及小的素数作为输
入,在位排列的恰当的位置写入零。在后面参照图7对位阵列填充单 元1132进行详细杀又述。
小的素数生成单元1161生成比16位少的位数的小的素数(小素 数),其被设成可用于识别上述不恰当的整数。小的素数生成单元1161 具有存储第一 t个小的素数的小的素数表1163,但可以生成比用于米 勒罗宾单元U62的t个素数多的个数。在后面参照图6对该功能进行 详细叙述。所生成的小的素数被存储到16位的存储器寄存器1171。
"素数生成控制单元"
图4详细例示出素数生成控制单元1102。初始候补P^被拷贝 到寄存器P1123,最初,位排列B[O]、…、B[b-ll全部被设置成1。 在步骤1202、 1203以及1204中,位排列是利用存储在表T 1163中的 第一t个素数而初始化的。更准确而言,在步骤1204中,从表T读 出一个小的素数z,并拷贝到小的素数寄存器1171。之后,通过由位 阵列填充单元1132使用小的素数z,从而位排列1141被更新,向恰 当的位置写入O,去除不恰当的候补。图7详细示出该位阵列填充单 元。
在从表T 1163使用小的素数对位排列进行了初始化之后,素数 生成控制单元调查位阵列1141,搜索索引(index) i以在步骤1213中使所对应的条目(entry) B[i包括1。这样的条目参照整数Pinit + 2i,该整数是正确的候补,进而必需通过费马测试单元llll被进一步 测试。这样,值P^t+2i在步骤1221中被写入到寄存器P1123,在步 骤1222中成为费马测试的对象。图5中记载了费马测试单元的功能。
另外,由于硬件尺寸的限制,表T无法包含很多的小的素数, 其结果,位阵列仍保有较多的B[i=l那样的条目,于是,直到发现 素数P为止必需多次调出费马测试。为了减少费马测试的调出次数并 使素数生成加速,费马测试单元在步骤1222中被激活时,与其同时 生成新的小的素数z,位阵列被该新的小的素数更新。其结果,更多 的条目在位排列中被清O,费马测试的调出变得更少。
步骤1223、 1224以及1225生成这样的新的小的素数,用z更新 位排列。这些步骤由小的素数生成单元1161以及位排列单元1131执 行,并由小的素数生成单元1161以及位排列装置1131进行处理,而 与费马测试并行执行。在图4中,用虛线箭头表示这样的并行计算机 处理。
在步骤1223中,小的素数z的16位的寄存器1171被z + 2更新。 实际上z是奇数,其原因为偶数的整数被2整除,从而明确可知并非 素数。接下来,z成为使用米勒罗宾单元1162进行素数性的测试的对 象。在图6中详细记载了米勒罗宾单元U62的功能。米勒罗宾单元 是判定16位整数的素数性的电路,构成为与费马测试单元相比速度 非常高,且处理更大的整数。其结果,在执行一个费马测试的期间, 可以进行多次米勒罗宾测试。在由米勒罗宾测试单元发现16位的小 的素数时,利用位阵列填充单元1132更新位阵列1141 (步骤1225)。 在进行费马测试的期间反复进行这些三个步骤1223、 1224以及1225。
在费马测试结束且成功时,该概素数(probable prime )P通过 素数生成单元返回到步骤1231,另一方面,素数生成单元使位排列 1233的激活索引递增,再次从步骤1212开始,从而搜索位排列的接 下来的正确的候补。在对位排列的全部索引进行扫描而未发现素数 时,素数生成单元在步骤1232中返回失败。"费马测试"
对费马测试进行说明。在费马测试中,输入底数B以及素数候 补P,运算BP—、modP。如果运算结果不是l,则素数候补P是合成 整数。如果运算结果是l,则P几乎肯定是素数。BP^modP是数据 处理上成本高的处理,即使在位排列中较多的不恰当的候补被去除 时,仍残留应成为费马测试的对象的较多的正确的候补。因此,费马 测试中的处理速度改善具有非常大的潜力。
提高乘方运算的性能的公知方法是使用窗口 (window)方法。 在具有窗口尺寸w的窗口方法中,从幂指数的w位被同时扫描。换 言之,幂指数(其通常被保存成存储器的相应的二进制的表现)以2W 为基础而被重编码(recoded)。这些w位表示整数j (0< = j<2w), 预先计算出数据BJ mod P,并且在窗口乘方技术中运算出A2 mod P 以及AABJmodP。如果代替而^f吏用标准的二进制法,则虽然A"的运 算相同,但新需要w/2的乘法。因此窗口方法可以减少乘法次数。
但是,窗口方法所需的预先运算的值必需保存到RAM。在IC 卡中,RAM的存储容量被限制。于是,在1024位的乘方的情况下, 上述预先运算出的一个值占有128字节。于是,被最佳化的窗口方法 常常使用这种好几个预先被计算机运算出的值。其对于IC卡并不现 实。例如,在窗口尺寸w-5的情况下,预先被计算机运算出的所需 的值在RAM中大约占有4k字节。
本发明的费马测试无需为了存储计算机运算出的数据而要求存 储器,而可以利用大的窗口的窗口法。在费马测试中,在BP。modP 的运算中一般在B中使用特别的底数、特别是B-2。在该情况下, 无论是否为大的w,都无需预先计算机运算或保持BJ modP.的值。例 如,^底设成w-10、 j<21Q= 1024、以及BJ-2k21024。进而,Bj = 2j以 二进制数表述作为(1000...000) 2而被赋予,在该二进制数表述中在 位的位置j成为"l"。其结果,无需预先运算出的表。即,在位的位置 j中建立"1",而用"0,,填入剩余位的位置即可。
图5详细例示出将窗口尺寸设为w = 10时的其考虑方法。据此继续说明。
在步骤1302中,幂指数P-1的最初的IO个位被扫描,被写入 到緩冲器j。计数器i被初始化成p-ll。该计数器的值与接下来应读 入的位、即Pp-u—致。在步骤1303中,累加器(accumulator) A(寄 存器A) 1121被设置成2J。即,向A最初写入0,第j位被设置成l。
之后,开始幂乘运算。在步骤1312中,由余数乘法单元1113 连续10次运算A2 mod P。其原因为窗口尺寸为w = 10。在步骤1313 中从幂指数P-1读入连续的10个位Pj..... Pi-9。此处,P被存储
到寄存器1123,整数值(Pi…Pi-9) 2被写入到緩冲器j。在j是零的
情况下,无需进行乘法,在费马测试中可以继续接下来的处理。在jX) 的情况下,寄存器B 1122在步骤1322中被设置成2j。即,寄存器 B1122被清零,并在其第j位的位置设置成l。 一旦寄存器B1122被 设置,则在步骤1323中使用带余数的运算操作单元1113执行A*B mod P的余数乘法。最后,在步骤1331中,从表示幂指数的被扫描 的位Pi的位置的索引i减去10。只要i大于9 (保证最右边的被扫描 的位Pi-9是Pi以上),则反复上述步骤。
当i小于9时,费马试验另外处理最后的剩余的位。在步骤1341 中剩余的位的值(Pj...PW) 2被写入到緩沖器j。着重考虑P是奇数, 所以P - 1是偶数且其最下位的位是0。接下来,由余数乘法单元1113 运算i + 1次A2 mod P (步骤1342、 1343 )。之后,寄存器B 1122进 行最后的乘法的准备。即,其被清0,然后,其第j位在步骤1351中 被设置成l。其结果,在寄存器B1122中在该步骤之后存储值2、在 步骤1352中计算最终的余数乘法A*BmodP。在步骤1361中累加器 寄存器A 1221包含值1的情况下,P是概素数(probable prime ), 所以费马试验输出"成功,,并结束处理。如果寄存器A还包括其他值的 情况下,P是合数,所以输出"失败"并结束处理。
"费马测试的具体例子"
在该例子中设为向素数判定测试提供整数P- 1971577。此处,P 的值用16进制来表示。在二进制数中,P是21位,设为P-(111100001010101111001 )2。 j的第一值成为P的最上位侧的10位、 即j- ( 1111000010 ) 2 = 962。 A^f皮初始化成2962、即以二进制表示时 在末尾具有962个零的(1000...000 ) 2。计数器i被设成10。之后, 连续10次进行A2 mod P的运算,由此A包括值824444。
接下来的lO位是j- ( 1010111100 ) 2 = 700。因此,270°被写入 到寄存器B,然后,计算出A*B mod P。此处A = 824444、 B - 2700 以及P- 1971577。其运算结果是l,而且,之后还进行一次平方运算。 因此,乘方的最终结果是l,其实际上意味着1971577是素数。
由此可知在上述费马测试中关于乘法仅要求11次的平方运算 (squares )和一次的乘法(multiplication ),与其相比在二进制法中 要求20次的平方运算和11次的乘法。
这次考虑整数P= 1686499 = ( 110011011101111100011 ) 2。由 于是j- ( 1100110111 ) -823,所以A,皮初始化成2823。如果连续10 次进行了 A2modP的运算,则A包括值129007,接下来的10位是j =(0111110001 ) 2 - 497。值2497被写入到8,然后,计算余数乘法 A*BmodP。其运算结果是A = 217983。然后,最后还进行一次平方 运算。最终结果是1165463,与1不同,P并非素数。实际上,P = 1686499 =1093*1543, P是合数。
"米勒罗宾测试"
米勒罗宾测试和费马测试这两者是素数性的概率性的判定测试。 如果它们的测试结果失败,则被测试的整数绝对是合数。但是,在测 试结果成功的情况下,仅被推测成被测试的整数大概为素数,而无法 说绝对是素数。通过这两者的测试,存在其结果失败的较多的整数、 即合数,但其中有时包括在其测试中输出成功的结果的合数。幸运的 是,这样的合数不多。特别在米勒-罗宾测试的情况下非常少。特别, 在使用底数2的米勒罗宾测试中产生这样的错误的16位整数z是 2047、 3277、 4033、 4681、 8321、 15841、 29341、 42799、 49141、 52633。 其结果,如果米勒罗宾测试针对并非上述整数的任意一个的16位整 数z返回"成功,,的测试结果,则该z绝对是可靠的素数。本质上,米勒罗宾测试与费马测试类似。但是,具有重要的差异。
要进行测试的整数是z, z-l记述成2""d。此处,j + l是z-l的二 进制标记中的下位侧的位零的个数。为了使用底数2的米勒罗宾测试, 计算出余数乘方乘法x-211 mod z。如果其运算结果是l或z-1,则 测试结果是"成功",可以说z大概是素数。否则对x进行j次乘法, 在各自的乘法之后x再次与z-l进行比较。在它们一致的情况下, 测试返回"成功"。如果在j次乘法之后,x绝对不等于z - 1的情况下, 测试返回"失败",z为合数。
图6示出在保存于寄存器1171中的16位的整数2= (z15...z0) 2 的素数判定中应用了米勒罗宾测试的情况。在z是2047、 3277、 4033、 4681、 8321、 15841、 29341、 42799、 49141、 52633的寸壬意一个的情 况下,z是合数,在步骤1403中返回"失败"。否则,在步骤1404至 1406中计算出z-1的二进制表现中的末尾的零的个数即j。在步骤 1411至1416中执4亍乘方的余数乘法2d的mod z(此处z - 1 = 2j + "d )。 累加器x被初始化成1,在步骤1411中循环计数器i被初始化成15。 接下来,在循环计数器i大于j的期间,执行接下来的步骤。首先, 在步骤1413中执行余数乘法xZmodz。此处,x以及z是16位整数。 之后,在Z的位Zi是l的情况下,使用左移x l以及模数z的减法, 在步骤1415中计算出2*x mod z的运算。
在乘方计算之后,累加器x包括值l的情况下,算法停止动作而 在步骤1441中返回测试结果"成功"。否则,x在步骤1431中与z-l 进行比较。在它们相等的情况下,算法停止动作而在步骤1443中返 回测试结果"成功"。在不相等的情况下,在步骤1432中运算出余数 乘法x2 mod z,循环计数器被进行减法运算。直到计数器i成为1为 止反复上述操作。当累加器绝对不等于z-1时,算法在步骤1442中 返回测试结果"失败"。
"米勒罗宾测试的具体例子"
在小的素数表T 1163中,假设存储有17个第一小的素数T
=5、 T[2=7、 T[3]=ll、 T[4]=13、 T[5==17、 T[6=23、 T[7=29、,=31、 T[9=37、 T[10=41、 T[ll=43、 T[12=47、 T[13=53、 T14=59、 T[15=61 、 T[16=67 。 也许是小的素数的整数是z=69 = (0000000001000101 ) 2。 z并非可以逃过4吏用底数2的米勒罗宾测试 的16位整数之一,所以测试可以/人伴随自z-l= ( 000000000100 0100) 2中的末尾的0的数减去1而得到的数j、即j-l的计算开始。 接下来,累加器x被初始化成l,计数器i被初始化成15。直到i-6 为止,z-1的被扫描的位全部是零,累加器的值未被修正。在反复i =6中,x在步骤1415的左移之后成为2,之后,进行四次平方运算 和一次左移。其结果,在步骤1422中,x取得值41。由于x与l或 68不同,所以还进4亍一次平方运算,x成为25,仍与68不同。在该 时刻,测试返回"失败"。其原因预料为,2 = 69 = 3*23是合数。
接下来的奇数是2 = 71 = (0000000001000111 ),在该情况下, j = 0。直到i-6为止,x仍相同、即仍为x-l, ^f旦i-6的一位左移 之后,x成为2。之后,进行四次平方运算,x = 3,进行一位移位,x =6,进行一次平方运算,x-36,然后,进行一位移位,最后,x成 为1。其结果,试验在步骤1422中停止,x=l、 z = 71,为素数。
"位排列的更新"
位排列是由用于去除作为被小的素数整除的候补P = Pinit + 2i的 合数的埃拉托色尼(Eratosthenes)的筛选启示的乂>知方法。位排列 法的大概构思在于,为了小的素数z而计算P^ mod z,在用于P-Pinit + 2i mod z = 0 ( P由z整除)那样的全部位置i的位排列中向B[i
写入0。在图7中说明在位排列的恰当的位置处写入零的方法。
向位阵列填充单元1132的输入由位排列1141、初始候补Pinit 1103以及小的素数z 1171构成。最初,緩冲器x在步骤1513中通过 值Pinitmodz被初始化。该运算的计算容易。其理由如下所述。其原 因为,尽管Pinit是大的整数,但z仅为16位。接下来,位阵列填充 单元计算P是奇数且P mod z-0那样的第一个整数P-Pinit + 2i。在 Pinitmodz = 0的情况下,Pinn满足全部的状态而索引i在步骤1515中 ^皮设置成0。另一方面,由于x并非零,且Pinit = x mod z、 Pinit + z-x-Omodz,所以将其得知是容易的。另一方面,如果x是奇数,则z -x是偶数,Pinit + z-x是奇数,满足所要求的全部状态。其结果, 在步骤1522中,值(z-x) /2通过减法和右移(z-x) 1,被写入 到緩沖器i。另一方面,在x是偶数的情况下;Pinu + z-x同样是偶数, 但Pinit+2z-x是奇数。因此,在步骤1523中,通过减法和右移z-x l,值(2z-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 十Wz更小的全部索引i + k*z,位B[i]被清零。最后,位阵列填充单 元在步骤1551中返回位排列。
"位排列更新的具体例子"
在该例子中,位排列1141具有尺寸b = 64,而且,小的素数表 1163存储16个小的素数、即,=3、 T[l=5、 T[2=7、 T[3=ll、 T[4]=13、 T[5=17、 T[6]=23、 T[7]=29、 T[8=31、 T[9=37、 T[10=41、 T[ll=43、 T[12=47、 T[13=53、 T[14=59、 T[15=61。最初的候补 1103的输入 <艮设成512位的奇数。例如是
首先最初,位排列仅包括位l。换言之,在B被表现成整数的情 况下,其二进制的表现成为
B由64位构成。最初,素数生成控制单元向使用小的素数表T[O].....
T15的位排列的恰当的位置写入零。例如,T0=3以及Pinit mod 3 =1。 l是奇数,因此,在该位阵列中在(3-1) /2 = 1的位置处写入 0,然后,在位置1 + 3 = 4以及4 + 3 = 7的位置处也如此。在利用T[O
=3进行篩选之后,位排列成为
为了表T的全部的小的素数,反复该步骤,位排列成为B=(1001011000000001010011000010000001010010000001011001000010000010)2 b
由此,可知存在与通过费马测试确认了仅18位仍;故设置成1的整数 Pinit + 2i对应的、更小的索引i的值。由于B
-1,所以必需通过费
—j '力j v、且init。
同时小的素数生成单元1161搜索接下来的小的素数。16位寄存 器z 1171在其表中存储最后的小的素数(即61)。由米勒罗宾单元 1162对照接下来的奇数的整数63。然后,得到63并非素数的结论。 其原因为,63 = 3*21。同样地,65并非素数。其原因为,65-13*5。 但是,米勒罗宾单元得到67是素数的结论。
之后,位排列通过z-67被更新。Pinitmod67 = 24,在位阵列中 在67- 24/2=55的位置处被写入0。遗憾的是,B[55]已经是0。因此, 利用67来篩选的作法在该例子中并未得到任何好转。事实上,其与 接下来的小的素数71、 73、 79、 83、 89、 97以及101相同。但是, 在由米勒罗宾单元1162生成了小的素数z = 103时,运算Pinitmod 103 提供13,其对应于索引(103- 13) /2 = 45。因此之前是1的B[45
被写入0。位阵列成为
B=(1001011000000001010011000010000001010010000000011001000010000010)2 d
只要费马测试1111在步骤1222中进行,则该步骤继续。米勒罗 宾测试用短的整数(16位)进行处理,相对于此费马测试处理长的整 数(在该例子中512位),所以在进行费马测试的期间可以生成较多 的小的素数,可以去除所追加的部分。例如,如果假设在费马测试中 为了 512位的各自的余数乘法可以生成一个小的素数,则在该费马测 试期间可以追加生成512个小的素数。在该情况下,位排列成为
B=(0001011000000000000000000000000001000010000000011000000010000000)2 e 其结
果,在最初的费马测试之后,在位阵列中仅残留八个。
最初的费马测试采用Pinit作为输入。但是,乘方的运算2A (Pinit -l)m0dPinit的结果并非1。因此,Pinit并非素数。接下来的位阵列
的零以外的条目是B[3,接下来的素数候补是Pinit + 6。即是。值Pin" + 6存储在寄存器P 1123中,然后,费马测试开始2A (Pinit + 5) mod Pinit + 6的计算。在乘方计算的期间,可以生成新的小的 素数,以去除位排列中的较多的零以外的条目。但是,在该例子中, 关于512个追加的小的素数;在排列中未写入任何零,幸运的是,第 二费马测试2八(Pinit + 5) modPinit + 6的结果是1,实际上,Pinit + 6 是素数。根据该点,素数生成单元914返回P^ + 6的值。 "扩展,,
本发明不限于上述实施方式1中说明的内容。例如,上述系统还 可以用于便携电话、PDA、利用公有密钥加密方式且使用有限的计算 机资源、存储器资源的任意电子设备。乘方的类型可以不同。例如, 代替乘方的余数乘法单元,而还可以利用蒙哥马利乘法装置。小的素 数的重构方法不限于上述例子中说明的内容。例如,还可以利用具有 与2不同的底数的米勒罗宾测试、或者利用费马测试、其他组合测试 那样的不同的测试。同样地,还可以采用如米勒罗宾、索洛维-斯特 拉森(Solovay - Strassen )测试那样针对素数候补的不同的素数性判 定测试。进而,重构的种类不限于窗口方法,还可以〗吏用NAF(Non - Adjacement Form )或FAN的重构法、或者其他'除当的重构法。
3.实施方式2
进行着眼于板载(onborad)的加密生成的说明。 (便携机器)
图8示出便携式电子装置(便携机器)101,例如是IC卡、或 强化了安全性功能的设备。便携机器101经由其输入输出接口 131与 网络141连接,可以发送数据142并接收数据143。通过该网络141, 便携机器10可以与ATM 151、计算机153或其他便携机器154进行 通信。如果网络141上的通信路径中的安全性无法得到保障,则消息 有可能被恶意的用户窃取。因此,在便携机器中需要搭载安全性机构。 这些安全性机构包括消息加密以及数字签名,而且,在实施方式2中, 应用作为事实上的标准的被称为RSA的公有密钥加密法。
便携机器101包括输入输出接口 131、计算单元121以及存储器111三种单元。
便携机器可以利用输入输出接口 131与一个或多个网络连接。在 实施方式2中,便携^L器101包括二个输入输出接口 132以及133。 其实现接触接口和非接触接口。数据处理部121包括CPU 122、蒙哥 马利乘法辅助处理器123以及随机数发生器124。 CPU (中央运算处 理装置)应用32位命令,其包括存储器操作命令、加法、减法、乘 法或除法等那样的算术命令、移位、AND或OR等逻辑运算命令、控 制命令。CPU可以执行由32位命令构成的程序。 一般,RSA关联的 动作对512位以上的非常大的整数进行操作。将该种大的整数算术运 算处理用作由CPU122执行的程序的作法是不现实的。其原因为,便 携机器仅具有非常有限的计算机处理能力。因此,便携机器为了 RSA 而具备蒙哥马利乘法辅助处理器123那样的专用计算单元。蒙哥马利 乘法辅助处理器与寄存器A115、 B116以及N117接口连接,在该寄 存器117保有n-位奇数的整数的情况下,计算蒙哥马利乘法A*B*2 —"modN或蒙哥马利乘法A*A*2_nmodN。此处,在寄存器115以及 116中分别保存有整数A以及B。随机数发生器124可以连续生成随 机的位。而且,它们可以被用于包括RSA的加密应用。
三种存储器111如下那样区别。用于存储緩沖数据以及临时数据 的易失性存储器112、用于存储用户数据的可写入的非易失性存储器 113、用于存储程序的只读非易失性存储器114。三个蒙哥马利乘法寄 存器A 115、 B 116以及N 117是与蒙哥马利乘法辅助处理器123连接 的基本的易失性存储器。在实施方式2中,在易失性存储器中应用 RAM(随机访问存储器),在可写入的非易失性存储器中应用 EEPROM(可以电擦除PROM),在只读的非易失性存储器中应用 掩模ROM (读出专用存储器)。
虽然没有特别限定,但在实施方式2中假定以软件方式实现与在 实施方式1中说明的加密单元911对应的结构。即,在非易失性存储 器114等中存储所需的程序,并由数据处理部121的CPU 122等执行 该程序,从而进行后述的流程图中示出的处理。(RSA的密钥对的生成)
为了以数字方式签名或解读消息而使用便携机器101上的RSA 加密系统之前,必需发生RSA密钥对(keypair)。如上所述,在便 携机器上生成密钥对是有意义的。图9详细记载了其步骤。密钥对生 成的输入201包括n (公有模数N的位长度)、p (私有素数P的位 长度)、q (私有素数Q的位长度)、E (公有幂指数)、b ( 1位阵
列的尺寸)、预定的表(T[O]..... T[t-l])、以及mri(米勒罗宾
反复数)。
在后面说明位排列B[O.....B[b-l、表T[O、…、T[t-1以
及米勒罗宾反复数的作用。在步骤S202中,由随机数发生器124发 生二个最初的奇数的随机数Pinit以及Qinit。在密钥对的生成步骤中,
希望在[Pinit..... Pin" + 2 ( b - 1)与[Qinit..... Qinit + 2 ( b - 1)之
间搜索素数P以及Q。因此,在步骤203中,保证检索间隔总是正确 的范围,保证P以及Q分别具有p位和q位。在步骤204中,结果 Pinit * Qin"正确地具有n位的情况被确认。如果其正确,则模数N-P*Q可靠地具有n位。在步骤203或204中的任意一个失败的情况下, 在步骤202中新发生最初的随机数Pin"以及Qinit。
一旦最初的随机数Pjnit以及QinU满足全部要求的状态,则开始
素数生成步骤。b位的位阵列B[O.....B[b-l]被保存到RAM 112,
在步骤211中被初始化。位Bi对应于整数Pinit + 2i。整数Pinit + 2i 全部是奇数。其原因为,P隨是奇数,2i是偶数。实际上,素数生成
步骤的目标是以间隔[Pinit.....Pinit+2 (b-1) I发现素数。偶数显然
并非素数,可以没有问题地忽视。在位排列中被设置成1的位B[i是 正确的候补,其必需进一步判定素数性。被清零的位B[i对应于已知 并非素数的不恰当的候补。首先最初,全部候补在步骤211中被设置 成"正确",然后,在步骤212中,向不恰当的候补在位阵列中写入零, 按照图11记载的步骤进行这些处理。在步骤212中去除了不恰当的 候补之后,在步骤213中判定剩余的正确的候补的素数性,由此,输 出素数P以及DP*E = 1 mod P - 1那样的逆元Dp,或者返回"失败".图10详细示出步骤213。在发现素数P的情况下,在步骤221至步骤 224中针对最初的候补Qinit反复相同步骤。在步骤214或224中是"失 败"的情况下,在步骤202中岌生新的初始随才几数Piw以及Oi^。
在发现了 二个素数P以及Q之后,在步骤231中计算出满足D*E =lmod (P-1) * (Q-l)的私有密钥D和7^有才莫数N-P论Q。可 以使用蒙哥马利乘法辅助处理器(还简称为辅助处理器)123计算出 公有模数N,可以利用非专利文献1中记载的公知的二进制扩展GCD 算法计算出公有密钥D。使用由于P是素数所以成为Q_1 = Qp-2mod P这样的事实,在步骤232中计算出RSA-CRT Qinv的私有密钥要素。 可以使用蒙哥马利乘法辅助处理器123计算出幂乘的余数乘法QP_2 mod P。例如,使用专利文献l记载的蒙哥马利乘方算法。最后,在 步骤233中向EEPROM 113写入包括公有模数N、私有密钥D、私 有密钥要素RSA-CRT、 P、 Q、 DP、 DQ以及Qinv的全部密钥元素。
"素数生成"
在图9中,在步骤213以及223中,发生素数P以及Q、私有 密钥元素Dp-E1 modP-l、 DQ = E —1 mod Q-1。针对该素数生成 步骤的输入301是最初的偶数随机数Pinit (或Qinit)、公有幂指数E、 位排列B[OI.....B[b-l、以及mri(用于米勒罗宾测试的反复数)。
在步骤302中,存储在RAM 112中的计数器i被初始化成0。
该计数器用于对位排列B[i的要素进行寻址,表示素数候补Pinit+2i。
在步骤311以及312中,扫描位排列B[i的条目。在B[i]-l时,候 补Pinit+2i被设为"正确",进而必需判定接下来步骤中的素数性。在 B[i-0时,候补被设成"不恰当",接下来的候补被设成测试对象。
在步骤321中,由CPU 122运算出候补P-P^ + 2i,运算结果 被存储到辅助处理器寄存器117。接下来,在步骤322中使用费马测 试判定P的素数性。图6示出费马测试。在P可以通过费马测试的情 况下,P实际上是素数这样的可能性非常大。
但是,P必需满足进一步的状态。即,为了可靠地确保存在逆元 Dp = E。 mod P - 1, P - 1与公有幂指数E的最大公约数必须是l( gcd(P-l、 E) -1)。因此,在步骤331中,例如使用非专利文献l中 记载的二进制扩展GCD算法计算出Dp。在步骤为"失败"的情况下, gcd(P-l、 E)并非l, P被拒绝,测试接下来的候补。
费马测试尽管为了尽快去除作为合数的候补而有用,但其无法充 分良好可靠地确立这些素数。例如,存在被称为卡迈克尔
(Carmichael)数的合数,且在多数情况下其可以通过费马试验。为 了高可靠性地保证P的素数性,在实施方式2中,在顺利地进行了费 马测试之后,反复几次米勒-罗宾测试。必需恰当地选择反复数
(mri)。在非专利文献1中,记载了可以顺利地反复通过三次米勒 罗宾测试的1024位的随机整数并非为素数这样的概率是2 —8°。换言 之,在选择了通过三次米勒罗宾测试的候补时发生错误的概率是2 —8"。 其概率极小。在步骤341中,计数器j在RAM112上被初始化成0。 只要j小于反复数mri,则在步骤342中执行图14记载的米勒罗宾测 试,在步骤343中通过CPU122计数器j被递增。如果P成功通过用 mri表示的次数的米勒罗宾测试,则P大概是素数,利用素数生成步 骤在步骤351中,与逆元Dp—起选择。但是,在位排列、费马测试、 逆、米勒罗宾测试中的任意一个失败的情况下,在步骤361中i被递
增,测试接下来的候补P,+ 2i + 2。在期间[Pinit.....Pinit + 2(b-l)
中的步骤中未发现满足的素数的情况下,在步骤352中,步骤失败。 (位阵列)
t存在最佳值,其是用于进行筛选以使素数生成步骤的速度成为 最大的小的素数的数量。即, 一方面,使用更小的素数,可以从位阵 列筛选出更多的要素,其减少调出进一步精细的素数判定测试的次 数,另一方面,在4吏用更小的素数z时,减少位阵列中的Pmodz和 写入操作。但是,小的素数的最佳值典型地大至1, 000以上。
在篩选中使用较多的小的素数时,需要大的表来存储它们。为简 化说明,按照素数位长度,可以用一个字节(8位)或二个字节(16 位)存储各个小的素数。遗憾的是,8位的素数不多。小的素数表中 的要素的大部分占据ROM114的二个字节。例如,在筛选中使用2,048的素数的情况下,表在ROM 114中占据4k字节。其对于IC卡 来说是非常大的尺寸。
进而,使用辅助处理器123计算出z小的素数的运算P^modz,
但是,虽然Z小,但Pinit大。因此,由作为PiWt的位尺寸的p决定使
用辅助处理器123计算的蒙哥马利乘法的位尺寸。其结果,蒙哥马利 乘法的结果是MontMult (Pinit、 1、 z) =Pinit*2_p mod z。而且,其 与期望果Pinit mod z不同。代替地,必需计算操作MontMult( Pinit、 2pmodz、 z) =Pinit*2p*2 —P-Pinit mod z。结果,需要蒙哥马利常数 的表,其保有用于全部小的素数z的全部蒙哥马利常数2Pmodz。在 2, 048的小的素数的情况下,其需要用于小的素数的4k字节和用于 蒙哥马利常数的4k字节的存储器。更恶劣的是,蒙哥马利常数依赖 于素数候补P的位长度p。例如,在程序必需支持1024位以及2048 位的RSA的情况下,为了蒙哥马利常数,需要二个不同的表。
从上述说明可容易理解,为了筛选需要使用多个小的素数,但该 途径几乎不适合于IC卡的不充分的存储器资源。在实施方式2中, 使用多个小的素数,但使所需的存储器量适合于IC卡。有二个解决 课题的点。第一点在于,与这些全部值相比,还不如存储连续的小的 素数之间的相异。第二点在于,与存储这些相比,还不如在执行时运 算出蒙哥马利常数2P m0dZ。
利用上述第一点,用于存储小的素数的存储器容量减少一半。其 原因为,二个连续的小的素数之间的相异通常情况下较小,可以用一 个字节存储而并非二个字节。实际上,可以用一个字节存储的二个连 续的素数之间的最大差是A = 118,在zl = 1,349,533与z2 = 1,349,651 之间产生。换言之,比zl- 1,349,533小的素数之间的差异可以总是 存储到一个字节。
第二点的优点在于,对蒙哥马利常数完全不要求存储器的容量。 另外,伴随充分的调度,可以使由CPU122计算的蒙哥马利常数的运 算与由辅助处理器123运算的蒙哥马利乘法MontMult(Pinit、 2P mod z、 z)的处理并行。因此,通过使用实施方式2的途径和t-2, 048的小的素数,可
以将为了在ROM114中存储小的素数之间的差的表T[O.....T[t-
lj而所需的存储器容量设为2k字节,不会对篩选操作造成动作速度上 的恶化,并且,可以减少处理成本大的素数判定处理的调出次数而提 高处理效率。
接下来,图ll详细例示出位阵列填充的操作步骤。步骤401的 输入由p位的初始奇数随机数Pinit (或者q位的Qinit)、最初用1填
入的位排列B[O.....B[b-II、以及存储连续的小的素数之间的相
异的表T[O.....T[t-1构成。例如,假设成表T存储与t = 4个小
的素数相关的信息。T
重构的所有
小的素数来更新位排列。表T[OI.....T[t-1使用对其结构要素进行
索引的计数器i。位排列的更新步骤的基本考虑方法如下所述。即, 第一,使用辅助处理器123计算出x2 = Pinitmodz2,此处,z2对应于 在表T中具有索引i的激活的小的素数。第二,与第一处理同时,CPU 122运算出与索引i+l对应的接下来的小的素数z3。第三,用xl = Pinit mod zl更新位阵列,此处,zl是与索引i-l对应的前面的小的 素数。在步骤412中,使用辅助处理器123计算出Pinitmodz2。此处, z2是与索引i对应的小的素数。更准确而言,小的素数z2被拷贝到 辅助处理器寄存器117,蒙哥马利常数被拷贝到辅助处理器寄存器 115,寄存器116已经保持有Pinit。接下来,辅助处理器开始运算 MontMult(r、 Pinit、 z2 ),其运算结果被存储到RAM 112的緩冲器 x2。同时,在步骤414中,为了由CPU 122执行的运算z3-z2 + Ti + ll而访问表要素T[i+l]。此处,z3是与索引i+1对应的接下来的 小的素数。同样地计算出其蒙哥马利常数2P mod z3。在i-t-l或i -1时步骤414的处理被跳过。其原因为,表T仅具有t个要素。
在该状态下,使用在前面的步骤i-1中运算出的值xl = Pinit mod zl来更新位阵列。在xl-0的情况下,P^被zl整除,于是,在步骤 432中向B[0
直接写入零。在xl是奇数的情况下,P = Pinit + zl - xl 满足P-0modzl。另外,Pinit、 xl以及zl是奇数,因此p是奇数。 于是,与P对应的索引j是j- (zl-x1)/2,其是由CPU 122在步 骤423中代替利用2的除法而使用右移来运算出的。如果X1是偶数, 则Pinit+Zl-Xl是偶数,并非位阵列的要素。代替其,而选择接下来 的奇数。即,是P-Pin" + 2zl-xl。在步骤423中由CPU122使用右 移计算出所对应的索引,为j-zl-x1/2。
在执行了步骤422或423之后,Pinit + 2j = 0 mod zl那样的第一 索引j已经变得有效。但是,实际上,整数Pinit + 2j + 2zl、 Pinit + 2j + 4zl、 Pinit + 2j + 6zl以及其他也被zl整除。因此,在步骤432中, 向位B[j写入零,只要j处于范围[O、…、b-l,则通过CPU122,
zl被追加到索引j。这样,Pk那样的全部奇数Pk-Pinit + 2AkMj + Zl)
存在于位阵列中,Pk mod zl = 0被识别成"不恰当"的候补。
为了表T[2、T[3.....T[t-1的全部要素,而反复上述步骤。
在步骤441中,值z2以及x2 = Pinit mod z2 4皮拷贝到zl以及xl,在 步骤442中,z3被拷贝到z2,并且指示表T[i的要素的计数器i被递增。
(蒙哥马利常数的运算)在图11中,在步骤402以及414中计算出与小的素数z关联的 蒙哥马利常数r-2Pmodz。图12详细例示出其步骤。向该步骤的输 入是素数候补P的位长度p、以及小的素数z。由于小的素数z小, 所以其位长度通常小于16位,可以利用CPU 122容易地处理与小的 素数z关联的全部运算。此处无需使用蒙哥马利乘法辅助处理器123。 其结果,可以与辅助处理器动作并行地计算蒙哥马利常数。
在实施方式2中使用配置在RAM112中的三个緩沖器计算蒙哥 马利常数,在步骤502中緩冲器被初始化。緩沖器存储2的乘方,x 是存储部分结果的累加器,i用于计算2P mod z的运算中的幂指数p 的扫描。实施方式2中使用的技术是从右向左的二进制的乘方。基本 的考虑方法在于,计算出y = 2A (2A0) =2^2 mod z、 y = 2A (2A1) =22=4 mod z、 y = 2A ( 2A2 ) =24=16 mod z、 y = 2A ( 2A3 ) =28=256 mod z以及其他,从右向左扫描p的二进制表现,在所扫描的位是l时, 计算x = x*y mod z。
在p-0的情况下,向步骤542返回x-l。否则,在步骤512中 使用CPU 122使i右移一位。在i的最下位的位是l时,右移动作生 成进位(carry)。在该情况下,x在步骤522中被更新成x*y mod z。 在实施方式2中,CPU不直接支持xWymodz那样的的余数乘法。因 此,动作被分成二个部分。 一个是古典的乘法x*y,另一个是余数运 算xmodz,利用CPU来支持这两者。
接下来,只要緩冲器i并非零,则计算出接下来要求的2的乘方。 如果假设成该步骤执行第k个反复,则是y-2A (2Ak)。接下来要 求的2的乘方是2T ( k+1) =2A (2Ak) *2A (2Ak) =y*ymodz, 在步骤532中进行运算,在其中利用一个乘法yAy和具有一个余数的 除法ymodz,其是利用CPU122运算的。
緩冲器i在每次反复时被右移,所以i最终成为0。在该点中, 幂乘的余数乘法2P mod z完成,可以返回运算结果x - 2P mod z。 (费马测试)
公知在椭圆曲线加密的情况下乘方运算的速度得到改善。例如使用Non - Adjacent Form ( NAF )那样的用于幂乘数的符号表现。NAF 的速度比单纯的二进制的乘方高,且无需再次计算。但是,在椭圆曲 线乘方和RSA乘方之间存在大的差异。即,在前者的情况下,可以 得到位置的逆转而几乎不会造成运算成本,但在后者的情况下,在稍 微的整数的反转运算中需要大的运算成本。由于在符号表现中的负数 中需要反转运算,所以该方法对于RSA通常是不恰当的。
尽管通常对于RSA来说它们不具有优势这样的事实,但在实施 方式2中为了费马测试而使用符号表现。实际上,A*B —imodP是一 般需要大的运算成本的动作。但是,在B-2的情况下,动作成为A/2 mod P。进而,利用2的除法仅仅成为右移,也许为P的加法之后。 总之,在A是偶数的情况下进行A>>1 (右移一位),在A是奇数的 情况下进行(A + P) >>1 (右移一位)。
NAF重编码是从右向左进行的,幂乘是从左向右进行的,所以 无法结合这双方的处理。即,最初,幂指数(exponent) 4皮重构,而 该新的表现的数存储到不同的RAM区域,第二,进行幂乘计算。该 方法的缺点是幂指数非常大,必需在RAM中预约用于存储该重构的 样式(form)的区域。所重构的样式至少比初始的幂指数大。如果从 左向右 一起进行上述重构和幂乘运算,则无需为了存储新的表现而分 配RAM。其原因为,可以将上述双方的处理结合成一个。
实施方式2中的费马测试可以得到如下结果。即,可以将重构和 幂乘运算综合成一个固有的处理阶段(Phase),因此,无需追加用 于存储所重构的指数的存储器。为了达成这一点,费马测试利用FAN 表现,其通常以椭圆曲线使用,对于椭圆曲线例如有专利文献2的记 载,此处,故称为wMOF。 FAN在其成长的点上与NAF相同,但 FAN重构是从左向右执行的,而无法与幂乘运算阶段综合。
在FAN幂乘运算中的一个反复中,至多对PiM、 Pi、 Ph逸三位 的幂指数进行扫描。其内容可以分类成情形1~情形6。
"情形1": (Pi + IPi) = (11) 2被重构成(Si) = (0) , i被设 置成i 一 1。"情形2": (PiMPiPw) = (011) 2被重构成(SiSi。) - (1), i被设置成i- 1。
"情形3": (PiuPiPi-。 = (010) 2被重构成(Si) = (01) , i 被设置成i-2。
"情形4": (Pi+1Pi) = (00) 2被重构成(Si) = (0) , i净皮设 置成i - 1。
"情形5": (PnPiPi — J = (100)2被重构成(SiSH) = ( -1), i被设置成i-l。
"情形6": (PiuPiPiM) = (101) 2被重构成(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位的奇数的整数P构成,其成为素数性的判定对象。在IC
卡的存储器112中,P被存储成一连串的p位(PpM…Po) 2。蒙哥马
利乘法辅助处理器运算MontMult (A、 A、 P) -A*A*2-P mod P, 所以辅助处理器寄存器A 115以2*2P modP初始化,而并非以2初始 化。该方法成为MontMult( A、 A、 P) = 2*2*22P*2 —p = 2*2*2P_ mod P。可知在蒙哥马利乘法之后也仍存在要素2P。在步骤602中,利用 2P+1 mod P来初始化辅助处理器寄存器115,其原因为p不是很大, 通常p-512或p- 1024,在二进制中,以1和后续的p+1个0这样 的形式单纯地表现21^1。接下来,直到2P"小于P为止,根据需要对 P进行几次减法。进而,在RAM112中计数器i被初始化成p-2。 在情形1、 2、 3、 4、 5以及6这全部中,总是进行平方运算。因此,在步骤612中计算蒙哥马利乘法。更准确而言,利用蒙哥马利乘 法MontMult (A、 A、 P)更新辅助处理器寄存器A 115,此处,素 数候补P的输入被存储到辅助处理器寄存器N117中。接下来,有依 赖于P的值的不同的模式,此处,各个模式对应于情形l、 2、 3、 4、 5或6中的一个。在步骤613中判定P的第i位即Pi,而P被存储到 辅助处理器寄存器117中,计数器i处于RAM112中。如果Pj-l, 则必需执行与情形l、 2、或3对应的操作。在P,0时,必需执行与 情形4、 5、或6对应的操作。
在Pi-l的情况下,在步骤612中检查位PiM的值。其检查内容
如下所述o
"情形1":如果PiM-O,则进行与所检测出的情形l对应的位 处理。情形l仅要求一个蒙哥马利乘法处理,而无需其他处理,对接 下来的位的值进行检查。在Pi+1 = 0的情况下,为了区分情形2以及3, 必需对位Pi-i进行检查。因此,在步骤622中,对位P卜i的值进行检 查。
"情形2":在P卜i-O的情况下,进行与所检测出的情形2对应 的位处理。因此,在步骤623中由CPU 122使辅助处理器寄存器A115 的数据右移一位。在移位操作之后,寄存器A115的数据比p位多。 即,在该情况下,在步骤625中根据需要必需从A减去几次P。
"情形3":在Ph = 1的情况下,进行与所检测出的情形3对应 的位处理。在步骤641中进而进行蒙哥马利乘法,计数器i还被递减 一次。之后,在步骤623中使辅助处理器寄存器A115的数据左移一 位,在步骤625中如果A比p位多,则从A减去P。但是,在i-l 的情况下,代替而执行情形2。在& = 0的情况下,在步骤6i31中检 查位PiM的值。其检查内容如下所述。
"情形4,,在Piu-O的情况下,无需进一步的动作。在&+1 = 1 的情况下,为了区别情形5以及6,必需对Pi-i进行检查。
"情形5":在Pw = 0的情况下,A被右移一位。在A是偶数的 情况下,其最下位的位是0,在步骤635中由CPU 122对A直接进行移位。但是,在A是奇数的情况下,在步骤634中由CPU 122向A 加上P。由于A和P这两方都是奇数,因此A + P是偶数,在步骤635 中进行右移。
"情形6":在Ph = 1的情况下,进行蒙哥马利乘法,在步骤642 中计数器i被递减,之后,接着步骤633进行右移。
反复进行上述步骤,直到成为0为止在步骤614中对计数器i进 行递减。分别对P-1的二个最下位的位进行处理。从P-1的最后开 始数起第二个位是P^在Pi-O的情况下,在步骤651中运算蒙哥马 利乘法,在P广1的情况下,根据需要加上步骤654的P之后,在蒙 哥马利乘法之后继续步骤655的右移。由于P-l是偶数,所以P-l 的最后的位总是0,因此,在步骤661中计算蒙哥马利乘法。在该点 上,计算出全部位,但必需删除蒙哥马利常数的2pmodP。因此,在 步骤663中,数据1被写入到辅助处理器寄存器B 116,由辅助处理 器123运算蒙哥马利乘法MontMult ( A、 1、 P) =A*2_pmodP。在 该最后的乘法中,消除蒙哥马利常数的2pmodP,然后,向步骤662 返回存储在辅助处理器寄存器A中的数据。在A是l的情况下,P大 概是素数,在A并非1的情况下,P是合数。
"费马测试的具体例子"
在该例子中,假设成整数P-109是素数性的判定对象。使用图 13的费马测试,计算幂乘的余数乘法21。81110(1109。在二进制数时, 是108 - ( 1101100 ) 2,在具备基于二进制法的左移的费马测试中, 进行三次左移,其原因为,除了其最上位的位的1以外还有三个位的 1。另一方面,108的FAN表现是108 = ( 100 - 10- 100),仅存在 二次右移。
进行详细说明。P= 109的位长度是p-7。最初,用2P"modP =28 mod 109初始化A。其原因为,28 = 256, 28- 2*109 = 38,寄存 器A-38,计数器i是p-2-5。
在"i-5,,的情况下,利用MontMult(A、 A、 P) = MontMult (38、 38、 109) = 76来更新寄存器八。接下来的Pd、 P6 = l,而且所对应的重编码是o,因此,无需进一步的操作。
在"i-4"的情况下,利用Mon飾lt(76、 76、 109) - 86来更 新寄存器A。接下来的P4 = 0、 P5-l、 P3 = l,而且所对应的重编码 是0-1。用MontMult (86、 86、 109) =68来更新寄存器厶,计数 器i被递减。68是偶数,所以直接执行右移A>>1,寄存器A被更新 成34。
在"i-2,,的情况下,利用MontMult (34、 34、 109) = 101来更 新A。接下来的P2-1、 P3=l,而且所对应的重编码是O。
在"i-l"的情况下,利用MontMult (101、 101、 109) = 55来 更新A。接下来的Pi-0、 P2 = l、 P。 = 0,而且所对应的重编码是-l。 寄存器A是偶数,所以对A加上109,计算右移,其结果,得到A-82。
由此,执行费马测试的最终步骤。P^0、执行二个蒙哥马利乘 法。即,MontMult (82、 82、 109) = 90以及MontMuh ( 90、 90、 109) =19。由于是MontMult (19、 1、 109) -1,所以费马测试输 出1。其与109是素数这样的事实匹配。
"米勒罗宾测试"
在米勒罗宾测试中P-l被写成2"1 *D。此处,j + l是P-l的 二进制的表现中的末尾的0的数量。第一,为了某底数B,计算乘方 B—XDmodP。在xDmodP-l的情况下,P大概是素数。另一方面, 在B = XD mod P并非1的情况下,B与-l进行比较。在B并非-1 的情况下,B被进行j次平方运算,在各个平方运算之后,再次对运 算结果与-l进行比较。在进行了一个这些平方运算之后,当8= -1 时,费马测试停止,得到P大概是素数这样的结果。否则P是合数。
如费马测试那样,向米勒罗宾测试的输入由步骤701的p-位的 奇数P- (PP—卜.P。)构成。配置在RAM112中的计数器j存储从P -1中的末尾的0的数减去1而得到的数。在步骤703以及704中, 直到发现被设置成1的位为止,扫描P的最下位的位。为了各个0, 由CPU对计数器j进行递增操作。一旦j被决定,则在步骤711中随机地选择乘方的底数。随机数 发生器124生成"p-位"的随机的整数X,其被存储到辅助处理器寄 存器A 115,同样地被拷贝到辅助处理器寄存器B 116。计数器i在 RAM 112中被初始化成p-2。该计数器i在接下来的步骤中运算乘 方的余数乘法BDmodP的期间,表示P-1的哪个位被扫描。从左向 右使用二进制的方法,按照蒙哥马利乘法和蒙哥马利平方运算的步 骤,运算乘方的余数乘法。在步骤713中,进行蒙哥马利平方运算, 向辅助处理器寄存器115存储运算结果。即,存储MontMult( A、 A、 P) - A*A*2_P mod P。进而,在位Pj是l的情况下,在步骤715中 进行蒙哥马利乘法。即进行MontMuIt( A、 B、 P) = A*B*2 — P mod P。 最后,在步骤716中计数器i被递减。
由于在步骤713以及71S中使用蒙哥马利乘法辅助处理器123, 所以在各个乘法或平方运算之后导入要素2-p mod P。但是,当将X 称为在步骤711中生成的初始随机位X的情况下,X被考虑成X-Y*2P mod P。此处,Y是其他"p-位"的整数。当前,是MontMult (Y、 Y、 P) =Y*Y*2pmodP,在蒙哥马利乘法之后,要素2P mod P 稳定。其结果,乘方结果是X1^211 mod P.而并非XD mod P。但是, XD mod P在步骤721中可以容易恢复。此处,前面步骤的结果,成 为使用蒙哥马利乘法辅助处理器的1的乘法。即,是MontMult ( A、 1、 P) = YD*2P*1*2 p mod P-YD mod P。在步骤721之后,如果辅 助处理器寄存器A 115存储数据1,则米勒罗宾测试在步骤741中输 出"成功"。否则,如已经说明那样,存储在辅助处理器寄存器A 115 中的数据被平方,与-l进行比较。
在步骤733中反复j次蒙哥马利平方运算。可知在一个蒙哥马利 乘法之后,寄存器A存储YZ^2PmodP,要素2PmodP在蒙哥马利 乘法之后再次稳定、即不变化。但是,由于蒙哥马利平方运算的结果 与-l进行比较,所以必需用步骤733中的操作MontMult(A、 1、 P) =Y2D mod P去除要因2P,向辅助处理器寄存器B 116存储该结果数 据。如果着目艮于-l-P-l mod P,则在步骤731中对存储在辅助处理器寄存器B中的数据与P-l进行比较。如果其一致,则P大概是 素数,所以米勒罗宾测试在步骤742中返回"成功"。在寄存器B的数 据与P-1不同的情况下,整体上反复j次上述步骤。在反复了 j次之 后,寄存器B的值与P-l绝对不一致,而P是合数,所以米勒-罗 宾测试在步骤743中输出"失败"。 "扩展"
本发明不限于上述实施方式2中说明的内容。例如,图8的便携 机器还可以是便携电话、PDA、以及使用公有密钥加密且计算机资源 和存储器资源有限的其他各种电子设备。特别,便携机器无需具备蒙 哥马利乘法辅助处理器。也可以是种类不同的辅助处理器。例如既可 以是古典的余数乘法辅助处理器,也可以是不使用辅助处理器而由 CPU以软件方式实现的余数乘法处理。
代替存储小的素数之差,为了重构小的素数,还可以使用恰当的 其他任意方法。费马测试中的重编码也可以是如NAF法、窗口法、 或滑动窗口法那样不同的重编码法。
实施方式2着眼于RSA密钥的生成,但本发明不限于RSA,即 使是DSA或Diffie - Hellman那样的其他公有密钥加密方式,也可以 得到用于高效地生成素数的上述发明的效果。另外,本发明不限于素 数判定测试的结构、种类。例如,也可以代替费马测试而使用米勒罗 宾观'H式,也可以采用弗洛t匕尼^f (Frobenius) 、 Solovay — Strassen 或AKS测试等其他测试。另外本发明不限于特定的RSA参数。例如, 可以省略Dp、 DQ以及Qb那样的CRT参数,并且还可以省略D。另 外,还可以在P以及Q的追加状态下4吏用强素数(strong primes)。
实施方式1中说明的图1的加密单元还可以以软件形式实现,并 且还可以用硬件逻辑来构成以图8的结构实现的功能。
权利要求
1.一种数据处理系统,判定整数的素数,该数据处理系统的特征在于具有重编码单元,生成上述整数的新的表现;余数运算操作单元,用于进行多个余数运算操作;循环控制单元;以及判定单元,判定输入整数的合数或素数,上述重编码单元扫描输入整数的多个位,按照上述扫描的位,选择由上述余数运算操作单元进行运算的余数运算操作。
2. 根据权利要求1所述的数据处理系统,其特征在于,上述余 数运算操作单元包括余数乘法单元。
3. 根据权利要求2所述的数据处理系统,其特征在于,上述余 数运算操作单元是蒙哥马利乘法单元。
4. 根据权利要求2所述的数据处理系统,其特征在于,上述余 数运算操作单元是古典的乘法单元。
5. 根据权利要求2所述的数据处理系统,其特征在于,上述重 编码单元将整数重编码成2W的表现形式,其中W是正整数。
6. 根据权利要求2所述的数据处理系统,其特征在于,上述余 数运算操作单元还具有左移电路、减法电路、右移电路、以及加法电路。
7. 根据权利要求6所述的数据处理系统,其特征在于,上述重 编码单元将整数重编码成NAF的表现形式。
8. 根据权利要求6所述的数据处理系统,其特征在于,上述重 编码单元将整数重编码成FAN的表现形式。
9. 一种数据处理方法,用于判定整数的素数,该数据处理方法 的特征在于,包括使用计算机装置执行的第一至第四处理,第一处理是扫描上述整数的多个位的处理,上述笫二处理是按照上述扫描的位选择至少一个余数运算处理的处理,上述第三处理是执行所选择的余数运算处理的处理, 上述第四处理是根据上述余数运算处理的结果决定上述整数的 素数的处理。
10. 根据权利要求9所述的数据处理方法,其特征在于,上述扫 描的位数是预先确定的,上述第三处理包括对上述整数的全部位反复进行余数平方运算 和余数乘法的处理。
11. 根据权利要求10所述的数据处理方法,其特征在于,上述 余数乘法的一个乘法是2的乘方。
12. 根据权利要求9所述的数据处理方法,其特征在于,上述扫 描的位是通过附加符号来表现的,上述第三处理包括如下处理针对上述整数的上述附加符号表现 的全部位,扫描上述整数的附加符号表现的位,进行余数平方运算, 反复进行在1的位的情况下执行余数左移,在-1的位的情况下执行 余数右移的处理。
13. 根据权利要求9所述的数据处理方法,其特征在于,上述整 数的至少3个位被扫描,对上述整数的全部位,反复上述第一处理、上述第二处理以及上 述第三处理。
14. 根据权利要求13所述的数据处理方法,其特征在于,上述 第三处理包括如下处理在上述扫描的位的最初的二位是01或10时进行一次余数平方运算,在上述扫描的位是011时分别进行一次余数平方运算和余数左移,在上述扫描的位是010时进行二次余数平方运算且进行一次余 数左移,在上述扫描的位是100时分别进行一次余数平方运算和余数右移,在上述扫描的位是101时进行二次余数平方运算且进行一次余数右移。
15. —种数据处理系统,将整数除以多个小的素数而计算出余数, 该数据处理系统的特征在于,包括计算单元,生成上述小的素数;以及余数运算单元,根据上述整数和上述生成的小的素数计算上述余数,上述小的素数是由上述计算单元重构的。
16. 根据权利要求15所述的数据处理系统,其特征在于,上述 余数运算单元是古典的余数乘法单元。
17. 根据权利要求15所述的数据处理系统,其特征在于,上述 余数运算单元是蒙哥马利乘法单元。
18. 根据权利要求17所述的数据处理系统,其特征在于,还具 备蒙哥马利常数运算单元,用于运算上述小的素数的蒙哥马利常数。
19. 根据权利要求15所述的数据处理系统,其特征在于,上述 计算单元具有用于存储连续的素数之间的差的表的存储单元; 用于存储小的素数的存储单元;以及 追力口单元,上述追加单元进行将上述小的素数与上述差的表的要素相加的运算。
20. 根据权利要求15所述的数据处理系统,其特征在于,上述 计算单元具有存储小整数的存储单元; 素数性的测试单元;以及 更新单元,由上述素数性测试单元测试上述小整数的素数性,在上述小整数 并非素数的情况下,由上述更新单元更新该小整数。
21. 根据权利要求20所述的数据处理系统,其特征在于,上述 素数性测试单元包括米勒罗宾测试单元。
22. 根据权利要求20所述的数据处理系统,其特征在于,上述 素数性测试单元包括费马测试单元。
23. —种数据处理方法,将整数除以多个小的素数而计算出余数, 该数据处理方法的特征在于,包括如下处理重构一个小的素数的处理;以及利用上述重构的小的素数计算上述整数的除法的余数的处理。
24. 根据权利要求23所述的数据处理方法,其特征在于,还包括计算蒙哥马利常数的步骤。
25. 根据权利要求23所述的数据处理方法,其特征在于,重构 至少 一个小的素数的步骤与计算余数的步骤是并行执行的。
26. 根据权利要求24所述的数据处理方法,其特征在于,重构 至少一个小的素数的步骤、计算余数的步骤以及计算蒙哥马利常数的步骤是并行执行的。
27. 根据权利要求23所述的数据处理方法,其特征在于,重构 至少一个小的素数的步骤包括如下处理存储连续的小的素数之间的差的表的处理; 存储小的素数的处理;以及计算出上述小的素数的追加和上述差的表的要素的处理。
28. 根据权利要求23所述的数据处理方法,其特征在于,重构 至少一个小的素数的步骤包括如下处理存储小整数的处理;判定上述小整数的素数性的处理;以及 在上述小整数并非素数的情况下更新该小整数的处理。
29. 根据权利要求28所述的数据处理方法,其特征在于,判定 上述小整数的素数性的处理包括进行米勒罗宾测试的处理。
30. 根据权利要求28所述的数据处理方法,其特征在于,判定 上述小整数的素数性的处理包括进行费马测试的处理。
全文摘要
本发明提供一种数据处理系统以及数据处理方法。提供一种即使如IC卡那样仅具有有限的存储资源也可以实现高效的加密处理的技术。加密密钥的生成系统具备运算单元,用于重构多个小的素数;筛选单元,用于检查是否利用小的素数整除了整数;重编码单元,用于改变整数的表现;以及素数性判定测试单元。筛选单元检查是否利用最初由运算单元重构的小的素数整除了整数,由此去除“不恰当的”素数候补。之后,使用素数性判定测试单元对剩余的素数候补进行测试。此时,使用重构单元,变换素数候补的表现,使用所变换的表现形式,素数性判定测试单元进行判定。由此,无需大的存储器容量,而可以减少用于素数性判定的运算处理数。
文档编号H04L9/30GK101540672SQ20091000586
公开日2009年9月23日 申请日期2009年2月10日 优先权日2008年3月21日
发明者卡米尔·维尧姆, 吉野雅之, 桶屋胜幸 申请人:株式会社瑞萨科技
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1