通过至少一个蒙哥马利运算确定除余数和对于密码应用确定素数候选的制作方法

文档序号:7993890阅读:264来源:国知局
通过至少一个蒙哥马利运算确定除余数和对于密码应用确定素数候选的制作方法
【专利摘要】在一种用于确定第一值(b)模第二值(p')之后的除余数的方法中利用第一值(b)作为因子之一和第二值(p')作为模执行(74.1)第一蒙哥马利乘法,确定(74.2)校正因子,以第一蒙哥马利乘法的结果作为一个因子和校正因子作为另一个因子和第二值(p')作为模,执行(74.3)第二蒙哥马利乘法。在一个用于确定素数候选的方法中确定用于筛法的基础值(b),并且执行多个筛遍历,在所述筛遍历中分别确定(72)一个标记值(p')并且将标记值(p')的倍数在筛法中作为合数标记,其中在每个筛遍历中利用包括至少一个蒙哥马利运算的余数确定方法确定(74)基础值(b)对标记值(p')取模之后的除余数。一种装置和计算机程序产品具有相应的特征。提到的方法可以在合适的平台上有效地实现。
【专利说明】通过至少一个蒙哥马利运算确定除余数和对于密码应用确定素数候选
【技术领域】
[0001]本发明一般地涉及可有效实现的密码方法的【技术领域】。更具体地,本发明的第一方面涉及除余数的确定,而本发明的第二方面涉及素数候选的确定一所述素数候选是利用一定的概率表示素数的值。本发明特别适合于在便携式数据载体中的应用。这样的便携式数据载体例如可以是按照不同的构造形式的芯片卡(智能卡)或芯片模块或类似的资源受限的系统。
【背景技术】
[0002]用于素数确定的有效方法对于许多密码应用来说是必须的。因此例如为了产生密钥,在美国专利4405829描述的RSA方法中必须规定两个秘密的素数,其乘积形成公钥的一部分。该素数的大小取决于安全性要求并且通常为数百至数千位。可预见的是,所需要的大小在将来还将明显增加。
[0003]总体上,素数搜索是在RSA密钥产生中计算量最大的步骤。从安全性原因出发,通常要求,该密钥产生通过数据载体本身执行。根据数据载体的类型的不同,该过程在数据载体的生产(例如完成或初始化或个性化)期间导致时间开销,其可以强烈改变并且可能为数分钟。因为生产时间是昂贵的,所以为了产生密钥而需要的时间表示了极大的成本因素。由此值得期望的是,加速密钥产生并且由此提高便携式数据载体的生产设备的可实现的产量。
[0004]用于缩短生产时间的一个重要步骤是,使用用于素数搜索的有效方法,其还满足关于产生的素数的一些边界条件。这样的方法已经被建议并且例如从申请公开DE 10 2004044 453 Al 和 EP I 564 649 A2 公知。
[0005]在RSA方法中,在密钥产生之后进行的加密和解密过程是计算开销相对大的。特别地对于具有有限的计算能力的便携式数据载体由此通常采用在解密和产生签名时使用中国剩余定理(CRT = Chinese remainder theorem)并且由此也称为RSA-CRT方法的实现。通过使用RSA-CRT方法,对于解密和产生签名所需要的计算开销大约以4倍减小。
[0006]为了准备RSA-CRT方法,在私钥的确定时,除了这两个秘密的RSA质因子之外计算另外的值并且作为私钥的参数存储。对此的详细信息例如在申请公开W02004/032411A1中获得。因为另外的RSA-CRT密钥参数的计算通常也在便携式数据载体的生产期间被执行,所以值得期望的是,为此也使用尽可能有效的方法。
[0007]许多便携式数据载体包含协处理器,其支持特定的计算过程。特别地公知数据载体,其协处理器支持作为蒙哥马利乘法公知的运算,其在Peter L.Montgomery的 文 章“Modular multiplication without trial division”, Mathematics ofComputation, Vol.44,n0.170,1985年4月,519-521页中被描述。蒙哥马利协处理器通常不支持具有对于密码任务所需的位长度的“正常的”非模乘以及模乘。对于其他协处理器,可能成立的是,模乘或非模乘虽然被支持,但是不如蒙哥马利乘法有效地被执行。除运算也不能或不能有效地或不能以对于密码任务所需的位长度由许多常用的蒙哥马利协处理器支持。值得期望的是,尽可能好地充分利用目前可用的或将来出现在市场上的协处理器的能力。

【发明内容】

[0008]因此,本发明的任务是,提供一种有效的技术,用于确定除余数或用于确定素数候选。
[0009]按照本发明,上述任务完全或部分地通过具有权利要求1及权利要求8的特征的方法、按照权利要求14的计算机程序产品和按照权利要求15的装置,特别是便携式数据载体解决。从属权利要求涉及本发明一些构造的可选特征。
[0010]本发明的第一方面从如下基本思路出发:为了确定除余数,执行蒙哥马利乘法而不是其他常用的模除。通过蒙哥马利乘法引起的误差然后通过另一个蒙哥马利乘法来补偿,其中合适确定的校正因子作为该另一个蒙哥马利乘法的因子之一。该方法可以在许多常用的硬件平台上比带余数的模除明显更有效地实现。
[0011]在一些构造中,第一蒙哥马利乘法是蒙哥马利约简,也就是具有I作为两个因子之一的乘法。优选地,这两个蒙哥马利乘法以不同的蒙哥马利系数实施。
[0012]校正因子在一些实施方式中作为2的模幂在循环中计算,其中每个循环过程具有中间结果的翻倍和条件减。而在其他实施方式中,校正因子作为具有正整数的校正因子指数和底数1/2的模幂。为此又可以采用蒙哥马利运算。
[0013]本发明的第二方面从基本思路出发,确定筛法中的素数候选。从基础值出发,在此执行多个筛遍历(Siebdurchlaufe ),其中分别确定一个标记值并且将标记值的倍数在筛法中作为合数标记。此外在每个筛遍历中,利用余数确定方法确定基础值模标记值后的除余数,其在常用的硬件平台上可特别有效地实现,因为其至少包括一个蒙哥马利运算。
[0014]在优选的实施方式中(至少一个)标记值是素数。有利地,使用多个素数作为对于筛遍历的标记值。筛法例如可以从基础值出发,仅代表预定的步幅的数字。在一些实施方式中,实施其他素数测试,以从素数候选中确定可能的素数。在按照本发明的第二方面的方法的许多构造中使用按照本发明的第一方面的余数确定方法。
[0015]在方法权利要求中的步骤的编号顺序不应当理解为保护范围的限制。而是还可以设置本发明的如下构造,在这些构造中这些步骤完全或部分按照其他顺序和/或完全或部分交叉(交织)和/或完全或部分并行实施。
[0016]按照本发明的计算机程序产品具有程序命令,以实现按照本发明的方法。这样的计算机程序产品可以是实体介质,例如半导体存储器或磁盘或CD-ROM。然而计算机程序产品在一些实施方式中也可以是非实体介质,例如经过计算机网络传输的信号。特别地,计算机程序产品可以包含在便携式数据载体的生产过程中被引入到数据载体中的程序命令。
[0017]按照本发明的装置特别地可以是便携式数据载体,例如芯片卡或芯片模块。这样的数据载体以公知的方式包含至少一个处理器、多个在不同的技术中构造的存储器和各种辅助组件。在本文件的选词中,概念“处理器”应当既包括主处理器也包括协处理器。
[0018]在优选的扩展中,计算机程序产品和/或装置具有与在本说明书中提到的和/或在从属的方法权利要求中提到的特征相应的特征。【专利附图】

