掌桥专利:专业的专利平台
掌桥专利
首页

用于执行运算的系统和方法

文献发布时间:2024-04-18 20:00:50


用于执行运算的系统和方法

技术领域

本发明涉及用于执行运算的系统和方法。这些运算可以是密码运算。该系统可以包括例如硬件安全模块设备。

背景技术

椭圆曲线加密(ECC)描述了一种加密技术,其中椭圆曲线用于密钥协商方案、密钥生成、数字签名、伪随机生成器或其他加密算法。各种类型的椭圆曲线可以用于这种算法中。例如,许多ECC标准使用维尔斯特拉斯方程定义的椭圆曲线。

使用椭圆曲线的加密算法可以在具有硬件协处理器的系统中实现,该硬件协处理器用于有效地执行椭圆曲线计算。例如,包括被配置成对使用维尔斯特拉斯方程定义的椭圆曲线执行椭圆曲线计算的固定电路的硬件协处理器是可用的。

然而,各种密码标准使用其他类型的椭圆曲线,例如使用蒙哥马利方程或爱德华兹方程定义的椭圆曲线。在一些情况下,用户可能希望在硬件协处理器不支持算法中使用的椭圆曲线类型的系统中实现加密算法。在这种情况下,椭圆曲线计算在软件中实现,并且使用系统通用处理器来执行。这可能导致这种加密算法的执行速度降低。

附图说明

现在将参考附图描述根据非限制性实施例的设备和方法,其中:

图1是硬件安全模块设备的示意图;

图2是根据实施例的系统的硬件安全模块设备的示意图;

图3是示出根据实施例的方法的流程图;

图4是示出根据实施例的方法的流程图;

图5是使用根据实施例的方法实现Diffie-Hellman密钥交换方案的硬件安全模块的示意图;

图6是根据实施例的生成公钥的方法的流程图;

图7是根据实施例的方法的流程图;

图8是根据实施例的方法的流程图;

图9是根据实施例的方法的流程图;

图10是根据实施例的方法的流程图;

图11(a)是根据实施例的系统的示意图;

图11(b)是可以包括在图11(a)的系统中的示例性智能卡设备的示意图;

图12是根据实施例的在图11(a)的系统上实现的方法的示意图;

图13是根据实施例的方法的流程图;

图14是根据实施例的方法的流程图;

图15是根据实施例的方法的流程图;

图16是根据实施例的在图15的方法中使用的方法的流程图;以及

图17是根据实施例的在图16的方法中使用的方法的流程图。

具体实施方式

根据第一方面,提供了一种执行运算的计算机实现的方法,该方法包括:

对于对应于定义在有限域上的第一类型的第一椭圆曲线上的第一点的第一值,获得对应于定义在有限域上的第二类型的第二椭圆曲线上的第二点的第二值;

使用第二值执行第一运算以确定对应于第二椭圆曲线上的第三点的第三值,其中第一运算在支持第二类型椭圆曲线上的第一运算的第一处理器模块上执行;以及

将第三值变换为对应于第一椭圆曲线上的第四点的第四值。

在一个实施例中,该运算是加密运算。

在一个实施例中,第一运算是点乘运算、点加运算、点加倍运算或者这些运算中的一个或多个的组合。

在一个实施例中,第一处理器模块不支持第一类型的椭圆曲线上的第一运算。

在一个实施例中,第一类型是使用蒙哥马利方程或爱德华兹方程的参数定义的椭圆曲线,并且第二类型是使用维尔斯特拉斯方程的参数定义的椭圆曲线。

在一个实施例中,获得第二值包括将第一值变换为第二值。将第一值变换为第二值可以包括检索定义第二椭圆曲线的一个或多个常数。该方法还可以包括从第一值确定另一个第一值,该另一个第一值对应于第一点,并且将该另一个第一值变换为对应于第二点的另一个第二值,其中使用第二值和该另一个第二值来执行第一运算。

在一个实施例中,获得第二值包括:

确定第一点是否对应于预定义点;

响应于确定第一点对应于预定义点,检索第二值。

在一个实施例中,将第三值变换为第四值至少部分地在第二处理器模块上执行。

在一个实施例中,第一椭圆曲线上的第四点等同于通过对第一椭圆曲线上的第一点执行第一运算而获得的点。

在一个实施例中,第一类型是使用扭曲的爱德华兹方程的参数定义的椭圆曲线。

在一个实施例中,第二类型的椭圆曲线上的第一运算直接在第一处理器模块中的硬件中实现。在一个实施例中,第一类型的椭圆曲线上的第一运算不是直接在第一处理器模块中的硬件中实现的。

在一个实施例中,第一处理器模块包括专用集成电路(ASIC)或现场可编程门阵列(FPGA),其被配置成对第二类型的椭圆曲线执行第一运算。

在一个实施例中,获得第二值包括确定第一点是否对应于第一椭圆曲线的单位元,并且如果第一点对应于第一椭圆曲线的单位元,则将第二值设置为对应于第二椭圆曲线的单位元。在一个实施例中,将第三值变换为第四值包括确定第三点是否对应于第二椭圆曲线的单位元,并且如果第三点对应于第二椭圆曲线的单位元,则将第四值设置为对应于第一椭圆曲线的单位元。

根据另一方面,提供了一种系统,包括:

第一处理器模块,其支持对第二类型的椭圆曲线的第一运算,该系统被配置成:

对于对应于定义在有限域上的第一类型的第一椭圆曲线上的第一点的第一值,获得对应于定义在有限域上的第二类型的第二椭圆曲线上的第二点的第二值;

在第一处理器模块上,使用第二值执行第一运算以确定对应于第二椭圆曲线上的第三点的第三值;以及

将第三值变换为对应于第一椭圆曲线上的第四点的第四值。

在一个实施例中,将第三值变换为第四值至少部分地在第二处理器模块上执行。

在一个实施例中,第二处理器模块是硬件安全模块设备内的通用处理器模块,并且其中第一处理器模块是硬件安全模块设备内的硬件协处理器。

在一个实施例中,第二处理器模块是第一计算设备内的通用处理器模块,并且第一处理器模块在智能卡设备内。

在一个实施例中,该系统还包括存储定义第二椭圆曲线的一个或多个常数的存储器,其中该存储器还存储第二值。

根据另一方面,提供了一种包括计算机可读代码的载体介质,该计算机可读代码被配置成使计算机执行任何上述方法。根据另一方面,提供了一种包括存储在其上的程序指令的非暂时性计算机可读存储介质,该程序指令可由计算机处理器执行以执行任何上述方法。这些方法是计算机实现的方法。因为根据实施例的一些方法可以由软件实现,所以一些实施例包含在任何合适的载体介质上提供给通用计算机的计算机代码。载体介质可以包括任何存储介质,诸如软盘、CD ROM、磁设备或可编程存储设备,或者任何瞬时介质,诸如任何信号,例如电、光或微波信号。载体介质可以包括非暂时性计算机可读存储介质。根据另一方面,提供了一种包括计算机可读代码的载体介质,该计算机可读代码被配置成使计算机执行任何上述方法。

公钥加密方法通常基于“单向函数”。对于单向函数,对于给定的输入计算输出在计算上是容易的,但是从给定的输出计算输入在计算上是困难的。椭圆曲线加密(ECC)是一种越来越流行的公钥加密方法。ECC描述了一种加密技术,其中椭圆曲线用于密钥协商方案、密钥生成、数字签名、伪随机生成器或其他加密算法。

椭圆曲线是一种可以写成维尔斯特拉斯形式的曲线。维尔斯特拉斯方程包括两个变量x和y,其中一个变量为二次变量,而另一个变量为三次变量。定义在有限域上的椭圆曲线被用于许多加密应用中。定义的椭圆曲线具有有限个点,这些点的坐标在有限域F中。此处,我们将描述定义在素数域上的椭圆曲线。然而,例如,对于一些加密应用,椭圆曲线可以被定义在有限二进制域上。在素数的情况下,域F

许多ECC标准,诸如ANSI X9.63和NIST的FIPS186系列,使用利用维尔斯特拉斯方程定义的椭圆曲线,换句话说,椭圆曲线由维尔斯特拉斯方程的参数a和b的值定义。使用维尔斯特拉斯方程定义的椭圆曲线在本文也被称为维尔斯特拉斯型曲线或仅仅是维尔斯特拉斯曲线。在素域F

y

以及无穷远点,记为Ω。此处,x和y是曲线上点的坐标,而a和b是常数。因此,使用上述维尔斯特拉斯方程的参数a和b来定义椭圆曲线。x、y、a、b的值属于F

