首页 专利交易 科技果 科技人才 科技服务 国际服务 商标交易 会员权益 IP管家助手 需求市场 关于龙图腾
 /  免费注册
到顶部 到底部
清空 搜索

用于稳健计算椭圆曲线数字签名的技术 

买专利卖专利找龙图腾,真高效! 查专利查商标用IPTOP,全免费!专利年费监控用IP管家,真方便!

申请/专利权人:英特尔公司

摘要:用于椭圆曲线加密ECC的技术包括具有ECC引擎的计算设备,所述ECC引擎从数据端口读取一个或多个参数。所述ECC引擎使用所述参数执行运算,例如椭圆曲线数字签名算法ECDSA。ECDSA可以在受保护模式下被执行,其中,所述ECC引擎将忽略输入。所述ECC引擎可以在固定的时间量中执行所述ECDSA,以防止时间侧通道攻击。所述ECC引擎可以通过消耗统一的功率量来执行ECDSA以防止功率侧通道攻击。所述ECC引擎可以通过发出统一量的电磁辐射来执行ECDSA以防止EM侧通道攻击。所述ECC引擎可以利用384比特输出来执行ECDSA验证以防止故障注入攻击。

主权项:1.一种用于计算椭圆曲线数字签名的计算设备,所述计算设备包括:椭圆曲线加密ECC引擎,其中,所述ECC引擎用于:从所述ECC引擎的数据端口读取针对椭圆曲线数字签名算法签名运算的多个参数中的每一个的参数值;从所述ECC引擎的指令端口读取操作码,其中,所述操作码指示所述椭圆曲线数字签名算法签名运算;响应于读取所述操作码而进入受保护模式,其中所述ECC引擎被配置为当在所述受保护模式下时忽略来自所述数据端口的输入;响应于读取所述操作码而执行所述椭圆曲线数字签名算法签名运算;响应于所述椭圆曲线数字签名算法签名运算的完成而退出所述受保护模式;以及响应于执行所述椭圆曲线数字签名算法签名运算而向所述ECC引擎的输出端口写入结果数据。

