CN101540672B - 数据处理系统以及数据处理方法 - Google Patents

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

Info

Publication number
CN101540672B
CN101540672B CN2009100058675A CN200910005867A CN101540672B CN 101540672 B CN101540672 B CN 101540672B CN 2009100058675 A CN2009100058675 A CN 2009100058675A CN 200910005867 A CN200910005867 A CN 200910005867A CN 101540672 B CN101540672 B CN 101540672B
Authority
CN
China
Prior art keywords
mentioned
prime number
remainder
integer
processing
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
CN2009100058675A
Other languages
English (en)
Other versions
CN101540672A (zh
Inventor
卡米尔·维尧姆
桶屋胜幸
吉野雅之
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
NEC Corp
Original Assignee
Renesas Electronics Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Renesas Electronics Corp filed Critical Renesas Electronics Corp
Publication of CN101540672A publication Critical patent/CN101540672A/zh
Application granted granted Critical
Publication of CN101540672B publication Critical patent/CN101540672B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/60Methods or arrangements for performing computations using a digital non-denominational number representation, i.e. number representation without radix; Computing devices using combinations of denominational and non-denominational quantity representations, e.g. using difunction pulse trains, STEELE computers, phase computers
    • G06F7/72Methods or arrangements for performing computations using a digital non-denominational number representation, i.e. number representation without radix; Computing devices using combinations of denominational and non-denominational quantity representations, e.g. using difunction pulse trains, STEELE computers, phase computers using residue arithmetic
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/30Public key, i.e. encryption algorithm being computationally infeasible to invert or user's encryption keys not requiring secrecy
    • H04L9/3006Public key, i.e. encryption algorithm being computationally infeasible to invert or user's encryption keys not requiring secrecy underlying computational problems or public-key parameters
    • H04L9/3033Public key, i.e. encryption algorithm being computationally infeasible to invert or user's encryption keys not requiring secrecy underlying computational problems or public-key parameters details relating to pseudo-prime or prime number generation, e.g. primality test
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2207/00Indexing scheme relating to methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F2207/72Indexing scheme relating to groups G06F7/72 - G06F7/729
    • G06F2207/7204Prime number generation or prime number testing
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L2209/00Additional information or applications relating to cryptographic mechanisms or cryptographic arrangements for secret or secure communication H04L9/00
    • H04L2209/20Manipulating the length of blocks of bits, e.g. padding or block truncation
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L2209/00Additional information or applications relating to cryptographic mechanisms or cryptographic arrangements for secret or secure communication H04L9/00
    • H04L2209/56Financial cryptography, e.g. electronic payment or e-cash

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • Physics & Mathematics (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Mathematical Physics (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Storage Device Security (AREA)
  • Management, Administration, Business Operations System, And Electronic Commerce (AREA)

Abstract

本发明提供一种数据处理系统以及数据处理方法。提供一种即使如IC卡那样仅具有有限的存储资源也可以实现高效的加密处理的技术。加密密钥的生成系统具备:运算单元,用于重构多个小的素数;筛选单元,用于检查是否利用小的素数整除了整数;重编码单元,用于改变整数的表现;以及素数性判定测试单元。筛选单元检查是否利用最初由运算单元重构的小的素数整除了整数,由此去除“不恰当的”素数候补。之后,使用素数性判定测试单元对剩余的素数候补进行测试。此时,使用重构单元,变换素数候补的表现,使用所变换的表现形式,素数性判定测试单元进行判定。由此,无需大的存储器容量,而可以减少用于素数性判定的运算处理数。

Description

数据处理系统以及数据处理方法
技术领域
本发明涉及用于素数判定的数据处理系统以及数据处理方法,例如涉及应用于在公有密钥加密方式的系统结构等中使用的加密密钥的高效生成有效的技术。 
背景技术
公有密钥加密方式被广泛公知,且当前被用于很多的应用、例如银行业务或电子商务。在此,经由不安全的网络,在用户之间使用数字签名文件、加密数据、变换密钥键等。RSA是用于公有密钥加密法的事实上的标准,并且在需要数字签名或公有密钥加密的应用中被一般化。例如,由用于信用卡的EMV(Europay-Mastercard-Visa)财团推荐有效利用RSA,更准确而言,直到2010年为止,由EMV推荐具有1024位的键长度的RSA,在此以后推荐2048位的键。 
在RSA中,消息被编码成n位整数。RSA公有密钥由幂指数E(其一般较小)、n位的模数N构成。RSA私有密钥是n位整数D,具有E*D=1 mod(P-1)*(Q-1)的关系。记号*意味着乘法。此处,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-1=E-1mod P-1、DQ=D mod Q-1=E-1mod Q-1、Qinv=Q-1mod P。其中,在Z=X-1modY满足Z*X=1 mod Y的整数是1<=Z<Y时,利用计算机的RSA-CRT的解码处理成为MP=C^DP 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、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卡生成加密密钥变成现实。其具有二个效果。第一效果为,防止单一障碍点,即防止如在工作站生成密钥的情况那样,如果工作站发生障碍则由此生成的全部密钥变得危险的现象。第二效果为,卡发行者可以不知道私有密钥这一点。即,对 于卡发行者来说,不会被视为负有泄漏私有密钥或将这些误用的责任。 
专利文献1:美国专利第7113595号说明书 
非专利文献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卡那样仅具有有限的存储资源也可以实现高效的加密处理。换言之,本发明的目的在于提供一种技术,即使如便携机器那样具有不充分的存储资源也可以高速地生成随机的素数。 
本发明的上述以及其他目的和新的特征通过本说明书的记述以及附图将更加明确。 
如果简单说明本申请中公开的发明中的代表性的发明的概要,则如下所述。 
即,本发明为了能够用较少的计算机资源高效地进行处理,而被应用于数据的编码和重编码。特别,在素数生成步骤的期间,为了再次生成多个小的素数,而使用预定的紧凑的表。另外,对素数判定中处理的素数候补进行重编码,将它们的表现形式从二进制码变换成恰当的码。 
例如,生成加密密钥的数据处理系统具备:运算单元,用于重构多个小的素数;筛选单元,用于检查整数是否被小的素数整除;重编码单元,用于改变整数的表现;以及素数性判定测试单元。筛选单元检查整数是否被最初由运算单元重构的小的素数整除,由此去除“不恰当的”素数候补。之后,使用素数性判定测试单元对剩余的素数候补进行测试。此时,使用重构单元,变换素数候补的表现,使用所变换的表现形式,素数性判定测试单元进行判定动作。由此,无需大的存储器容量,而可以减少用于素数性判定的运算处理数。 
如果简单说明通过本申请公开的发明中的代表性的发明而得到的效果,则如下所述。 
即,即使如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公有密钥 
914素数生成单元 
1111费马测试单元 
1131位排列单元 
1161小的素数生成单元 
1102素数生成控制单元 
1123素数候补P 
1121寄存器A 
1122寄存器B 
1113余数乘法单元 
1102费马测试控制单元 
1141位阵列 
1132位阵列填充单元 
1163小的素数表 
1162米勒罗宾单元 
1171存储器寄存器 
101便携式电子装置(便携机器) 
131输入输出接口 
141网络 
151ATM 
153计算机 
154便携机器 
111存储器 
132、133输入输出接口 
121数据处理部 
122CPU 
123蒙哥马利乘法辅助处理器 
124RNG 
具体实施方式
1.定义 
首先,对以下说明中使用的词汇的定义和标记法进行叙述。A或B那样的大写文字的变量意味着例如如1024位的整数那样的大的整数。用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-1的A*A*...*A mod N的余数乘法。其同样地也还被记 述成A^D mod N。记号^意味着幂乘或乘方。 
gcd(A、B)是A与B的最大公约数。例如3是6以及15的最大公约数。其原因为6=3*2、15=3*5。 
A-1mod 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设为n位的模数的余数乘法A*B*2-n mod N。 
2.实施方式1 
首先以素数生成电路为主进行说明, 
“IC卡” 
图1示出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的典型的使用例子。最初,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,找到比候补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的寄存器的尺寸被限定成1024位。其结果,所生成的素数最大具有1024位。 
费马测试控制单元1102起动余数乘法单元1113而控制向该单元1113的信号路径,使该单元1113执行费马测试,判定素数候补P1123的素数性。在后面参照图5对该功能进行详细叙述。 
位排列单元1113具有位阵列1141,它们由B[0]、...、B[b-1]这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[0]、...、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被进一步测试。这样,值Pinit+2i在步骤1221中被写入到寄存器P1123,在步骤1222中成为费马测试的对象。图5中记载了费马测试单元的功能。 
另外,由于硬件尺寸的限制,表T无法包含很多的小的素数,其结果,位阵列仍保有较多的B[i]=1那样的条目,于是,直到发现素数P为止必需多次调出费马测试。为了减少费马测试的调出次数并使素数生成加速,费马测试单元在步骤1222中被激活时,与其同时生成新的小的素数z,位阵列被该新的小的素数更新。其结果,更多的条目在位排列中被清0,费马测试的调出变得更少。 
步骤1223、1224以及1225生成这样的新的小的素数,用z更新位排列。这些步骤由小的素数生成单元1161以及位排列单元1131执行,并由小的素数生成单元1161以及位排列装置1131进行处理,而与费马测试并行执行。在图4中,用虚线箭头表示这样的并行计算机处理。 
在步骤1223中,小的素数z的16位的寄存器1171被z+2更新。实际上z是奇数,其原因为偶数的整数被2整除,从而明确可知并非素数。接下来,z成为使用米勒罗宾单元1162进行素数性的测试的对象。在图6中详细记载了米勒罗宾单元1162的功能。米勒罗宾单元是判定16位整数的素数性的电路,构成为与费马测试单元相比速度非常高,且处理更大的整数。其结果,在执行一个费马测试的期间,可以进行多次米勒罗宾测试。在由米勒罗宾测试单元发现16位的小的素数时,利用位阵列填充单元1132更新位阵列1141(步骤1225)。在进行费马测试的期间反复进行这些三个步骤1223、1224以及1225。 
在费马测试结束且成功时,该概素数(probable prime)P通过素数生成单元返回到步骤1231,另一方面,素数生成单元使位排列1233的激活索引递增,再次从步骤1212开始,从而搜索位排列的接下来的正确的候补。在对位排列的全部索引进行扫描而未发现素数时,素数生成单元在步骤1232中返回失败。 
“费马测试” 
对费马测试进行说明。在费马测试中,输入底数B以及素数候补P,运算BP-1 mod P。如果运算结果不是1,则素数候补P是合成整数。如果运算结果是1,则P几乎肯定是素数。BP-1 mod P是数据处理上成本高的处理,即使在位排列中较多的不恰当的候补被去除时,仍残留应成为费马测试的对象的较多的正确的候补。因此,费马测试中的处理速度改善具有非常大的潜力。 
提高乘方运算的性能的公知方法是使用窗口(window)方法。在具有窗口尺寸w的窗口方法中,从幂指数的w位被同时扫描。换言之,幂指数(其通常被保存成存储器的相应的二进制的表现)以2w为基础而被重编码(recoded)。这些w位表示整数j(0<=j<2w),预先计算出数据Bj mod P,并且在窗口乘方技术中运算出A2 mod P以及A*Bj mod P。如果代替而使用标准的二进制法,则虽然A2的运算相同,但新需要w/2的乘法。因此窗口方法可以减少乘法次数。 
但是,窗口方法所需的预先运算的值必需保存到RAM。在IC卡中,RAM的存储容量被限制。于是,在1024位的乘方的情况下,上述预先运算出的一个值占有128字节。于是,被最佳化的窗口方法常常使用这种好几个预先被计算机运算出的值。其对于IC卡并不现实。例如,在窗口尺寸w=5的情况下,预先被计算机运算出的所需的值在RAM中大约占有4k字节。 
本发明的费马测试无需为了存储计算机运算出的数据而要求存储器,而可以利用大的窗口的窗口法。在费马测试中,在BP-1mod P的运算中一般在B中使用特别的底数、特别是B=2。在该情况下,无论是否为大的w,都无需预先计算机运算或保持Bj 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-1的最初的10个位被扫描,被写入到缓冲器j。计数器i被初始化成p-11。该计数器的值与接下来应读入的位、即Pp-11一致。在步骤1303中,累加器(accumulator)A(寄存器A)1121被设置成2j。即,向A最初写入0,第j位被设置成1。 
之后,开始幂乘运算。在步骤1312中,由余数乘法单元1113连续10次运算A2mod P。其原因为窗口尺寸为w=10。在步骤1313中从幂指数P-1读入连续的10个位Pi、...、Pi-9。此处,P被存储到寄存器1123,整数值(Pi...Pi-9)2被写入到缓冲器j。在j是零的情况下,无需进行乘法,在费马测试中可以继续接下来的处理。在j>0的情况下,寄存器B 1122在步骤1322中被设置成2j。即,寄存器B1122被清零,并在其第j位的位置设置成1。一旦寄存器B 1122被设置,则在步骤1323中使用带余数的运算操作单元1113执行A*B mod P的余数乘法。最后,在步骤1331中,从表示幂指数的被扫描的位Pi的位置的索引i减去10。只要i大于9(保证最右边的被扫描的位Pi-9是P1以上),则反复上述步骤。 
当i小于9时,费马试验另外处理最后的剩余的位。在步骤1341中剩余的位的值(Pi...P10)2被写入到缓冲器j。着重考虑P是奇数,所以P-1是偶数且其最下位的位是0。接下来,由余数乘法单元1113运算i+1次A2mod P(步骤1342、1343)。之后,寄存器B 1122进行最后的乘法的准备。即,其被清0,然后,其第j位在步骤1351中被设置成1。其结果,在寄存器B 1122中在该步骤之后存储值2j。在步骤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=(1111000010)2=962。A被初始化成2962、即以二进制表示时在末尾具有962个零的(1000...000)2。计数器i被设成10。之后,连续10次进行A2 mod P的运算,由此A包括值824444。 
接下来的10位是j=(1010111100)2=700。因此,2700被写入到寄存器B,然后,计算出A*B mod P。此处A=824444、B=2700以及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位整数z是2047、3277、4033、4681、8321、15841、29341、42799、49141、52633。其结果,如果米勒罗宾测试针对并非上述整数的任意一个的16位整数z返回“成功”的测试结果,则该z绝对是可靠的素数。 
本质上,米勒罗宾测试与费马测试类似。但是,具有重要的差异。要进行测试的整数是z,z-1记述成2j+1*d。此处,j+1是z-1的二进制标记中的下位侧的位零的个数。为了使用底数2的米勒罗宾测试,计算出余数乘方乘法x=2d mod z。如果其运算结果是1或z-1,则测试结果是“成功”,可以说z大概是素数。否则对x进行j次乘法,在各自的乘法之后x再次与z-1进行比较。在它们一致的情况下,测试返回“成功”。如果在j次乘法之后,x绝对不等于z-1的情况下,测试返回“失败”,z为合数。 
图6示出在保存于寄存器1171中的16位的整数z=(z15...z0)2的素数判定中应用了米勒罗宾测试的情况。在z是2047、3277、4033、4681、8321、15841、29341、42799、49141、52633的任意一个的情况下,z是合数,在步骤1403中返回“失败”。否则,在步骤1404至1406中计算出z-1的二进制表现中的末尾的零的个数即j。在步骤1411至1416中执行乘方的余数乘法2d的mod z(此处z-1=2j+1*d)。累加器x被初始化成1,在步骤1411中循环计数器i被初始化成15。接下来,在循环计数器i大于j的期间,执行接下来的步骤。首先,在步骤1413中执行余数乘法x2 mod z。此处,x以及z是16位整数。之后,在z的位zi是1的情况下,使用左移x<<1以及模数z的减法,在步骤1415中计算出2*x mod z的运算。 
在乘方计算之后,累加器x包括值1的情况下,算法停止动作而在步骤1441中返回测试结果“成功”。否则,x在步骤1431中与z-1进行比较。在它们相等的情况下,算法停止动作而在步骤1443中返回测试结果“成功”。在不相等的情况下,在步骤1432中运算出余数乘法x2 mod z,循环计数器被进行减法运算。直到计数器i成为1为止反复上述操作。当累加器绝对不等于z-1时,算法在步骤1442中返回测试结果“失败”。 
“米勒罗宾测试的具体例子” 
在小的素数表T 1163中,假设存储有17个第一小的素数T[0]=3、T[1]=5、T[2]=7、T[3]=11、T[4]=13、T[5]=17、T[6]=23、T[7]=29、 T[8]=31、T[9]=37、T[10]=41、T[11]=43、T[12]=47、T[13]=53、T[14]=59、T[15]=61、T[16]=67。也许是小的素数的整数是z=69=(0000000001000101)2。z并非可以逃过使用底数2的米勒罗宾测试的16位整数之一,所以测试可以从伴随自z-1=(0000000001000100)2中的末尾的0的数减去1而得到的数j、即j=1的计算开始。接下来,累加器x被初始化成1,计数器i被初始化成15。直到i=6为止,z-1的被扫描的位全部是零,累加器的值未被修正。在反复i=6中,x在步骤1415的左移之后成为2,之后,进行四次平方运算和一次左移。其结果,在步骤1422中,x取得值41。由于x与1或68不同,所以还进行一次平方运算,x成为25,仍与68不同。在该时刻,测试返回“失败”。其原因预料为,z=69=3*23是合数。 
接下来的奇数是z=71=(0000000001000111),在该情况下,j=0。直到i=6为止,x仍相同、即仍为x=1,但i=6的一位左移之后,x成为2。之后,进行四次平方运算,x=3,进行一位移位,x=6,进行一次平方运算,x=36,然后,进行一位移位,最后,x成为1。其结果,试验在步骤1422中停止,x=1、z=71,为素数。 
“位排列的更新” 
位排列是由用于去除作为被小的素数整除的候补P=Pinit+2i的合数的埃拉托色尼(Eratosthenes)的筛选启示的公知方法。位排列法的大概构思在于,为了小的素数z而计算Pinit mod z,在用于P=Pinit+2i mod z=0(P由z整除)那样的全部位置i的位排列中向B[i]写入0。在图7中说明在位排列的恰当的位置处写入零的方法。 
向位阵列填充单元1132的输入由位排列1141、初始候补Pinit1103以及小的素数z 1171构成。最初,缓冲器x在步骤1513中通过值Pinit mod z被初始化。该运算的计算容易。其理由如下所述。其原因为,尽管Pinit是大的整数,但z仅为16位。接下来,位阵列填充单元计算P是奇数且P mod z=0那样的第一个整数P=Pinit+2i。在Pinit mod z=0的情况下,Pinit满足全部的状态而索引i在步骤1515中被设置成0。另一方面,由于x并非零,且Pinit=x mod z、Pinit+z-x =0 mod z,所以将其得知是容易的。另一方面,如果x是奇数,则z-x是偶数,Pinit+z-x是奇数,满足所要求的全部状态。其结果,在步骤1522中,值(z-x)/2通过减法和右移(z-x)>>1,被写入到缓冲器i。另一方面,在x是偶数的情况下,Pinit+z-x同样是偶数,但Pinit+2z-x是奇数。因此,在步骤1523中,通过减法和右移z-x>>1,值(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+k*z更小的全部索引i+k*z,位B[i]被清零。最后,位阵列填充单元在步骤1551中返回位排列。 
“位排列更新的具体例子” 
在该例子中,位排列1141具有尺寸b=64,而且,小的素数表1163存储16个小的素数、即T[0]=3、T[1]=5、T[2]=7、T[3]=11、T[4]=13、T[5]=17、T[6]=23、T[7]=29、T[8]=31、T[9]=37、T[10]=41、T[11]=43、T[12]=47、T[13]=53、T[14]=59、T[15]=61。最初的候补1103的输入假设成512位的奇数。例如是Pinit=7256779693106507655490693859171076267003739588425074050256021409526725926274029082141310206427691245639055995711774350480838509929519895128627108485116697。 
首先最初,位排列仅包括位1。换言之,在B被表现成整数的情况下,其二进制的表现成为 
B=(1111111111111111111111111111111111111111111111111111111111111111)2。B由64位构成。最初,素数生成控制单元向使用小的素数表T[0]、...、T[15]的位排列的恰当的位置写入零。例如,T[0]=3以及Pinit mod 3=1。1是奇数,因此,在该位阵列中在(3-1)/2=1的位置处写入0,然后,在位置1+3=4以及4+3=7的位置处也如此。在利用T[0]=3进行筛选之后,位排列成为 
B=(1011011011011011011011011011011011011011011011011011011011011011)2。为了表T的全部的小的素数,反复该步骤,位排列成为 
B=(1001011000000001010011000010000001010010000001011001000010000010)2。由此,可知存在与通过费马测试确认了仅18位仍被设置成1的整数Pinit+2i对应的、更小的索引i的值。由于B[0]=1,所以必需通过费马测试确认Pinit。 
同时小的素数生成单元1161搜索接下来的小的素数。16位寄存器z 1171在其表中存储最后的小的素数(即61)。由米勒罗宾单元1162对照接下来的奇数的整数63。然后,得到63并非素数的结论。其原因为,63=3*21。同样地,65并非素数。其原因为,65=13*5。但是,米勒罗宾单元得到67是素数的结论。 
之后,位排列通过z=67被更新。Pinit mod 67=24,在位阵列中在67-24/2=55的位置处被写入0。遗憾的是,B[55]已经是0。因此,利用67来筛选的作法在该例子中并未得到任何好转。事实上,其与接下来的小的素数71、73、79、83、89、97以及101相同。但是,在由米勒罗宾单元1162生成了小的素数z=103时,运算Pinit mod 103提供13,其对应于索引(103-13)/2=45。因此之前是1的B[45]被写入0。位阵列成为 
B=(1001011000000001010011000010000001010010000000011001000010000010)2。 
只要费马测试1111在步骤1222中进行,则该步骤继续。米勒罗宾测试用短的整数(16位)进行处理,相对于此费马测试处理长的整数(在该例子中512位),所以在进行费马测试的期间可以生成较多的小的素数,可以去除所追加的部分。例如,如果假设在费马测试中为了512位的各自的余数乘法可以生成一个小的素数,则在该费马测试期间可以追加生成512个小的素数。在该情况下,位排列成为B=(0001011000000000000000000000000001000010000000011000000010000000)2。其结果,在最初的费马测试之后,在位阵列中仅残留八个。 
最初的费马测试采用Pinit作为输入。但是,乘方的运算2^(Pinit-1)mod Pinit的结果并非1。因此,Pinit并非素数。接下来的位阵列的零以外的条目是B[3],接下来的素数候补是Pinit+6。即是P=7256779693106507655490693859171076267003739588425074050256021409526725926274029082141310206427691245639055995711774350480838509929519895128627108485116703 。值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保有n-位奇数的整数的情况下,计算蒙哥马利乘法A*B*2 -n mod N或蒙哥马利乘法A*A*2-n mod N。此处,在寄存器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[0]、...、T[t-1])、以及mri(米勒罗宾反复数)。 
在后面说明位排列B[0]、...、B[b-1]、表T[0]、...、T[t-1]以及米勒罗宾反复数的作用。在步骤S202中,由随机数发生器124发生二个最初的奇数的随机数Pinit以及Qinit。在密钥对的生成步骤中,希望在[Pinit、...、Pinit+2(b-1)]与[Qinit、...、Qinit+2(b-1)]之间搜索素数P以及Q。因此,在步骤203中,保证检索间隔总是正确的范围,保证P以及Q分别具有p位和q位。在步骤204中,结果Pinit*Qinit正确地具有n位的情况被确认。如果其正确,则模数N=P*Q可靠地具有n位。在步骤203或204中的任意一个失败的情况下,在步骤202中新发生最初的随机数Pinit以及Qinit。 
一旦最初的随机数Pinit以及Qinit满足全部要求的状态,则开始素数生成步骤。b位的位阵列B[0]、...、B[b-1]被保存到RAM 112,在步骤211中被初始化。位B[i]对应于整数Pinit+2i。整数Pinit+2i全部是奇数。其原因为,Pinit是奇数,2i是偶数。实际上,素数生成步骤的目标是以间隔[Pinit、...、Pinit+2(b-1)]发现素数。偶数显然并非素数,可以没有问题地忽视。在位排列中被设置成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中发生新的初始随机数Pinit以及Qinit。 
在发现了二个素数P以及Q之后,在步骤231中计算出满足D*E=1 mod(P-1)*(Q-1)的私有密钥D和公有模数N=P*Q。可以使用蒙哥马利乘法辅助处理器(还简称为辅助处理器)123计算出公有模数N,可以利用非专利文献1中记载的公知的二进制扩展GCD算法计算出公有密钥D。使用由于P是素数所以成为Q-1=QP-2 modP这样的事实,在步骤232中计算出RSA-CRT Qinv的私有密钥要素。可以使用蒙哥马利乘法辅助处理器123计算出幂乘的余数乘法QP-2mod P。例如,使用专利文献1记载的蒙哥马利乘方算法。最后,在步骤233中向EEPROM 113写入包括公有模数N、私有密钥D、私有密钥要素RSA-CRT、P、Q、DP、DQ以及Qinv的全部密钥元素。 
“素数生成” 
在图9中,在步骤213以及223中,发生素数P以及Q、私有密钥元素DP=E-1 mod P-1、DQ=E-1 mod Q-1。针对该素数生成步骤的输入301是最初的偶数随机数Pinit(或Qinit)、公有幂指数E、位排列B[0]、...、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-1,P-1与公有幂指数E的最大公约数必须是1(gcd (P-1、E)=1)。因此,在步骤331中,例如使用非专利文献1中记载的二进制扩展GCD算法计算出DP。在步骤为“失败”的情况下,gcd(P-1、E)并非1,P被拒绝,测试接下来的候补。 
费马测试尽管为了尽快去除作为合数的候补而有用,但其无法充分良好可靠地确立这些素数。例如,存在被称为卡迈克尔(Carmichael)数的合数,且在多数情况下其可以通过费马试验。为了高可靠性地保证P的素数性,在实施方式2中,在顺利地进行了费马测试之后,反复几次米勒-罗宾测试。必需恰当地选择反复数(mri)。在非专利文献1中,记载了可以顺利地反复通过三次米勒罗宾测试的1024位的随机整数并非为素数这样的概率是2-80。换言之,在选择了通过三次米勒罗宾测试的候补时发生错误的概率是2-80。其概率极小。在步骤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-1)]中的步骤中未发现满足的素数的情况下,在步骤352中,步骤失败。 
(位阵列) 
t存在最佳值,其是用于进行筛选以使素数生成步骤的速度成为最大的小的素数的数量。即,一方面,使用更小的素数,可以从位阵列筛选出更多的要素,其减少调出进一步精细的素数判定测试的次数,另一方面,在使用更小的素数z时,减少位阵列中的P mod z和写入操作。但是,小的素数的最佳值典型地大至1,000以上。 
在筛选中使用较多的小的素数时,需要大的表来存储它们。为简化说明,按照素数位长度,可以用一个字节(8位)或二个字节(16位)存储各个小的素数。遗憾的是,8位的素数不多。小的素数表中的要素的大部分占据ROM 114的二个字节。例如,在筛选中使用2, 048的素数的情况下,表在ROM 114中占据4k字节。其对于IC卡来说是非常大的尺寸。 
进而,使用辅助处理器123计算出z小的素数的运算Pinit mod z,但是,虽然z小,但Pinit大。因此,由作为Pinit的位尺寸的p决定使用辅助处理器123计算的蒙哥马利乘法的位尺寸。其结果,蒙哥马利乘法的结果是MontMult(Pinit、1、z)=Pinit*2-P mod z。而且,其与期望的结果Pinit mod z不同。代替地,必需计算操作MontMult(Pinit、2P mod z、z)=Pinit*2P*2-P=Pinit mod z。结果,需要蒙哥马利常数的表,其保有用于全部小的素数z的全部蒙哥马利常数2P mod z。在2,048的小的素数的情况下,其需要用于小的素数的4k字节和用于蒙哥马利常数的4k字节的存储器。更恶劣的是,蒙哥马利常数依赖于素数候补P的位长度p。例如,在程序必需支持1024位以及2048位的RSA的情况下,为了蒙哥马利常数,需要二个不同的表。 
从上述说明可容易理解,为了筛选需要使用多个小的素数,但该途径几乎不适合于IC卡的不充分的存储器资源。在实施方式2中,使用多个小的素数,但使所需的存储器量适合于IC卡。有二个解决课题的点。第一点在于,与这些全部值相比,还不如存储连续的小的素数之间的相异。第二点在于,与存储这些相比,还不如在执行时运算出蒙哥马利常数2P mod z。 
利用上述第一点,用于存储小的素数的存储器容量减少一半。其原因为,二个连续的小的素数之间的相异通常情况下较小,可以用一个字节存储而并非二个字节。实际上,可以用一个字节存储的二个连续的素数之间的最大差是Δ=118,在z1=1,349,533与z2=1,349,651之间产生。换言之,比z1=1,349,533小的素数之间的差异可以总是存储到一个字节。 
第二点的优点在于,对蒙哥马利常数完全不要求存储器的容量。另外,伴随充分的调度,可以使由CPU 122计算的蒙哥马利常数的运算与由辅助处理器123运算的蒙哥马利乘法MontMult(Pinit、2P modz、z)的处理并行。 
因此,通过使用实施方式2的途径和t=2,048的小的素数,可以将为了在ROM 114中存储小的素数之间的差的表T[0]、...、T[t-1]而所需的存储器容量设为2k字节,不会对筛选操作造成动作速度上的恶化,并且,可以减少处理成本大的素数判定处理的调出次数而提高处理效率。 
接下来,图11详细例示出位阵列填充的操作步骤。步骤401的输入由p位的初始奇数随机数Pinit(或者q位的Qinit)、最初用1填入的位排列B[0]、...、B[b-1]、以及存储连续的小的素数之间的相异的表T[0]、...、T[t-1]构成。例如,假设成表T存储与t=4个小的素数相关的信息。T[0]=3存储比2大的第一素数例如3。接下来的素数是5=3+2,所以是T[1]=2。接下来的素数是7=5+2,所以是T[2]=2。接下来的素数是11=7+4,所以是T[3]=4。在步骤402中,二个缓冲器z1和r在RAM 112中被初始化。上述缓冲器z1存储第一个素数T[0]的值,缓冲器r是第一蒙哥马利常数2P mod T[0]。图12示出r=2P mod z1的计算。接下来,z1被拷贝到辅助处理器寄存器N 117,r被拷贝到寄存器A 115,Pinit被拷贝到寄存器B 116。之后,辅助处理器123开始MontMult(r、Pinit、z1)的运算。如果计算结束,则运算结果Pinit mod z1被写回到RAM 112的缓冲器x1。在辅助处理器123运算MontMult(r、Pinit、z1)的处理中,由CPU 122准备第二个小的素数以及蒙哥马利常数。第二个小的素数是z1+T[1],此处,T[1]存储第一个素数与第二个素数之间的差。 
在其接下来的步骤中,使用由表T[0]、...、T[t-1]重构的所有小的素数来更新位排列。表T[0]、...、T[t-1]使用对其结构要素进行索引的计数器i。位排列的更新步骤的基本考虑方法如下所述。即,第一,使用辅助处理器123计算出x2=Pinit mod z2,此处,z2对应于在表T中具有索引i的激活的小的素数。第二,与第一处理同时,CPU122运算出与索引i+1对应的接下来的小的素数z3。第三,用x1=Pinit mod z1更新位阵列,此处,z1是与索引i-1对应的前面的小的素数。 
在步骤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+1]而访问表要素T[i+1]。此处,z3是与索引i+1对应的接下来的小的素数。同样地计算出其蒙哥马利常数2P mod z3。在i=t-1或i=t时步骤414的处理被跳过。其原因为,表T仅具有t个要素。 
在该状态下,使用在前面的步骤i-1中运算出的值x1=Pinit modz1来更新位阵列。在x1=0的情况下,Pinit被z1整除,于是,在步骤432中向B[0]直接写入零。在x1是奇数的情况下,P=Pinit+z1-x1满足P=0 mod z1。另外,Pinit、x1以及z1是奇数,因此p是奇数。于是,与P对应的索引j是j=(z1-x1)/2,其是由CPU 122在步骤423中代替利用2的除法而使用右移来运算出的。如果X1是偶数,则Pinit+z1-x1是偶数,并非位阵列的要素。代替其,而选择接下来的奇数。即,是P=Pinit+2z1-x1。在步骤423中由CPU 122使用右移计算出所对应的索引,为j=z1-x1/2。 
在执行了步骤422或423之后,Pinit+2j=0 mod z1那样的第一索引j已经变得有效。但是,实际上,整数Pinit+2j+2z1、Pinit+2j+4z1、Pinit+2j+6z1以及其他也被z1整除。因此,在步骤432中,向位B[j]写入零,只要j处于范围[0、...、b-1],则通过CPU 122,z1被追加到索引j。这样,Pk那样的全部奇数Pk=Pinit+2*k*(j+z1)存在于位阵列中,Pk mod z1=0被识别成“不恰当”的候补。 
为了表T[2]、T[3]、...、T[t-1]的全部要素,而反复上述步骤。在步骤441中,值z2以及x2=Pinit mod z2被拷贝到z1以及x1,在步骤442中,z3被拷贝到z2,并且指示表T[i]的要素的计数器i被递增。 
(蒙哥马利常数的运算) 
在图11中,在步骤402以及414中计算出与小的素数z关联的蒙哥马利常数r=2P mod z。图12详细例示出其步骤。向该步骤的输入是素数候补P的位长度p、以及小的素数z。由于小的素数z小,所以其位长度通常小于16位,可以利用CPU 122容易地处理与小的素数z关联的全部运算。此处无需使用蒙哥马利乘法辅助处理器123。其结果,可以与辅助处理器动作并行地计算蒙哥马利常数。 
在实施方式2中使用配置在RAM 112中的三个缓冲器计算蒙哥马利常数,在步骤502中缓冲器被初始化。缓冲器存储2的乘方,x是存储部分结果的累加器,i用于计算2P mod z的运算中的幂指数p的扫描。实施方式2中使用的技术是从右向左的二进制的乘方。基本的考虑方法在于,计算出y=2^(2^0)=21=2 mod z、y=2^(2^1)=22=4 mod z、y=2^(2^2)=24=16 mod z、y=2^(2^3)=28=256 modz以及其他,从右向左扫描p的二进制表现,在所扫描的位是1时,计算x=x*y mod z。 
在p=0的情况下,向步骤542返回x=1。否则,在步骤512中使用CPU 122使i右移一位。在i的最下位的位是1时,右移动作生成进位(carry)。在该情况下,x在步骤522中被更新成x*y mod z。在实施方式2中,CPU不直接支持x*y mod z那样的的余数乘法。因此,动作被分成二个部分。一个是古典的乘法x*y,另一个是余数运算x mod z,利用CPU来支持这两者。 
接下来,只要缓冲器i并非零,则计算出接下来要求的2的乘方。如果假设成该步骤执行第k个反复,则是y=2^(2^k)。接下来要求的2的乘方是2^2^(k+1)=2^(2^k)*2^(2^k)=y*y mod z,在步骤532中进行运算,在其中利用一个乘法y*y和具有一个余数的除法y mod z,其是利用CPU 122运算的。 
缓冲器i在每次反复时被右移,所以i最终成为0。在该点中,幂乘的余数乘法2P mod z完成,可以返回运算结果x=2P mod z。 
(费马测试) 
公知在椭圆曲线加密的情况下乘方运算的速度得到改善。例如使 用Non-Adjacent Form(NAF)那样的用于幂乘数的符号表现。NAF的速度比单纯的二进制的乘方高,且无需再次计算。但是,在椭圆曲线乘方和RSA乘方之间存在大的差异。即,在前者的情况下,可以得到位置的逆转而几乎不会造成运算成本,但在后者的情况下,在稍微的整数的反转运算中需要大的运算成本。由于在符号表现中的负数中需要反转运算,所以该方法对于RSA通常是不恰当的。 
尽管通常对于RSA来说它们不具有优势这样的事实,但在实施方式2中为了费马测试而使用符号表现。实际上,A*B-1mod 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、Pi-1这三位的幂指数进行扫描。其内容可以分类成情形1~情形6。 
“情形1”:(Pi+1Pi)=(11)2被重构成(Si)=(0),i被设置成i-1。 
“情形2”:(Pi+1PiPi-1)=(011)2被重构成(SiSi-1)=(1),i被设置成i-1。 
“情形3”:(Pi+1PiPi-1)=(010)2被重构成(Si)=(01),i被设置成i-2 。 
“情形4”:(Pi+1Pi)=(00)2被重构成(Si)=(0),i被设置成i-1。 
“情形5”:(Pi+1PiPi-1)=(100)2被重构成(SiSi-1)=(-1),i被设置成i-1。 
“情形6”:(Pi+1PiPi-1)=(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位(Pp-1...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-P=2*2*2P-modP。可知在蒙哥马利乘法之后也仍存在要素2P。在步骤602中,利用2P+1 mod P来初始化辅助处理器寄存器115,其原因为p不是很大,通常p=512或p=1024,在二进制中,以1和后续的p+1个0这样的形式单纯地表现2P+1。接下来,直到2P+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中。如果Pi=1,则必需执行与情形1、2、或3对应的操作。在Pi=0时,必需执行与情形4、5、或6对应的操作。 
在Pi=1的情况下,在步骤612中检查位Pi+1的值。其检查内容如下所述。 
“情形1”:如果Pi+1=0,则进行与所检测出的情形1对应的位处理。情形1仅要求一个蒙哥马利乘法处理,而无需其他处理,对接下来的位的值进行检查。在Pi+1=0的情况下,为了区分情形2以及3,必需对位Pi-1进行检查。因此,在步骤622中,对位Pi-1的值进行检查。 
“情形2”:在Pi-1=0的情况下,进行与所检测出的情形2对应的位处理。因此,在步骤623中由CPU 122使辅助处理器寄存器A 115的数据右移一位。在移位操作之后,寄存器A 115的数据比p位多。即,在该情况下,在步骤625中根据需要必需从A减去几次P。 
“情形3”:在Pi-1=1的情况下,进行与所检测出的情形3对应的位处理。在步骤641中进而进行蒙哥马利乘法,计数器i还被递减一次。之后,在步骤623中使辅助处理器寄存器A 115的数据左移一位,在步骤625中如果A比p位多,则从A减去P。但是,在i=1的情况下,代替而执行情形2。在Pi=0的情况下,在步骤631中检查位Pi+1的值。其检查内容如下所述。 
“情形4”:在Pi+1=0的情况下,无需进一步的动作。在Pi+1=1的情况下,为了区别情形5以及6,必需对Pi-1进行检查。 
“情形5”:在Pi-1=0的情况下,A被右移一位。在A是偶数的情况下,其最下位的位是0,在步骤635中由CPU 122对A直接进行 移位。但是,在A是奇数的情况下,在步骤634中由CPU 122向A加上P。由于A和P这两方都是奇数,因此A+P是偶数,在步骤635中进行右移。 
“情形6”:在Pi-1=1的情况下,进行蒙哥马利乘法,在步骤642中计数器i被递减,之后,接着步骤633进行右移。 
反复进行上述步骤,直到成为0为止在步骤614中对计数器i进行递减。分别对P-1的二个最下位的位进行处理。从P-1的最后开始数起第二个位是P1。在P1=0的情况下,在步骤651中运算蒙哥马利乘法,在P1=1的情况下,根据需要加上步骤654的P之后,在蒙哥马利乘法之后继续步骤655的右移。由于P-1是偶数,所以P-1的最后的位总是0,因此,在步骤661中计算蒙哥马利乘法。在该点上,计算出全部位,但必需删除蒙哥马利常数的2P mod P。因此,在步骤663中,数据1被写入到辅助处理器寄存器B 116,由辅助处理器123运算蒙哥马利乘法MontMult(A、1、P)=A*2-P mod P。在该最后的乘法中,消除蒙哥马利常数的2P mod P,然后,向步骤662返回存储在辅助处理器寄存器A中的数据。在A是1的情况下,P大概是素数,在A并非1的情况下,P是合数。 
“费马测试的具体例子” 
在该例子中,假设成整数P=109是素数性的判定对象。使用图13的费马测试,计算幂乘的余数乘法2108 mod 109。在二进制数时,是108=(1101100)2,在具备基于二进制法的左移的费马测试中,进行三次左移,其原因为,除了其最上位的位的1以外还有三个位的1。另一方面,108的FAN表现是108=(100-10-100),仅存在二次右移。 
进行详细说明。P=109的位长度是p=7。最初,用2P+1 mod P=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来更新寄存器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=1、P3=1,而且所对应的重编码是0。 
在“i=1”的情况下,利用MontMult(101、101、109)=55来更新A。接下来的P1=0、P2=1、P0=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-1被写成2j+1*D。此处,j+1是P-1的二进制的表现中的末尾的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-位的奇数P=(PP-1...P0)构成。配置在RAM 112中的计数器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在接下来的步骤中运算乘方的余数乘法BD mod P的期间,表示P-1的哪个位被扫描。从左向右使用二进制的方法,按照蒙哥马利乘法和蒙哥马利平方运算的步骤,运算乘方的余数乘法。在步骤713中,进行蒙哥马利平方运算,向辅助处理器寄存器115存储运算结果。即,存储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是其他“p-位”的整数。当前,是MontMult(Y、Y、P)=Y*Y*2P mod P,在蒙哥马利乘法之后,要素2P mod P稳定。其结果,乘方结果是XD*2P 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中的数据被平方,与-1进行比较。 
在步骤733中反复j次蒙哥马利平方运算。可知在一个蒙哥马利乘法之后,寄存器A存储Y2D*2P mod P,要素2P mod P在蒙哥马利乘法之后再次稳定、即不变化。但是,由于蒙哥马利平方运算的结果与-1进行比较,所以必需用步骤733中的操作MontMult(A、1、P)=Y2D mod P去除要因2P,向辅助处理器寄存器B 116存储该结果数据。如果着眼于-1=P-1 mod P,则在步骤731中对存储在辅助处 理器寄存器B中的数据与P-1进行比较。如果其一致,则P大概是素数,所以米勒罗宾测试在步骤742中返回“成功”。在寄存器B的数据与P-1不同的情况下,整体上反复j次上述步骤。在反复了j次之后,寄存器B的值与P-1绝对不一致,而P是合数,所以米勒-罗宾测试在步骤743中输出“失败”。 
“扩展” 
本发明不限于上述实施方式2中说明的内容。例如,图8的便携机器还可以是便携电话、PDA、以及使用公有密钥加密且计算机资源和存储器资源有限的其他各种电子设备。特别,便携机器无需具备蒙哥马利乘法辅助处理器。也可以是种类不同的辅助处理器。例如既可以是古典的余数乘法辅助处理器,也可以是不使用辅助处理器而由CPU以软件方式实现的余数乘法处理。 
代替存储小的素数之差,为了重构小的素数,还可以使用恰当的其他任意方法。费马测试中的重编码也可以是如NAF法、窗口法、或滑动窗口法那样不同的重编码法。 
实施方式2着眼于RSA密钥的生成,但本发明不限于RSA,即使是DSA或Diffie-Hellman那样的其他公有密钥加密方式,也可以得到用于高效地生成素数的上述发明的效果。另外,本发明不限于素数判定测试的结构、种类。例如,也可以代替费马测试而使用米勒罗宾测试,也可以采用弗洛比尼斯(Frobenius)、Solovay-Strassen或AKS测试等其他测试。另外本发明不限于特定的RSA参数。例如,可以省略DP、DQ以及Qinv那样的CRT参数,并且还可以省略D。另外,还可以在P以及Q的追加状态下使用强素数(strong primes)。 
实施方式1中说明的图1的加密单元还可以以软件形式实现,并且还可以用硬件逻辑来构成以图8的结构实现的功能。 

Claims (7)

1.一种公有密钥加密处理系统,能够进行基于公有密钥加密方式的加密运算处理,该公有密钥加密处理系统的特征在于,
具有:判定第一整数的素数性的素数性判定单元,
上述素数性判定单元具有:第一寄存器、能够把上述第一整数的表现形式在以上述第一整数减去1得到的值为指数的2的幂乘数中变更为上述指数的二进制表述的重编码单元、以及具有累加器的余数乘法单元,
上述重编码单元扫描上述第一整数的多个位,
上述素数性判定单元在将上述第一寄存器的所有位清零之后,通过基于上述扫描的结果在用上述二进制表述表示的位的位置设为1的位处理,在上述第一寄存器中存储第二整数,
上述余数乘法单元对存储于上述第一寄存器的上述第二整数与存储于上述累加器的值的积,执行对于2的幂乘数的以上述第一整数为模数的余数乘法,
上述素数性判定单元基于上述余数乘法的运算结果判定素数性。
2.根据权利要求1所述的公有密钥加密处理系统,其特征在于,在将扫描上述第一整数的多个位的单位设为w位且w为正整数时,
上述余数乘法是:
将基于之前的余数平方运算的余数作为下一个余数平方运算的被除数的运算,其中,该运算是将以包含在上述指数的上述二进制表述中的上述w位的位列为指数的2的幂乘数作为被除数的初始值、而多次地反复进行的余数平方运算;以及
将上述多次反复进行的余数平方运算的结果与以其下一个w位的位列为指数的2的幂乘数的乘法运算结果作为被除数、将上述第一整数作为模数的余数乘法。
3.一种公有密钥加密处理系统,能够进行基于公有密钥加密方式的加密运算处理,该公有密钥加密处理系统的特征在于,
具有:判定第一整数的素数性的素数性判定单元,
上述素数性判定单元具有:第一寄存器、能够把上述第一整数的表现形式变更为上述第一整数的二进制表述的重编码单元、以及余数乘法单元,
上述重编码单元扫描上述第一整数的多个位,
上述素数性判定单元通过基于上述扫描的结果左移或右移1位的位处理,在上述第一寄存器中存储第二整数,
上述余数乘法单元执行对上述第二整数的、以上述第一整数为模数的蒙哥马利乘法,
上述素数性判定单元基于上述余数乘法的运算结果判定素数性。
4.一种公有密钥加密处理方法,能够进行基于公有密钥加密方式的加密运算处理,该公有密钥加密处理方法的特征在于,
包括素数性判定处理,在生成用于生成公有密钥的素数时,使用窗口方法判定作为整数的素数候补的素数性,
上述素数性判定处理包括:
重编码处理,把上述素数候补的表现形式在以上述第一整数减去1得到的值为指数的2的幂乘数中变更为上述指数的二进制表述;
第一处理,以多个位为单位依次扫描通过上述重编码处理变更了表现形式的上述素数候补;
第二处理,在将上述第一寄存器的所有位清零之后,通过基于上述第一处理的结果在用上述二进制表述表示的位的位置设为1的位处理,生成第二整数;
第三处理,对存储于上述第一寄存器的上述第二整数,执行对于2的幂乘数的以上述素数候补为模数的余数乘法;以及
第四处理,根据基于上述第三处理的余数乘法的运算结果判定素数性。
5.根据权利要求4所述的公有密钥加密处理方法,其特征在于,
上述扫描的位数预先确定为w位,其中w是正整数,
上述第二处理是将以上述w位的位列为指数的2的幂乘数作为上述第三处理的余数乘法的被除数的初始值的处理,
上述第三处理包括:
将基于之前的余数平方运算的余数作为下一个余数平方运算的被除数的运算,其中,该运算是将上述素数候补作为模数而多次反复进行的余数平方运算;以及
将上述多次反复进行的余数平方运算的结果与以其下一个w位的位列为指数的2的幂乘数的乘法运算结果作为被除数、将上述素数候补作为模数的余数乘法。
6.一种公有密钥加密处理方法,能够进行基于公有密钥加密方式的加密运算处理,该公有密钥加密处理方法的特征在于,
包括素数性判定处理,在生成用于生成公有密钥的素数时,使用窗口方法判定作为整数的素数候补的素数性,
上述素数性判定处理包括:
重编码处理,将上述素数候补的表现形式变更为附加符号的位列;
第一处理,以多个位为单位依次扫描通过上述重编码处理变更了表现形式的上述素数候补;
第二处理,通过基于上述第一处理的结果的位处理,基于上述位列的至少3位进行,生成第二整数;
第三处理,对上述第二整数,执行对于2的幂乘数的以上述素数候补作为模数的余数乘法,该第三处理包括以下处理:针对上述位列的上述附加符号表现的全部的位,反复进行扫描上述整数的附加符号表现的位,进行余数平方运算,在1的位的情况下进行余数左移、在-1的位的情况下进行余数右移的处理;以及
第四处理,根据基于上述第三处理的余数乘法的运算结果判定素数性。
7.根据权利要求6所述的公有密钥加密处理方法,其特征在于,
上述第三处理包括以下处理:
在上述位列的最初的2个位为01或10时进行一次余数平方运算,
在上述位列为011时分别进行一次余数平方运算和余数左移,
在上述位列为010时进行两次余数平方运算且进行一次余数左移,
在上述位列为100时分别进行一次余数平方运算和余数右移,
在上述位列为101时进行两次余数平方运算且进行一次余数右移。
CN2009100058675A 2008-03-21 2009-02-10 数据处理系统以及数据处理方法 Expired - Fee Related CN101540672B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
JP2008-072723 2008-03-21
JP2008072723 2008-03-21
JP2008072723A JP5328186B2 (ja) 2008-03-21 2008-03-21 データ処理システム及びデータ処理方法

Related Child Applications (1)

Application Number Title Priority Date Filing Date
CN2011104102369A Division CN102393813A (zh) 2008-03-21 2009-02-10 数据处理系统以及数据处理方法

Publications (2)

Publication Number Publication Date
CN101540672A CN101540672A (zh) 2009-09-23
CN101540672B true CN101540672B (zh) 2013-06-26

Family

ID=40638135

Family Applications (2)

Application Number Title Priority Date Filing Date
CN2011104102369A Pending CN102393813A (zh) 2008-03-21 2009-02-10 数据处理系统以及数据处理方法
CN2009100058675A Expired - Fee Related CN101540672B (zh) 2008-03-21 2009-02-10 数据处理系统以及数据处理方法

Family Applications Before (1)

Application Number Title Priority Date Filing Date
CN2011104102369A Pending CN102393813A (zh) 2008-03-21 2009-02-10 数据处理系统以及数据处理方法

Country Status (4)

Country Link
US (1) US8374345B2 (zh)
EP (1) EP2104031A3 (zh)
JP (1) JP5328186B2 (zh)
CN (2) CN102393813A (zh)

Families Citing this family (29)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5179933B2 (ja) * 2008-04-18 2013-04-10 ルネサスエレクトロニクス株式会社 データ処理装置
FR2946207A1 (fr) * 2009-05-28 2010-12-03 Proton World Internat Nv Protection d'une generation de nombres premiers pour algorithme rsa
JP5366758B2 (ja) * 2009-10-27 2013-12-11 日本電信電話株式会社 パラメータ設定装置、パラメータ設定方法、プログラム
GB2480259A (en) * 2010-05-10 2011-11-16 Etsem Ltd Data sequence encryption using primes generated from random natural numbers
CN102546162A (zh) * 2010-12-29 2012-07-04 北京数字太和科技有限责任公司 一种数据安全处理方法
JP5601382B2 (ja) * 2011-02-09 2014-10-08 富士通株式会社 組み込み機器における情報処理装置、情報処理方法及び情報処理プログラム
CN102325024A (zh) * 2011-09-26 2012-01-18 飞天诚信科技股份有限公司 一种生成大素数的方法和装置
DE102011117236A1 (de) * 2011-10-28 2013-05-02 Giesecke & Devrient Gmbh Effiziente Primzahlprüfung
DE102011117219A1 (de) * 2011-10-28 2013-05-02 Giesecke & Devrient Gmbh Bestimmen eines Divisionsrests und Ermitteln von Primzahlkandidaten für eine kryptographische Anwendung
DE102011117237A1 (de) * 2011-10-28 2013-05-02 Giesecke & Devrient Gmbh Effiziente modulare Inversion mit Primzahltest
JP5848106B2 (ja) * 2011-11-28 2016-01-27 ルネサスエレクトロニクス株式会社 半導体装置及びicカード
WO2013088066A1 (fr) * 2011-12-15 2013-06-20 Inside Secure Procede de generation de nombres premiers prouves adapte aux cartes a puce
US9083703B2 (en) * 2012-03-29 2015-07-14 Lockheed Martin Corporation Mobile enterprise smartcard authentication
CN104603755B (zh) 2012-09-28 2017-11-14 英特尔公司 循环向量化方法和设备
US9887983B2 (en) 2013-10-29 2018-02-06 Nok Nok Labs, Inc. Apparatus and method for implementing composite authenticators
US10270748B2 (en) 2013-03-22 2019-04-23 Nok Nok Labs, Inc. Advanced authentication techniques and applications
US9367676B2 (en) 2013-03-22 2016-06-14 Nok Nok Labs, Inc. System and method for confirming location using supplemental sensor and/or location data
CN103227987B (zh) * 2013-04-08 2016-05-04 哈尔滨工程大学 一种异构传感网认证组密钥管理方法
EP3082033B1 (en) * 2015-04-17 2017-08-30 Nxp B.V. Modular exponentiation using look-up tables
CN104767622B (zh) * 2015-04-20 2018-08-14 努比亚技术有限公司 加密方法及装置
US10637853B2 (en) 2016-08-05 2020-04-28 Nok Nok Labs, Inc. Authentication techniques including speech and/or lip movement analysis
US10769635B2 (en) 2016-08-05 2020-09-08 Nok Nok Labs, Inc. Authentication techniques including speech and/or lip movement analysis
CN108242994B (zh) * 2016-12-26 2021-08-13 阿里巴巴集团控股有限公司 密钥的处理方法和装置
US10248553B2 (en) * 2017-07-14 2019-04-02 International Business Machines Corporation Test methodology for detection of unwanted cryptographic key destruction
US11868995B2 (en) 2017-11-27 2024-01-09 Nok Nok Labs, Inc. Extending a secure key storage for transaction confirmation and cryptocurrency
US11831409B2 (en) 2018-01-12 2023-11-28 Nok Nok Labs, Inc. System and method for binding verifiable claims
GB2574613B (en) * 2018-06-12 2020-07-22 Advanced Risc Mach Ltd Device, system, and method of generating and handling cryptographic parameters
US11792024B2 (en) 2019-03-29 2023-10-17 Nok Nok Labs, Inc. System and method for efficient challenge-response authentication
CN113900476A (zh) * 2021-10-11 2022-01-07 吴鸿邦 一种高效分解素数与合成破译rsa密码的新型算法

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE10357749A1 (de) * 2003-12-10 2005-07-14 Infineon Technologies Ag Vorrichtung und Verfahren zum Bestimmen einer Teilerfreiheit einer Testzahl in Bezug auf eine Mehrzahl von Primzahlen

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3626340B2 (ja) * 1996-12-26 2005-03-09 株式会社東芝 暗号装置及び暗号鍵生成方法、並びに素数生成装置及び素数生成方法
TW419925B (en) * 1998-01-27 2001-01-21 Mitsubishi Electric Corp Method and apparatus for arithmetic operation and recording medium thereof
JP2004527139A (ja) * 1999-10-01 2004-09-02 フランス テレコム エンティティの真性性またはメッセージの完全性を証明する方法、システム、および装置。
FR2820905B1 (fr) * 2001-02-09 2005-02-18 Gemplus Card Int Dispositif et procede de traitement de valeurs numeriques, notamment sous forme non-adjacente
US7120248B2 (en) 2001-03-26 2006-10-10 Hewlett-Packard Development Company, L.P. Multiple prime number generation using a parallel prime number search algorithm
JP2003122251A (ja) * 2001-10-10 2003-04-25 Sony Corp 暗号情報生成方法と暗号情報生成装置、暗号情報生成プログラム及び記録媒体
US6718536B2 (en) 2002-06-21 2004-04-06 Atmel Corporation Computer-implemented method for fast generation and testing of probable prime numbers for cryptographic applications
US7113595B2 (en) * 2002-08-09 2006-09-26 Gemplus Generation of a random number that is non-divisible by a set of prime numbers
US7346637B2 (en) * 2003-07-31 2008-03-18 Indian Institute Of Technology Polynomial time deterministic method for testing primality of numbers
CN101099328B (zh) * 2004-11-11 2011-05-18 塞尔蒂卡姆公司 定制的静态Diffie-Helman群
TW200814689A (en) 2006-09-15 2008-03-16 Innovative Sonic Ltd Method and apparatus for setting serving grant in a wireless communications system
US8005210B2 (en) * 2007-06-30 2011-08-23 Intel Corporation Modulus scaling for elliptic-curve cryptography
US7986779B2 (en) * 2007-06-30 2011-07-26 Intel Corporation Efficient elliptic-curve cryptography based on primality of the order of the ECC-group

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE10357749A1 (de) * 2003-12-10 2005-07-14 Infineon Technologies Ag Vorrichtung und Verfahren zum Bestimmen einer Teilerfreiheit einer Testzahl in Bezug auf eine Mehrzahl von Primzahlen

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
Bodo Moller.Improved Techniques for Fast Exponentiation.《Information Security and Cryptology一ICISC 2002,Springer-Verlag》.2003, *

Also Published As

Publication number Publication date
EP2104031A2 (en) 2009-09-23
JP5328186B2 (ja) 2013-10-30
CN101540672A (zh) 2009-09-23
US8374345B2 (en) 2013-02-12
US20090245507A1 (en) 2009-10-01
JP2009229615A (ja) 2009-10-08
EP2104031A3 (en) 2012-02-08
CN102393813A (zh) 2012-03-28

Similar Documents

Publication Publication Date Title
CN101540672B (zh) 数据处理系统以及数据处理方法
US8077863B2 (en) Secret sharing apparatus, method, and program
CN1677917B (zh) 用于流式密码中的循环存储单元的方法和系统
CN107040362B (zh) 模乘设备和方法
CN100527072C (zh) 用于执行蒙哥马利型模乘法的装置及方法
US6795553B1 (en) Method and apparatus for modular inversion for information security and recording medium with a program for implementing the method
CN104067217A (zh) 生成被验证适用于芯片卡的素数的方法
US9680647B2 (en) Method of using a token in cryptography
CN101432755A (zh) 程序难破解化系统、程序难破解化装置及程序难破解化方法
US20130305361A1 (en) Protection of a prime number generation against side-channel attacks
US8291223B2 (en) Arithmetic circuit for montgomery multiplication and encryption circuit
CN104025018A (zh) 有效地检验素数
US20190372753A1 (en) Efficient unified hardware implementation of multiple ciphers
Pessl et al. Curved tags–a low-resource ECDSA implementation tailored for RFID
Schindler et al. Generic power attacks on RSA with CRT and exponent blinding: new results
US7742595B2 (en) Cryptographic method protected against covert channel type attacks
CN103326861A (zh) 一种对数据进行rsa安全签名的方法、装置及安全芯片
CN101243388A (zh) 用于在加密计算中执行求逆运算的电路结构和方法
JP2000511649A (ja) 公開鍵暗号方法
US6609141B1 (en) Method of performing modular inversion
Moreno et al. SPA-resistant binary exponentiation with optimal execution time
CN104012029A (zh) 通过至少一个蒙哥马利运算确定除余数和对于密码应用确定素数候选
Leadbitter et al. Attacking DSA under a repeated bits assumption
JP5038868B2 (ja) 鍵共有方法、第1装置、第2装置、及びそれらのプログラム
JP4676873B2 (ja) パラメータ生成装置、暗号鍵生成装置、それらの方法及びプログラム

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
ASS Succession or assignment of patent right

Owner name: NEC CORP.

Free format text: FORMER OWNER: RENESAS TECHNOLOGY CORP.

Effective date: 20100906

C41 Transfer of patent application or patent right or utility model
COR Change of bibliographic data

Free format text: CORRECT: ADDRESS; FROM: TOKYO, JAPAN TO: KANAGAWA, JAPAN

TA01 Transfer of patent application right

Effective date of registration: 20100906

Address after: Kanagawa, Japan

Applicant after: NEC Corp.

Address before: Tokyo, Japan

Applicant before: Renesas Technology Corp.

C14 Grant of patent or utility model
GR01 Patent grant
CP02 Change in the address of a patent holder

Address after: Tokyo, Japan

Patentee after: Renesas Electronics Corporation

Address before: Kanagawa, Japan

Patentee before: Renesas Electronics Corporation

CP02 Change in the address of a patent holder
CF01 Termination of patent right due to non-payment of annual fee
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20130626

Termination date: 20210210