选择描述特定曲线的a、b和p值是一个复杂的过程,因此一些机构已经发布了这些值的“标准”集,供加密团体使用。这些曲线被简称为诸如“NIST P256”或“BrainpoolP256t1”。

通过使用曲线上的点执行运算,可以执行各种加密算法。例如,Diffie-Hellman密钥交换方案是可以使用椭圆曲线执行的密钥协商方案的示例。在这种方案的示例中,双方Alice和Bob希望在他们之间执行安全通信。Alice和Bob双方同意描述维尔斯特拉斯曲线的a、b和p值,例如,他们可能同意这些值的标准集。他们还同意对应于定义曲线上的点(x

Alice生成私钥,它是整数k

Bob生成私钥,它是整数k2,并且生成公钥P

Alice将她的公钥发送给Bob,该公钥对应于曲线上的点P

Alice计算曲线上的点K,其对应于(x

在上述密钥交换方案中,使用了“点乘”运算,现在将对其进行更详细的描述。“点乘”运算可以使用“点加”运算和“点加倍”运算来执行。为了描述“点乘”运算,将首先描述“点加”运算。在“点加”运算中,曲线上的两个点被“相加”以给出曲线上第三点的坐标。“点加”运算在本文用“+”(加号)表示。

给定使用上述维尔斯特拉斯方程(1)定义的椭圆曲线上的两个点P和Q,“点加”运算P+Q在几何上表示通过点P和Q的直线与椭圆曲线的另一个交点。点P的坐标是(x

如上所述,这些计算是以p为模执行的。为了执行点加运算,执行上面的(2)和(3)中的计算。

使用维尔斯特拉斯方程定义的椭圆曲线上的点也可以“加倍”以给出曲线上的另一个点。“点加倍”运算可以表示为2.P,其中P是椭圆曲线上具有坐标(x

如上所述,这些计算也以p为模执行。为了执行点加运算,执行上述(4)和(5)中的计算。

通过重复加法和/或加倍,执行“点乘”运算。例如,点乘运算3.P可以通过以下来执行:执行加倍运算T=2.P,之后是加法运算T+P。点乘运算4.P可以通过以下来执行:执行加倍运算T=2.P,之后是另一个加倍运算2.T等等。点乘运算是许多ECC算法的基本组成部分,诸如椭圆曲线Diffie-Hellman(ECDH)和椭圆曲线数字签名算法(ECDSA)。

这些加密算法的安全性取决于计算点乘法的能力(例如k.P),以及在给定原始点(P)和乘积点(k.P)的情况下无法计算被乘数(在本例中为k)。点乘运算是单向函数的示例。换句话说,对于给定的输入k,计算输出k.P在计算上是容易的,然而从给定的输出k.P计算输入k在计算上是困难的。

为了在使用维尔斯特拉斯方程定义的椭圆曲线上的一个或多个点上实现点加、点加倍和点乘运算,可以在投影坐标中表示该点,并且使用投影坐标执行运算。

为了获得有用的安全级别,计算必须使用大的数字,换句话说,p和k必须很大。因此,NIST P256曲线上的“点乘”可能需要300次或更多的点加或点加倍计算,每次都需要对256位整数进行十几次左右的运算。例如,当在CPU上实现时,这可能会很慢。

因此,专门配置成基于维尔斯特拉斯椭圆曲线执行点加计算、点加倍计算和/或点乘运算的硬件实现是可用的。这些可以是专用集成电路(ASIC)的形式,其具有直接在硬件中有效实现的点加计算、点加倍计算和/或点乘计算。

此类设备被称为硬件协处理器,并且通常支持许多使用维尔斯特拉斯方程定义的不同标准曲线。因此,当请求点乘运算时,用户可以简单地提供定义曲线的a、b和p值。例如,使用此类设备可以允许每秒完成数千或数万次运算。

图1是包括加密协处理器15的硬件安全模块设备1的示意图。加密协处理器15是硬件协处理器,其被配置成基于使用维尔斯特拉斯形式定义的椭圆曲线来执行点乘运算。换句话说,基于使用维尔斯特拉斯形式定义的椭圆曲线的点乘运算直接在协处理器15上的硬件中实现。

设备1用于执行Diffie-Hellman密钥交换方案。例如,Bob的系统使用设备1来执行上述Diffie-Hellman密钥交换方案的运算。Bob的系统通过主机接口23与设备1通信。设备1包括RAM 17,它存储Bob的私钥k

在上述系统中,当实现加密算法时,为了更高效地执行运算,使用支持基于使用维尔斯特拉斯方程定义的曲线的点乘运算的加密协处理器15。然而,对于许多加密应用,可以使用不同定义的椭圆曲线。例如,近年来,使用蒙哥马利方程定义的椭圆曲线受到了加密团体的关注。使用蒙哥马利方程定义的椭圆曲线,换句话说,由蒙哥马利方程的参数值定义的椭圆曲线,在本文也被称为蒙哥马利曲线。蒙哥马利曲线是在有限域F

By

以及无穷远点,记为Ω。此处,A和B是常数,它们的值定义了曲线。算术以p为模进行,其中x和y是曲线上点的坐标。x、y、A和B的值属于F

诸如“点加”、“点加倍”和“点相乘”之类的运算可以用蒙哥马利曲线上的点来执行,其方式类似于维尔斯特拉斯形式的曲线。然而,用起始点的x和y坐标表示的这些运算的公式,对于每种类型的曲线是不同的。对于蒙哥马利曲线,对于具有坐标(x

对于蒙哥马利曲线,对于具有坐标(x

因为计算是不同的,所以在图1的系统中使用的加密协处理器设备15没有被配置成对蒙哥马利曲线点执行点加运算、点加倍运算或点乘运算。换句话说,加密协处理器15不支持使用蒙哥马利方程定义的曲线上的运算,换句话说,使用上述方程(6)的常数A和B定义的曲线上的运算。相反,这些运算必须在软件中实现,并且完全在CPU 13上执行,因此不会受益于专用硬件设备15的增加的速度。

在一些情况下,加密协处理器设备15可以被配置成执行更一般的运算,诸如模加、模减、模幂等。在这种情况下,加密协处理器15可以用于通过从CPU 13向加密协处理器15依次发送点乘运算的各种分量运算(模加、模减等),并且向CPU 13返回结果,使用蒙哥马利曲线上的点来执行点乘运算。然而,不可能将整个点乘法作为单个运算传递给加密协处理器15,因为不支持该运算,因此从加密协处理器15的速度增加中获得的益处减少或没有益处。

例如,X25519和Ed25519加密算法使用蒙哥马利曲线。这些可以通过将实现运算的软件加载到RAM 17中并且使用CPU 13执行该软件来在CPU 13上实现。换句话说,在软件或固件中实现运算。虽然存在这些算法的高速软件实现,但是这些算法可以使用例如在HSM11中使用的嵌入式CPU 13上不可用的指令或CPU特征。

图2是根据实施例的系统中的设备11的示意图。该设备是硬件安全模块设备11(HSM)。硬件安全模块设备11被配置成为针对客户端执行加密功能。术语“客户端”在整个描述中用于通常指HSM设备11的用户。

硬件安全模块设备11包括中央处理单元(CPU)13。CPU 13与非易失性存储装置19进行有线双向通信。非易失性存储装置19可以包括任何形式的非易失性设备存储器,例如诸如闪存、光盘或磁硬盘驱动器。非易失性存储装置19可以是物理安全的,并且可以抵抗第三方的篡改,例如通过包括物理安全,诸如覆盖整个设备的膜,在不破坏底层物理硬件的情况下不能移除该膜,从而使其不可用。非易失性存储装置19可以存储与客户端相关联的密码信息,例如它可以存储一个或多个私钥。

CPU 13还与对应于随机存取存储器17的工作存储器17进行有线双向通信。RAM 17对应于CPU 13的运算存储器。CPU 13可以包括逻辑电路,该逻辑电路响应并且处理RAM 17中代码中的指令。具体地,当被执行时,程序被表示为存储在RAM 17中的软件产品或过程。CPU 13对各种程序的执行将导致实现本文描述的方法。

在本说明书中,程序可以被称为“固件”,然而通常程序包括存储在HSM设备11上的非易失性存储装置19中的一组计算机指令,并且具体实施将在下面关于方法描述的功能。计算机指令或固件可以用多种编程语言中的任何一种来编写,并且可以作为编译代码存储在HSM设备11上。固件可以在制造时嵌入硬件安全模块11中,或者可以在制造后整体或部分地提供。例如,固件可以作为计算机程序产品引入,其可以是下载的形式。备选地,可以通过更新或插件对现有固件进行修改。为了加强安全性,只接受来自可信方的软件。可以使用数字签名过程来实施这一点,并且可以通过主机系统设备在命令中提供软件。

HSM设备11位于主机系统(未示出)中,例如服务供应商系统或客户端系统。HSM 11经由主机接口23通信耦合到主机系统中的计算机或服务器设备。例如,HSM设备11可以是直接插入主机系统设备的PCI-express卡插槽的PCI-express卡。备选地,HSM设备11可以通过例如USB连接来耦合。

在一种布置中,独立的客户端系统远离主机系统。主机系统是服务供应商系统。客户端系统包括计算设备或服务器设备。客户端系统通信地耦合到主机系统中的计算机或服务器设备,并且因此通过主机系统中的计算机或服务器设备通信地耦合到HSM设备11。客户端系统与主机系统之间的通信通过通信网络来执行。客户端系统与主机系统之间的通信可以经由例如互联网连接来执行。这样,多个客户端可以使用由服务供应商托管的HSM设备11。服务供应商系统可以包括耦合到主机计算机或服务器设备的大量HSM设备。

备选地,HSM 11经由主机接口23直接耦合到客户端系统中的计算机或服务器设备。例如,HSM设备11可以是直接插入客户端系统设备的PCI-express卡插槽的PCI-express卡。备选地,HSM设备11可以通过例如USB连接来耦合。

在使用中,HSM设备11通过主机接口23接收客户端请求。这些请求可以对应于一个或多个密码功能的执行,诸如如前所述的加密密钥交换。例如,可以执行Diffie-Hellman密钥交换过程,其中客户端接收他们希望与之通信的第三方的公钥。这经由主机接口23被提供给HSM 11,连同已经与第三方达成协议的描述椭圆曲线的参数a、b和p,以及使用上述Diffie-Hellman过程生成用于与第三方通信的密钥的请求。

硬件安全模型11还包括加密协处理器15。CPU 13与加密协处理器15进行有线双向通信。例如,CPU 13可以经由PCIe接口与加密协处理器15通信。

这个示例中的加密协处理器15是专用集成电路(ASIC)。ASIC被配置成基于一条或多条维尔斯特拉斯椭圆曲线执行点加运算、点加倍运算和/或点乘运算。具体地,ASIC包括固定逻辑电路,其被配置成接收维尔斯特拉斯椭圆曲线上的一个或多个点作为输入,并且输出点加运算、点加倍运算或点乘运算的结果。在此类设备中,点加运算、点加倍运算和/或点乘运算直接在硬件中实现。此类设备的示例包括NXP C291加密协处理器、NXP C292加密协处理器、NXP C293加密协处理器、MaxLinear9240数据压缩和安全协处理器以及英特尔快速帮助适配器8950。

加密协处理器15可以包括多个处理模块,也称为加密引擎。加密引擎可以被配置成同时执行点运算,因此可以同时执行一个以上的点运算。加密协处理器15也被称为硬件协处理器,并且在该示例中是ASIC。它用于加速椭圆曲线计算。它仅支持使用维尔斯特拉斯方程定义的椭圆曲线的运算。换句话说,用于定义曲线的参数是维尔斯特拉斯方程的参数。

加密协处理器15被配置成从CPU 13接收执行一个或多个运算的请求,并且将运算的输出返回给CPU 13。CPU 13被配置成将各种运算卸载到加密协处理器15。加密协处理器15独立于CPU 13,并且被配置成在硬件中执行某些运算,这意味着这些运算在加密协处理器15上比在CPU 13上可以更高效地执行。可以与在CPU 13上执行的运算同时在加密协处理器15上执行运算。

在图2所示的设备11中,CPU 13运行保存在非易失性存储装置19中的软件,并且加密协处理器15具有加密原语的固定实现方式,换句话说,硬件实现方式,诸如维尔斯特拉斯形式的点乘法。RAM 17保存工作数据,包括密钥和计算中使用的其他秘密。

图3是示出根据实施例的方法的流程图。该方法在图2的设备11上实现。该方法可以作为加密算法的一部分来执行,例如如上所述的Diffie Hellman密钥交换过程。

在该方法中,对于由值A、B和p描述的特定蒙哥马利曲线,期望对蒙哥马利曲线上的点P执行点乘运算k.P。然而,加密协处理器15被特别配置成对维尔斯特拉斯曲线上的点执行点乘运算。例如,加密协处理器15被配置成对任何维尔斯特拉斯曲线执行点加运算和点加倍运算,其中当请求运算时,标识该曲线的a、b和p值被传递给加密协处理器15。为了使用加密协处理器15高效地执行期望的运算,使用映射将蒙哥马利曲线上的点变换为维尔斯特拉斯曲线上的点,并且使用维尔斯特拉斯曲线上的点来执行点乘运算。由点乘运算产生的维尔斯特拉斯曲线上的输出点然后被变换回蒙哥马利曲线上的点。

在步骤S303中,对应于在有限域F

蒙哥马利曲线M

By

以及无穷远点,记为Ω,其中A、B和p是描述曲线的值。对应于蒙哥马利曲线M

在该步骤中,第一值x

对于满足上述蒙哥马利方程(11)的x

v

蒙哥马利曲线上的点到维尔斯特拉斯曲线上的点的映射写为ψ(x,y)→(u,v)。从满足上述蒙哥马利方程的第一点(x

其中A和B是定义蒙哥马利方程的常数。使用方程(13)和(14)中的映射从第一值x

在步骤S305中,使用第二点P’执行点乘法运算k.P’,该点是维尔斯特拉斯曲线上的点。在加密协处理器15上执行点乘运算。

为了执行点乘运算,必须确定维尔斯特拉斯曲线的a和b常数。因此,常数a和b的值使用以下计算来确定,这些计算以p为模执行:

A和B值是常数,仅取决于A和B,因此所有所得(u,v)值都是同一维尔斯特拉斯曲线上的点。

如前所述,由加密协处理器15执行点乘k.P’,该加密协处理器被配置成在硬件中执行维尔斯特拉斯曲线上的点的点乘运算。在该步骤中,使用由a、b和P描述的维尔斯特拉斯曲线上的点P’执行点乘运算,以确定维尔斯特拉斯曲线上的点S’。

点P’的坐标连同a和b值以及描述曲线的素数p一起被提供给加密协处理器15。整数值k还被提供给加密协处理器15,该加密协处理器对维尔斯特拉斯曲线执行点乘运算,并且向CPU 31提供输出。该输出是第三点S’的坐标,它是维尔斯特拉斯曲线上的点。第三点的坐标是u

在步骤S307中,第三值被变换为对应于蒙哥马利曲线M

y=Bv(18)

如上所述,使用方程(17)和(18)中的映射从第三值u

使用这种方法,基于蒙哥马利椭圆曲线的加密标准(诸如X25519密钥交换或Ed25519数字签名)可以受益于使用支持维尔斯特拉斯曲线的可用ASIC设备的硬件加速。该方法可以在如图2中所示的硬件安全模块设备11上实现,该设备向主机计算机提供加密服务。

在图3的方法中,使用映射ψ(x,y)→(u,v)将蒙哥马利曲线M

ψ(P+Q)=ψ(P)+ψ(Q)(19)

此外,使用蒙哥马利公式的点P的点加倍运算由2.P表示。使用维尔斯特拉斯公式的点加倍运算表示为2.ψ(P),其中:

ψ(2.P)=2.ψ(P)(20)

如上所述,加法运算和加倍运算可以组合起来,使用蒙哥马利公式给出点乘运算,写成k.P,其中k是普通整数。使用维尔斯特拉斯公式的点乘运算表示为k.ψ(P),其中:

ψ(k.P)=k.ψ(P)(21)

此外,使用蒙哥马利曲线上的点P的点乘法等同于首先变换到维尔斯特拉斯曲线上的点,执行点乘运算,然后使用逆映射将所得点变换到蒙哥马利曲线上的点:

k.P=ψ

图4示出了根据实施例的使用蒙哥马利曲线M

在步骤401中,使用上面的方程(15)和(16)计算描述维尔斯特拉斯曲线的常数a和b的值。计算可以完全在CPU 13上执行,或者CPU 13可以将一个或多个分量计算(例如模减运算)传递给加密协处理器15,然后将结果传递回CPU 13。

常数a和b的值存储在硬件安全模块11的非易失性存储器19中。在该步骤中,对于蒙哥马利曲线M

例如,当HSM 11被初始化时,可以为各种标准的蒙哥马利曲线计算常数a和b的值。这些常数然后被存储在HSM 11中以备后用。例如,查找表可以存储在非易失性存储装置19中,包括多个条目。每个条目可以包括描述标准蒙哥马利曲线的一组参数A、B和p,以及描述对应维尔斯特拉斯曲线的一组对应参数a和b。然后可以根据需要检索对应于特定蒙哥马利曲线的条目。

可选地,在该步骤中可以计算附加常数,这些常数将在使用曲线M

执行这些值的预先计算可以导致在硬件安全模块11上使用蒙哥马利曲线M

为了计算点乘k.P,其中P是蒙哥马利曲线M

在步骤S405中,维尔斯特拉斯曲线上的点P’的坐标、描述该曲线的常数a和b以及素数P,以及用于点乘运算的值k被提供给加密协处理器15,该加密协处理器将执行点乘运算k.P以确定维尔斯特拉斯曲线上的第三点S’。第三点S’的坐标被返回给CPU 13。在该步骤中,k、P’的值和维尔斯特拉斯曲线参数a、b和P被发送给硬件加速器15,然后硬件加速器15计算点乘结果k.P’。

在步骤S407中,使用逆变换将第三点S’变换为蒙哥马利曲线M

在上述方法中,ψ变换只需要两次乘法和一次加法mod p,逆变换ψ

在上述方法中,描述了点乘运算。然而,应当理解,这些方法可以用于使用蒙哥马利曲线上的点来执行其他运算。例如,该方法可以用于使用蒙哥马利曲线M

例如,如前所述,第一点P可以被“加”到曲线上的另一个点Q。结果是曲线上第四点R的x和y坐标。为了执行点加运算,使用上述方程(13)和(14)中的映射,将蒙哥马利曲线上的第一点P变换为维尔斯特拉斯曲线上的第二点P’。蒙哥马利曲线上的另一个点Q也使用相同的映射,换句话说,使用相同的方程(13)和(14),利用相同的A和B值,被变换为维尔斯特拉斯曲线上的第二另一个点Q’。然后,使用方程(7)和(8)中的维尔斯特拉斯公式来执行第二点P’和第二另一个点Q’的点加运算,这可以使用投影坐标来实现。然后,使用方程(17)和(18)中的映射,将维尔斯特拉斯曲线上的所得第三点R’变换为蒙哥马利曲线上的第四点。

此外,曲线上的点P可以是“加倍的”——这对应于将点P与其自身相加。如上所述,点乘运算包括一个或多个加法和/或加倍运算。点乘是点P与标量n的乘积,或者是该点与自身n次的加法。

图5是使用根据实施例的方法实现Diffie-Hellman密钥交换方案的硬件安全模块11的示意图。

如前所述,在这个方案中,Alice和Bob双方都希望在他们之间执行安全通信。然而,在该示例中,双方希望密钥的生成基于蒙哥马利曲线。Alice和Bob双方都同意描述蒙哥马利曲线的A、B和p值和基点G,例如,他们可以同意这些值的标准集。

硬件安全模块11存储Bob的私钥k

Alice将她的公钥发送给Bob,该公钥对应于曲线上的点P

加密协处理器15支持维尔斯特拉斯曲线上的点乘运算。然而,它不支持蒙哥马利曲线上的点乘运算。因此,蒙哥马利曲线上的点P

Bob的私钥k

然后按照上面的方程(17)和(18)在点K’上进行逆变换,以提供蒙哥马利曲线上的点K。点K对应于点k

图5示出了如何使用结合图3和图4描述的方法对蒙哥马利曲线执行椭圆曲线Diffie-Hellman(ECDH)运算。对于该运算,蒙哥马利椭圆曲线点P

在结合图5描述的方法中,执行以下步骤。从主机接口23接收点P

用于生成共享密钥的点乘函数k

诸如ECDSA或EdDSA之类的其他算法可以以类似的方式执行。对于这些算法,在主点乘运算之前和之后执行附加处理,但是与加密协处理器15的交互遵循上述相同的步骤。

在上述Diffie-Hellman密钥交换方案中,Bob使用由Alice提供的公钥,并且还向Alice提供他自己的公钥P

在这种方法中,使用点乘运算来计算私钥k

Bob和A1ice同意描述蒙哥马利曲线的一组参数A、B和p。Bob和Alice还同意参数G,它是曲线上的点,称为基点或生成器。参数n是G的阶,其中n的值是最小的正数,使得n.G=Ω(曲线的无穷远点)。n的值可以认为是通过G的点乘可以生成的可能点数。另一个参数h是余因子。参数[A、B、p、G、n和h]被称为域参数,并且这些参数描述了蒙哥马利曲线。如上所述,Alice和Bob通常不会自己生成一组域参数,而是同意由标准主体发布的一组域参数。这种标准的域参数集合也可以称为“标准曲线”。

为了生成公钥P

图6中的方法包括预先计算步骤S601,其中给定描述蒙哥马利曲线的域参数[A,B,p,G,n和h],使用上面的方程(15)和(16)计算描述维尔斯特拉斯曲线的常数a和b的值。还使用上述方程(13)和(14)计算点ψ(G)。点ψ(G)也被称为G’,并且是通过将蒙哥马利曲线上的点G变换为维尔斯特拉斯曲线上的点而找到的。计算可以完全在CPU 13上执行,或者CPU 13可以将一个或多个分量计算(例如模减运算)传递给加密协处理器15来执行,结果被传递回CPU 13。常数a和b的值以及点ψ(G)存储在硬件安全模块11的非易失性存储器19中。预先计算步骤可以执行一次,例如在HSM 11的初始化时。

给定该组域参数,HSM 11在S602中通过在区间[1,n-1]中随机选择整数k

在S603中,获得对应于变换点ψ(G)的维尔斯特拉斯曲线上的生成点G’。例如,从存储装置19中检索生成点G’并且将其加载到RAM 17中。还检索了维尔斯特拉斯曲线的参数a和b。

在S604中,维尔斯特拉斯曲线的参数a、b和p、维尔斯特拉斯曲线上的生成点G’和私钥k

在S605中,使用方程(17)和(18)中的映射来执行逆变换ψ

在该方法中,通过执行G与整数值k2的点乘运算,使用私钥值k

在许多ECC应用中,诸如ECDSA或上述的ECDH公钥生成,被相乘的点是固定的“生成器”值G。可以在预先计算阶段预先执行蒙哥马利曲线上的生成器点G的变换。维尔斯特拉斯曲线上的变换点G’然后被存储在HSM设备11上,并在需要时被检索。不需要每次生成公钥时都执行生成点G的变换。

当请求点乘运算时,可以执行初始步骤,包括确定输入点P是否是生成点G。如果蒙哥马利曲线上请求运算的输入点P是生成点G,则不执行变换ψ,而是备选地从存储器中获得预先计算的G’值。

使用蒙哥马利曲线(诸如X25519密钥交换方案)的系统可以只交换点的x坐标,因为有可能执行蒙哥马利点乘法计算而不需要y坐标值。图7是根据实施例的方法的示意图,其中Alice仅向Bob发送点P

没有y坐标值,无法执行维尔斯特拉斯点乘计算。为此,执行附加初始步骤S501:确定蒙哥马利曲线上的点P的y坐标。

当接收到“仅x坐标”形式的蒙哥马利曲线点时,执行步骤S501:使用以下公式计算用于ψ变换的对应y值:

其中计算是以p为模执行。

该计算输出两个可能的y值,对应于两个可能的点P和-P。可以选择任一点,因为点乘法将计算k.P或-k.P,并且这些点的x坐标将是相同的。y坐标的计算可以完全在CPU 13上执行,或者例如使用加密协处理器15来执行一个或多个分量运算。

一旦从方程(23)中找到y坐标,就如先前在S503中描述的那样执行x和y坐标的变换。在S503中,蒙哥马利曲线上的点P的x值和y值被变换为维尔斯特拉斯曲线上的第二点P’的u和v坐标。然后,在S505中,协处理器15对点P’执行点乘运算,从而在维尔斯特拉斯曲线上得到第三点S’。第三点对应于作为第三值的u值和v值。

然后在S507中对u值执行逆变换ψ

上述方程(23)中的平方根运算执行起来可能很耗时。在蒙哥马利曲线上的生成点G被提供为“仅x坐标”点的情况下,预先计算变换后的点G’并且存储点G’以备将来使用是特别有益的,因为耗时的平方根运算可以预先执行,并且结果被存储以备将来使用。通过存储点G’的坐标,不需要在每次接收到生成点G的x坐标时执行平方根运算来执行运算。

在上述示例中,要对蒙哥马利曲线上的第一点P执行运算。为了执行该运算,蒙哥马利曲线上的第一点P被变换为维尔斯特拉斯曲线上的第二点P’。然后,使用第二点P’执行运算,并且将所得点S’变换回蒙哥马利曲线上的点S。尽管蒙哥马利曲线被描述为一个示例,但是也可以使用其他类型的椭圆曲线来代替。

任何椭圆曲线都可以写成维尔斯特拉斯形式,因此,通过将不同类型的椭圆曲线上的第一点变换为维尔斯特拉斯曲线上的第二点,可以以类似的方式对第一点执行运算。可以通过将椭圆曲线上的点变换为维尔斯特拉斯曲线上的点来执行对该点的运算,该椭圆曲线上的点是使用不是维尔斯特拉斯方程的方程定义的,换句话说,是用不是维尔斯特拉斯方程的方程的参数定义的。

图8是根据实施例的方法的流程图,其中将对使用爱德华兹方程定义的椭圆曲线上的第一点执行运算。使用爱德华兹方程定义的椭圆曲线在本文也称为爱德华兹型曲线或简称为爱德华兹曲线。爱德华兹椭圆曲线包括满足在有限域F

x

以及单位元(0,1)。此处,d是常数。x、y、d的值属于F

变换允许将爱德华兹曲线上的点变换为维尔斯特拉斯曲线上的等同点。在本文描述的示例中,变换在两阶段过程中执行,第一阶段是找到等同于爱德华兹点的蒙哥马利形式,然后如前所述将其变换为维尔斯特拉斯点。然而,从爱德华兹曲线点到维尔斯特拉斯曲线点的其他变换方法也是可能的,例如可以使用具有单次变换的单阶段过程。

在两阶段过程中,爱德华兹椭圆曲线上的第一点被变换为维尔斯特拉斯曲线上的点。在第一步骤S701中,爱德华兹曲线上的点被变换为在有限域F

Bv

定义蒙哥马利曲线的常数A和B的预先计算使用以下方程执行:

A=4B-2(27)

如前所述,这些常数可以在预先计算阶段计算并且存储以备后用。

在S701中,使用以下方程将爱德华兹曲线上的第一点的坐标x和y变换为蒙哥马利曲线上的第二点P’的坐标u和v:

在第二步S702中,蒙哥马利曲线上的点P’被变换为等同的维尔斯特拉斯形式。蒙哥马利曲线常数和点坐标被变换为维尔斯特拉斯形式,如前所述,以供硬件加速器15进行处理。如前所述,在S702中,蒙哥马利曲线上的点P’被变换为维尔斯特拉斯曲线上的点P”,并且在S703中执行期望的操作,从而在维尔斯特拉斯曲线上产生输出点S”。

从维尔斯特拉斯曲线到爱德华兹曲线的逆变换以类似的方式执行。维尔斯特拉斯曲线首先在S704中被逆变换为等同的蒙哥马利曲线,并且蒙哥马利曲线随后被逆变换为爱德华兹曲线S705。如前所述,在S704中执行维尔斯特拉斯曲线上的点S”到蒙哥马利曲线上的点S’的逆变换。在S705中使用以下用于逆变换的方程执行蒙哥马利曲线上的点S’的逆变换,以给出爱德华兹曲线上的点S:

在上述方法中,第一类型的椭圆曲线(例如蒙哥马利或爱德华兹曲线)上的点被变换为维尔斯特拉斯曲线上的点。这使得通过使用支持维尔斯特拉斯曲线上的运算的加密协处理器设备15,能够更高效地执行点上的运算。任何类型的椭圆曲线都可以写成维尔斯特拉斯形式。

然而,在一些情况下,加密协处理器15可以支持除了维尔斯特拉斯曲线之外的曲线上的运算。例如,加密协处理器15可以支持蒙哥马利曲线上的运算,但不支持维尔斯特拉斯曲线上的运算。在此类情况下,第一类型的椭圆曲线(例如维尔斯特拉斯或爱德华兹曲线)上的点被变换为蒙哥马利曲线上的点。

图9是根据实施例的方法的流程图,其中将对使用爱德华兹方程定义的椭圆曲线上的第一点执行运算。在S901中,使用以上方程(26)至(29)中的映射,将爱德华兹椭圆曲线上的第一点P变换为蒙哥马利曲线上的第二点。然后,在S902中,在支持蒙哥马利曲线上的运算的加密协处理器15上执行运算,例如点乘法。然后,在S903中,使用方程(30)和(31),将蒙哥马利曲线上的所得点变换为爱德华兹曲线上的点。

在该方法中,对爱德华兹曲线上的第一点P的运算结果将被执行。第一点对应于x坐标和y坐标。这些也称为对应于第一点p的第一值。在S901中,使用上面的方程(28)将y坐标变换为u坐标,并且使用上面的方程(29)将x坐标变换为v坐标。这是蒙哥马利曲线上的第二点P’。然后在S902中使用蒙哥马利公式执行点运算,产生第三点S’。然后,在S903中,使用如上所述的方程(30)和(31)将第三点S’的u和v坐标变换为爱德华兹曲线上第四点S的x和y坐标。

图10是根据实施例的方法的流程图,其中使用支持蒙哥马利运算的加密协处理器,对使用维尔斯特拉斯方程定义的椭圆曲线上的第一点执行运算。在对维尔斯特拉斯曲线上的第一点P的运算将使用支持蒙哥马利运算的加密协处理器来执行的情况下,在S1001中,维尔斯特拉斯曲线上的第一点被变换为蒙哥马利曲线上的第二点P’。维尔斯特拉斯形式的域F

v

只能在某些情况下变换为蒙哥马利形式,特别是在上面的方程(15)和(16)可以被求解以找到对应于给定维尔斯特拉斯曲线的参数a和b的蒙哥马利曲线的参数A和B的情况下。

维尔斯特拉斯曲线上的第一点P对应于一个u坐标和一个v坐标。这些也被称为对应于第一点P的第一值。

作为第一步,使用上面的方程(17)和(18),将u和v坐标变换为蒙哥马利曲线上的点的x和y坐标:

By

因此,对应于蒙哥马利曲线上第二点P’的第二值是x和y坐标。

然后在S1002中使用蒙哥马利公式执行点乘运算。

然后,在S1003中,将第三点S’的x和y坐标变换为维尔斯特拉斯曲线上第四点S的u和v坐标。

在上述方法中,维尔斯特拉斯曲线上的u和v坐标被变换为蒙哥马利曲线上的点的x和y坐标。然而,在一些方法中,只有维尔斯特拉斯曲线上的u坐标被变换为蒙哥马利曲线上的点的x坐标。然后只使用x坐标执行运算。例如,在蒙哥马利形式的硬件加速器被配置成仅用x坐标来实现运算的情况下,并且在预期的加密应用不使用y值的情况下,仅维尔斯特拉斯曲线上的u坐标可以被变换为蒙哥马利曲线上的点的x坐标。蒙哥马利曲线上的点的x坐标然后被变换为维尔斯特拉斯曲线上的u坐标——v坐标未确定。例如,ECDSA签名算法计算点(x

一般而言,对应于在有限域上定义的第一类型的第一椭圆曲线上的第一点的第一值可以被变换为对应于在有限域上定义的第二类型的第二椭圆曲线上的第二点的第二值,以便使用第二值执行运算。

在上面的图2中,加密协处理器15被示为仅与CPU 13进行有线双向通信。加密协处理器15通过CPU 13访问RAM 17。然而,在备选配置中,加密协处理器15与HSM 11的一个或多个其他组件以及CPU 13进行有线双向通信。例如,加密协处理器15可以直接读和写RAM 17。CPU 13可以为直接存储器访问(DMA)分配RAM 17的存储器位置,并且加密协处理器15可以独立于CPU 13使用DMA来访问这组存储器访问。例如,CPU 17可以在RAM 17中存储一个或多个私钥,并且加密协处理器15可以直接从RAM 17中检索私钥,而不需要CPU 13的参与。

在上述示例中,这些方法被描述为在图2所示的硬件安全模块11上实现,该硬件安全模块包括包含ASIC的协处理器15。然而,协处理器15可以备选地包括现场可编程门阵列(FPGA)。例如,硬件协处理器15可以包括FPGA,该FPGA已经被编程为在使用维尔斯特拉斯方程定义的椭圆曲线上实现一个或多个运算。客户端可能希望使用包括协处理器15的HSM 11对蒙哥马利曲线上的第一点执行运算,该协处理器包括FPGA。除了用于在维尔斯特拉斯曲线上执行运算的配置之外,在FPGA上还可能不包括用于对蒙哥马利曲线执行运算的配置。例如,FPGA可能空间有限。此外,重新配置FPGA 15来对蒙哥马利曲线执行运算可能是耗时的。在此类情况下,上述方法可以用于将蒙哥马利曲线上的第一点变换为维尔斯特拉斯曲线上的第二点,然后使用被编程为对维尔斯特拉斯曲线执行运算的FPGA来实现对维尔斯特拉斯曲线的运算。以这种方式,可以避免FPGA的重新配置。

虽然上面描述了协处理器15包括ASIC或FPGA的示例,但是将会理解,加密协处理器15可以包括被配置成对椭圆曲线执行一个或多个运算的任何硬件设备,换句话说,其中这些运算在硬件中实现。

图11(a)是根据实施例的系统的示意图,包括计算设备12和智能卡设备14。例如,上述方法也可以在图11(a)的系统上实现。

计算设备12可以是例如通用计算机、移动设备或服务器设备。计算设备包括CPU13、RAM 17、非易失性存储装置19和智能卡接口16。

CPU 13与非易失性存储装置19进行有线双向通信。非易失性存储装置19可以包括任何形式的非易失性设备存储器,例如诸如闪存、光盘或磁硬盘驱动器。CPU 13还与对应于随机存取存储器17的工作存储器17进行有线双向通信。RAM 17对应于CPU 13的操作存储器。CPU 13可以包括逻辑电路,该逻辑电路响应并且处理RAM 17中代码中的指令。具体地,当被执行时,程序被表示为存储在RAM 17中的软件产品或过程。CPU 13对各种程序的执行将导致实现本文已经描述的方法。

智能卡接口16包括例如连接器触点,其连接到智能卡16上的对应触点。当智能卡14连接到接口16时,数据可以通过接口16从CPU 13传送到智能卡14,以及从智能卡14传送到CPU 13。

图11(b)是可以包括在图11(a)的系统中的示例性智能卡设备14的示意图。智能卡设备14包括非易失性或永久性存储装置29。存储装置29存储信息,诸如加密密钥。非易失性存储装置29可以包括任何形式的非易失性设备存储器,例如诸如闪存、光盘或磁硬盘驱动器。处理器24包括固定电路。处理器24包含用于终止与计算设备12的通信信道的一端的逻辑。

处理器24还包括固定电路,该固定电路被配置成基于一条或多条椭圆曲线执行运算,诸如点加运算、点加倍运算和/或点乘运算。例如,处理器24包括被配置成基于维尔斯特拉斯椭圆曲线执行点加运算、点加倍运算和/或点乘运算的固定电路。

上述方法可以备选地使用图11(a)的系统来实现。图12是根据实施例在图11(a)的系统上实现的方法的示意图。在该过程中,对于由值A、B和p描述的方程(11)中的蒙哥马利曲线,期望对蒙哥马利曲线上的点P执行点乘运算k.P。为了使用智能卡14高效地执行运算,智能卡14被配置成对维尔斯特拉斯曲线上的点执行点乘运算,使用映射将蒙哥马利曲线上的点P变换为维尔斯特拉斯曲线上的点P’,并且在智能卡14上执行点乘运算k.P’。维尔斯特拉斯曲线上的输出点S’然后被变换回蒙哥马利曲线上的点S。点S对应于k.P。

在步骤S1201中,对应于方程(11)中的蒙哥马利曲线上的第一点P的第一值被变换为对应于方程(12)中定义的维尔斯特拉斯椭圆曲线上的第二点P’的第二值。使用方程(13)和(14)中的映射从第一值x

在步骤S1202中,使用维尔斯特拉斯曲线上的第二点P’执行点乘运算k.P’。在智能卡14上执行点乘运算。点P’的坐标连同a和b值以及描述维尔斯特拉斯曲线的素数P一起从CPU 13提供给智能卡14。

可以对应于用户私钥的整数值k被存储在智能卡14上的非易失性存储装置29中。

智能卡处理器24对维尔斯特拉斯曲线执行点乘运算k.P’,并且通过连接器触点26和接口16向CPU 13提供输出。输出是第三点S’的坐标,它是维尔斯特拉斯曲线上的点。第三点的坐标是u

在步骤S1203中,第三值被变换为对应于蒙哥马利曲线上的第四点的第四值x

尽管上述方法被描述为在关于图2描述的HSM 11上或者在关于图11(a)描述的系统上实现,但是应该理解,这些方法可以在包括各种其他设备的各种其他系统上实现。

此外,在上述方法中,第一处理器模块包括硬件设备,诸如加密协处理器或智能卡,其被配置成在第二类型的椭圆曲线(例如维尔斯特拉斯曲线)上实现各种运算,诸如点乘。硬件设备仍然可以通过首先将不受支持的曲线上的点映射到受支持的椭圆曲线上的点,高效地执行第一类型的不受支持的曲线上的运算。第一处理器模块支持第二类型的椭圆曲线上的第一运算,但不支持第一类型的椭圆曲线上的运算。执行映射,使得第一类型的椭圆曲线上的运算仍然可以使用特定的硬件设备来执行。

然而,在一些情况下,第一处理器模块包括通用硬件设备,其能够执行第一类型和第二类型两者的椭圆曲线上的运算。然而,可能存在具有某种期望性质的第二类型的椭圆曲线上的第一运算的软件实现方式。例如,软件实现方式可能是高效的或抗攻击的。可能难以改变软件实现方式以便执行第一类型的椭圆曲线上的运算,同时保持这一性质。在此类情况下,可以执行映射,使得仍然可以使用软件实现方式来执行第一类型的椭圆曲线上的运算。第一处理器模块包括通用硬件设备,例如CPU,其在第二类型的椭圆曲线上执行第一运算的软件实现方式。第一处理器模块(例如CPU)支持第二类型的椭圆曲线上的第一运算,但也支持第一类型的椭圆曲线上的运算。然而,执行映射使得可以使用第二类型的椭圆曲线上的第一运算的特定软件实现方式,例如因为软件实现方式特别高效或安全。

尽管上述示例使用了在素数域上定义的椭圆曲线,但是这些方法也可以使用在有限二进制域上定义的椭圆曲线,其中使用了从在有限二进制域上定义的一种形式的椭圆曲线到在有限二进制域上定义的另一种形式的椭圆曲线的映射。

如上所述,诸如加密协处理器或智能卡之类的设备可以被配置成在一种或多种类型的各种标准椭圆曲线(诸如一条或多条标准维尔斯特拉斯曲线)上实现各种运算,诸如点乘。本文作为示例描述了加密协处理器和智能卡设备,但是可以使用被配置成在硬件中实现这种运算的各种其他设备。此类设备可能不支持所有椭圆曲线类型。该设备不能在此类曲线上执行运算,或者需要通过将每个分量运算分别传递给该设备来在分开的阶段执行运算。因此,此类运算不能从硬件实现方式中获益或获益有限,因此降低了运算的处理速度。在上述方法中,通过首先将不受支持的曲线上的点映射到受支持的椭圆曲线上的点,不受支持的曲线上的运算仍然可以由硬件实现高效地执行。

例如,使用“爱德华兹”或“蒙哥马利”方程的椭圆曲线密码系统包括X25519和Ed25519。许多ECC硬件加速ASIC设备不支持这些功能。可以使用软件或固件实现方式来执行各种X25519和Ed25519算法。使用不直接支持这些曲线的硬件设备,上述方法可以提高例如“爱德华兹”和“蒙哥马利”型曲线的ECC的性能。使用混合方法,该混合方法使用在软件(或固件)上实现的步骤以及在硬件加速器设备上实现的步骤。这允许使用爱德华兹或蒙哥马利曲线执行ECC,例如使用硬件加速器以更高的速度来执行,通过将数据值变换为维尔斯特拉斯形式的等同物,以及再变换回来。这样,高速但固定功能的硬件协处理器可以用于执行更广泛的功能。具体地,包括固定逻辑电路的ASIC可以用于对不受支持的蒙哥马利曲线执行运算,该固定逻辑电路被配置成接收维尔斯特拉斯椭圆曲线上的一个或多个点作为输入,并且输出直接在硬件中实现的运算的结果。与单独在软件(或固件)上实现运算相比,这可以提高运算速度。例如,X25519或Ed25519加密算法可以在HSM设备上以更快的速度执行。

图14是示出根据另一实施例的方法的流程图。

椭圆曲线上的点形成一个数学组,这意味着组中一定有一个点作为单位元。数学组的单位元在普通算术中等同于零,因为对于任何数m,(m+0)=(0+m)=m。以同样的方式,通过执行点加运算,将任何曲线点“加”到单位元,将输出与结果相同的点。

对于蒙哥马利和维尔斯特拉斯形式的曲线,没有(x,y)值充当单位元,换句话说,这使得点加法公式给出与输入相同的输出。具体地,值(0,0)不是单位元-事实上,点(0,0)不在参数b非零的维尔斯特拉斯曲线上。相反,对于蒙哥马利和维尔斯特拉斯曲线,有一个称为“无穷远点”的附加点,本文记为Ω,它被定义为单位元。点加运算被定义为:

Ω+(x,y)=(x,y)+Ω=(x,y)(34)

其中(x,y)是维尔斯特拉斯椭圆曲线或蒙哥马利椭圆曲线上的点。执行点(x,y)和它的“反向”点(x,-y的点加法)也将得到“无穷远点”:

(x,y)+(x,-y)=Ω(35)(35)

给定这些值作为输入,蒙哥马利和维尔斯特拉斯曲线形式的标准点加法公式将涉及被零除。因此,椭圆曲线算法的计算机实现明确地处理了这些情况。在一个示例中,该实现方式将存储每个点的x和y坐标,加上指示该点是否为Ω的标志位。如果设置了标志,则点的x和y坐标将被忽略。“无穷远点”的映射也是一种特殊情况,它在变换中被明确地识别和处理。

具体地,当蒙哥马利曲线上的点被变换为维尔斯特拉斯曲线上的点时,执行检查该输入点是否是蒙哥马利曲线上的无穷远点的第一步。在上面的示例中,这包括检查是否设置了标志。如果输入点是蒙哥马利曲线上的无穷远点,则它将被映射到维尔斯特拉斯曲线上的无穷远点。在上面的示例中,这包括为对应于变换点的存储值设置标志位。可以为变换点的x和y坐标设置任何值,例如,x和y坐标可以设置为(0,0)。在一些实现方式中,如果输入点是蒙哥马利曲线上的无穷远点,则当变换到维尔斯特拉斯曲线时,不对x值和y值或标志进行修改。

同样,当维尔斯特拉斯曲线上的一个点被变换为蒙哥马利曲线上的一个点时,也执行检查这个输入点是否是无穷远点的第一步。在上面的示例中,这包括检查是否设置了标志。如果输入点是维尔斯特拉斯曲线上的无穷远点,则将其映射到蒙哥马利曲线上的无穷远点。在上面的示例中,这包括为对应于变换点的存储值设置标志位。可以再次为x和y坐标设置任何值,例如,不修改x值和y值。

图14的方法在图2的设备11上实现。该方法可以作为加密算法的一部分来执行。在该方法中,对于由值A、B和p描述的特定蒙哥马利曲线M

在步骤S1403中,对应于在有限域F

如果第一点P不是蒙哥马利曲线上的无穷远点,则使用如前所述的方程(13)和(14)将第一值x

如果第一点P是蒙哥马利曲线上的无穷远点,则它将映射到维尔斯特拉斯曲线上的无穷远点。例如,第一点可以由0的x值、0的y值和被设置的标志来表示。在这种情况下,生成第二点P’,其x值为0,y值为0,并且设置了标志。实际上,这可能只是不执行任何转换。如果第三点Q是蒙哥马利曲线上的无穷远点,则它就以同样的方式映射到维尔斯特拉斯曲线上的无穷远点。

在步骤S1405中,使用第二点P’和第四点Q’执行点加运算P’+Q’。在加密协处理器15上执行点加运算。加密协处理器上的点加运算的实现方式明确地处理了上面关于方程(34)和(35)描述的情况。例如,如果点Q对应于(u

在步骤S1407中,执行维尔斯特拉斯曲线上的输出点到蒙哥马利曲线上的点的逆变换。步骤1407包括检查输出点是否是无穷远点。在上面的示例中,这包括检查是否设置了标志。如果输出点不是维尔斯特拉斯曲线上的无穷远点,则使用如前所述的方程(17)和(18)中的变换,将u值和v值变换为x值和y值。如果输出点是维尔斯特拉斯曲线上的无穷远点,则将其映射到蒙哥马利曲线上的无穷远点。在该示例中,输出点将由x值0、y值0和设置的标志来表示。

单位元出现在各种加密应用中,例如在检查EC Diffie-Hellman公钥的有效性时。例如,作为各种椭圆曲线算法的一部分执行的运算是验证接收的点Q是指定曲线上的点。这包括检查n.Q=Ω(无穷远点)。如上所述,n是指定的椭圆曲线的组阶,并且可以在例如定义该曲线的标准中指定。例如,可以通过将点Q(其是蒙哥马利型的第一椭圆曲线上的点)变换为维尔斯特拉斯型的第二椭圆曲线上的第二点并且使用第二点执行运算来执行运算n.Q。在这种情况下,在运算的输出是维尔斯特拉斯曲线上的无穷远点(这是点Q是第一曲线上的点时的预期结果)的情况下,将输出值变换为第一椭圆曲线上的点的步骤包括将输出值变换为蒙哥马利曲线上的无穷远点。

图13是根据另一实施例的方法的流程图,其中对使用扭曲的爱德华兹曲线方程定义的椭圆曲线上的第一点执行运算。

对于由方程(24)定义的爱德华兹曲线,对于某个固定的d,其中d不是0或1,并且所有的运算都以p为模执行,存在由方程(25)给出的等同的蒙哥马利曲线,其中B、A、u和v由方程(26)至(29)给出。然后蒙哥马利曲线常数和点坐标可以变换为维尔斯特拉斯形式,如前所述。然后这些可以由硬件加速器15处理,例如对这些点执行运算。由方程(30)和(31)给出逆变换。由方程(24)定义的爱德华兹曲线也被称为标准爱德华兹曲线。

扭曲的爱德华兹曲线具有附加的定义参数a,并且由以下的曲线方程定义:

ax

其中d是常数,其值不同于0和1。a也是常数。以p为模执行计算。

使用方程(36)定义的椭圆曲线在本文中也称为扭曲的爱德华兹型曲线或仅称为扭曲的爱德华兹曲线。扭曲的爱德华兹椭圆曲线包括在有限域Fp上定义的满足方程(36)的点(x,y)集,以及单位元(0,1)。x,y,a和d的值属于F

变换允许扭曲的爱德华兹曲线上的点被变换为维尔斯特拉斯曲线上的对应点。在本文描述的示例中,变换在两阶段过程中执行,第一阶段是找到与扭曲的爱德华兹点等同的蒙哥马利形式,然后如前所述将其变换为维尔斯特拉斯点。然而,从扭曲的爱德华兹曲线点到维尔斯特拉斯曲线点的其他变换方法也是可能的,例如可以使用具有单次变换的单阶段过程。

扭曲的爱德华兹椭圆曲线上的第一点在两阶段过程中被变换为维尔斯特拉斯曲线上的点。在第一步骤S1301中,爱德华兹曲线上的点被变换为使用方程(25)定义的蒙哥马利曲线上的等同点。定义蒙哥马利曲线的常数A和B的预先计算使用以下方程执行:

换句话说,由方程(37)和(38)给出等同蒙哥马利曲线系数A和B。如前所述,这些常数可以在预先计算阶段计算并且存储以备后用。

在S1301中使用以下方程来执行扭曲的爱德华兹曲线上的第一点的坐标x和y到蒙哥马利曲线上的第二点P’的坐标u和v的变换:

换句话说,使用方程(39)和(40)将点(x,y)映射到蒙哥马利曲线点(u,v)。

在第二步S1302中,蒙哥马利曲线上的点P’被变换为等同维尔斯特拉斯形式,如前所述。然后,在S1303中执行期望的运算,从而在维尔斯特拉斯曲线S”上产生输出点。

在S1304中,维尔斯特拉斯曲线点首先被逆变换为等同的蒙哥马利曲线点,并且蒙哥马利曲线点随后在S1305中被变换为扭曲的爱德华兹曲线点。如前所述,在S1304中执行维尔斯特拉斯曲线上的点S”到蒙哥马利曲线上的点S’的逆变换。在S1305中使用下面的逆变换方程执行蒙哥马利曲线上的点S’的逆变换,以给出扭曲的爱德华兹曲线上的点S:

图15是示出根据另一实施例的方法的流程图。

对于某些点,将标准或扭曲的爱德华兹型椭圆曲线上的点变换为蒙哥马利型椭圆曲线上的等同点,或者将蒙哥马利型椭圆曲线上的点逆变换为标准或扭曲的爱德华兹型椭圆曲线上的等同点,都涉及被零除。具体地,方程(28)至(31)和(39)至(42)每个都涉及除法。在加密应用中,可以对素数p进行模算术。此处,计算“除法”a/b包括计算b相对于p的“模逆”,写为b

·y=1的标准或扭曲的爱德华兹曲线点

在标准或扭曲的爱德华兹椭圆曲线上,点(0,1)是y坐标值等于1的唯一有效点。如果点(例如蒙哥马利曲线上的点)到标准或扭曲的爱德华兹曲线的变换生成具有等于1的y坐标值和不等于0的x坐标值的点,则变换产生指示无效输入的错误。对于标准和扭曲的爱德华兹曲线,点(0,1)是单位元。每一条标准的和扭曲的爱德华兹曲线都包括该点。在标准和扭曲的爱德华兹曲线上没有“无穷远点”——因此,这种曲线有时是优选的。具有单位元的标准或扭曲的爱德华兹曲线上的点(x,y)的普通点加法公式将给出:

(0,1)+(x,y)=(x,y)+(0,1)=(x,y)(43)

当标准或扭曲的爱德华兹曲线上的点要被变换为蒙哥马利曲线上的点时,执行检查该点是否为(0,1)的步骤。如果输入点是(0,1),则将其映射到蒙哥马利曲线上的无穷远点。在上面的示例中,这包括设置标志位,其中可以为x和y坐标设置任何值。还要注意,当蒙哥马利曲线上的点被变换为标准或扭曲的爱德华兹曲线上的点时,执行检查这个点是否是无穷远点的步骤。在上面的示例中,这包括检查是否设置了标志。如果该点是无穷远点,则将其映射到标准或扭曲的爱德华兹曲线上的点(0,1)。

·x=0的标准或扭曲的爱德华兹曲线点

x坐标值等于0的标准或扭曲的爱德华兹椭圆曲线上唯一有效的点是坐标为(0,1)和(0,-1)的点。如上所述,爱德华兹曲线上坐标(0,1)的点就是单位元。爱德华兹曲线上坐标(0,-1)的点等同于蒙哥马利曲线上的点(0,0)。当标准或扭曲的爱德华兹曲线上的点要被变换为蒙哥马利曲线上的点时,执行检查该点是否为(0,-1)的步骤。在一个示例中,如果输入点是(0,-1),则将其映射到蒙哥马利曲线上的点(0,0)。然而,标准或扭曲的爱德华兹曲线上的点(0,-1)在“正常”情况下不会返回,因为它与加密应用中使用的点组在分开的数学组中。具体地,爱德华兹点(0,-1)和(0,1)形成它们自己的二元组,分别等同于蒙哥马利曲线上的(0,0)和Ω。在加密应用中,只有在已经接收到无效输入数据的情况下才会遇到该点(0,-1)。因此,在其他一些示例中,如果标准或扭曲的爱德华兹曲线上的点(0,-1)要被变换为蒙哥马利曲线上的点,则会产生错误。

·v=0的蒙哥马利曲线点

如上所述,蒙哥马利型曲线上的(0,0)点等同于爱德华兹型椭圆曲线上的点(0,-1)。当蒙哥马利曲线上的点要被变换为标准或扭曲的爱德华兹曲线上的点时,执行检查该点是否为(0,0)的步骤。在一些实现方式中,然后可以通过将蒙哥马利曲线上的(0,0)点映射到爱德华兹曲线上的点(0,-1)来执行变换。然而,在其他实现方式中,遇到蒙哥马利曲线上的点(0,0)可能会产生错误。对于一些蒙哥马利型曲线,还存在两个包括等于0的v值的附加点,换句话说,方程44的两个附加解:

u

两个附加的点出现在满足(A+2)(A-2)是平方的条件的蒙哥马利曲线上,如2008年3月13日出版的Bernstein等人的《扭曲的爱德华兹曲线》加密期刊中所述——2008年AFRIC4CRYPT,计算机科学讲义,柏林,海德堡:Springer:389-405,其全部内容通过引用方式并入本文中。这些点具有坐标

·u=-1的蒙哥马利曲线点

u=-1的点只存在于蒙哥马利曲线方程可以求解的某些A和B值。换句话说,对于一些蒙哥马利曲线,可能存在两个点,对于这两个点,对于u=-1可以求解曲线方程。这两个点存在于满足

图15的方法在图2的设备11上实现。该方法可以作为加密算法的一部分来执行。在图15的方法中,对于特定的标准爱德华兹曲线或扭曲的爱德华兹曲线,期望对曲线上的第一点P和第四点Q执行点加运算。然而,加密协处理器15被配置成执行针对维尔斯特拉斯曲线的点加法。为了使用加密协处理器15高效地执行期望的运算,使用映射将标准爱德华兹或扭曲的爱德华兹曲线上的点变换为维尔斯特拉斯曲线上的点,并且使用维尔斯特拉斯曲线上的点来执行点加运算。维尔斯特拉斯曲线上的输出点然后被变换回标准爱德华兹或扭曲的爱德华兹曲线上的点。在本文描述的示例中,变换在两阶段过程中执行,第一阶段是找到等同于爱德华兹点的蒙哥马利形式,然后如前所述将其变换为维尔斯特拉斯点。然而,从爱德华兹曲线点到维尔斯特拉斯曲线点的其他变换方法也是可能的。

在步骤S1501中,对应于第一曲线上的第一点P的第一值被变换为对应于在有限域F

在步骤1502中,对应于蒙哥马利曲线上的第二点P’的第二值被变换为对应于维尔斯特拉斯曲线上的第三点P”的第三值。对应于蒙哥马利曲线上第五点Q’的第五值被变换为对应于维尔斯特拉斯曲线上的第六点Q”的第六值。蒙哥马利曲线常数和点坐标被变换为维尔斯特拉斯形式,如前所述。如前所述,如果遇到蒙哥马利曲线上的无穷远点Ω,则将其映射到维尔斯特拉斯曲线上的无穷远点Ω。备选地,如果在步骤1704中确定标准爱德华兹曲线或扭曲的爱德华兹曲线上的点是具有坐标值(0,1)的点,则该点被直接映射到维尔斯特拉斯曲线的无穷远点Ω。然后,在S1503中执行期望的运算,在维尔斯特拉斯曲线S”上产生输出点。

在步骤1504中,如前所述,执行维尔斯特拉斯曲线上的输出点S”到蒙哥马利曲线上的点S’的逆变换。步骤1504包括检查维尔斯特拉斯曲线上的输出点是否是无穷远点Ω的步骤,如前所述。如果输出点S”是维尔斯特拉斯曲线上的无穷远点Ω,则输出点S”被映射到蒙哥马利曲线上的无穷远点。备选地,在该步骤中,维尔斯特拉斯曲线上的输出点S”可以直接映射到标准爱德华兹或扭曲的爱德华兹曲线上的单位元(0,1),在这种情况下,可以跳过下面描述的步骤S1802和S1803。

在步骤1505中,点S’被逆变换为标准爱德华兹曲线或扭曲的爱德华兹曲线上的点。步骤1505包括针对点S’执行图17中阐述的过程。在S1801中接收蒙哥马利曲线上的输入点(u,v)。在步骤S1802中,检查该点是否是蒙哥马利曲线上的无穷远点Ω。在上面的示例中,这包括检查是否设置了标志。如果该点是无穷远点,则在步骤S1803中,将其映射到标准爱德华兹或扭曲的爱德华兹曲线上的单位元(0,1)。如果确定该点不是无穷远点Ω,则在步骤S1804中,检查v值是否为零。如果是,则在步骤S1807中,产生对应的“无效输入”错误。如果不是,则在步骤S1805检查u是否等于-1。如果确定该点具有-1的u值,则在步骤S1807中产生错误。然而,如果确定该点不具有等于-1的u值,则在步骤S1806中,使用如前所述的方程(30)和(31),将u值和v值变换为其对应于标准爱德华兹曲线或扭曲的爱德华兹曲线上的输出点S的等同x值和y值。

应当理解,本发明不限于上述实施例,并且在不脱离本文描述的概念的情况下,可以进行各种修改和改进。除了相互排斥的情况之外,任何特征可以单独使用或者与任何其他特征结合使用,并且本发明延伸到并且包括本文描述的一个或多个特征的所有组合和子组合。

相关技术
  • 一种基于数字孪生的装配精度仿真分析方法与系统
  • 一种基于网络数字孪生体的时延分析方法及系统
  • 一种基于网络数字孪生体的时延分析方法及系统
技术分类

06120116543339