当前位置: 首页 > 专利查询>英特尔公司专利>正文

使用折叠的模归约制造技术

技术编号:2835027 阅读:216 留言:0更新日期:2012-04-11 18:40
描述了确定N  mod  M的技术,其中N是n位宽的数,而M是m位宽的数。该技术通常涉及确定N′=N↓[H]2↑[f]mod  M+N↓[L],并在随后确定N′mod  M。

【技术实现步骤摘要】
专利说明使用折叠的模归约 背景 密码术保护数据免受不需要的访问。密码术通常涉及使原始数据(明文)难以理解(密文)的对数据的数学运算(加密)。逆数学运算(解密)从密文中恢复原始数据。密码术覆盖了比加密和解密数据更为广泛的应用领域。例如,密码术可经常用于认证(即,可靠地确定通信代理的身份)、数字签名的生成等。 当前的密码技术非常依赖密集的数学运算。例如,许多方案使用一类称为模取幂(modular exponentiation)的模算术,该算术涉及将一大数升到某次幂再用模数来归约(即,被给定模数除时的余数)。在数学上,模取幂可被表示为ge mod M(ge对M取模),其中e是指数而M是模数。 概念上,乘法和模归约是直截了当的运算。然而在这些系统中使用的数的大小都很大并且远远超过处理器的固有字长。例如,密码术协议可以要求对长度为1024至4096位甚至更长的数的模运算,而许多处理器固有的字长只有32或64位。对这样的大数执行运算在时间和计算资源方面是非常昂贵的。 附图简述 附图说明图1和图2示出了Karatsuba乘法。 图3是示出Karatsuba乘法的一个示例实现的流程图。 图4和图5示出了将数N折叠成数N′,其中N≡N′。 图6示出了N mod M的确定。 图7示出了数N的迭代折叠。 图8描绘了执行Karatsuba乘法和/或模归约的体系结构。 详细描述 如上所述,各种各样的密码术运算涉及极大数的乘法和/或模归约。在此描述的是能够减轻这些计算密集型运算的负担并且能够加速密码系统的操作的各种技术。这些技术也可以在更为通用的非密码计算设置中应用。一种这样的技术涉及改进称为Karatsuba乘法的大数相乘技术的效率。另一种技术涉及改进模归约的效率。 Karatsuba乘法 已经开发了各种各样的方法来执行二个数的乘法。一种已知作为教科书乘法的通用方法涉及分割操作数并对各个更小的片段执行乘法运算。作为一个示例,两个n位宽的数A和B可以如下表示为一组更小的子片段 A=a12s+a0 B=b12s+b0 其中a0和b0项代表A和B的最低有效位,而a1和b1则代表剩下的更高有效位。在这种记法中,ax和bx中的下标x代表一片段在数内的序数(例如,a0代表A的最低有效位,a1为更高一位的有效位等等)。 使用传统的教科书乘法,可以使用四次更小的乘法来计算A和B A x B=a1b122s+(a0b1+b0a1)2s+a0b0 一种称为Karatsuba乘法的乘法技术能够减少片段乘法的次数。例如,对于上述A和B,所得结果 (a0b1+b0a1) 中项可被计算为 -a1b1-a0b0 因为a1b1和a0b0形成了方程中的其他项,所以在方程中使用的值并不代表额外的计算成本。用方程取代方程中的方程,A x B的Karatsuba乘法可以计算为 A x B=a1b122s+(-a1b1-a0b0)2s+a0b0 这一取代用两个加法和一个简单乘法换取了两个乘法。在大多数情况下,这代表了计算效率的大幅增加。 在上述示例中,Karatsuba乘数被分为两段(即,“二项Karatsuba乘法”)。然而Karatsuba也可应用于其他数目的片段。例如,可以为数A和B定义三项Karatsuba乘法 A=a222s+a12s+a0 B=b222s+b12s+a0 A x B=a2b224s+a1b122s+a0b0+23s+ 22s+2s 其中A和B分别被分成三个S位的片段。 类似于二项Karatsuba乘法,三项Karatsuba乘法用相同序数片段(例如,axbx)的乘法运算和相一数的片段的加法(例如,ax+ay)来取代不同序数片段之间的乘法(例如,axby)。还可以为五项Karatsuba乘法定义方程。这些Karatsuba方程共用它们需要最多(t2+t)/2次乘法的性质,其中t是项数。 Karatsuba乘法可用递归来实现。例如,在二项Karatsuba乘法中 A x B=a1b122n+((a0+a1)(b0+b1)-a1b1-a0b0)2n+a0b0 进而可以使用Karatsuba来执行每个较小片段的乘法。例如,执行A x B的Karatsuba乘法可以涉及a1b1、a0b0和(a0+a1)(b0+b1)的Karatsuba乘法。这些乘法可以涉及更小的子片段的Karatsuba乘法。例如,确定a1b1可以涉及将a1和b1分成多项子片段。 然而,这种方法的潜在问题是所生成的不同大小的操作数。即,(a0+a1)项和(b0+b1)项都可能在加法运算中产生进位。随后对(a0+a1)和(b0+b1)结果的乘法则可能溢出到额外的固有字中。这会大幅降低Karatsuba实现的效率。 为解决“进位”问题,图1至图3示出了对两个操作数的最低有效位执行Karatsuba乘法并在随后基于最高有效位校正所得结果的示例实现。更详细地,图1示出了两个相乘的操作数A100和B102。在此示例中,每个操作数都是n+1位宽,其中n是某一处理器固有字长s的两倍。在此示例中,每个操作数都被分为两项和一个额外的高位。例如,A的最低s个有效位形成a0,接下来的s个有效位形成a1,而A的最高有效位则形成ah。 如图所示,使用如下方程对s大小的项执行Karatsuba乘法 22Sa1b1+2s+a0b0 所得结果可以基于最高有效位ah和bh的值进行调整。例如,如图所示,结果可以增加 2nahB 106 和 2nbh A 108 换言之,如果ah是“1”,则所得结果就增加移了n位的b1:b0的n位。类似地,如果bh是“1”,则所得结果就增加移了n位的a1:a0的n位。这些调整可以实现为额外的运算,例如 结果=结果+2nahB 结果=结果+2nbhA 或作为后跟加法的分支 if(ah)then结果=结果+2nB if(bh)then结果=结果+2nA 最后,如果ah和bh都是“1”,那么所得结果就增加2n(即,ahbh)。这能够使用分支来实现,例如 if(ah bh)then结果=结果+22n 加法与一个或多个分支语句的这一组合能够防止将进位向下传播到更低级别的递归。 图2示出了上述值为469的A 100乘上值为369的B 102的过程的运算。如图所示,排除了最高有效位的ah和bh位,A和B的Karatsuba乘法产生值24,069。该值首先对ah调整至78,597,随后再对bh调整至107,525。最后,因为ah和bh都为“1”,所以就加上对于22n=16的最高有效位以产生最终的答案173,061。同样地,可以通过Karatsuba技术的递归应用确定axbx的值。通过切去ah和bh位,递归就能对相同的适宜大小的操作数进行运算。 图3示出了该Karatsuba技术在一递归方案中的实现。如上所述,运算数A和B的Karatsuba乘法可由其后跟随了对A和B最高有效位ah和bh的校正116的A和B的乘法114来执行。所得的结果就返回118至递归栈。 Karatsuba乘法在操作数的长度远长于本文档来自技高网...

【技术保护点】
一种置于计算机可读存储介质上的计算机程序,包括使电路确定NmodM的指令,其中N是n位宽的数,而M是m位宽的数,所述程序用于:确定N′=N↓[H]2↑[f]modM+N↓[L],其中N↓[H]包含N的较高有效部分,并且N↓[L]包含N的较低有效部分,f包含将N分段成N↓[H]和N↓[L]的位置;以及确定N′modM。

【技术特征摘要】
...

【专利技术属性】
技术研发人员:W哈森普劳G高巴茨V戈帕尔
申请(专利权)人:英特尔公司
类型:发明
国别省市:US[美国]

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1