【附图说明】
[0019]本发明的其他特征、任务和优点从以下对多个实施例和实施替选方案的描述得出。参见示意性附图。
[0020]图1示出了用于确定两个素数以及RSA-CRT密钥的其他参数的方法的流程图,
[0021]图2示出了用于确定素数候选的方法的流程图,
[0022]图3示出了对于图1和图2的方法的实施是合适的便携式数据载体的组件的示意图,
[0023]图4示出了用于产生候选域的方法的流程图,和
[0024]图5示出了在使用蒙哥马利运算的条件下具有底数1/2和正整数指数e的模幂计算的方法的示例流程。
【具体实施方式】
[0025]在本文件中特别地结合对RSA-CRT密钥对的一个、多个或所有参数的确定来描述本发明。然而本发明也可以对于其他应用目的被采用,特别地用于如对于各种密码方法所需的相对大的和随机的素数的确定。
[0026]一般地,RSA-CRT密钥对的参数从两个秘密素数P和q以及公开指数e导出。在此公开指数e是与(p-1).(q-Ι)互素的数,其可以随机选择或固定预先给出。例如在一些实施例中使用第四个费马(Fermat)素数F4 = 216+1作为公开指数e。公钥包含公开指数e和公开的模N: =p*q。私有RSA-CRT密钥除了包含两个素数P和q之外还包含模逆pinv:=Pernod q 以及通过 dp: = e_1mod(p-l)及 dq: = e_1mod(q-l)定义的两个 CRT 指数 dp 和 dq。
[0027]按照图1的方法示出了在预先给出的公开指数e的情况下秘密的RSA-CRT密钥的所有参数的计算。该方法由在图1的左边和右边栏中示出的两部分组成。第一部分(步骤
10、12、16和20)包括一个素数P和与之相关的密钥参数七的确定,而第二部分(步骤24、26、30、34和38)涉及另一个素数q和密钥参数d,和pinv的确定。
[0028]可以理解,该方法在实施替选方案中可以这样变化,使得计算刚才提到的参数的仅一些。为此当一些密钥参数被另外计算或根本不需要时,例如可以省略或缩短方法步骤。特别地可以设置,当仅需要确定唯一一个素数时,执行在图1中示出的两个方法部分的一个(也就是或者仅步骤10、12、16和20或者仅步骤24、26、30、34和38)。
[0029]在图1中和其他附图中实线箭头示出了规则的程序流程,虚线箭头示出了在一定的条件下一特别是当素数候选或预期的素数证明是合数时一被执行的替换的程序流程。点线箭头表示了数据流。
[0030]在图1中示出的流程在步骤10以第一素数候选m的产生开始,其满足一定的边界条件(特别是边界条件m = 3mod4)。在此处描述的实施例中在每个素数候选m的确定时作出预先选择,其确保,素数候选m不会已经通过小的素数(例如2,3,5,7,...)可除。具有预先选择的合适的确定方法在图2中示出并且在以下被详细描述。
[0031]在步骤12中对素数候选m进行费马测试。费马测试是一种概率性素数测试,其将合数以高的概率作为合数来识别,而绝不会将素数错误地看作为合数。费马测试基于费马小定理,其说明,对于每个素数P和每个自然数a,成立关系:ap = amodp。反过来不一定成立,但是反例如此罕见,使得通过了费马测试的素数候选m以几乎确定的概率是一个素数。
[0032]如果素数候选m在步骤12中在费马测试时被识别为合数,则跳回14到步骤10,在该步骤10中确定新的素数候选。否则方法继续,其中素数候选m被看作为预期的素数P。
[0033]在步骤16中计算CRT指数dp,其通过dp: = e mod(p-l)定义。对此使用本身公知的反演方法。当e和p-Ι是互素的时,也就是当成立gcd(p_l, e) = I时,CRT指数dp作为公开指数e的模逆存在。如果不是这样,则跳转18到方法的开始。否则在步骤16中确定CRT指数dp并且方法然后在步骤20以预期的素数P的Miller-Rabin测试继续。
[0034]Miller-Rabin 测试是从在 Journal of Number Theory I2, 1980,第 I28-138 页发表的 Michael 0.Rabin 的文章 “Probabilistic algorithms for testing primality,,中公知的。在Miller-Rabin测试的每轮测试中将合数以一定的概率识别为合数,而素数绝不会被错误地看作为合数。Miller-Rabin测试的错误概率取决于测试轮数并且可以通过执行足够多轮的测试来保持为任意小。
[0035]由于已经提到的在步骤12中的费马测试的高的准确性,预期的素数在步骤20中的Miller-Rabin测试中被识别为合数的概率可以忽略。在步骤16中CRT指数dp的计算由于gcd(p-l,e)辛I而失败并且必须执行跳转18的概率相反地以数量级更高。由此更有效的是,在步骤20之前执行步骤16,因为由此避免了不需要的Miller-Rabin测试。
[0036]尽管如此,本发明还包括如下的实施例,在这些实施例中在Miller-Rabin测试之后才计算或者在另一个时刻计算CRT指数dp。此外在实施替选方案中可以建议,CRT指数dp的计算与在此描述的用于素数确定的方法分开地执行;于是可以省去步骤16。
[0037]在步骤20中执行Miller-Rabin测试,以便能够数学地探测例如可以为2_1(1°的期望的最大错误概率。在Miller-Rabin测试中执行多轮测试,其数量取决于该错误概率。对于预期的素数P的一轮测试在于,随机数被提高到((P-1)/2)次幂模P,并且在于检查,结果是否是± I模P。在此假定边界条件P = 3mod4。
[0038]在最不可能的情况下,即在预期的素数P在步骤20中的Miller-Rabin测试的一轮测试中被识别为合数的情况下,跳转22到方法的开始。在其他情况下将素数P作为在此描述的方法的结果输出。
[0039]在图1的右边栏中示出的第二方法部分除了步骤34之外是按照图1的左边栏的第一方法部分的重复,其中计算第二素数q。由此很大程度参见上面的解释。
[0040]步骤24、26和30类似于步骤10、12和16。当在步骤24中选择的素数候选m在步骤26中的费马测试中被证明是合数时,跳转28到在步骤24中对新的素数候选的选择。否贝1J,在步骤30中计算CRT指数dq: = e_1mod(q-l)。如果e和q_l不是互素的,贝U进行到步骤24的跳转32。否则,方法以预期的素数d,继续。与在第一方法部分中类似地在此也进行修改,在所述修改中在另一个时刻结合在此描述的方法或与之分离地计算CRT指数d,。[0041 ] 在步骤34中进行组合的测试和反演方法,其中对于预期的素数q的Mi 11 er-Rabin测试的第一轮测试与逆Pinv: =P-1Hiodq的计算耦合。因为q是素数,所以逆Pinv可以利用费马小定理确定为Pinv = P—1 = Ptr2Hiod q。因为P是随机数,所以在该计算中可以利用小的额外开销立即执行对于预期的素数q的第一轮Miller-Rabin测试,其中检查,P的第((q_l)/2)次幂模q是否等于±1。
[0042]如果预期的素数q没有通过第一轮Miller-Rabin测试,则在步骤34中进行到步骤24的跳转36。否则在步骤38中进行Miller-Rabin测试的另外还需要的测试轮。如果该测试轮失败,则在步骤24之后进行到新的素数候选的选择的跳转40。否则已知第二素数q,并且方法结束。
[0043]在一些实施方式中在图1中示出的方法如下变化,即,不设置组合的测试和反演方法。由此例如可以替代步骤36而进行在步骤38中的附加一轮的Miller-Rabin测试。逆Pinv的计算于是可以作为单独的步骤-作为在此描述的方法的部分或与其分离地-被执行,如果这样的计算是根本上需要的话。由此例如逆Pinv在RSA-CRT计算时仅用于提高效率。在不使用中国剩余定理的RSA计算中根本不需要逆pinv。
[0044]图2示出了素数候选m的确定,如在图1的步骤20和24中被执行的。在该描述的实施例中在此使用提供多个素数候选m的候选域。候选域例如可以是打包的位域(bitarray,位数组)S,其位S [i]说明,具有取决于位位置i的、与基础值b的偏移的数字是否是素数候选m。
[0045]在按照图2的方法中首先在测试42中检查,是否存在一个合适的和非空的候选域。如果否,则在步骤44中产生满足条件b = 3mod4的随机的基础值b。
[0046]在步骤46中然后产生候选域。作为用于候选域的数据结构,在本实施例中使用位域S,其位位置i分别相应于与基础值b相差SWi的偏移(以SW作为步幅)。完成的候选域的每个位S[i]由此显示,数字b+SWi是否能够作为素数候选m被使用。
[0047]为了在步骤46中产生候选域,首先将所有的位S[i]初始化到第一值(例如值“I”)。然后按照厄拉多塞筛法的原理将与能够被小的素数除尽的数字b+SWi相应的那些位s[i]改变到第二值(例如值“O”)。候选域的大小和筛遍历的数量一根据可用的存储容量一这样选择,使得总方法的平均运行时间被最小化。这是一个优化任务,其解取决于与用于失败的费马测试的开销相比用于预先选择的相对开销。对于具有2048个位的RSA密钥例如可以执行数千个筛遍历,其中然后需要大约40个费马测试用于确定素数P和q中的一个。
[0048]在步骤48中最后从填满的候选域中选择一个素数候选m。该选择例如可以随机地或按照预先给出的顺序进行。在图2中示出的方法的其他调用时将步骤48紧接着测试42进行,并且一直从曾经占据的候选域中选择另外的素数候选m,直到域为空或低于预先给出的最小填充量。
[0049]在图1和图2中示出的方法在一些实施方式中由便携式数据载体的至少一个处理器执行。图3示出了这样的数据载体50,其例如作为芯片卡或芯片模块构造。数据载体50具有微控制器52,其中以公知的方式将主处理器54、协处理器56、通信接口 58和存储器组件60集成在唯一一个半导体芯片上并且通过总线62互相连接。
[0050]存储器组件60具有多个按照不同的技术构造的存储器阵列,其例如包括只读存储器64 (掩模编程ROM)、非易失性可覆盖存储器66(EEPR0M或闪存)和工作存储器68 (RAM)。在此描述的方法以在只读存储器64和部分地也在非易失性可覆盖存储器66中包含的程序命令70的形式实现。
[0051]数据载体50的协处理器56构造为用于有效执行各种密码运算。特别地对于在此描述的实施例重要的是,协处理器56支持具有如对于密码应用所需的位长度的蒙哥马利乘法。在一些构造中协处理器56不支持“正常的”模乘,从而这样的乘法必须以极高的开销通过主处理器54执行。
[0052]对于自然数X,y和奇数自然数m(其中X,y<m),以及称为蒙哥马利系数的2的幂R(其中R>m),χ和y关于R的蒙哥马利乘积模m —般地通过如下来定义:
[0053]x*m’R y: = χ.y.R_1mod m
[0054]一般地在本文件中在式子“a = z modm”的模关系的说明中使用等号“=”以及定义符号“:=”,以表达,a是来自于(Z + Z) Π [O, W[中的清楚定义的元素,对于该元素
成立模关系。而符号表示“a = z modm”仅表达,成立等效的模m。
[0055]当蒙哥马利系数R从上下文中得出时,在本文件中对于蒙哥马利乘积通常也使用简短的符号表示x*m y来替代详细的符号表示x*m,R I。
[0056]尽管上面定义的蒙哥马利乘法是模运算,但是其可以没有除法地被实现,如本身公知的并且例如在开头提到的文章“Modular multiplication without trial division”中描述的那样。对于蒙哥马利乘法,需要两个非模乘,一个事先根据m和R计算的辅助值,一些加法和从m的终止条件减法。这些计算可以通过协处理器56有效执行。
[0057]在目前商业上可得的微控制器52中公知协处理器56’、56"、56’ ’ ’的构造,其不是精确地执行上面定义的蒙哥马利乘法,而是执行其修改。对于这些修改的原因主要在于,对于是否应该执行蒙哥马利乘法的终止条件减法的判断,可以按照不同的方式来优化。一般地,修改的协处理 器56’、56"、56’’’在蒙哥马利乘法的计算中提供如下结果,该结果与上面定义的结果潜在地以模m的小的数倍而不同。此外这样扩展对于在修改的协处理器56’、56"、56’’’中因子χ和y的允许的值域,使得计算的结果始终又将允许的输入值表示为蒙哥马利乘法的因子。
[0058]更具体而言,第一修改的协处理器56’计算第一修改的蒙哥马利乘积χ*’ ffl y,其如下定义:
[0059]X*,m y: = (χ.y.Ir1Iiiod m) +k.m
[0060]在此对于确定的寄存器大小η为R = 2n,n是16的倍数。用于因子χ和y的值域被扩展到[0,...,R-1],并且k是自然数,其这样小,使得成立χ*’ ffl y〈R。
[0061]而第二修改的协处理器56〃计算第二修改的蒙哥马利乘积x*〃m y,其如下定义:
[0062]x*"m y: = (χ.y.Tri mod m) _ ε.m
[0063]因子χ和y在此是在范围_m≤x,y〈m中的整数。此外成立ε e {0,1},并且指数η’对于精度P = 1,2或4具有值η’ = η+16ρ、块尺寸c (其中160≤c≤512),其是32的倍数、和寄存器大小n = c.p。对于模m成立m〈2n,并且值R定义为R: = 2n’。
[0064]最后,第三修改的协处理器56〃’计算第三修改的蒙哥马利乘积x*〃’m y,其如下定乂:
[0065]χ*",m y: = (χ.y.2-t.c mod m) + ε.m
[0066]因子χ和y在此是自然数(其中众2卜。并且y〈2*m.)。此外成立ε e {0,1}。块大小c是固定的并且为c = 128。用于因子χ的寄存器大小为t*c。用于其他变量的寄存器大小利用η表示并且为块大小c的倍数。当成立n = t 时,则因子χ不是需要满足条件χ〈2ι ‘c而是仅需要满足条件x〈max {2.m, 2n}。
[0067]当如下并不起作用或从前后关系中得出时,即,涉及的恰好是按照初始给出的定义的协处理器56的蒙哥马利乘积x*m y还是协处理器56’、56"、56’ ’ ’之一的三个修改的蒙哥马利乘积X*’ m y及X*〃m y及X*"’ m y之一,在本文件中两个因子关于模m的蒙哥马利乘积一般地通过X*m I表示。
[0068]当输入值X,y首先借助蒙哥马利变换被变换到其相应的蒙哥马利表达X’,?并且然后结果值从其蒙哥马利表达X’被变换回值X时,一般地可以将每个“正常的”模乘X.y=z mod m通过蒙哥马利乘法X’ *m y’ = z’来代替。蒙哥马利变换例如可以通过计算X’:= x*R mod m来进行。在反变换中可以有效地通过具有因子I的蒙哥马利乘法,也就是通过计算 z: = z’*ml,来确定结果 z: = z’.Ir1IIiod m。
[0069]由于所需的来回变换,通过蒙哥马利乘法来代替唯一的模乘通常不是有效的。但是当先后要执行多个乘法时-例如在模幂中那样,则可以将这些乘法完全在蒙哥马利数字空间中执行。于是仅需要在计算序列的开始时的唯一的前向变换和在计算序列结束时的唯一的反向变换。
[0070]按照刚才描述的原理,在图1和图2中示出的方法中可以将唯一的或全部模乘作为蒙哥马利乘法来实现。可以理解,在此在蒙哥马利数字空间中进行的计算片段应当尽可能被综合,以便减少所需的前向和反向转换的数量。加法和减法可以在“正常的”数字空间中和在蒙哥马利数字空间中没有区别地进行。
[0071]当数据载体50具有虽然支 持蒙哥马利乘法但是不支持正常的模乘的协处理器56,、56"、56’’’时,蒙哥马利乘法的使用是特别有利的。即使协处理器56’、56"、56’’ ’支持两种乘法种类,也通常更有效地执行蒙哥马利乘法。根据所需的变换的数量-特别是与反向变换相比更麻烦的前向变换的数量-得到极大的节省,甚至在蒙哥马利乘法比正常的模乘仅稍微有效地要被执行时。
[0072]在此处描述的实施例中,在图1和图2中示出的方法特别地关于步骤46中(图
2)的候选域的产生被优化。如上所述,该描述的解从如下基本思路出发,即,通过按照厄拉多塞筛法原理的筛过程来确定素数候选。但是在这里描述的实施例中筛法在一个随机的基础值b的情况下开始,该基础值已经大约具有待确定的素数的数量级,并且其包含(以步幅Sff)分别与值b+SWi相应的项目。
[0073]此外在这里描述的实施例中仅执行预先给出数量的筛遍历,分别具有一个小的素数P’或者多个素数的乘积P’作为标记值r,r’。在这些筛遍历之后在筛法中剩余的值(其称为素数候选m)仅以一定的概率表示一个素数。如上所述,筛遍历的数量在对于整个方法的计算时间的优化过程中被规定。例如可以执行数千个筛遍历,其中然后在筛法中剩余的数字以大约2.5%的概率是一个素数。
[0074]因为筛法不是在零的情况下开始,所以对于每个筛遍历,确定作为筛遍历的基础的、基础值b模标记值p’后的余数。从该余数中然后确定第一个要从筛法中删除的合数b+Sffk,并且从该数字b+SWk 出发将其他倍数b+SWk+SWp’,b+Sffk+2 *SWp’,b+Sffk+3 *SWp’,..?从筛法中删除。
[0075]这里描述的实施例特别地涉及刚才提到的余数z: = b mod p’的有效确定。该实施方式的基本思路是,为了确定余数z,不使用具有余数的“正常的”模除,而是使用具有至少另一个校正步骤的蒙哥马利运算。该蒙哥马利运算特别地可以是具有P’作为模的蒙哥马利约简。蒙哥马利约简在此理解为其中因子之一具有值I的蒙哥马利乘法。
[0076]在第一实施例中假定,对于循环过程采用的标记值P’ -例如素数-具有d位(例如16位)的宽度,并且基础b具有η.(!位的宽度。然后执行蒙哥马利约简b*p,:nl,其按照定义提供值b.UinHiodp^对于bmodp’的期望结果,由此得出以因子2_d‘nmodp’的“误差”,其通过一个或多个校正步骤补偿。
[0077]所需的校正可以以任意的方式执行。但是在本实施例中设置,为此又执行蒙哥马利运算,也就是关于蒙哥马利系数2d来模p’的蒙哥马利乘法。
[0078]通过蒙哥马利乘法,产生与期望结果的另一个偏差,也就是以附加的因子2_d modP’的偏差。由此有利的是,在校正时就考虑该附加的因子,使得该校正作为蒙哥马利约简的结果与因子2d.ZdImodp' =2d‘(n+1)modp’的蒙哥马利乘法被执行。
[0079]总体上由此如下计算余数b mod p’:
[0080](b*p’’2d.nl)*p’’2d2d.(η+1)—ρ’
[0081]在此校正因子2d‘(n+1)m°dp’可以在特别简单的方法中通过循环确定。从起始值I出发在该循环中在每个循环过程中分别将当前值翻倍,并且如果结果至少为P’,则将P’减去。
[0082]刚才描述的方法的以下表示详细地反映了示例性计算流程。该表示涉及更一般的任务,对于在寄存器X中一个b位宽的值X和在寄存器Y中一个(η.(1)位宽的值Y确定在寄存器Z中的具有Ζ: =YmodX的余数Ζ。显然该方法容易地用于在此所需的对余数ζ:=b mod p’的确定,其中将标记值P’存储在寄存器X中和将基础b存储在寄存器Y中。但是该方法也可以结合另外的密码计算被使用,在所述密码计算中必须确定余数:
[0083]方法A
[0084]输入值:寄存器X中的d位宽的值(例如素数P’ )
[0085]寄存器Y中的η.d位宽的值(例如基础b)
[0086]寄存器:B,C,X,Y,Z
[0087]输出值:寄存器Z中的余数Y mod X
[0088]方法流程:
[0089]设置B = Y*2-d.n mod X (A.1)
[0090]设置C = 2d.(n+1)mod X (A.2)
[0091 ]设置 Z = B*C*2-d mod X (A.3)
[0092]在行(A.1)中的过程通过蒙哥马利乘法Y*x,2d‘nl执行,其因子Y和I具有不同的长度。在行(A.3)中的过程通过具有因子B和C的蒙哥马利乘法B*x,2d C执行。
[0093]但是一般的方法A可以被优化,如在以下对于修改的方法A’和A"所示的那样。
[0094]如果标记值是素数P’,则可以取消第一蒙哥马利乘法。
[0095]方法A’
[0096]输入值:寄存器X中的d位宽的值(例如素数P’ )
[0097]寄存器Y中的η.d位宽的值(例如基础b)
[0098]寄存器:C,X,Y,Z
[0099]输出值:寄存器Z中的余数Y mod X
[0100]方法流程:
[0101]设置C = 2d.n mod X (A,.2)
[0102]设置Z = Y*C*2-d.n mod X (A,.3)
[0103]在行(A’.2)中的过程在于,将寄存器C设置到取决于X的校正值。在行(A’.3)中的过程通过蒙哥马利乘法Y*x,2d‘n C执行,其因子Y和C具有不同的长度。
[0104]相反如果执行同时具有两个(或多个)标记值r和r’的标记流程,则以下构造是有利的。
[0105]方法A"(示例性对于两个素数r和r’)
[0106]输入值:寄存器X中的d位宽的值(例如素数r和r’的乘积p’ = r*r’)
[0107]寄存器Y中的η.d位宽的值(例如基础b)
[0108]寄存器:B,C,C,,X,X’,Y, Z, Z’
[0109]输出值:寄存器Z中的余数Ymodr
[0110]寄存器Z’中的余数Ymod r’
[0111]方法流程:
[0112]设置B = Y*2+nmodX (A".1)
[0113]设置X= r(A".a)
[0114]设置C = 2d.(n+1)mod X (A".2.a)
[0115]设置Z = B*C*2 -d mod X (A ".3.a)
[0116]设置X’ = r(A".b)
[0117]设置C’ = 2d.(n+1)mod X’ (A".2.b)
[0118]设置Z’ = B*C’ *2-d mod X’ (A ".3.b)
[0119]在行(A".1)中的过程如在方法A中那样通过蒙哥马利乘法Y*x,2d‘nl执行,其因子Y和I具有不同的长度。在行(A".3.a)和(A".3b)中的过程如在方法A中那样通过具有因子B和C的蒙哥马利乘法B*x,2d C执行。
[0120]相应地对于每个标记值计算余数值(b MOD r和b MOD r’),以便能够将标记流程中的两个标记值从筛法中删除。
[0121]行(A.2), (Α,.2)和(A".2a和2b)中的模幂可以如上所述通过循环来实现,所述循环在d.(n+1)个循环过程中分别执行一个翻倍(以一个位位置向左逐位地移动)和一个条件减法。在此处使用的伪代码符号表示中也就是例如可以将行(A.2)通过以下的行(A.2.1)-(A.2.5)来代替:
[0122]设置C= I (A.2.1)
[0123]执行d.(n+1)次 (A.2.2)
[0124]将C向左移动I个位 (A.2.3)
[0125]如果C ≤ X 则设置 C = C-X (A.2.4)
[0126]结束(A.2.5)
[0127]通过如下,即,在此描述的实施例将具有长被除数的除法通过至少一个蒙哥马利乘法来代替,其特别好地适用于在不支持或不如蒙哥马利乘法那样有效地支持长除法的数据载体50中的使用。该配置在许多通常的数据载体50中给出,因为对于长除法的有效的硬件支持将会要求高的开销。
[0128]因此例如具有协处理器56"的数据载体50根本不支持除法运算,而协处理器56’ ’ ’虽然提供除法功能,但是用于执行除法需要比用于相同位长度的蒙哥马利乘法长大约128倍。相反在具有协处理器50’的数据载体50的情况下甚至有利的是,不使用在此描述的技术,因为在该数据载体50的主处理器54上可以实现对小的素数取模的快速余数值计算。
[0129]可以理解,这些描述的方法步骤可以以不同的程度分布到数据载体50的主处理器54和协处理器56、56’、56"、56’’ ’上。例如在具有协处理器56"的数据载体50的情况下有利的是,行(A.1)-(A.3)的所有的方法步骤可以由主处理器54执行,因为协处理器56"对于具有不同长因子的蒙哥马利乘法工作效率不高并且此外限制于绝对值比模P’小的因子。相反在具有协处理器56"的数据载体50的情况下主处理器54相对慢并且不支持除法,而协处理器56’’’对于在此描述的方法非常合适。由此有利的是,对于行(A.1)-(A.3)的所有的方法步骤使用该协处理器56’ ’ ’。
[0130]图4示例性示出了在步骤46 (图2)中的候选域的产生的各个方法步骤。作为输入值已经呈现在前面的步骤44中确定的基础值b。方法包括预定数量的筛遍历,在这些筛遍历中分别执行步骤72-78。
[0131]在每个筛遍历的开始在步骤72中确定标记值P’,其倍数在筛法中应当作为合数被标记。在至此描述的构造中标记值P’是具有例如最大16位长度的小的素数,而在另外的实施方式中合数一例如两个或多个素数r,r"的乘积一作为对于素数r和r"的乘积p’=r*r’可 以作为标记值被使用。
[0132]在步骤74中然后确定基础值b对标记值P’取模后的余数。为此例如执行已经描述的方法A或在以下要示出的修改之一。按照图4的步骤74包括三个子步骤74.1, 74.2和74.3。在与方法A的行(A.1)相应的第一子步骤74.1中,执行蒙哥马利约简Y*x,2d‘nl。第二子步骤74.2相应于行(A.2)或行(A.2.1)-(A.2.5)。在此计算校正因子C。在与方法A的行(A.3)相应的第三子步骤74.3中借助蒙哥马利乘法B*x,2d(^t子步骤74.1的蒙哥马利约简的结果执行所需校正。
[0133]基于余数b mod p’,然后在步骤76中执行标记流程。为此首先确定在位域S中的第一位s[k],其对应的值b+SW*k与标记值P’的倍数,也就是与合数相应。该位S[k]被相应地标记,也就是例如被置为值“O”。从该第k个位出发,然后按顺序将其他与p’间隔的位一也就是位S[k+p’],S[k+2*p’],S[k+3*p’],...一分别置为代表了合数的值。这些位相应于值b+SWk+SWp’,b+Sffk+2.SWp’,b+Sffk+3.SWp’,等等。不需要考虑P’的中间倍数,因为在位域S中不表示这些倍数。
[0134]如在方法A’中已经说明的,当标记值是素数时,可以取消在步骤74.1中的蒙哥马利约简。
[0135]相反如果一如在方法A中说明的一 P’应当是(两个或多个)素数的乘积,则对于作为标记值的每个这些素数执行标记流程。跟随步骤74.1对于(两个)标记值r,!.’的每一个进行步骤74.2和74.2。从对于每个标记值分离地确定的余数(b mod r)出发也可以对于每个标记值进行步骤76。
[0136]在步骤76的标记流程结束之后在步骤78中检查,是否应当进行另一个筛遍历。如果是,则进行到步骤72的跳转。否则终止候选域的产生,并且方法以步骤48 (图2)继续。
[0137]在至此描述的实施例中在步骤74.2中一相应于行(A.2)或者说(A.2.1)-(A.2.5)通过具有底数2的模幂计算确定了校正因子。发明人认识到,当计算1/2的幂而不是2的幂时,在此处处理的硬件平台上可以实现极大的速度提高;使用蒙哥马利乘法的合适的方法在以下详细描述。但是首先说明,如何能够将在行(A.2)中通过0 = 2<1‘(11+1)1110(1乂说明的、在寄存器C中的校正因子C作为1/2的幂来表达。
[0138]首先要注意,模X的因式分解是已知的,因为X例如是素数P’或一在实施替选方案中一是素数的乘积。由此也已知欧拉f函数# (I)的值,因为例如并且对于
素数Pc^B P1有炉(po'pi) =此外对于与X互素的所有的a成立#w =I modXo
由此对于合适选择的k成立2d.(n+1)mod X= 2.(刚部.'))mod X0由此可以将行(A.2)中
的计算 C = 2d.(n+1)mod X 通过C = (1A) k’m—d.力 modX 来代替。
[0139]以下描述在使用蒙哥马利运算的条件下用于有效确定1/2的正的幂的方法,如对于刚才提到的计算C = (V2)晴部+1) mod X可以采用的。但是为了更好理解,首先示出
比较方法(“方法1”),其使用“正常的”模乘a*Mb: =a*bmodM,以计算2的幂。
[0140]比较方法I从公知的平方-和-乘法技术出发,在所述平方-和-乘法技术中对于指数的每个位进行中间结果的平方以及-根据指数位的值-还进行中间结果与待求幂的底数的乘法。但是当通过测量电流消耗或其他参数可以确定,在指数的位的处理中中间结果是否翻倍-也就是向左移动时,平方-和-乘法技术容易潜在地受到侧信道攻击。由此在比较方法I中使用修改的技术,其可以称为“平方八次-和乘法一次技术”。
[0141]在平方八次-和乘法一次技术”中分别执行八次平方,但是所属的潜在的乘法分别综合为唯一一个乘法。对于移动的乘法的指数位分别被收集在一个字节ei中,并且执行的乘法然后以因子2ε?进行。总体上该方法可以利用以下伪代码符号标记来描述:
[0142]方法I
[0143]输入值:指数e = e0+ei.256+...+en.256n
[0144]寄存器M中的模
[0145]寄存器:M,X,Y
[0146]输出值:寄存器Y中的幂2e mod M
[0147]方法流程:
[0148]设置(U)
[0149]对于i = η-l向下计数到O (1.2)
[0150]执行8 次 (1.3)
[0151]设置Y* = Y mod M (1.4)
[0152]结束(1.5)
[0153]设置X =2肖(1.6)
[0154]设置Y* = X mod M (1.7)
[0155]结束(I.8)
[0156]在上面的伪符号表示中符号A* = B mod M意味着,寄存器A中的内容通过A ?B modM代替。寄存器M,X和Y分别具有至少256位的大小。值ei对于O < i < η表示具有基础256的位置值系统中的指数e的“数位”;成立O < ei < 255。
[0157]在行(1.1)中进行寄存器Y的初始化。对于指数e的每个字节然后执行循环过程,该循环过程分别包括行(1.3)-(1.7)。在此在行(1.3)和(1.4)中将寄存器Y的内容平方八次。在行(1.6)和(1.7)中进行寄存器Y中的中间结果与因子#的乘法。在行(1.1)和(1.6)中的幂计算可以有效地通过以下来执行,即,例如为了计算A=2ek首先将寄存器A置为零,然后将一从最低位的位开始计算的一第(k+Ι)个位反转到“I”。
[0158]只要具有不同的2的幂的乘法不能通过攻击来区分,则上面的比较方法I可以防侧信道攻击。
[0159]发明人认识到,刚才描述的比较方法I可以被扩展为使得使用蒙哥马利乘法并且由此可以在具有合适的协处理器56,56’,56〃,56〃’的数据载体50上有效地执行。令人吃惊地可以通过方法流程的相对小的修改实现这一点。特别地在以下称为“方法2”的扩展的方法中,计算2的负的幂作为结果,即2_e= (1/2)%而不是在方法I中计算的值2%此外在方法2中设置附加的步骤,在该步骤中将指数e合适地再编码,以补偿蒙哥马利运算而不是方法I中的“正常的”模乘和平方。
[0160]与在比较方法I中同样地,在方法2中使用两个寄存器X和Y以及用于模m的一个恒定的第三寄存器M。寄存器Y具有与M相同的大小,而寄存器X必要时可以更小。所有三个寄存器具有至少256位,并且模m为至少2255。
[0161]方法2可以对于上面提到的所有协处理器56,56’,56〃,56〃’使用。该通用性通过如下实现,即,方法2使用仅两个在所有常用的平台上可用的普通的蒙哥马利命令。这些命令首先是寄存器Y的蒙哥马利平方并且其次是寄存器X和Y的蒙哥马利乘法。在蒙哥马利平方中将寄存器Y的值通过Y*m,K Y来代替。该蒙哥马利平方在以下通过伪代码命令“设置Y* = Y*R^mod Μ”表达。其中将寄存器Y的值通过X*m,K Y代替的蒙哥马利乘法在以下通过伪代码命令“设置 Y* = X*R_1mod Μ”表达。
[0162]此外,在方法2中将宽度r的寄存器(X或Y)以2的幂2k(其中O≤k〈r)来初始化。该过程通过伪代码命令“设置Z = 2k”来表达。方法2于是可以被如下描述:
[0163]方法2
[0164]输入值:指数e = e0+ei.256+...+en.256n
[0165]寄存器M中的模
[0166]寄存器:M,X,Y
[0167]输出值:寄存器Y中的幂2_e mod M
[0168]方法流程:
[0169]执行“方法3” (2.0)
[0170](从指数e产生具有f= fo+f!.256+...+fn.256n的再编码的指数f)
[0171]设置Y = /?(2.1)
[0172]对于i = n-Ι向下计数到O (2.2)
[0173]执行8 次(2.3)
[0174]设置Y* = Y*R_1mod M (2.4)
[0175]结束(2.5)
[0176]设置Χ4Λ(2,6)
[0177]设置Y* = X*R_1mod M (2.7)
[0178]结束(2.8)[0179]除了在行(2.0)中的准备步骤之外,方法2的结构精确地相应于方法I的结构。在行(2.1)中对寄存器Y初始化之后又执行具有作为循环体的行(2.3)-(2.7)的循环。在行(2.3)和(2.4)中对寄存器Y中的中间结果执行八次蒙哥马利平方,并且在行(2.6)和(2.7)中进行寄存器Y与因子2fi的蒙哥马利乘法。也就是方法I和2仅通过步骤(2.0)中的指数的再编码并且通过如下,即,使用蒙哥马利乘法和平方而不是正常的模乘和平方而相区别。
[0180]在上面描述的方法2的修改中可以将两个行(2.6)和(2.7)综合为唯个命令,在该命令中将寄存器Y的值通过乘积Y*2fi_nm0dM来代替;在此η’是蒙哥马利参数R的二进制对数,从而成立R = 2η’。在此处使用的伪符号表示中可以将该综合的命令利用“设置 Y* = 2fi*2-n mod Μ” 来表达。
[0181]方法2的结果可以对于在此处理的协处理器56,56’ , 56",56〃’中的一些协处理器在必要时以模M的小的倍数与期望的最终结果2_ε mod M不同。由此可以需要,作为终止校正步骤执行寄存器Y模M的模约简。
[0182]在这里描述的实施例中按照如下方法执行在行(2.0)中指数e的再编码:
[0183]方法3
[0184]输入值:指数e = e0+ei.256+...+en.256n
[0185]蒙哥马 利参数R对底数2的对数η’ (由此成立R = 2η’)
[0186]输出值:具有f = f。+^.256+…+4.2561^^再编码的指数f,用于在方法2中的应用
[0187]方法流程:
[0188]设置f = η,.(256+2562+2563+...+256n)_e (3.1)
[0189]存储f0,f”...,fn (3.2)
[0190]其中f = fo+A.256+...+fn.256n (3.3)
[0191 ]并且 0 ≤ fi<256 对于 0 ≤ i〈n (3.4)
[0192]通过以下讨论可以解释,具有按照方法3对指数的再编码的方法2提供正确的结果:首先要注意,在方法流程期间寄存器X和Y中的所有值始终是2的模幂(具有模M),因为寄存器利用2的幂被初始化,并且因为蒙哥马利运算可以写成具有作为因子的2的(必要时负的)幂的模乘。执行的计算由此可以更清楚地写做关于模M的相对于底数2的其对数的形式。
[0193]对于Y = 2>^PR = 2n’,在行(2.4)中的蒙哥马利平方可以写成翻倍和减法,其中y通过2*y-n’来代替(运算“S”)。可以在寄存器平面上写成“设置Y* = 2k*2_nm0dM”的、行(2.7)和(2.8)的组合的运算,在对数表达中将y通过y+k-n’来代替(运算“Mk”)。
[0194]在方法2中分别执行八次运算S并且然后执行一次组合的运算Mk。在对数表达中该方法流程可以如下表示:
[0195]y — S 2.y - η' — S4*y_3*n, — S8.y~7.η' — S......—S256.y-255.η’ — Mk256.(y_n,)+k
[0196]为了显示指数e的合适的再编码,再编码的指数f的字节fn,4-!,..., fο必须具有特征,即,在以下定义的序列yn,Yn^1, -,y0中得出结果I, = -e ;函数的级联通过符号“ ο ”表达:[0197]yn: = fn
[0198]Y1: = Mfi o S8(yi+1) = 256.(yi+「n,)+A 对于 i=n_l,...,0
[0199]可以通过关于n的归纳显示,在方法3中定义的再编码具有刚才提到的特征并且由此得到方法2的正确结果。
[0200]图5示出了刚才描述的方法2和3的示例流程。在步骤80中按照方法3进行指数e的再编码,以从具有其位组82 —在此是字节en,—的原始的指数e中获得具有其位组84 —在此是字节fn,fn_1;..., fο 一的再编码的指数f。
[0201]在步骤80中的再编码之后的方法流程可以划分为初始化86和η个片段88。在初
始化86的过程中在步骤90中执行按照方法2的行(2.1)的命令“设置Y = 2厶”。η个片
段88的每一个分别相应于方法2的一个循环过程并且分别对应于再编码的指数f的位组84的一个。
[0202]每个片段88具有三个主要步骤92、94和96。在步骤92中按照方法2的行(2.3)和(2.4)对在寄存器Y中包含的中间结果执行八次蒙哥马利平方。在与行(2.6)相应的步骤94中,在寄存器X中存储具有指数的2的幂,该指数通过再编码的指数f的对应的位组84形成。该步骤94可以有效地通过如下实现,即,寄存器X首先被删除并且然后将其位位置通过对应的位组84说明的位设为值“I”。步骤96相应于方法2的行(2.7)并且包含寄存器Y和X的蒙哥马利乘法。
[0203]在总共执行了 η个片段88之后,在寄存器Y中-在必要时还需要的通过步骤98中的模约简进行的校正之后-呈现期望的结果2_emodM。
[0204]以下示出至此描述的方法2和3的一些可选的简化和扩展。在不同的实施变型中可以利用这些简化和扩展的不同组合,以便例如将采用的方法特别好地匹配到确定的蒙哥马利协处理器56,56’, 56",56〃’或者以便进一步提高窥探安全性。
[0205]首先讨论按照方法3的指数再编码中的潜在困难,即,对于fn可能出现大于255
的值。对于小的%于是可能在方法2的步骤(2.1)中确定的值大于模m并且由此对于
作为初始值存储在寄存器Y中来说太大了。然而对于所有在此处理的蒙哥马利协处理器56,56’,56",56〃’可以这样选择用于模m的寄存器大小,使得对于各自的蒙哥马利系数η’满足不等式〗~5).1^!^〗11’。条件2Λ< m于是可以对于非常小的ε >0如下被放大:
[0206]fn = η,.(256/255).(1- ε ) -en e [0,(4/5).η,]
[0207]刚才提到的条件当在以下利用(*)表示的不等式1/4.η’ <en〈n’成立时总是满足。
[0208]如果方法3得到对于fn的过大的值,则该值可以在图5的步骤90之前利用模m来模约简,从而然后在步骤90中将寄存器Y置为得到的余数。对于非常小的en(en〈n’/256)也可以将第η个片段82容纳到第(η-1)个片段82中。在该情况下将η减小1,并且将eiri提高en.256。此外在一些构造中可以设置,这样设置指数e的值,使得fn保持足够小。
[0209]总之也就是可以通过以下方法B来进行在步骤74.2(图4)中的校正因子C的计算:
[0210]方法B
[0211]输入值:寄存器X中的d位宽的值(例如素数p’)
[0212]在寄存器Y中的η.d位宽的值(例如底数b)[0213]寄存器:B,C,X,Y,Z
[0214]输出值:寄存器Z中的余数Y mod X
[0215]方法流程:
[0216]设置B = Y*2-d.n mod X (B.1)
[0217]设置C=《丨/2) Α' φ,Λ) - 士 _) mod X
[0218]应用方法2和3
[0219]对于合适选择的k (B.2)
[0220]设置Z = B*C*2-d mod X (B.3)
[0221]行(B.1)和(B.3)相应于方法A中的行(A.1)和(A.3)并且分别包含一个蒙哥马利乘法。在行(B.2)中执行用于底数1/2的模幂计算的上面描述的方法2和3。在此这样选择值k,使得指数fn+lj是正的,并且满足不等式(*)。在许多实施方式中模X和指数分别具有最高16位的长度,从而为了行(B.2)中的校正因子的计算,16个蒙哥马利平方和4个蒙哥马利乘法足够。
[0222]以下描述刚才示出的方法B的另一个优化的修改,其特别好地适合于通过协处理器56〃’的执行。在具有协调处理器56〃的数据载体50中具有微小修改的方法可以通过主处理器54执行。
[0223]在以下描述的方法既关于其实施速度也关于其窥探安全性最优化。关于窥探安全性也就是基于如下事实而存在潜在的攻击可能性,即,计算筛法的基础值b对非常小的素数取模后的余数。攻击在理论上可以确定该模约简的电流曲线(Stromverlaufskurve) —或其他侧信道信息一并且对于侧信道攻击进行分析,在该侧信道攻击中建议基础值b的最高或最低字并且然后关于每个约简的开始窥探数据。
[0224]为了防御这样的攻击,在一些实施例中一例如在以下方法中一建议,蒙哥马利约简不是进行对每个素数取模,而是进行对每个素数对取模。作为正面的副作用,由此也加速了筛过程,因为仅需要进行一半的费时的长的约简。在其他修改中也可以使用多于两个素数的元组。
[0225]对于以下方法Ptl和P1分别是小的素数,并且m = Ptl -P1是该素数对的乘积。首先执行基础值b对该素数乘积m取模的蒙哥马利约简,如与图4中的步骤74.1或方法A中的行(A.1)相应的那样。也就是通过蒙哥马利乘法计算具有以下特征的值r:
[0226]r = b*ml = b.R_1mod m
[0227]蒙哥马利系数R在此为2128‘\其中最小可能的寄存器大小选择2128‘\其足以容纳基础值b。在此假定,其中存储了蒙哥马利约简的因子b和I的寄存器分别是128位长。
[0228]对于这两个素数Ptl和P1的每一个现在执行以下步骤(方法C),以便从中间结果r中获得余数b mod p’。也就是在方法C的第一执行中设置P’ = P0,并且在第二执行中设置P’ = P1O方法C由此相应于图4中的74.2和74.3或方法A中的行(A.2)和(A.3):
[0229]方法C
[0230]输入值:d位宽的合数m
[0231]素数p’,其中p’〈214,其除以m
[0232]如上面给出的值r = b.2_d‘nmodm[0233]寄存器:A,B,F,R,X,Y
[0234]输出值:寄存器R中的余数bmodp’
[0235]方法流程:
[0236]设置X = p’ -1 (C.1)
[0237]将X 翻倍,直到 X ≥(1〈〈15) (C.2)
[0238]设置Y = ((l〈〈16)-X) + ((n+l)〈〈8) (C.3)
[0239]如果Y ≥(1>>15)则 (C.4)
[0240]设置y = y-(χ>>I) (C.5)
[0241]设置F = Y? I (C.6)
[0242]设置A = 1〈〈(F>>7) (C.7)
[0243]设置B = I (C.8)
[0244]设置R = A*B*2-128mod p’ (C.9)
[0245]执行7 次 (C.10)
[0246]设置R = R*R*2-128mod p, (C.11)
[0247]结束(C.12)
[0248]设置A = F mod (I〈〈7) (C.13)
[0249]设置R = A*R*2-128mod p, (C.14)
[0250]设置A= r(C.15)
[0251]设置R = A*R*2-128mod p’ (C.16)
[0252]在上面描述的方法中X?n表示将寄存器或常数X以η个位位置向右移动,并且Χ?η表示向左的相应移动。
[0253]在行(C.1)-(C.6)中计算寄存器F中的合适的校正因子指数f,其具有如行(B.2)中的形式,但是附加地如在方法3中那样被再编码。在此首先在行(C.1)和(C.2)中将寄存器X中的16位整数翻倍,直到其是负的。然后在行(C.3)中将在2和33之间的值加到-X的高字节,其中X是在寄存器X中包含的值。在行(C.4)和(C.5)中将中间结果校正,如果其太大的话。最后在行(C.6)中通过将寄存器Y中的中间结果减半来计算寄存器F中的校正因子指数f。
[0254]在行(C.7)_(C.14)中利用类似于方法2中的步骤计算寄存器R中的校正因子。由于前提条件P’〈214,方法2的最大所需的两个循环过程在此“被展开”。更具体来说,行(C.7)-(C.9)相应于如方法2的行(2.7)中的第一蒙哥马利乘法,行(C.10)-(C.12)相应于蒙哥马利平方7次,并且行(C.13)和(C.14)相应于如方法2的行(2.7)中的第二蒙哥马利乘法。当在实施替选方案中可以出现更大的素数P’时,则可以通过接受方法2的相应多个其他循环过程来合适地修改方法C。例如可以设有,实施另外7个蒙哥马利平方和另一蒙哥马利乘法。
[0255]在行(C.15)和(C.16)中最后将在执行(C.14)之后在寄存器R中包含的校正因子应用于蒙哥马利约简的结果r。总体上由此方法C的行(C.1)-(C.15)相应于图4中的子步骤74.2,而行(C.15)和(C.16)相应于子步骤74.3。
[0256]应当理解,在此描述的对素数候选的有效计算和确定的构造不限制于按照图1和图2的方法流程,而是其在实施替选方案中也可以对于其他应用目的,特别是在用于通过一个或多个处理器执行密码的领域而设计。此外可以理解,在此描述的实施方式和实施变型仅作为例子看待。在此描述的特征的其他修改和组合对于专业人员来说是明显的。
【权利要求】
1.一种对于密码应用确定第一值(b)模第二值(P’)之后的除余数的方法,其中,该方法通过至少一个处理器(54,56,56’,56〃,56"')执行并且包含: -利用第一值(b)作为因子之一和第二值(P’)作为模执行(74.1)蒙哥马利乘法, -确定(74.2)校正因子,其中在校正的蒙哥马利乘法中使用校正因子作为因子,以获得第一值(b)模第二值(P’)之后的除余数。
2.根据权利要求1所述的方法,其特征在于,利用第一值(b)作为因子之一和第二值(P’)作为模的蒙哥马利乘法的执行是第一蒙哥马利乘法,并且通过 -以第一蒙哥马利乘法的结果作为一个因子和校正因子作为另一个因子和第二值(P’)作为模,执行(74.3)第二蒙哥马利乘法,作为校正的蒙哥马利乘法,以获得第一值(b)模第二值(P’)之后的除余数。
3.根据上述权利要求中任一项所述的方法,其特征在于,所述第一蒙哥马利乘法是蒙哥马利约简。
4.根据权利要求2或3所述的方法,其特征在于,在第一蒙哥马利乘法之后为第二蒙哥马利乘法确定校正因子。
5.根据权利要求2至4中任一项所述的方法,其特征在于,所述校正因子用于补偿通过第一和第二蒙哥马利乘法引起的误差。
6.根据权利要求2至5中任一项所述的方法,其特征在于,以不同的蒙哥马利系数执行第一和第二蒙哥马利乘法。
7.根据权利要求1所述的方法,其特征在于,以第一值(b)作为因子之一和第二值(P’ )作为模的所执行的蒙哥马利乘法是校正的蒙哥马利乘法,其将校正因子用作另一个因子。
8.根据权利要求4和7所述的方法,其特征在于,如果第二值(P’)是素数的乘积,则该方法按照权利要求4构造否则该方法按照权利要求7构造。
9.根据权利要求1至8中任一项所述的方法,其特征在于,校正因子作为2的模幂在多个循环过程中被计算,其中每个循环过程具有中间结果的翻倍和条件减。
10.根据权利要求1至9中任一项所述的方法,其特征在于,所述校正因子作为具有正整数校正因子指数和底数1/2的模幂被计算。
11.根据权利要求10所述的方法,其特征在于,所述校正因子的计算具有中间结果的多个蒙哥马利平方的系列,按照这些蒙哥马利平方执行中间结果与取决于校正因子指数的因子的蒙哥马利乘法。
12.一种对于密码应用确定以特定的概率表示素数的素数候选的方法,其中,所述方法通过至少一个处理器(54, 56, 56’, 56",56,,,)执行并且包含: -确定(44)用于筛法的基础值(b),和 -执行多个筛遍历,在所述筛遍历中分别确定(72) —个标记值(p’ ;r, r)并且将该标记值(P’ ;r, r')的倍数在筛法中作为合数标记,其中在每个筛遍历中利用包括至少一个蒙哥马利运算的余数确定方法确定(74)基础值(b)对标记值(p’ ;r,r’)取模之后的除余数。
13.根据权利要求12所述的方法,其特征在于,所述标记值(p’;r, r)是素数。
14.根据权利要求12或13所述的方法,其特征在于,所述筛法通过位域(S)代表,其位(S[i])相应于如下的值,所述值从基础值(b)出发具有预定的步幅,该步幅大于等于或大于2。
15.根据权利要求12至14中任一项所述的方法,其特征在于,对每个确定的素数候选进行至少一个概率性素数测试(12,20, 28,34,38)。
16.根据权利要求12至15中任一项所述的方法,其特征在于,作为余数确定方法使用按照权利要求1至11中任一项所述的方法。
17.根据权利要求16所述的方法,其特征在于,在筛遍历中的一个筛遍历中: -对于标记值(r,r’)的乘积(p’)执行第一蒙哥马利运算, -分别对于标记值(r,r’)执行第二蒙哥马利运算,并且 -分别标记所述标记值(r,r’)的倍数。
18.根据权利要求1至17中任一项所述的方法,其特征在于,所述方法用于确定RSA密钥或RSA-CRT密钥的至少一个参数。
19.一种计算机程序产品,具有多个程序命令,所述程序命令允许至少一个处理器(54,56,56’,56",56’’’)、特别是便携式数据载体(50)的至少一个处理器(54,56, 56’, 56",56,,,)执行按照权利要求1至18中任一项所述的方法。
20.一种装置,特别 是便携式数据载体(50),具有至少一个处理器(54,56,56’,56",56,,,)和至少一个存储器(60,64,66,68),其中所述装置构造为执行按照权利要求1至18中任一项所述的方法。
【文档编号】H04L9/08GK104012029SQ201280064238
【公开日】2014年8月27日 申请日期:2012年10月25日 优先权日:2011年10月28日
【发明者】J.普尔库斯 申请人:德国捷德有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1