全文数据:用于稳健计算椭圆曲线数字签名的技术背景技术随着计算设备和电子通信网络继续以各种形式激增,信息安全保持为重要的关注。加密技术经常用于确保电子信息被安全递送到其目标接收方,并且用于确定请求访问信息的设备和或过程或者其他设备是否应该被准许这样的访问。公钥加密是典型地使用两种密钥的技术:私钥,其保持保密;以及公钥,其可以被自由公开,以定义在一组可信计算设备中的成员资格。虽然公钥和私钥是相关的,但是私钥不能够被从公钥可预见地确定。椭圆曲线加密ECC是基于在有限域上使用椭圆曲线的加密运算的一类公钥加密。ECC运算可以用于执行包括密钥交换和数字签名运算的传统加密运算。例如,使用ECC运算的常见加密算法包括用于密钥交换的椭圆曲线Diffie-HellmanECDH、用于数字签名的签名验证运算的椭圆曲线数字签名算法ECDSA、用于证明的增强型隐私IDEPID以及其他加密算法。附图说明通过示例的方式且不通过限制的方式在附图中说明了本申请中描述的构思。为了描述的简单及清晰,在图中说明的元件未必是按比例绘制的。在认为合适的情况下,已经在附图中重复了附图标记以指示相应的或类似的元件。图1是用于稳健计算椭圆曲线数字签名的计算设备的至少一个实施例的简化框图;图2是可以由图1的计算设备建立的环境的至少一个实施例的简化框图;图3是图1-2的椭圆曲线加密ECC引擎的至少一个实施例的简化框图;图4是图1-3的ECC引擎的至少一个实施例的简化引出线图;图5是可以由图1-4的计算设备执行的用于驱动ECC引擎的方法的至少一个实施例的简化流程图;图6是可以由图1-4的计算设备执行的用于稳健计算椭圆曲线数字签名的方法的至少一个实施例的简化流程图;图7-8是可以由图1-4的计算设备执行的用于执行ECC运算的方法的至少一个实施例的简化流程图;以及图9-10是可以由图1-4的计算设备执行的用于执行ECC运算的方法的至少一个实施例的简化流程图。具体实施方式虽然本公开的构思易受各种修改和可供替换的形式的影响,但是已经通过示例的方式在附图中示出且将在本申请中详细描述其特定实施例。但是,应该理解的是,没有任何意图要将本公开的构思限制在所公开的特定形式,而是相反,其意在覆盖与本公开和所附权利要求书一致的全部的修改、等同物和可供替换物。在说明书中提及的“一个实施例”、“实施例”、“说明性实施例”等指示所描述的实施例可以包括特定的特征、结构或特性,但是每一个实施例可以包括或未必包括该特定的特征、结构或特性。此外,这样的短语未必指代相同的实施例。进一步地,当结合实施例描述特定的特征、结构或特性时,所主张的是,结合无论是否明确描述的其他实施例来实现这样的特征、结构或特性在本领域的熟练技术人员的知识之内。此外,应该理解的是,在“至少一个A、B和C”形式的列表中包含的项可以指代A;B;C;A和B;A和C;B和C;或A、B和C。类似地,以“A、B或C中的至少一个”的形式列出的项可以指代A;B;C;A和B;A和C;B和C;或A,B和C。在一些情况下,可以以硬件、固件、软件或其任何组合实现所公开的实施例。所公开的实施例还可以被实现为由一个或多个易失性或非易失性机器可读例如,计算机可读存储介质承载或在一个或多个易失性或非易失性机器可读例如,计算机可读存储介质上存储的指令,其可以由一个或多个处理器读取并执行。机器可读存储介质可以被实现为用于以由机器可读的形式存储或发送信息的任何存储设备、机制或其他物理结构例如,易失性或非易失性存储器、介质盘、或其他介质设备。在附图中,可以以特定的布置和或顺序示出一些结构或方法特征。但是,应该理解的是,可以不需要这样的特定布置和或顺序。而是,在一些实施例中,这样的特征可以按照与在说明性附图中示出的不同方式和或顺序进行布置。此外,在具体的附图中包含结构或方法特征并不意味着隐含这样的特征在所有实施例中都需要,并且在一些实施例中,可以不包括这样的特征或者这样的特征可以与其他特征组合。现在参考图1,在说明性实施例中,用于稳健计算椭圆曲线数字签名的计算设备100包括处理器120和椭圆曲线加密ECC引擎122。如在下文描述的,由处理器120执行的软件和或固件可以将椭圆曲线加密运算卸载到ECC引擎122。处理器120为ECC引擎122的一个或多个寄存器加载适当的参数和或操作数,并且指示ECC引擎122执行加密运算,例如使用椭圆曲线数字签名算法ECDSA对消息进行签名。当ECC引擎122正在对消息进行签名时,该ECC引擎122可以处于受保护模式,其中ECC引擎122将忽略到ECC引擎122的输入,例如数据进入、指令有效、ECC指令等,直到完成对消息的签名。然后,处理器120可以从ECC引擎122读取结果数据。与使用通用处理器核心执行相同的运算相比,ECC引擎122可以提供具有改进的性能和或功耗的对ECC加密运算的快速且功率有效的计算。例如,已经开发出占用大约22,500平方微米或大约101,000个逻辑门的ECC引擎122的一个潜在实施例。通过提供较低的功耗和相对较高级别的安全强度,ECC引擎122可以适合于物联网设备或具有较长部署周期例如,15-20年的其他低功率设备。计算设备100可以被实现为能够执行本申请中描述的功能的任何类型的计算设备或计算机设备,包括但不限于,计算机、移动计算设备、物联网设备、网络装置、网络设备、可穿戴计算设备、膝上型计算机、笔记本计算机、平板计算机、台式计算机、工作站、服务器、分布式计算系统、基于处理器的系统和或消费类电子设备。如在图1中示出的,计算设备100说明性地包括处理器120、输入输出子系统124、存储器126、数据存储设备128和或在物联网设备或类似计算设备中一般发现的其他组件和设备。当然,在其他实施例中,计算设备100可以包括其他的或另外的组件,例如在移动计算设备中一般发现的那些组件例如,各种输入输出设备。此外,在一些实施例中,说明性组件中的一个或多个可以被并入到另一组件中或以其他方式形成另一组件的一部分。在一些实施例中,例如,存储器126或其一部分可以被并入到处理器120中。处理器120可以被实现为能够执行本申请中描述的功能的任何类型的处理器。处理器120可以被实现为单核或多核处理器、数字信号处理器、微控制器、或其他处理器或处理电路控制电路。如所示出的,处理器120包括ECC引擎122。ECC引擎122可以被实现为任何功能块、IP核、嵌入式控制器、逻辑电路、逻辑门和或能够执行本申请中描述的功能的处理器120的其他组件。此外,虽然被说明为被包括在处理器120中,但是应该理解的是,在一些实施例中,ECC引擎122可以被包括在诸如IO子系统124的计算设备100的不同组件中或者可以被实现为单独的加速器、协处理器、安全引擎、现场可编程门阵列FPGA或其它集成电路。存储器126可以被实现为能够执行本申请中描述的功能的任何类型的易失性或非易失性存储器或数据存储装置。在操作中,存储器126可以存储在计算设备100的操作期间使用的各种数据和软件,例如操作系统、应用、程序、库和驱动器。存储器126经由IO子系统124通信地耦合到处理器120,IO子系统124可以被实现为用于便于实现与处理器120、存储器126以及计算设备100的其他组件的输入输出操作的电路和或组件。例如,IO子系统124可以被实现为或以其他方式包括存储器控制器集线器、输入输出控制集线器、平台控制器集线器、集成控制电路、固件设备、通信链路即,点对点链路、总线链路、电线、电缆、光导、印刷电路板迹线等和或用于便于实现输入输出操作的其他组件和子系统。在一些实施例中,IO子系统124可以形成片上系统SoC的一部分并且与处理器120、存储器126和计算设备100的其他组件一起被并入到单个集成电路芯片上。数据存储设备128可以被实现为被配置用于短期或长期存储数据的任何类型的设备或多个设备,诸如以存储器设备和电路、存储卡、硬盘驱动、固态驱动或其他数据存储设备为例。如所示出的,计算设备100还可以包括一个或多个外围设备132。外围设备132可以包括任何数目的另外的输入输出设备、接口设备和或其他外围设备。例如,在一些实施例中,外围设备132可以包括显示器、触摸屏、图形电路、键盘、鼠标、扬声器系统、麦克风、网络接口和或其他输入输出设备、接口设备和或外围设备。现在参考图2,在说明性实施例中,计算设备100在操作期间建立环境200。说明性环境200包括加密客户端202、加密驱动器204以及ECC引擎122。环境200的各种组件可以被实现为硬件、固件、软件或其组合。这样,在一些实施例中,环境200的一个或多个组件可以被实现为电路或电子设备的集合例如,加密客户端电路202、加密驱动器电路204和或ECC引擎电路122。应该理解的是,在这样的实施例中,加密客户端电路202、加密驱动器电路204和或ECC引擎电路122中的一个或多个可以形成处理器120、IO子系统124和或计算设备100的其他组件中的一个或多个的一部分。此外,在一些实施例中,说明性组件中的一个或多个可以形成另一组件的一部分和或说明性组件中的一个或多个可以彼此独立。加密客户端202可以被实现为任何操作系统、库、应用或由使用椭圆曲线加密ECC执行加密过程的计算设备100执行的其他计算机程序。例如,加密客户端202可以被实现为执行包括ECC运算的加密协议的库或应用,加密协议例如是ECDSA、ECDH、EPID或其他协议。为了执行加密过程,加密客户端202调用加密驱动器204来执行一个或多个加密运算,例如椭圆曲线标量乘法、椭圆曲线点加、椭圆曲线相同点双倍、素域取幂、素域乘、素域加和或素域减。在说明性实施例中,加密客户端202可以调用加密驱动器204以执行涉及加密运算的算法,该加密运算涉及若干步骤和中间加密计算,例如椭圆曲线数字签名算法ECDSA签名运算或ECDSA验证运算。如下文进一步描述的,加密驱动器204被配置成对ECC引擎122进行编程以执行所请求的加密运算。ECC引擎122被配置成读取ECC引擎122的数据通路选择器信号。数据通路选择器信号指示256比特的数据宽度或384比特的数据宽度。ECC引擎122进一步被配置成从ECC引擎122的数据端口读取与所请求的加密运算的参数相对应的一个或多个参数值。每一个参数具有由数据通路选择器信号指示的数据宽度。ECC引擎122被进一步配置成从ECC引擎122的指令端口读取指示所请求的加密运算的操作码并且执行所请求的加密运算。加密运算还具有由数据通路选择器信号指示的数据宽度。在一些实施例中,操作码可以指示ECC引擎122的寄存器,并且ECC引擎122可以将参数值存储在所标识的寄存器中。在接收到用于执行特定运算的指令之后,例如ECDSA签名运算,ECC引擎122可以进入受保护模式,在该模式下,ECC引擎将忽略向ECC引擎122提供的输入中的一些或全部,例如数据进入、数据进入有效、重置、ECC启动、指令有效、ECC指令等。ECC引擎122可以保持在受保护模式下直到该运算完成,然后ECC引擎122可以退出受保护模式。ECC引擎122进一步被配置成响应于执行加密运算而向ECC引擎122的输出端口写入结果数据。该结果数据也具有由数据通路选择器信号指示的数据宽度。加密驱动器204被配置成确定ECC引擎122的忙碌信号是否被设置并且然后响应于确定忙碌信号未被设置而设置ECC引擎122的数据通路选择器信号。加密驱动器204被进一步配置成响应于设置数据通路选择器信号而使ECC引擎122的启动信号有效assert。加密驱动器204被进一步配置成响应于使启动信号有效而向ECC引擎122的指令端口写入操作码并且响应于写入操作码而使ECC引擎122的指令有效信号有效。ECC引擎122被进一步配置成确定启动信号是否被致使有效并且响应于确定启动信号被致使有效而设置忙碌信号。ECC引擎122被进一步配置成响应于确定启动信号被致使有效而确定指令有效信号是否被致使有效并且响应于确定指令有效信号被致使有效而读取操作码。ECC引擎122进一步被配置成响应于执行加密运算而清除忙碌信号并且响应于清除忙碌信号而使ECC引擎122的运算完成信号有效。加密驱动器204被进一步配置成确定ECC引擎122的运算完成信号是否被致使有效并且响应于确定ECC引擎122的运算完成信号被致使有效而从ECC引擎122的输出端口读取结果数据。现在参考图3,图300描绘了ECC引擎122的各种组件的一个潜在实施例。如所示出的,ECC引擎122可以包括执行控制器302、多个执行资源304以及寄存器318。执行资源304说明性地包括点乘单元306,点加双倍单元308、p取幂单元310、p乘法-加法-减法p-MAS单元312、椭圆曲线数字签名算法ECDSA签名单元314和ECDSA验证单元316。执行资源304中的每一个可以从寄存器318加载数据并且将数据存入寄存器318。此外,可以直接在某些执行资源304之间传输数据。例如,点乘单元306可以向点加双倍单元308、p取幂单元310、p-MAS单元312提供数据,点加双倍单元308可以向p-MAS单元312提供数据,并且p取幂单元310可以向p-MAS单元312提供数据。在一些实施例中,ECDSA签名单元314和ECDSA验证单元316中的每一个可以向点乘单元306、点加双倍单元308、p取幂单元310以及p乘法-加法-减法p-MAS单元312中的一个或多个发送数据并且从上述单元中的一个或多个接收数据。执行控制器302被配置成对提供给ECC引擎122的指令进行解码并且生成相对应的内部控制信号。如下文进一步描述的,执行控制器302还可以针对某些运算将输入数据从仿射坐标例如,x和y坐标转换成雅可比矩阵投影坐标。执行控制器302激活相对应的执行资源304以执行当前的指令。在执行之后,执行控制器302可以将雅可比矩阵投影坐标转换回仿射坐标。执行控制器302被配置成在一个或多个数据出去端口上输出结果数据并且向加密驱动器204发出结果已经准备好的信号。点乘单元306被配置成计算标量乘运算[d]P,其中d是标量值并且P是椭圆曲线上的点。在一些实施例中,点乘单元306可以使用二进制左-2-右双倍-以及-加过程来执行标量乘运算。此外或可供替换地,在一些实施例中,点乘单元306可以使用蒙哥马利阶梯过程来执行标量乘法。点加双倍单元308被配置成执行点加运算A+B以及点双倍运算2A,其中A和B都是椭圆曲线上的点。在一些实施例中,点加双倍单元308可以基于仿射坐标执行A+B和2A运算。此外或可供替换地,在一些实施例中,点加双倍单元308可以基于标准的雅可比矩阵投影坐标点加公式来执行A+B和2A运算。在一些实施例中,点加双倍单元308可以通过基于曲线参数的值a执行不同的运算来针对某些椭圆曲线提供对2A运算的加速。例如,如果a为零,则点加双倍单元308可以利用六个素域乘运算来执行2A运算,如果a为3,则点加双倍单元308可以利用8个素域乘运算来执行2A运算,并且如果a不为零且不为3,则点加双倍单元308可以利用10个素域乘运算来执行2A运算。p取幂单元310被配置成利用时序和简单的功率电磁辐射保护来计算素域求幂ab模p。类似地,p-MAS单元312被配置成利用时序和简单的功率电磁辐射保护来计算素域乘法a·b模p、素域加法a+b模p以及素域减法a-b模p。ECDSA签名单元314被配置成执行ECDSA签名运算。在ECDSA签名运算中,私钥用于基于消息而生成签名值,并且然后第三方可以验证私钥被用于生成签名值。为了执行ECDSA签名运算,适当的输入参数被加载到寄存器318中。例如,在说明性实施例中,输入包括e要签名的消息散列的较低256或348比特、Gx基点G的x坐标、Gy基点G的y坐标、nG的阶数、p定义有限域的素数、a在椭圆曲线的定义中使用的常数、d私钥、k在签名算法中使用的随机数以及λ在签名算法中使用的第二随机数。用于e的消息散列可以是任何适当的散列或加密散列,例如SHA-2。在接收到用于开始ECDSA算法的信号之后,ECC引擎122可以进入受保护模式,其中ECC引擎122将忽略提供给ECC引擎122的输入中的一些或全部,例如数据进入、数据进入有效、重置、ECC启动、指令有效、ECC指令等。如在下文在图7-8中更详细描述的,ECDSA签名单元314可以使用诸如点乘、点加双倍、p取幂、p-乘法-加法-减法的运算作为实现ECDSA算法的一部分。当ECC引擎122已经完成了ECDSA签名算法时,ECC引擎122退出受保护模式并且提供该签名作为ECC引擎122的输出。在一些实施例中,ECDSA签名单元314可以使用某些保护来防止旁路攻击。例如,ECDSA签名单元314可以使用第二随机数λ将基点G转换成一个、两个或更多个等同的随机化的雅可比矩阵坐标。应该理解的是,使用随机化的雅可比矩阵坐标致使在对雅可比矩阵坐标进行计算时比特的加扰,这可以防止秘密比特通过例如电磁辐射泄露给偷听者。此外或可供替换地,用作ECDSA签名运算的一部分的点乘可以使用蒙特马利阶梯,如下文针对图7-8更详细讨论的,可以以独立于私钥d的值在固定的时间处执行点乘。ECDSA验证单元316被配置成执行ECDSA验证运算。在ECDSA验证运算中,与某些消息相对应的签名值被验证为已经使用与已知的公钥相对应的私钥进行生成。为了执行ECDSA验证运算,适当的输入参数被加载到寄存器318中。例如,在说明性实施例中,输入包括e要签名的消息散列的较低256或348比特、Gx基点G的x坐标、Gy基点G的y坐标、Qx公钥Q的x坐标、Qy公钥Q的y坐标、nG的阶数、p定义有限域的素数、a在椭圆曲线的定义中使用的常数、r第一签名值以及s第二签名值。如在下文在图9-10中更详细描述的,ECDSA验证单元316可以使用诸如点乘、点加双倍、p取幂、p-乘法-加法-减法的运算作为实现ECDSA算法的一部分。当ECC引擎122已经完成ECDSA验证算法时,ECC引擎122提供指示签名是否被验证的输出。在说明性实施例中,ECC引擎122可以提供指示签名是否被验证的多个比特。例如,当签名被验证时,输出寄存器中的每一个比特可以为1,并且当签名未被验证时,相同输出寄存器中的每一个比特可以为零。使用多个冗余比特作为输出可以帮助防止可能使单个比特翻转的某些攻击,例如故障注入攻击。应该理解的是,一般而言,签名计算不是秘密的,因此ECDSA验证单元316可能不使用旁路保护技术。在一些实施例中,ECDSA验证单元316可以按照使计算加速的方式执行ECDSA验证算法的某些步骤。具体而言,如下文针对图9-10更详细讨论的,ECDSA验证运算需要计算两个点乘运算的点加,例如,[u1]G+[u2]Q形式的点加。ECDSA验证单元316可以使用遍历标量乘数u1和u2的比特的单个循环来计算两个点乘运算的和,这与分别计算两个点乘运算的每一个结果并且然后将结果加在一起相反。这样的方法可以显著地使计算加速,例如将执行时间减少大致1.5的因子。现在参考图4,图400说明了寄存器318和由ECC引擎122提供的各种输入输出信号、线、引脚、总线或其他接口连接的一个潜在实施例。如下文进一步描述的,由处理器120执行的软件和或固件可以通过读取或写入ECC引擎122的数据和或控制信号来控制ECC引擎122。如所示出的,说明性ECC引擎122包括10个寄存器318。寄存器318中的每一个为384比特宽。如下文进一步描述的,ECC引擎122可以被编程为针对384比特运算使用每一个寄存器318的全部384比特或者可以被编程为针对256比特运算使用每一个寄存器318的最低有效的256比特。寄存器318中的每一个可以存储由处理器120提供的参数数据以及由ECC引擎122生成的中间数据和结果数据。如在图4中示出的,寄存器318包括e寄存器402、Gx寄存器404、Gy寄存器406、n寄存器408、p寄存器410、a寄存器412、dQx寄存器414、kQy寄存器416、λr寄存器418以及s寄存器420。每一个寄存器318的语义可以取决于由ECC引擎122执行的特定加密运算并且在下文进一步描述。在一些实施例中,寄存器中的一些可以具有不同的宽度。例如,a寄存器412可能不需要384比特并且可以被实现为较小的寄存器,例如8比特寄存器。当然,除了图4中示出的顶级寄存器318之外,在一些实施例中,ECC引擎122可以包括未示出的另外的寄存器。ECC引擎122包括数据进入端口422和数据进入有效信号424。数据进入端口可以包括384个单独的信号、线、比特、引脚或其他接口连接。如在下文进一步描述的,处理器120可以向数据进入端口422写入参数数据,该参数数据将被存储在寄存器318中的一个中。处理器120可以设置数据进入有效信号424以指示有效数据位于数据进入端口422上。ECC引擎122包括数据出去端口426和数据出去端口428。数据出去端口426、428中的每一个可以包括384个单独的信号、线、比特、引脚或其他接口连接。如下文进一步描述的,ECC引擎122可以将来自ECC运算的数据写入到数据出去端口426、428中的一个或多个上。例如,ECC引擎122可以分别向数据出去端口426、428写入点C的x、y坐标。ECC引擎122进一步包括数据出去有效信号434。ECC引擎122可以设置数据出去有效信号434以指示有效数据位于数据出去端口426、428上。ECC引擎122包括ECC忙碌信号430和ECC完成信号432。ECC引擎122可以设置ECC忙碌信号430以指示其当前正在处理加密运算并且处理器120不应该开始新的加密运算。ECC引擎122可以使ECC完成信号432上的脉冲有效以指示加密运算完成。如下文进一步描述的,在ECC完成信号432被致使有效之后,处理器120可以从数据出去端口426、428读取结果数据。ECC引擎122进一步包括时钟信号436和异步重置信号438。如所示出的,ECC引擎122包括数据通路选择器信号440。如下文进一步描述的,处理器120可以设置数据通路选择器信号440以对ECC引擎122编程,以便对384比特数据执行384比特加密运算,或者可以清除数据通路选择器信号440以对ECC引擎122编程,以便对256比特数据执行256比特加密运算。ECC引擎122进一步包括ECC启动信号442、指令有效信号444以及指令端口446。如在下文进一步描述的,处理器120可以使ECC启动信号442上的脉冲有效,以使得ECC引擎122开始处理新的加密运算。如在上文描述的,ECC引擎122可以在ECC启动信号442被致使有效之后设置ECC忙碌信号430。处理器120可以向指令端口446写入指令操作码。如下文进一步描述的,指令操作码可以标识要被加载有数据的寄存器318或者要被执行的加密运算。当有效指令操作码已经被写入到指令端口446时,处理器120还可以使指令有效信号444上的脉冲有效。如下文进一步描述的,响应于使指令有效信号444有效,ECC引擎122可以将数据读取到指定的寄存器318中或执行所指定的加密运算。现在参考图5,在使用中,计算设备100可以执行用于驱动ECC引擎122的方法500。应该理解的是,在一些实施例中,可以通过如在图2中示出的计算设备100的环境200的一个或多个组件来执行方法500的操作。例如,方法500可以由加密驱动器204执行,其可以被实现为软件、固件、和或由处理器120执行的微代码。方法500在框502中开始,其中计算设备100确定ECC引擎122是否忙碌。计算设备100可以例如读取ECC引擎122的ECC忙碌信号430并且确定ECC忙碌信号430是否被设置。如果ECC引擎122是忙碌的,则方法500循环回框502以继续等待ECC引擎122。如果ECC引擎122不是忙碌的,则方法500前进到框504。在框504中,计算设备100根据用于ECC加密运算的期望比特宽度来设置ECC引擎122的256比特384比特数据通路选择器信号440。例如,处理器120可以设置数据通路选择器信号440以编程ECC引擎122,以便对384比特数据执行384比特加密运算,或者可以清除数据通路选择器信号440以编程ECC引擎122,以便对256比特数据执行256比特加密运算。当然,在一些实施例中,可以使数据通路选择器信号440的含义反转。从而,各种参数和结果数据的比特宽度取决于数据通路选择器信号440的值。在框506中,计算设备100使ECC引擎122的启动信号442有效。例如,处理器120可以使启动信号442上的脉冲有效。如下文结合图6进一步描述的,ECC引擎122响应于启动信号442上的脉冲被致使有效而开始处理ECC运算。在框508中,计算设备100向ECC引擎122的数据进入端口422写入参数值。计算设备100可以取决于数据通路选择器信号440的值而向数据进入端口422写入384比特的值或向数据输入端口422的最低有效的256比特写入256比特的值。计算设备400还设置数据进入有效信号424,以指示已经向数据进入端口422写入了有效数据。计算设备100可以写入要由ECC引擎122执行的ECC运算所需的参数中的任何一个。具体而言,参数值可以与图4中示出的寄存器402到420中的任何一个相对应。例如,参数可以与要被签名或验证的消息散列e的较低的256或348比特、基点G的x或y坐标、基点G的阶数n、定义椭圆曲线的有限域的素数p、在椭圆区域的定义中使用的常数a、私钥d、公钥Q的x或y坐标、随机数k、第二随机数λ、第一签名值r或第二签名值s相对应。在框510中,计算设备100向ECC引擎122的指令端口446写入操作码,其标识用于存储被写入到数据进入端口422的数据的寄存器402到420。操作码中的每一个可以被实现为标识要由ECC引擎122执行的特定指令的五比特二进制值。各种操作码可以指定数据将被写入到的寄存器位置或者可以指定要执行的ECC相关运算。在向指令端口446写入操作码之后,在框512中,计算设备100使ECC引擎122的指令有效信号444有效。例如,处理器120可以使指令有效信号444上的脉冲有效。如下文进一步描述的,响应于指令有效信号444被致使有效,ECC引擎122可以从数据进入端口422读取参数数据并且将该数据存储在由被写入到指令端口446的操作码标识的寄存器中。在框514中,计算设备100确定针对要执行的ECC运算是否要有另外的参数被加载到ECC引擎122中。如果剩余另外的参数,则方法500循环回框508以加载剩余的参数。如果没有另外的参数剩余,则方法500前进到框516。在框516中,计算设备100将针对要被执行的ECC运算的操作码写入到ECC引擎122的指令端口446。具体而言,计算设备100可以写入针对ECC相关运算的操作码,例如针对椭圆曲线标量乘的操作码、针对椭圆曲线点加的操作码、针对椭圆曲线点双倍的操作码、针对素域幂的操作码、针对素域乘法的操作码、针对素域加法的操作码、针对素域减法的操作码、针对ECDSA签名的操作码或针对ECDSA验证的操作码。在框518中,计算设备100使ECC引擎122的指令有效信号444有效。例如,处理器120可以使指令有效信号444上的脉冲有效。如下文进一步描述的,响应于指令有效信号444被致使有效,ECC引擎122执行由被写入到指令端口446的操作码指定的ECC运算。ECC引擎122可以基于数据通路选择器信号440而执行384比特运算或256比特运算。在框520中,计算设备100确定ECC引擎122是否完成处理ECC运算。例如,处理器120可以等待要由ECC引擎122在ECC完成信号432上致使有效的脉冲。如果ECC引擎122未完成处理ECC运算,则方法500循环回框520以继续等待ECC引擎122。如果ECC运算完成,则方法500前进到框522。在框522中,计算设备100从ECC引擎122的数据出去端口426、428中的一个或多个读取结果数据。如果ECC引擎122的数据出去有效信号434被设置,则计算设备100可以仅读取结果数据。由计算设备100读取的特定数据可以取决于所执行的ECC运算。例如,针对椭圆曲线运算,计算设备100可以从数据出去端口426读取结果点的x坐标并且从数据出去端口428读取结果点的y坐标。作为另一示例,针对素域运算,计算设备100可以从数据出去端口426读取结果值。计算设备100可以取决于数据通路选择器信号440的值而读取384比特结果数据或256比特结果数据。在一些情况下,例如在ECDSA验证运算之后,计算设备100可以基于数据出去端口428的若干比特来确定该运算的输出,即使输出寄存器的比特被预期是全部相同的。例如,对于签名的成功验证,数据出去端口428的输出可以全部为1,而对于签名的失败验证,数据出去端口428的输出可以全部为0。计算设备100可以估计数据出去端口428的两个或更多比特的值,以确定验证是否成功。这样的方案可以防止诸如将1比特的值翻转的某些攻击。在读取结果数据之后,方法500循环回框502以执行另一ECC运算。现在参考图6,在使用中,计算设备100可以执行用于稳健计算ECC运算的方法600。应该理解的是,在一些实施例中,方法600的操作可以由如图2中示出的计算设备100的环境200的一个或多个组件执行,例如ECC引擎122。方法600在框602中开始,其中ECC引擎122监控在ECC引擎122的启动信号442上被致使有效的脉冲。如上文所描述的,由处理器120执行的软件和或固件可以使启动信号442上的脉冲有效以开始处理ECC运算。如果未检测到脉冲,则方法600循环回框602以继续监控启动信号442。如果检测到脉冲,则方法600前进到框604。在框604中,ECC引擎122设置忙碌信号430。忙碌信号430指示ECC引擎目前正在处理ECC运算。如上文所描述的,在开始另一ECC运算之前,由计算设备100执行的软件和或固件可以等待直到忙碌信号430被清除。在框606中,ECC引擎122读取256比特384比特的数据通路选择器信号440并激活所选择的数据通路。如上文描述的,处理器120可以设置数据通路选择器信号440以编程ECC引擎122,以便对384比特数据执行384比特加密运算,或者可以清除数据通路选择器信号440以编程ECC引擎122,以便对256比特数据执行256比特加密运算。在框608中,ECC引擎122监控在指令有效信号444上被致使有效的脉冲。如上文所描述的,在向寄存器写入数据或执行ECC运算的指令已经被写入到指令端口446之后,由处理器120执行的软件和或固件可以使指令有效信号444上的脉冲有效。如果未检测到脉冲,则方法600循环回框608以继续监控指令有效信号444。如果检测到脉冲,则方法600前进到框610。在框610中,ECC引擎122从指令端口446读取指令操作码。如上文所描述的,操作码被说明性地实现为标识要由ECC引擎122执行的指令的五比特值。在框612中,ECC引擎122确定该操作码是否标识与寄存器318相对应的写入指令。如果操作码未标识写入指令,则方法600分支到框618,下文描述的。如果操作码标识了写入指令,则方法600前进到框614。在框614中,ECC引擎122从数据进入端口422读取参数数据。如果数据进入有效信号424被设置,则ECC引擎122可以仅读取参数数据。此外或另外地,在一些实施例中,ECC引擎122可以响应于在数据进入有效信号424上的脉冲被致使有效而读取参数数据。ECC引擎122可以取决于数据通路选择器信号440的值而从数据进入端口422读取384比特的数据或256比特的数据。在框616中,ECC引擎122将从数据进入端口422读取的数据存储到由写入指令指定的寄存器318中。在存储数据之后,方法600循环回框608以继续监控指令有效信号444。如结合图5在上文所描述的,由处理器120执行的软件和或固件可以执行另外的写入指令,以将参数数据写入到由要被执行的特定ECC运算使用的寄存器318中的每一个中。返回参考框612,如果指令操作码未标识写入指令,则方法600分支到框618,其中ECC引擎122可以根据特定的指令而进入受保护模式。在说明性实施例中,当指令是ECDSA签名指令时,ECC引擎122可以进入受保护模式。在受保护模式下,ECC引擎122将忽略提供给ECC引擎122的输入中的一些或全部,例如数据进入、数据进入有效、重置、ECC启动、指令有效、ECC指令等,直到运算完成。在框620中,ECC引擎122执行所选择的加密运算。在框622中,ECC引擎122向数据出去端口426、428中的一个或多个输出数据并且设置数据出去有效信号434。例如,ECC引擎122可以将来自寄存器318中的一个或多个的数据拷贝到数据出去端口426、428。特定的数据输出取决于由ECC引擎122执行的指令。例如,针对椭圆曲线点指令,ECC引擎122可以向数据出去端口426输出结果点的x坐标并且向数据出去端口428输出结果点的y坐标。针对素域指令,ECC引擎122可以向数据出去端口426输出值。对于ECDSA签名指令,ECC引擎122可以向数据出去端口426输出第一签名值r并且向数据出去端口428输出第二签名值s。针对ECDSA验证指令,如果验证成功,则ECC引擎122可以向数据出去端口426、428中的一个提供全部为1的值,并且如果验证不成功,则向数据出去端口426、428中的一个输出全部为0的值。针对验证运算的输出提供若干冗余比特可以防止诸如使一个比特的值翻转的某些攻击。根据数据通路选择器信号440,ECC引擎122可以输出384比特数据或256比特数据。在框622中,ECC引擎122退出受保护模式。在框626中,ECC引擎122清除忙碌信号430。清除忙碌信号指示ECC引擎122准备好要处理另一ECC运算。在框628中,ECC引擎122使ECC完成信号432上的脉冲有效。如上文所描述的,在ECC完成信号432被致使有效之后,由处理器120执行的软件和或固件可以从数据出去端口426、428读取结果。在使ECC完成信号432有效之后,方法600循环回框602以监控另外的ECC运算。现在参考图7,在使用中,计算设备100可以执行用于执行ECDSA签名的方法700。应该理解的是,在一些实施例中,方法700的操作可以由如在图2中示出的计算设备100的环境200的一个或多个组件执行,例如ECC引擎122。具体而言,方法700可以结合上文描述的图6的框620执行。应该理解的是,在执行方法700之前,计算设备100可以将适当的值加载到ECC引擎122的一个或多个寄存器318中。在说明性实施例中,计算设备100i将要被签名的消息散列的较低256或348比特加载到寄存器e402中,ii将基点G的x坐标加载到寄存器Gx404中,iii将基点G的y坐标加载到寄存器Gy406中,iv将G的阶数n加载到寄存器n408中,v将定义有限域的索数p加载到寄存器p410中,vi将在椭圆曲线的定义中使用的常数a记载到寄存器a412中,vii将私钥d加载到寄存器dQx414中,viii将在签名算法中使用的第一随机数k加载到寄存器kQy416中,以及ix将在签名算法中使用的第二随机数λ加载到寄存器λr418中。应该理解的是,在方法700中引用的一些值,例如R0、R1、j、i和t,可以被存储在寄存器402-420的一个或多个中,其可能要求寄存器402-420中的一个中的值不再需要被覆盖。此外或可供替换地,在方法700中引用的值中的一些或全部可以被存储在寄存器318或ECC引擎122中与寄存器402-420不同的其他存储装置中。还应该理解的是,可以在使用ECC引擎122的组件的情况下执行方法700的一些步骤,例如点乘单元306、点加双倍单元308、p取幂单元310、和或p-MAS单元312。方法700在框702中开始,其中ECC引擎122使用随机数λ将基点G从仿射坐标转换到雅可比矩阵坐标。仿射坐标可以使用与在椭圆曲线方程上的点相对应的x值和y值来描述点G。将仿射坐标转换成雅可比矩阵坐标将这些点投影到不同的但是等价的坐标系统,该坐标系统可以允许更有效的计算某些点运算。具体而言,仿射点x,y可以被转换成针对域中的任何点z的等价雅可比矩阵点xz2,yz3,z。ECC引擎122可以将基点G转换成任何适当的雅可比矩阵点,例如Gxλ2、Gyλ3、λ或Gxλ4、Gyλ6、λ2。在说明性实施例中,在框704中,ECC引擎122将基点G转换成两个不同的雅可比矩阵表示,例如Gxλ2、Gyλ3、λ或Gxλ4、Gyλ6、λ2。通过使用随机数λ转换基点G的坐标,基点G的坐标被有效地转换成随机数,这可以防止诸如监控ECC引擎122的电磁辐射的某些旁路攻击。当然,应该理解的是,在一些实施例中,ECC引擎122可以在仿射坐标中或使用不同于转换到雅可比矩阵坐标的转换来执行方法700的计算。在框706中,ECC引擎122将G的一个表示加载到R0,例如雅可比矩阵表示Gxλ4、Gyλ6、λ2。在框708中,ECC引擎122将[2]G的一个表示加载到R1中,例如雅可比矩阵表示[2]Gxλ2、Gyλ3、λ。应该理解的是,R1和R0中的每一个可以被实现为超过一个寄存器,例如用于仿射坐标的两个寄存器或用于雅可比矩阵坐标的三个寄存器。在框710到726中,ECC引擎122使用蒙哥马利阶梯方案计算[k]G,其允许在固定的时间量中计算该计算。应该理解的是,方法700的某些其他操作,例如确定k中前导零的数目,还可以在固定的时间量中执行,使得方法700的整体执行时间是固定的。在框710中,ECC引擎122确定k中前导零的数目并将该数目存储在变量j中。在框712中,ECC引擎122将索引i初始化成以比特为单位的长度k例如,256或384减去j减去2。在框714中,如果索引i为零或更大,则方法700继续到框716。在框716中,如果k的第i比特为零,则方法700继续到框718,在框718中,ECC引擎122将R1设置成R1和R0的点和。在框720中,ECC引擎122将R0设置成R0的点双倍。现在返回参考框716,如果k的第i比特不为零,则方法700继续到框722,其中ECC引擎122将R0设置成R1和R0的点和。在框720中,ECC引擎122将R1设置成R1的点双倍。在框726中,ECC引擎122使索引i递减并且循环回框714。返回参考框714,如果索引i不为零或更大,则方法700向下跳到框728。应该理解的是,在框714到726中对k进行按比特叠加之后,结果[k]G被存储在R0中。在框728中,ECC引擎122执行j虚点加和虚点双倍。要注意的是,由于针对k的前导零不执行从框714到框726的循环,因此跳过的计算时间通过执行虚运算来补足,这可以帮助确保方法700的固定执行时间。在框730中,ECC引擎122将R0从雅可比矩阵坐标转换成仿射坐标。由于仅使用R0的仿射坐标的x坐标参见框732,所以ECC引擎122可以仅确定仿射坐标的x坐标。在图8中的框732中,ECC引擎122将变量r设置成R0的x坐标模n。在框734中,如果r等于零,则使用针对k选择的随机值的消息签名是无效的,因此方法700跳到框750,其中由ECC引擎122指示失败。如果r不等于零,则方法700继续到框736。在框736中,ECC引擎122将变量t设置为k-1模n。在框738中,ECC引擎将变量s设置成r乘以d模n。在框740中,ECC引擎122将s设置成等于e加s模n。在框744中,ECC引擎122将s设置成t乘以s模n。在框746中,如果s等于零,则使用针对k选择的随机值的消息签名是无效的,因此方法700跳到框750,其中由ECC引擎122指示失败。如果s不等于零,则方法700继续到框748。在框748中,ECC引擎122提供r和s作为签名值,作为来自ECC引擎122的输出,例如通过将r和s存储在数据出去端口426和428中。返回参考框734和746,如果r或s为零,则方法700继续到框750。在框750中,ECC引擎122指示由于针对签名选择的特定值k导致了对消息进行签名的失败。ECC引擎122可以按照任何适当的方式指示失败,例如通过在数据出去端口426和428的一个或两个中提供全部为零的值。现在参考图9,在使用中,计算设备100可以执行用于执行ECDSA签名验证的方法900。应该理解的是,在一些实施例中,可以由如图2中示出的计算设备100的环境的一个或多个组件执行方法900的操作,例如ECC引擎122。具体而言,方法900可以结合上文描述的图6的框620执行。应该理解的是,在执行方法900之前,计算设备100可以将适当的值加载到ECC引擎122的一个或多个寄存器318中。在可供替换的实施例中,计算设备100i将要签名的消息散列的较低256或348比特加载到寄存器e402中,ii将基点G的x坐标Gx加载到寄存器Gx404中,iii将基点G的y坐标Gy加载到寄存器Gy406中,iv将G的阶数n加载到寄存器n408中,v将定义有限域的素数p加载到寄存器p410中,vi将在椭圆曲线的定义中使用的常数a加载到寄存器a412中,vii将公钥Q的x坐标Qx加载到寄存器dQx414中,viii将公钥Q的y坐标Qy加载到寄存器kQy416中,ix将第一签名值r加载到寄存器λr418中,以及x将第二签名值s记载到寄存器s420中。应该理解的是,在方法900中引用的一些值,例如t1、t2、u1、u2、T、j和i可以被存储在寄存器402-420的一个或多个中,其可能要求寄存器402-420中的一个中的值不再需要被覆盖。此外或可供替换地,在方法900中引用的值中的一些或全部可以被存储在寄存器318或ECC引擎122中与寄存器402-420不同的其他存储器中。还应该理解的是,可以在使用ECC引擎122的组件的情况下执行方法900的一些步骤,例如点乘单元306、点加双倍单元308、p取幂单元310和或p-MAS单元312。作为在方法900中执行ECDSA签名算法的一部分,ECC引擎122计算[u1]G+[u2]Q形式的两个点乘运算的点加。ECC引擎122可以通过同时在u1和u2上进行按位叠加、并将G、Q或G和Q的和添加到存储在R中的中间结果这取决于在当前索引u1和u2处的特定比特值来执行这样的计算。由于提前计算了G和Q的和,所以可以利用单个点加运算将G和Q的和加到存储在R中的中间结果。应该理解的是,利用这样的方案,在当前索引的比特值针对u1和u2两者都为1时,仅需要一点加法。相比之下,如果通过首先分别计算[u1]G和[u2]G来完成计算,则当针对u1和u2两者的给定索引的比特值都为1时,需要两点加法。这样的方案可以显著地使计算加速,例如将执行时间减少大致1.5的因子。方法900在框902中开始,其中ECC引擎122将基点G和公钥Q从仿射坐标转换成雅可比矩阵坐标。如上文陈述的,仿射坐标可以使用与在椭圆曲线方程上的点相对应的x和y值来描述点。将仿射坐标转换成雅可比矩阵坐标将这些点投影到不同的但是等价的坐标系统,这可以允许更有效的计算某些点运算。具体而言,仿射点x,y可以被转换成针对域中的任何点z的等价雅可比矩阵点xz2,yz3,z。ECC引擎122可以将点G和Q分别转换成任何适当的雅可比矩阵点,例如Gx、Gy、1或Qx、Qy、1。当然,应该理解的是,在一些实施例中,ECC引擎122可以在仿射坐标中或使用不同于转换到雅可比矩阵坐标的转换来执行方法900的计算。应该理解的是,诸如G、Q、T和R的点可以被实现为多于一个寄存器,例如用于仿射坐标的两个寄存器或用于雅可比矩阵坐标的三个寄存器。在框904中,ECC引擎122将变量t1设置为s-1模n。在框906中,ECC引擎122将变量t2设置成e模n。在框908中,ECC引擎122将变量u1设置成t2乘以t1模n。在框910中,ECC引擎122将变量u2设置成r乘以r1模n。在框912中,ECC引擎122将变量T设置成G和Q的点和。在框914中,ECC引擎122确定在u1和u2中较小数目的前导零并将该数目存储在变量j中。例如,如果u1具有3个前导零且u2具有2个前导零,则ECC引擎122将2存储在j中。在框916中,ECC引擎122将索引i设置成长度u1减j减1。在框918中,如果u1和u2的第i比特都为1,则方法900继续到框920,其中T的值被存储在变量R中。从框920,方法继续到图10中的框928,其中ECC引擎122使索引i递减1。返回参考框918,如果不是u1和u2的第i比特都为1的情况,则方法900继续到框922。在框922中,如果u1的第i比特为1且u2的第i比特为0,则方法900继续到框924,其中Q的值被存储在变量R中。从框924,方法继续到图10中的框928,其中ECC引擎122使索引i递减1。返回参考框922,如果不是u1的第i比特为1且u2的第i比特为0的情况,则方法900继续到框926。在框926中,G的值被存储在变量R中。在框928中,ECC引擎122使索引递减1。在框930中,如果索引i不大于或等于0,则方法900继续到框946,其中ECC引擎122将R从雅可比矩阵坐标转换到仿射坐标。如果索引i大于或等于0,则方法900继续到框932。在框932中,ECC引擎122将R的点双倍存储到R中。在框934中,如果u1的第i比特为0且u2的第i比特为1,则方法900继续到框936,其中ECC引擎122将R和Q的和存储回R中,并且然后循环回框928。返回参考框934,如果不是u1的第i比特为0且u2的第i比特为1的情况,则方法900继续到框938。在框938中,如果u1的第i比特为1且u2的第i比特为0,则方法900继续到框940,其中ECC引擎122将R和G的和存储回R中,并且然后循环回框928以使索引i递减1。返回参考框938,如果不是u1的第i比特为1且u2的第i比特为0的情况,则方法900继续到框942。在框942中,如果u1的第i比特为1且u2的第i比特为1,则方法900继续到框944,其中ECC引擎122将R和T的和存储回R中,并且然后循环回框928以使索引i递减1。返回参考框942,如果不是u1的第i比特为1且u2的第i比特为1的情况,则方法900循环回到框928。返回参考框930,如果索引i不大于或等于0,则方法900跳到框946。在框946,ECC引擎122将R从雅可比矩阵坐标转换成仿射坐标。由于仅使用R的仿射坐标的x坐标参见框948,因此ECC引擎122可以仅确定R的仿射坐标的x坐标。在框948中,将签名值r与R的x坐标模n进行比较。如果r等于Rx模n,则方法继续到框950,其中ECC引擎122输出签名有效的信号,例如通过向数据出去端口426、428中的一个或两个写入都为1的值。返回参考框948,如果r不等于Rx模n,则方法900继续到框952,其中ECC引擎122输出签名无效的信号,例如通过向数据出去端口426、428中的一个或两个写入都为0的值。应该理解的是,基于签名验证是否成功来改变若干比特的值可以防止某些攻击,例如可以改变单个比特的值的故障注入攻击。应该理解的是,在一些实施例中,方法500、600、700和或900可以被实现为存储在计算机可读介质上的各种指令,其可以由处理器120、ECC引擎122、IO子系统124和或计算设备100的其他组件执行,以使得计算设备100执行相应的方法500、600、700和或900。计算机可读介质可以被实现为能够由计算设备100读取的任何类型的介质,包括但不限于存储器126、数据存储设备128、固件设备和或其他介质。示例在下文提供了在本申请中公开的设备、系统、和方法的说明性示例。设备、系统和方法的实施例可以包括下文描述的示例中的一个或多个、以及其任何组合。示例1包括一种用于计算椭圆曲线数字签名的计算设备,所述计算设备包括椭圆曲线加密ECC引擎,其中,所述ECC引擎用于:从所述ECC引擎的数据端口读取针对椭圆曲线数字签名算法签名运算的多个参数中的每一个的参数值;从所述ECC引擎的指令端口读取操作码,其中,所述操作码指示所述椭圆曲线数字签名算法签名运算;响应于读取所述操作码而进入受保护模式,其中所述ECC引擎被配置为当在所述受保护模式下时忽略来自所述数据端口的输入;响应于读取所述操作码而执行所述椭圆曲线数字签名算法签名运算;响应于所述椭圆曲线数字签名算法签名运算的完成而退出所述受保护模式;以及响应于执行所述椭圆曲线数字签名算法签名运算而向所述ECC引擎的输出端口写入结果数据。示例2包括示例1的主题,并且其中,所述ECC引擎进一步用于从所述指令端口读取第二操作码,其中,所述第二操作码指示与所述椭圆曲线数字签名算法签名运算不同的加密运算;响应于读取所述第二操作码而在不进入所述受保护模式的情况下执行所述加密运算;以及响应于执行所述加密运算而向所述ECC引擎的所述输出端口写入第二结果数据。示例3包括示例1和示例2的主题,其中,执行所述加密运算包括执行素域算术运算。示例4包括示例1-3中的任意一个的主题,其中,执行所述素域算术运算包括执行素域取幂运算、素域乘运算、素域加运算或素域减运算。示例5包括示例1-4中的任意一个的主题,其中,执行所述加密运算包括执行椭圆曲线点运算。示例6包括示例1-5中的任意一个的主题,其中,执行椭圆曲线运算包括执行椭圆曲线标量乘运算、椭圆曲线点加运算或椭圆曲线减运算。示例7包括示例1-6中的任意一个的主题,其中执行所述椭圆曲线数字签名算法签名运算包括独立于所述多个参数的参数值而在固定的时间量中执行所述椭圆曲线数字签名算法签名运算。示例8包括示例1-7中的任意一个的主题,其中,所述多个参数中的一个参数是随机数,其中,执行所述椭圆曲线数字签名算法签名运算包括使用所述随机数将椭圆曲线上的点转换成雅可比矩阵坐标。示例9包括示例1-8中的任意一个的主题,其中,执行所述椭圆曲线数字签名算法签名运算包括使用所述随机数将椭圆曲线上的点转换成两个不同的雅可比矩阵坐标。示例10包括示例1-9中的任意一个的主题,其中,所述多个参数中的一个参数是第二随机数,其中,所述第二随机数具有一个或多个前导零,其中,执行所述椭圆曲线数字签名算法签名运算包括:针对所述第二随机数中位于所述一个或多个前导零之后的第一个比特之后的每一个比特,执行椭圆曲线点加运算和椭圆曲线点双倍运算;以及针对所述一个或多个前导零中的每一个前导零,执行虚椭圆曲线点加运算和虚椭圆曲线点双倍运算,其中,所述虚椭圆曲线点加运算和所述虚椭圆曲线点双倍运算对所述结果数据没有影响。示例11包括示例1-10中的任意一个的主题,其中,所述ECC引擎进一步用于:从所述指令端口读取第二操作码,其中,所述第二操作码指示椭圆曲线数字签名算法验证运算;响应于读取所述第二操作码,在不进入所述受保护模式的情况下执行所述椭圆曲线数字签名算法验证运算,其中,执行所述椭圆曲线数字签名算法验证运算包括:确定第一中间值u1;确定第二中间值u2;确定u1和u2的前导零的较小数目;针对u1在所述前导零的较小数目之后的第一比特之后的每一个索引位置,执行一个或多个椭圆曲线运算,其中,针对u1在所述前导零的较小数目之后的第一比特之后的每一个索引位置执行一个或多个椭圆曲线运算包括:当u1的索引位置的比特值为0且u2的索引位置的比特值为0时,执行点双倍运算;当u1的索引位置的比特值为1且u2的索引位置的比特值为0时,执行点双倍运算和点加运算;当u1的索引位置的比特值为0且u2的索引位置的比特值为1时,执行点双倍运算和点加运算;并且当u1的索引位置的比特值为1且u2的索引位置的比特值为1时,执行点双倍运算和仅一个点加运算;以及响应于所述椭圆曲线数字签名算法验证运算的执行,向所述ECC引擎的所述输出端口写入第二结果数据。示例12包括示例1-11中的任意一个的主题,其中,写入所述第二结果数据包括向所述输出端口写入多个冗余比特值。示例13包括一种用于计算椭圆曲线数字签名的方法,所述方法包括:由计算设备的椭圆曲线加密ECC引擎从所述ECC引擎的数据端口读取针对椭圆曲线数字签名算法签名运算的多个参数中的每一个的参数值;由所述ECC引擎从所述ECC引擎的指令端口读取操作码,其中,所述操作码指示所述椭圆曲线数字签名算法签名运算;由所述ECC引擎响应于读取所述操作码而进入受保护模式,其中,所述ECC引擎被配置成当处于所述受保护模式下时,忽略来自所述数据端口的输入;由所述ECC引擎响应于读取所述操作码而执行所述椭圆曲线数字签名算法签名运算;由所述ECC引擎响应于所述椭圆曲线数字签名算法签名运算的完成而退出所述受保护模式;以及由所述ECC引擎响应于执行所述椭圆曲线数字签名算法签名运算而向所述ECC引擎的输出端口写入结果数据。示例14包括示例13的主题,其中,进一步包括;由所述ECC引擎从所述指令端口读取第二操作码,其中,所述第二操作码指示与所述椭圆曲线数字签名算法签名运算不同的加密运算;由所述ECC引擎响应于读取所述第二操作码而在不进入所述受保护模式的情况下执行所述加密运算;以及由所述ECC引擎响应于执行所述加密运算而向所述ECC引擎的所述输出端口写入第二结果数据。示例15包括示例13-14中的任意一个的主题,其中,执行所述加密运算包括执行素域算术运算。示例16包括示例13-15中的任意一个的主题,其中,执行所述素域算术运算包括执行素域取幂运算、素域乘运算、素域加运算或素域减运算。示例17包括示例13-16中的任意一个的主题,其中,执行所述加密运算包括执行椭圆曲线点运算。示例18包括示例13-17中的任意一个的主题,其中,执行椭圆曲线运算包括执行椭圆曲线标量乘运算、椭圆曲线点加运算或椭圆曲线减运算。示例19包括示例13-18中的任意一个的主题,其中,执行所述椭圆曲线数字签名算法签名运算包括独立于所述多个参数的参数值而在固定的时间量中执行所述椭圆曲线数字签名算法签名运算。示例20包括示例13-19中的任意一个的主题,其中,所述多个参数中的一个参数是随机数,其中,执行所述椭圆曲线数字签名算法签名运算包括使用所述随机数将椭圆曲线上的点转换成雅可比矩阵坐标。示例21包括示例13-20中的任意一个的主题,其中,执行所述椭圆曲线数字签名算法签名运算包括使用所述随机数将椭圆曲线上的点转换成两个不同的雅可比矩阵坐标。示例22包括示例13-21中的任意一个的主题,其中,所述多个参数中的一个参数是第二随机数,其中,所述第二随机数具有一个或多个前导零,其中,执行所述椭圆曲线数字签名算法签名运算包括:针对所述第二随机数中位于所述一个或多个前导零之后的第一个比特之后的每一个比特,执行椭圆曲线点加运算和椭圆曲线点双倍运算;以及针对所述一个或多个前导零中的每一个前导零,执行虚椭圆曲线点加运算和虚椭圆曲线点双倍运算,其中,所述虚椭圆曲线点加运算和所述虚椭圆曲线点双倍运算对所述结果数据没有影响。示例23包括示例13-22中的任意一个的主题,进一步包括:由所述ECC引擎从所述指令端口读取第二操作码,其中,所述第二操作码指示椭圆曲线数字签名算法验证运算;由所述ECC引擎响应于读取所述第二操作码而在不进入所述受保护模式的情况下执行所述椭圆曲线数字签名算法验证运算,其中,执行所述椭圆曲线数字签名算法验证运算包括:确定第一中间值u1;确定第二中间值u2;确定u1和u2的前导零的较小数目;针对u1在所述前导零的较小数目之后的第一比特之后的每一个索引位置执行一个或多个椭圆曲线运算,其中,针对u1在所述前导零的较小数目之后的第一比特之后的每一个索引位置执行一个或多个椭圆曲线运算包括:当u1的索引位置的比特值为0且u2的索引位置的比特值为0时,执行点双倍运算;当u1的索引位置的比特值为1且u2的索引位置的比特值为0时,执行点双倍运算和点加运算;当u1的索引位置的比特值为0且u2的索引位置的比特值为1时,执行点双倍运算和点加运算;以及当u1的索引位置的比特值为1且u2的索引位置的比特值为1时,执行点双倍运算和仅一个点加运算;以及由所述ECC引擎响应于执行所述椭圆曲线数字签名算法验证运算而向所述ECC引擎的所述输出端口写入第二结果数据。示例24包括示例13-23中的任意一个的主题,其中,写入所述第二结果数据包括向所述输出端口写入多个冗余比特值。示例25包括一种或多种计算机可读介质,包括存储在其上的多个指令,所述指令在被执行时使得ECC设备执行示例13-24中的任意一个的方法。示例26包括一种用于计算椭圆曲线数字签名的计算设备,所述计算设备包括椭圆曲线加密ECC引擎,其中,所述ECC引擎包括:用于从所述ECC引擎的数据端口读取针对椭圆曲线数字签名算法签名运算的多个参数中的每一个的参数值的单元;用于从所述ECC引擎的指令端口读取操作码的单元,其中,所述操作码指示所述椭圆曲线数字签名算法签名运算;用于响应于读取所述操作码而进入受保护模式的单元,其中,所述ECC引擎被配置成当在所述受保护模式下时忽略来自所述数据端口的输入;用于响应于读取所述操作码而执行所述椭圆曲线数字签名算法签名运算的单元;用于响应于所述椭圆曲线数字签名算法签名运算的完成而退出所述受保护模式的单元;以及用于响应于执行所述椭圆曲线数字签名算法签名运算而向所述ECC引擎的输出端口写入结果数据的单元。示例27包括示例26的主题,其中,所述ECC引擎进一步包括用于从所述指令端口读取第二操作码的单元,其中,所述第二操作码指示与所述椭圆曲线数字签名算法签名运算不同的加密运算;用于响应于读取所述第二操作码而在不进入所述受保护模式的情况下执行所述加密运算的单元;以及用于响应于执行所述加密运算而将第二结果数据吸入所述ECC引擎的所述输出端口的单元。示例28包括示例26和27的主题,其中,用于执行所述加密运算的单元包括用于执行素域算术运算的单元。示例29包括示例26-28中的任意一个的主题,其中,用于执行所述素域算术运算的单元包括用于执行素域取幂运算、素域乘运算、素域加运算或素域减运算的单元。示例30包括示例26-29中的任意一个的主题,其中,用于执行所述加密运算的单元包括用于执行椭圆曲线点运算的单元。示例31包括示例26-30中的任意一个的主题,其中,用于执行椭圆曲线运算的单元包括用于执行椭圆曲线标量乘运算、椭圆曲线点加运算或椭圆曲线减运算的单元。示例32包括示例26-31中的任意一个的主题,其中,用于执行所述椭圆曲线数字签名算法签名运算的单元包括用于独立于所述多个参数的参数值而在固定的时间量中执行所述椭圆曲线数字签名算法签名运算的单元。示例33包括示例26-32中的任意一个的主题,其中,所述多个参数中的一个参数是随机数,其中,用于执行所述椭圆曲线数字签名算法签名运算的单元包括用于使用所述随机数将椭圆曲线上的点转换成雅可比矩阵坐标的单元。示例34包括示例26-33中的任意一个的主题,其中,用于执行所述椭圆曲线数字签名算法签名运算的单元包括用于使用所述随机数将椭圆曲线上的点转换成两个不同的雅可比矩阵坐标的单元。示例35包括示例26-34中的任意一个的主题,其中,所述多个参数中的一个参数是第二随机数,其中,所述第二随机数具有一个或多个前导零,其中,用于执行所述椭圆曲线数字签名算法签名运算的单元包括:用于针对所述第二随机数中位于所述一个或多个前导零之后的第一个比特之后的每一个比特,执行椭圆曲线点加运算和椭圆曲线点双倍运算的单元;以及用于针对所述一个或多个前导零中的每一个前导零,执行虚椭圆曲线点加运算和虚椭圆曲线点双倍运算的单元,其中,所述虚椭圆曲线点加运算和所述虚椭圆曲线点双倍运算对所述结果数据没有影响。示例36包括示例26-35中的任意一个的主题,其中,所述ECC引擎进一步包括:用于从所述指令端口读取第二操作码的单元,其中,所述第二操作码指示椭圆曲线数字签名算法验证运算;用于响应于读取所述第二操作码而在不进入所述受保护模式的情况下执行所述椭圆曲线数字签名算法验证运算的单元,其中,用于执行所述椭圆曲线数字签名算法验证运算的单元包括:用于确定第一中间值u1的单元;用于确定第二中间值u2的单元;用于确定u1和u2的前导零的较小数目的单元;用于针对u1在所述前导零的较小数目之后的第一比特之后的每一个索引位置执行一个或多个椭圆曲线运算的单元,其中,用于针对u1在所述前导零的较小数目之后的第一比特之后的每一个索引位置执行一个或多个椭圆曲线运算的单元包括:用于当u1的索引位置的比特值为0且u2的索引位置的比特值为0时执行点双倍运算的单元;用于当u1的索引位置的比特值为1且u2的索引位置的比特值为0时执行点双倍运算和点加运算的单元;用于当u1的索引位置的比特值为0且u2的索引位置的比特值为1时执行点双倍运算和点加运算的单元;以及用于当u1的索引位置的比特值为1且u2的索引位置的比特值为1时执行点双倍运算和仅一个点加运算的单元;以及用于由所述ECC引擎响应于执行所述椭圆曲线数字签名算法验证运算而向所述ECC引擎的所述输出端口写入第二结果数据的单元。示例37包括示例26-36中的任意一个的主题,其中,用于写入所述第二结果数据的单元包括用于向所述输出端口写入多个冗余比特值的单元。

权利要求:1.一种用于计算椭圆曲线数字签名的计算设备,所述计算设备包括:椭圆曲线加密ECC引擎,其中,所述ECC引擎用于:从所述ECC引擎的数据端口读取针对椭圆曲线数字签名算法签名运算的多个参数中的每一个的参数值;从所述ECC引擎的指令端口读取操作码,其中,所述操作码指示所述椭圆曲线数字签名算法签名运算;响应于读取所述操作码而进入受保护模式,其中所述ECC引擎被配置为当在所述受保护模式下时忽略来自所述数据端口的输入;响应于读取所述操作码而执行所述椭圆曲线数字签名算法签名运算;响应于所述椭圆曲线数字签名算法签名运算的完成而退出所述受保护模式;以及响应于执行所述椭圆曲线数字签名算法签名运算而向所述ECC引擎的输出端口写入结果数据。2.根据权利要求1所述的计算设备,其中,所述ECC引擎进一步用于:从所述指令端口读取第二操作码,其中,所述第二操作码指示与所述椭圆曲线数字签名算法签名运算不同的加密运算;响应于读取所述第二操作码而在不进入所述受保护模式的情况下执行所述加密运算;以及响应于执行所述加密运算而向所述ECC引擎的所述输出端口写入第二结果数据。3.根据权利要求2所述的计算设备,其中,执行所述加密运算包括执行素域算术运算。4.根据权利要求2所述的计算设备,其中,执行所述加密运算包括执行椭圆曲线点运算。5.根据权利要求4所述的计算设备,其中,执行椭圆曲线运算包括执行椭圆曲线标量乘运算、椭圆曲线点加运算或椭圆曲线减运算。6.根据权利要求1所述的计算设备,其中,执行所述椭圆曲线数字签名算法签名运算包括:独立于所述多个参数的参数值而在固定的时间量中执行所述椭圆曲线数字签名算法签名运算。7.根据权利要求6所述的计算设备,其中,所述多个参数中的一个参数是随机数,其中,执行所述椭圆曲线数字签名算法签名运算包括:使用所述随机数将椭圆曲线上的点转换成雅可比矩阵坐标。8.根据权利要求7所述的计算设备,其中,执行所述椭圆曲线数字签名算法签名运算包括:使用所述随机数将椭圆曲线上的点转换成两个不同的雅可比矩阵坐标。9.根据权利要求8所述的计算设备,其中,所述多个参数中的一个参数是第二随机数,其中,所述第二随机数具有一个或多个前导零,其中,执行所述椭圆曲线数字签名算法签名运算包括:针对所述第二随机数中位于所述一个或多个前导零之后的第一个比特之后的每一个比特,执行椭圆曲线点加运算和椭圆曲线点双倍运算;以及针对所述一个或多个前导零中的每一个前导零,执行虚椭圆曲线点加运算和虚椭圆曲线点双倍运算,其中,所述虚椭圆曲线点加运算和所述虚椭圆曲线点双倍运算对所述结果数据没有影响。10.根据权利要求1所述的计算设备,其中,所述ECC引擎进一步用于:从所述指令端口读取第二操作码,其中,所述第二操作码指示椭圆曲线数字签名算法验证运算;响应于读取所述第二操作码,在不进入所述受保护模式的情况下执行所述椭圆曲线数字签名算法验证运算,其中,执行所述椭圆曲线数字签名算法验证运算包括:确定第一中间值u1;确定第二中间值u2;确定u1和u2的前导零的较小数目;针对u1在所述前导零的较小数目之后的第一比特之后的每一个索引位置,执行一个或多个椭圆曲线运算,其中,针对u1在所述前导零的较小数目之后的第一比特之后的每一个索引位置执行一个或多个椭圆曲线运算包括:当u1的索引位置的比特值为0且u2的索引位置的比特值为0时,执行点双倍运算;当u1的索引位置的比特值为1且u2的索引位置的比特值为0时,执行点双倍运算和点加运算;当u1的索引位置的比特值为0且u2的索引位置的比特值为1时,执行点双倍运算和点加运算;并且当u1的索引位置的比特值为1且u2的索引位置的比特值为1时,执行点双倍运算和仅一个点加运算;以及响应于所述椭圆曲线数字签名算法验证运算的执行,向所述ECC引擎的所述输出端口写入第二结果数据。11.根据权利要求10所述的计算设备,其中,写入所述第二结果数据包括向所述输出端口写入多个冗余比特值。12.一种用于计算椭圆曲线数字签名的方法,所述方法包括:由计算设备的椭圆曲线加密ECC引擎从所述ECC引擎的数据端口读取针对椭圆曲线数字签名算法签名运算的多个参数中的每一个的参数值;由所述ECC引擎从所述ECC引擎的指令端口读取操作码,其中,所述操作码指示所述椭圆曲线数字签名算法签名运算;由所述ECC引擎响应于读取所述操作码而进入受保护模式,其中,所述ECC引擎被配置成当处于所述受保护模式下时,忽略来自所述数据端口的输入;由所述ECC引擎响应于读取所述操作码而执行所述椭圆曲线数字签名算法签名运算;由所述ECC引擎响应于所述椭圆曲线数字签名算法签名运算的完成而退出所述受保护模式;以及由所述ECC引擎响应于执行所述椭圆曲线数字签名算法签名运算而向所述ECC引擎的输出端口写入结果数据。13.根据权利要求12所述的方法,进一步包括:由所述ECC引擎从所述指令端口读取第二操作码,其中,所述第二操作码指示与所述椭圆曲线数字签名算法签名运算不同的加密运算;由所述ECC引擎响应于读取所述第二操作码而在不进入所述受保护模式的情况下执行所述加密运算;以及由所述ECC引擎响应于执行所述加密运算而向所述ECC引擎的所述输出端口写入第二结果数据。14.根据权利要求13所述的方法,其中,执行所述加密运算包括执行素域算术运算。15.根据权利要求13所述的方法,其中,执行所述加密运算包括执行椭圆曲线点运算。16.根据权利要求15所述的方法,其中,执行椭圆曲线运算包括执行椭圆曲线标量乘运算、椭圆曲线点加运算或椭圆曲线减运算。17.根据权利要求12所述的方法,其中,执行所述椭圆曲线数字签名算法签名运算包括:独立于所述多个参数的参数值而在固定的时间量中执行所述椭圆曲线数字签名算法签名运算。18.根据权利要求17所述的方法,其中,所述多个参数中的一个参数是随机数,其中,执行所述椭圆曲线数字签名算法签名运算包括:使用所述随机数将椭圆曲线上的点转换成雅可比矩阵坐标。19.根据权利要求18所述的方法,其中,执行所述椭圆曲线数字签名算法签名运算包括:使用所述随机数将椭圆曲线上的点转换成两个不同的雅可比矩阵坐标。20.根据权利要求19所述的方法,其中,所述多个参数中的一个参数是第二随机数,其中,所述第二随机数具有一个或多个前导零,其中,执行所述椭圆曲线数字签名算法签名运算包括:针对所述第二随机数中位于所述一个或多个前导零之后的第一个比特之后的每一个比特,执行椭圆曲线点加运算和椭圆曲线点双倍运算;以及针对所述一个或多个前导零中的每一个前导零,执行虚椭圆曲线点加运算和虚椭圆曲线点双倍运算,其中,所述虚椭圆曲线点加运算和所述虚椭圆曲线点双倍运算对所述结果数据没有影响。21.根据权利要求12所述的方法,进一步包括:由所述ECC引擎从所述指令端口读取第二操作码,其中,所述第二操作码指示椭圆曲线数字签名算法验证运算;由所述ECC引擎响应于读取所述第二操作码而在不进入所述受保护模式的情况下执行所述椭圆曲线数字签名算法验证运算,其中,执行所述椭圆曲线数字签名算法验证运算包括:确定第一中间值u1;确定第二中间值u2;确定u1和u2的前导零的较小数目;针对u1在所述前导零的较小数目之后的第一比特之后的每一个索引位置执行一个或多个椭圆曲线运算,其中,针对u1在所述前导零的较小数目之后的第一比特之后的每一个索引位置执行一个或多个椭圆曲线运算包括:当u1的索引位置的比特值为0且u2的索引位置的比特值为0时,执行点双倍运算;当u1的索引位置的比特值为1且u2的索引位置的比特值为0时,执行点双倍运算和点加运算;当u1的索引位置的比特值为0且u2的索引位置的比特值为1时,执行点双倍运算和点加运算;以及当u1的索引位置的比特值为1且u2的索引位置的比特值为1时,执行点双倍运算和仅一个点加运算;以及由所述ECC引擎响应于执行所述椭圆曲线数字签名算法验证运算而向所述ECC引擎的所述输出端口写入第二结果数据。22.根据权利要求21所述的方法,其中,写入所述第二结果数据包括向所述输出端口写入多个冗余比特值。23.一种用于计算椭圆曲线数字签名的计算设备,所述计算设备包括椭圆曲线加密ECC引擎,其中,所述ECC引擎包括:用于从所述ECC引擎的数据端口读取针对椭圆曲线数字签名算法签名运算的多个参数中的每一个的参数值的单元;用于从所述ECC引擎的指令端口读取操作码的单元,其中,所述操作码指示所述椭圆曲线数字签名算法签名运算;用于响应于读取所述操作码而进入受保护模式的单元,其中,所述ECC引擎被配置成当在所述受保护模式下时忽略来自所述数据端口的输入;用于响应于读取所述操作码而执行所述椭圆曲线数字签名算法签名运算的单元;用于响应于所述椭圆曲线数字签名算法签名运算的完成而退出所述受保护模式的单元;以及用于响应于执行所述椭圆曲线数字签名算法签名运算而向所述ECC引擎的输出端口写入结果数据的单元。24.根据权利要求23所述的计算设备,其中,用于执行所述椭圆曲线数字签名算法签名运算的单元包括:用于独立于所述多个参数的参数值而在固定的时间量中执行所述椭圆曲线数字签名算法签名运算的单元。25.根据权利要求23所述的计算设备,其中,所述ECC引擎进一步包括:用于从所述指令端口读取第二操作码的单元,其中,所述第二操作码指示椭圆曲线数字签名算法验证运算;用于响应于读取所述第二操作码而在不进入所述受保护模式的情况下执行所述椭圆曲线数字签名算法验证运算的单元,其中,用于执行所述椭圆曲线数字签名算法验证运算的单元包括:用于确定第一中间值u1的单元;用于确定第二中间值u2的单元;用于确定u1和u2的前导零的较小数目的单元;用于针对u1在所述前导零的较小数目之后的第一比特之后的每一个索引位置执行一个或多个椭圆曲线运算的单元,其中,用于针对u1在所述前导零的较小数目之后的第一比特之后的每一个索引位置执行一个或多个椭圆曲线运算的单元包括:用于当u1的索引位置的比特值为0且u2的索引位置的比特值为0时,执行点双倍运算的单元;用于当u1的索引位置的比特值为1且u2的索引位置的比特值为0时,执行点双倍运算和点加运算的单元;用于当u1的索引位置的比特值为0且u2的索引位置的比特值为1时,执行点双倍运算和点加运算的单元;以及用于当u1的索引位置的比特值为1且u2的索引位置的比特值为1时,执行点双倍运算和仅一个点加运算的单元;以及用于由所述ECC引擎响应于执行所述椭圆曲线数字签名算法验证运算而向所述ECC引擎的所述输出端口写入第二结果数据的单元。

百度查询: 英特尔公司 用于稳健计算椭圆曲线数字签名的技术

免责声明
1、本报告根据公开、合法渠道获得相关数据和信息,力求客观、公正,但并不保证数据的最终完整性和准确性。
2、报告中的分析和结论仅反映本公司于发布本报告当日的职业理解,仅供参考使用,不能作为本公司承担任何法律责任的依据或者凭证。