一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

用于密码运算的协处理器的制作方法

2022-04-02 08:59:58 来源:中国专利 TAG:


1.本发明涉及密码硬件,特别是用于执行密码运算的协处理器。协处理器可以用作密码片上系统的一部分。还描述了执行密码运算的方法。


背景技术:

2.最近,连接到计算机网络的设备的数量激增。例如,互联网连接正在从诸如台式和膝上型计算机的计算设备扩展到诸如机动车辆、灯泡、冰箱、医疗设备、恒温器和监控系统的日常物品内的嵌入式系统。电信链路允许许多低成本计算设备在世界范围内报告传感器数据和/或受控制。这些所连接设备的一个问题在于,它们通常容易受到攻击和恶意控制。例如,成百上千的嵌入式设备可能会受到恶意方的攻击,并被用于实施分布式拒绝服务攻击。在许多情况下,由于密码协议的实现不良或有限,很容易获得对这些设备的控制。随着这些所连接设备的数量和流行度的增长,如何保护它们是一个悬而未决的问题。
3.保护所连接计算设备时的另一考虑因素是未来使用量子计算进行攻击的可能性。多年来,主要在理论方面关注量子计算机。然而,量子计算机的研究实现正在迅速发展。当前可用的是具有50和72个量子位的量子计算机,并且有许多研究小组正在积极研究更高量子位的机器。鉴于量子计算未来可能的现实,最近的工作表明,许多众所周知的公钥密码系统可被足够强大的量子计算机破解。
4.在实现密码函数尤其是那些“后量子”安全的密码函数时,存在这些函数中许多是资源密集型的挑战。例如,许多密码函数涉及使用长位长度值的复杂数学函数。这些函数通常会消耗大量处理器周期,并且在低资源嵌入式设备内的实现存在困难。另外,随着数据和通信两者的端到端加密变得普遍,这些密码函数也必须以高速重复执行。要安全就是要慢。
5.us 2008/0019524 al描述了一种用于嵌入式系统的低功率aes密码电路的装置。所述装置包括:接口电路,所述接口电路用于输入和输出数据以及与通用处理器协作的控制命令;代码处理单元,所述代码处理单元用于按添加回合密钥运算、字节替换密钥运算、移位行运算和混合列运算的运算次序来执行回合运算;数据存储器,所述数据存储器用于存储通过接口电路输入的数据和在代码处理单元处处理的运算结果;数据选择单元,所述数据选择单元用于选择往返于代码处理单元和存储单元的数据输入/输出;以及控制单元,所述控制单元用于控制代码处理单元、存储单元和数据选择单元,使得对从接口电路输入的数据重复地执行设定回合的回合运算,并且在最后一个回合期间对移位行运算结果值和秘密密钥执行添加回合密钥运算。
6.期望提供密码运算的有效实现方式。例如,期望提供可在低资源嵌入式系统内和/或在高速数据处理运算中使用,同时在后量子环境中提供抵抗攻击的能力的实现方式。


技术实现要素:

7.本发明的各方面在所附独立权利要求中陈述。然后本发明的某些变型在随附从属权利要求中陈述。
附图说明
8.现将参考附图仅以举例的方式来描述本发明的实例,在附图中:
9.图1是示出根据一个实例的用于密码运算的协处理器的示意图;
10.图2是示出根据一个实例的密码片上系统的示意图;
11.图3是示出根据一个实例的耦接到计算设备内的系统总线的用于密码运算的协处理器的示意图;
12.图4是示出根据一个实例的算术引擎的运算的示意图;
13.图5a是示出根据一个实例的多维数据阵列的示意图;
14.图5b是示出根据一个实例的算术单元可如何迭代地应用于一组多维数据阵列的示意图;
15.图6是示出根据一个实例的源数据可如何在输入时移位的示意图;
16.图7是示出根据一个实例的主处理单元和辅助处理单元可如何通过系统总线访问数据的示意图;
17.图8是示出一组示例性控制寄存器的表格;
18.图9是示出根据一个实例的执行密码运算的方法的流程图;并且
19.图10是用于与示例性布尔运算一起使用的表格。
具体实施方式
20.本文所述的某些实例涉及一种允许处理单元高效地执行密码运算的协处理器。协处理器具有算术单元,所述算术单元被配置为使用从存储器加载的位序列来执行离散二进制算术。这些位序列可以是位块,并且因此协处理器可称为一种形式的“位块传送器”,即用于移动和操纵存储器中的位块的硬件辅助系统(其中术语“位块传送器”来自施乐奥拓计算机的“bitblt”(位块传送)微代码指令)。协处理器可被配置用于某些函数的快速低功率计算,所述函数包括用于密码运算的低级构建块。这些函数可包括布尔逻辑和/或整数算术。这样,处理单元可有效地将用于密码运算的资源密集型计算卸载到协处理器,所述协处理器作为专用且安全的硬件设备进行操作。协处理器可提供从处理单元的角度来看是原子级的低级位运算。因此,协处理器可允许快速地计算许多高级密码运算,包括“后量子”安全的那些运算。
21.在本文所述的某些实例中,协处理器可用于从互联网服务器到嵌入式设备的广泛多种计算系统中。在一种实现方式中,协处理器可提供为较广泛密码片上系统(soc)的一部分,它可允许许多低成本嵌入式设备实现“后量子”密码学并提供“后量子”安全系统。例如,由协处理器的算术引擎实现的函数可允许例如通过卸载诸如整数加法、减法和乘法的许多常见低级二进制逻辑函数来快速地执行基于代码或格的密码运算。协处理器可被配置或预编程有一组可用函数,所述可用函数可由处理单元通过协处理器的控制寄存器中的函数标志或变量来选择。协处理器可能够通过避免加载和解释处理单元所需的不同指令来更快速地计算某些函数。例如,所述一组可用函数可在可编程微电路系统中硬配置并且被配置为访问源寄存器和目的地寄存器布置中的数据,其中数据是基于由地址生成器针对算术引擎的每次迭代生成的存储器地址提取和存储的。当与嵌入式和资源有限的目标一起使用时,密码处理器可能特别有益。
22.图1示出密码协处理器110的实例100。在图1中,密码协处理器110包括一组控制寄存器115、控制逻辑120、算术引擎125和地址生成器130。密码协处理器110可使用编程的现场可编程门阵列(fpga)或专用集成电路(asic)来实现。密码协处理器110的部件可使用硬件描述语言(hdl)来配置。在某些情况下,密码协处理器110的不同部件可使用专用逻辑电路系统、asic、fpga和固件指令中的一者或多者来实现。在一种情况下,密码协处理器110的功能性可通过微代码和固件更新中的一者或多者来提供。在这种情况下,可能需要对微代码进行认证来确保安全。
23.密码协处理器110被设计用于与外部或主处理单元一起使用。这在图2的实例200中示出,其中密码协处理器110通过系统总线230通信地耦接到中央处理单元(cpu)220。系统总线230可包括数据总线和地址总线中的一者或多者。图2的实例200示出形成密码片上系统240的一部分的密码协处理器110和中央处理单元220。这可嵌入到从智能卡到服务器主板的一系列设备中。替代地,密码协处理器110可形成用于诸如服务器、膝上型电脑、平板电脑或智能手机的计算设备的主板的一部分。cpu可包括具有一个或多个处理核心的微处理器。cpu可包括精简指令集计算机(risc)处理器,诸如risc-v处理器。
24.在一个实例中,密码协处理器110和密码片上系统240中的一者或多者可作为离散单元提供(例如,封装)。例如,离散单元可以是自含式安全微控制器(例如,供应为智能卡、通用串行总线(usb)设备和/或射频标识(rfid)设备)、辅助密码模块或加速器、密码可信平台模块(tpm)或硬件安全模块(hsm)。在某些实例中,密码协处理器110和cpu 220可位于电路板上同一位置。因此,密码协处理器110和密码片上系统240中的一者或多者可提供为单个芯片,所述芯片容易添加到另外的计算板以用于广泛多种计算设备。
25.返回图1,控制寄存器115是外部处理单元(例如,cpu 220)能够访问的。外部处理单元能够将数据写入控制寄存器115以控制密码协处理器110的运算。控制寄存器115可以是存储器映射的,使得它们对外部处理单元表现为存储器的可寻址部分。替代地,所述控制寄存器可形成外部处理单元的命名为单指令多数据(simd)或向量寄存器集的一部分。在诸如risc-v的risc指令集架构(isa)中,控制寄存器115可被实现为一个或多个控制和状态寄存器(csr)和/或一个或多个向量扩展,例如,在后一种情况下,控制寄存器可视为一个或多个向量寄存器。所述一组控制寄存器可用于在密码协处理器110与外部处理单元之间交换数据和控制信息。控制寄存器115可用于存储以下中的一者或多者:状态(例如,忙碌或等待指令)、要执行的函数、源和/或目的地数据的大小、源和/或目的地数据的存储器位置、用于地址和数据阵列中的一者或多者的移位参数、增量参数,和/或示出当前函数是否完成的指示符。外部处理单元可被配置为读取存储在控制寄存器115内的值以确定函数的输出是否可用,可从密码协处理器接收中断,和/或可等待与函数相关联的预定数量的时钟周期。可根据实施要求使用不同方法。
26.在图1的实例中,控制逻辑120读取由外部处理单元写入控制寄存器115的值并且基于这些值控制算术引擎125和地址生成器130的运算。所述一组控制寄存器115中的一个可被配置为存储对要使用算术引擎125执行的函数的指示。函数可从一组可用函数选择,其中所述一组可用函数可以是预先配置的(例如,预先编程到asic或fpga中,或者配置在asic或fpga内)。所述一组可用函数被配置为操纵从数据源(下文称为“源”)读取的一个或多个位序列并且将操纵结果作为目的地数据(下文称为“目的地”)存储。例如,所述一组可用函
数可包括被诸如基于格或代码的密码方法的后量子密码方法频繁使用的特定整数算术函数。整数算术函数可包括乘法运算、加法运算和减法运算,对一个或多个被视为表示整数值(例如8、16或32位整数)的位序列执行所述运算。在执行布尔运算的情况下,位序列可表示整数值,但可被视为独立位的序列(例如,对于位逻辑而言)。可支持不同的位长度值。算术引擎125可由控制逻辑120控制以执行控制寄存器115中所指示的函数。可对存储在一组(例如,多个)源寄存器内的二进制数据执行所指示函数,并且函数的输出可存储在至少一个目的地寄存器中。所述一组源寄存器可视为函数的上述“源”,并且至少一个目的地寄存器可视为函数的输出的上文定义的“目的地”。源寄存器和目的地寄存器可形成算术引擎125的一部分和/或可包括密码协处理器110的内部存储器内的特定位置。
27.在一种情况下,控制逻辑120可包括可用于存储从所述一组控制寄存器读取的值的一个或多个另外的寄存器。例如,如果所述一组控制寄存器115被存储器映射到外部处理单元的地址空间,则可使用一组次控制寄存器来加快运算。外部处理单元可能无法访问该组次控制寄存器;而是由密码协处理器110在内部使用。在这种情况下,当新运算开始时,可将所述一组控制寄存器115中的一个或多个值复制到所述一组次控制寄存器。这可避免需要针对每个运算重新初始化所述一组控制寄存器115。所述一组次控制寄存器可用于存储一组“运行地址”。例如,如果运算正在将小数据块复制到多个目的地地址,则仅目的地地址参数需要更新,并且运算可针对每组所更新目的地地址参数单独地开始。
28.实际上,控制逻辑120可包括(系统)总线控制和芯片选择逻辑,以及用于重置密码协处理器110的信令。在某些实现方式中,控制逻辑还可包括用于为外部处理单元生成一个或多个中断的逻辑。控制寄存器115和控制逻辑120的一个函数可以提供密码协处理器110的内部逻辑与主系统总线和外部处理单元之间的接口。
29.地址生成器130适于确定用于将来自存储器的二进制数据加载到所述一组源寄存器中的一组源地址和用于将来自至少一个目的地寄存器的二进制数据存储在存储器中的至少一个目的地地址。存储器可包括密码协处理器110的内部存储器或通信地耦接的外部存储器。地址生成器130可基于存储在控制寄存器115中的值确定源地址和目的地地址。这些值可包括起始地址和指示如何在存储器中导航的参数。在下文稍后更详细地解释的一个实例中,密码协处理器110可被配置为对存储器内的数据的多维表示进行运算,并且将函数的结果作为类似的多维表示保存在存储器中。例如,从起始地址开始的存储器位置的序列可视为如由控制寄存器115内的值限定的高度和宽度的扁平矩阵。在一种情况下,如果算术引擎125应用不对所有可用源起作用的函数,则源地址可仅针对可用源的子集确定。例如,地址生成器130可包括用于每个可用源的独立逻辑,并且在这种情况下,仅与一组已使用源相关联的逻辑可被激活来确定一组源地址,
30.图3示出使用密码协处理器310的计算设备300的另一实例。计算设备300可形成独立计算设备或者可包括如图2所示的片上系统实现方式。密码协处理器310以与图1的实例100类似的方式配置。密码协处理器310包括一组控制寄存器315、控制逻辑320、地址生成器325和算术单元330。在图3的实例300中,密码协处理器还包括内部存储器335。控制寄存器315和内部存储器335两者耦接到计算设备300的系统总线340。图3仅作为实例提供,并且应注意,不同实现方式可包括与所示出的那些不同的部件或部件的组合。
31.除了密码协处理器310,计算设备300还包括cpu 350、随机存取存储器(ram)355、
电可擦除可编程只读存储器(eeprom)360、一个或多个输入/输出接口365、随机数生成器370和可能的其他密码模块375。cpu 350可包括risc处理器。eeprom 360可被实现为任何可编程存储器,并且可被配置为存储用于计算设备300的操作计算机程序代码,例如可包括存储用于嵌入式设备或片上系统的固件的闪存存储器。ram 355可包括用于cpu 350的主存储器。除其他事项外,一个或多个输入/输出接口365还可包括网络和通信接口以及外围接口。随机数生成器370和其他密码模块375可分别包括特定微电路系统以生成真正随机数并执行定义的密码算法(例如sha-3、aes等)。这些可以与密码协处理器310类似的方式实现,例如作为特定芯片、经编程fpga或asic。计算设备300的部件可通过系统总线340和/或有线电气耦接件交换数据。
32.在图3的实例300中,密码协处理器310的控制寄存器315和内部存储器335是cpu 350能够访问的。例如,控制寄存器315和内部存储器335可被配置为cpu 350的存储器映射资源。在这种情况下,cpu 350可以与ram 355和/或eeprom 360类似的方式读取数据和将数据写入到控制寄存器315和内部存储器335。在一种情况下,所述一组控制寄存器315和内部存储器335可映射到cpu 350的安全地址空间,例如非根、非管理或用户进程不可访问的地址空间。这可有助于保护密码协处理器310的运算。尽管所述一组控制寄存器315和内部存储器335在图3中被示出为单独部件,但它们可由cpu 350可访问的共同存储器集来实现(例如,被实现为存储器内的不同地址范围)。
33.密码协处理器310可另外使用安全熔断丝和/或侧信道攻击对策来保护。安全熔断丝可防止对密码协处理器310的存储操作固件、微代码等的存储器进行未经授权访问。例如,控制电路系统、敏感算术运算和其他部件可通过逻辑或物理对策来保护,所述对策防止秘密信息通过电磁发射、高级用户波动、运算定时或其他非预期侧信道泄漏或者掩盖秘密信息。在一种情况下,物理上安全的外壳(用于协处理器)和/或防护逻辑可用于检测诸如输入电压或信号的操作条件的不可接受或恶意变化。电路系统还可使用错误检测和校正来确保对故障的检测和校正。在检测到这种错误状况时,可通过安全熔断机制防止进一步运算。协处理器还可被配置为立即擦除内部存储器内所包含的任何秘密信息,诸如私钥。
34.在图3的实例300中,地址生成器325被配置为针对算术引擎330的给定迭代确定内部存储器335内的多个源地址和目的地地址。内部存储器335可填充有将用于执行将由算术引擎330执行的函数的限定数量的迭代的数据,并且地址生成器325可针对每次迭代确定一组不同的源地址和目的地地址。算术引擎330可被配置为在计算函数之前从如由地址生成器325确定的多个源地址读取或提取数据。算术引擎330然后可将计算的结果存储到目的地地址。在某些情况下,算术引擎330可从可将数据存储为存储器传送的一部分的一组临时寄存器或高速缓存读取数据和将数据写入到其。cpu 350可能够通过访问内部存储器335中的目的地地址来读取计算的结果,或者可等待直到已经完成多次迭代并从多个目的地地址读取(例如,内部存储器335的限定块)数据。
35.图4示出算术引擎如何处理如由地址生成器指示的数据的实例400。图4示出控制逻辑420的控制地址生成器425和算术单元430的部分。尽管为清楚起见示出了两个部分,但它们可形成控制逻辑或电路系统的单个部分的一部分。在此实例中,算术单元430处理使用由地址生成器425确定的存储器地址450从存储器435读取的位序列,并且输出使用存储器地址455存储在存储器中的所得位序列,所述存储器地址455也由地址生成器425确定。在此
实例中,算术单元430包括三个源寄存器460和一个目的地寄存器465。这些寄存器被示出为算术单元430的内部寄存器,但可替代地包括密码协处理器的流水线高速缓存。所述一组可用函数中的每个函数被配置为(例如,作为经编程hdl函数)从三个源寄存器460读取数据,执行一组计算,并且然后将结果输出到目的地寄存器465。数据从如由存储器地址450指示的一组三个存储器位置加载到三个源寄存器460中。
36.协处理器可使用基于字的寻址系统,在此情况下,存储器地址450可包括w位字的地址。字长w可被选择为匹配外部处理单元的字长,或者可独立于外部处理单元的字长来选择。例如,w可包括32位或64位。如果密码协处理器的字长大于外部处理单元的字长,这可以有助于增加带宽。在外部处理单元可能限于32位但密码协处理器可被配置为具有64位字长的嵌入式用例中,这可能是期望的。一般来说,外部系统总线、由协处理器使用的一根或多根内部总线以及所述一组控制寄存器、源寄存器和/或目的地寄存器可以具有不同的位宽。这可允许密码协处理器使用更快的内部存储器。
37.存储器地址450可允许对应于源a、b和c中的每一者的三个w位序列加载到三个源寄存器460中。类似地,存储器地址455可指示存储器435中用于存储w位输出字的位置。按照先前实例,存储器435可包括密码协处理器的内部存储器(诸如图3中的内部存储器335),或外部存储器(诸如图3中的ram 355)。内部存储器在密码协处理器310计算函数时可以优选地释放系统总线340和/或ram 355以供cpu 350使用。在图4中,函数可被定义为d=fi(a,b,c),其中fi是k个可选择函数中的一个。要使用的函数i可由写入所述一组控制寄存器内的函数标识寄存器的位序列指示,其中位序列表示函数编号。在例如用于在由外部处理单元执行的计算机程序代码中使用的更高级编程语言接口中,函数标识值可被设置为预定义常数的列表或阵列。
38.在图4的实例400中,控制逻辑420可被配置为在一组迭代内应用地址生成器425和算术引擎430。在每次迭代时,地址生成器425可重新计算存储器地址450和455。这样,在每次迭代时,加载到三个源寄存器460中的数据可能会改变(尽管取决于写入控制寄存器的地址生成参数,它对于一个或多个源也可以保持相同)。目的地存储器地址455在每次迭代时也可改变。应注意,关于某些路径导航参数,所生成存储器地址也可重复或重叠,例如以允许根据特定运算的需要重复或覆写数据。
39.通过执行多次迭代,算术引擎430可被配置为将所选择函数应用于与三个源(a、b和c)中的每一个相关联的多维数据阵列,并且输出与目的地(d)相关联的多维阵列。这种多维阵列在图5a中示意性地示出。在图5a的实例中,可认为密码协处理器对多个源中的每一个的呈数据矩阵510形式的多维阵列(即,二维阵列)进行运算。多维阵列在存储器435中可存储为扁平字序列,但仍通过在一系列嵌套循环内迭代来表示为多维数据结构。例如,图5a示出二维字块可如何具有宽度和高度(如通过第一或x维度中的多个字和第二或y维度中的多个字测量的)。多维阵列的维度中的每一个的大小可通过存储在多个控制寄存器中的值来设置,例如,第一控制寄存器(crbl_r_sizx)可存储表示第一维度(宽度)上的字中的整数大小的位序列,并且第二控制寄存器(crbl_r_sizy)可存储表示第二维度(高度)上的字中的整数大小的位序列。优选地,所述一组源和目的地具有相同大小的多维阵列,因为这减少了需要设置的控制参数的数量并简化了允许在自定义电路系统上快速实现的逻辑。然而,在其他实现方式中,不同的源和目的地可具有不同大小的阵列。维度中的每一个的大小可
被设置为1或更大的整数值。
40.可通过使用一组嵌套循环对存储在存储器中的字序列进行迭代来从所定义多维阵列检索数据,嵌套循环的数量等于多维阵列的维数。例如,可使用两个嵌套循环来对存储器中的被处理为二维矩阵的字序列进行迭代。在一个实例中,地址生成器基于存储在所述一组控制寄存器内的值确定表示相应多维数据阵列内的可编程路径的源地址和目的地地址。这些值可指示例如第一字在存储器中的起始地址,以及维度中的每一个的增量。增量可以是正数或负数,从而实现通过多维阵列的广泛多种自定义路径。增量可在对数据进行迭代时应用。例如,x方向上的增量可在每次迭代期间、例如在读取行时应用,并且y方向上的增量可在一组迭代之后、例如在行结束时应用。
41.例如,考虑序列“abcdefghijklmnop”,其中每个字母表示存储在存储器中的字。如果大小参数(例如,crbl_r_sizx和crbl_r_sizy)均为4,则考虑具有长度为4的4个行的矩阵。如果增量在x方向上为1并且在y方向上为0,则在迭代期间,一次读取行的一个字,例如,a、b、c、d。在行结束时,应用y增量。如果y增量被设置为0,则在行结束时什么也不发生,并且随后迭代开始从前一行迭代结束的位置线性地读取下一行,例如,d、e、f、g。这可以继续,使得数据被读作“abcddefgghijjklm”,每四个单词重复一次并忽略最后三个单词。如果在x方向和y方向两者(例如,在图5a中分别示出为宽度和高度)上均存在1的增量,则这可以允许沿着一行字进行迭代(例如,跨宽度按顺序获取字—a、b、c、d),之后移动到下一行(例如,在读取前4个字并完成一行之后,y增量再次增加1,因此下一行从e处开始—e、f、g、h)。在这种情况下,读取出“abcdefghijklmnop”。通过配置大小和增量,然后可确定通过数据的可编程路径。例如,将x增量设置为4并将y增量设置为-11将读取出序列:“aeimbfjncgkodhlp”,即沿着列读取并有效地确定具有4个字的宽度和高度的原始数据矩阵的转置。
42.从外部处理单元的角度来看,由密码协处理器进行的一组迭代可形成原子操作的一部分。例如,所述迭代可利用外部处理单元的单个指令来指示。所述一组迭代可用于对多个源执行单个密码运算,其中这些源具有相关联的多维数据阵列。此运算可称为“位块传送”(例如,协处理器称为“位块传送器”)。所述一组迭代可与外部处理单元的时钟周期同步,例如,完整集可在外部处理单元的一个时钟周期中执行。这可允许显著速度增加,因为与在外部处理单元上执行的相同的密码运算可需要对数据和地址存储器两者进行多次提取、解码和执行周期,而密码协处理器可允许结果在短得多的时间段之后在可访问存储器中获得。以此方式,密码协处理器的每个原子操作最多可影响构成多维阵列的一组字,即,目的地可包括与源相同大小的多维阵列。在某些实例中,密码协处理器的时钟频率可与外部处理单元的时钟频率不同。在这些情况下,密码协处理器或外部处理单元可在单个周期或多个周期中执行各个步骤。执行的步骤的数量可取决于存储器带宽,并且在外部处理单元的情况下,取决于指令的复杂度。
43.图5b示出其中三个源(a、b、c)中的每一个和目的地(d)具有独立的地址生成逻辑但其中各自表示为如图5a所示的二维阵列的实例520。在这种情况下,每个矩阵共享相同的宽度和高度参数。然后每个矩阵上的导航由起始地址以及x和y增量参数(例如,用于源和目的地两者)确定。
44.图5b中的运算类似于图4所示的运算。框530示出了源a、b和c中的每一个的字从由每个源的地址生成逻辑确定的存储器地址535加载。地址生成逻辑可形成图4中的地址生成
器425的一部分。它可包括fpga或asic内的固定电路(例如,如被编程或配置的)。在框540处应用函数,并且然后将输出字存储在如由地址生成逻辑针对目的地计算出的目的地地址550所指示的目的地d处。在图5b中,框555示出了源和目的地的地址生成逻辑可如何使用基于x和y增量参数的值生成“步长x”和“步长y”信号的外部循环计数器。因此,在每次迭代时,新数据可在框530处基于源的x和y增量参数进行加载,并且同样以类似方式存储在不同的目的地地址处。x和y步长增量可从控制寄存器crbl_z_incx和crbl_z_incy检索,其中z可以是a、b、c和d中的一者。存储在这些控制寄存器中的值可以是任意的并且带有正负号,以提供高度灵活的一组可编程路径。如果两者都设置为1,则处理线性连续块crbl_r_sizx字
×
crbl_r_sizy字。增量也可设置为常数或另一控制寄存器值的函数。例如,如果crbl_z_incx=1并且crbl_z_incy=-crbl_r_sizx 1,则同一“行”的crbl_r_sizx字读取crbl_r_sizy次。这可允许利用共同的硬编程函数和不同的可编程路径来执行许多不同的密码计算。例如,为了复制图5a中的源a、b和c中的一者或多者的读数,可设置负y增量。在图5a和图5b的实例中,地址生成可由先前实例的地址生成器通过对于z={a,b,c,d}中的每一个同时执行以下伪代码运算和地址生成逻辑来执行:
[0045][0046]
与外部处理单元相比,针对源和目的地中的每一者并行执行地址生成增加了协处理器的速度。由于格密码学主要基于线性代数和矩阵,因此通过数据的可编程路径的灵活性可允许大型矩阵乘法和其他大型代数结构高效地计算。因此,函数和运算可涉及以下中的一者或多者:矩阵乘法和加法、多项式环乘法和加法;大整数乘法和加法;以及有限域乘法和加法(等)。
[0047]
在某些实现方式中,本文所述的协处理器还可实现一种形式的移位控制。在这些实现方式中,协处理器可提供用于对加载到源寄存器中的数据、例如从由先前实例的地址生成器计算的源地址读取的数据进行自定义移位的机制。移位控制可允许设定字长w位的数据移位可配置的位数s。该移位可在函数由先前实例的算术引擎应用之前发生,并且因此在不需要改变基函数本身的情况下,为函数自定义提供了更有力的途径。这允许所描述实例的密码协处理器以不与w位字边界对齐的方式读取和组合数据。在某些情况下,移位可另外或替代地应用于与目的地相关联的数据。例如,可期望在存储在目的地存储器地址处之前移位目的地寄存器中的数据,以执行对存储为二进制序列的值的舍入。
[0048]
图6示出其中源寄存器和目标寄存器存储32位字的实例。这可以是外部处理单元的字长。为了实现移位控制,提供了对应于多个源寄存器的多个影子寄存器。例如,如果源
710和主系统总线730。
[0054]
由于本文所述的示例性密码协处理器可作为存储器映射外围设备操作,因此它们可被配置为与大部分cpu和指令集架构(isa)一起操作。在某些情况下,可期望将设计与特定cpu更紧密地结合起来,这可以是可能的。例如,如果cpu是基于risc架构(例如,risc-v)的,则密码协处理器的控制寄存器可映射到cpu的csr(控制和状态寄存器)。
[0055]
当使用其自己的专用存储器时,本文所述的示例性密码协处理器能够将所有存储器访问专用于手头任务,例如,基本上使内部存储器的存储器带宽饱和。如果密码处理器要访问与诸如710的cpu共享的诸如740的存储器,则这可以是不可能的。在典型的两步或四步周期中,密码协处理器能够加载三个源字并写入单个结果字(例如,两个步骤用于双端口ram或四个步骤用于单端口ram)。指令加载和解释、执行算术、递增存储器指针和检查循环结束条件都不需要另外的周期。这些函数在硬件中自动地执行。这意指二进制运算可高速执行。
[0056]
例如,密码协处理器本身可不具有其自己的程序代码,因为可能缺少诸如条件分支的特征。这意味着密码协处理器可能不是图灵完备的,并因此需要与cpu密切合作。密码协处理器的高效使用涉及在协处理器仍在完成其前一任务时所耦接cpu为协处理器准备下一运算(例如,通过加载控制寄存器)。一旦启动,协处理器就能够对存储在ram中的数据执行块运算。如果此ram是通过与主cpu所使用的相同的总线访问的,例如,是ram 740,则协处理器可能会减慢cpu在运行时对整个总线的访问。这个缺点可通过使用专用次总线和如图7所示的内部ram 750来避免。利用此架构,还可更容易地保护对ram 750的访问。
[0057]
在一种测试实现方式中,内部ram 750包括16kb的工作存储器。内部ram 750是存储器映射的,并且基地址偏移被定义为指示控制cpu 710的地址空间内的起始地址。例如,基地址偏移crbl_base_addr可被设置为例如11000000(呈十六进制),其中16kb的存储器扩展到地址11003fff(呈十六进制)。控制寄存器可以类似方式被存储器映射到地址空间。控制地址偏移crbl_ctrl_addr可被定义为指示控制寄存器在控制cpu 710的地址空间中的起始地址。控制寄存器各自的长度可以是w位(例如,一个字)。控制寄存器地址空间可在内部存储器地址空间之前或之后。在以上实例中,如果控制寄存器地址空间紧跟分配给内部ram 750的地址空间,则控制地址偏移可被设置为11004000(即,11003fff之后的下一地址)。在一个实例中,可包括二十个或更多个控制寄存器。与crbl_ctrl_addr具有编号和十六进制偏移的一组示例性32位控制寄存器在图8中示出。这些控制寄存器中的一些已在上文实例中进行论述。所述控制寄存器包括:函数说明符或标识符crbl_r_oper;状态读出crbl_r_stat;多维阵列的维度crbl_r_sizx和crbl_r_sizy(例如,如图5a所示);对于可用源和目的地中的每一者,起始地址crbl_z_addr以及维度中的每一个的增量crbl_z_incx和crbl_z_incy;以及对于源寄存器,移位控制参数crbl_z_csrl(如参考图6所述),在这种情况下,z是a、b、c或d中的一者,如图所示。图8中所定义的所述一组控制寄存器仅作为实例提供,并且在实际实现方式中可能会发生变化,例如,源的数量可能会有所不同,可为每个源和目的地定义不同维度,和/或可实现不同移位。也可存在所应用抽象级别,例如,中间阵列结构可被定义成使得内部存储器和控制寄存器中的一者或多者可使用字索引i而不是原始存储器地址和/或一组偏移来访问。例如,控制cpu 710可设置有允许使用crbl_c[n]阵列(其中n是寄存器编号)访问控制寄存器和/或使用另一crbl[i]阵列(其中i是字索引)访问内部存储器
的编程语言接口(例如,c应用编程接口api)。如果控制cpu 710使用字节寻址,则如果apu 720使用32位字,则控制cpu地址crbl_base_addr 4*i可由apu 720视为字地址i(因为32位等于8个位的4个字节)。
[0058]
在一种情况下,内部ram 750可包括允许apu 720的每个时钟周期进行两次访问操作的双端口型存储器。这因此可允许四个存储器地址在两个时钟周期内读取。在这种情况下,可存在三个源寄存器和一个目的地(即,a、b、c和d),因为这些寄存器的数据可在两个时钟周期内从存储器提取。apu 720的时钟周期可与控制cpu 710处于相同频率,或者可根据实现方式而不同。双端口ram通常比通常用于系统存储器740中的ram的单端口ram更昂贵,但在所提出实施方案中可廉价地容纳,因为仅需要少量存储器来执行算术引擎的函数。一般来说,地址生成器可被配置为确定内部双端口存储器内的地址,并且多个源寄存器可包括三个内部源寄存器以允许从存储器进行快速读取。
[0059]
图3和图7的实例示出其中密码片上系统包括系统总线、耦接到系统总线的中央处理单元、由中央处理单元使用的耦接到系统总线的系统存储器以及密码协处理器的一般情况。密码协处理器可如前述实例中的任一者所述(包括如针对apu 720所述)进行配置,并且来自一个实例的某些特征可与另一实例的一个或多个特征结合使用,而无需提供这些实例的所有特征。
[0060]
图9示出执行密码运算的方法900。此方法可适用于先前描述的协处理器实例中的任一者,或者另一适当配置的协处理器。协处理器还可称为辅助处理单元。在某些情况下,方法900可例如使用hdl或微代码或低级编程语言编程到可编程电路系统中。可编程电路系统可包括rom、fpga或可编程asic。在某些情况下,asci等可被配置为执行方法900的框。使用专用编程电路系统,例如而不是通用处理单元,可降低成本并加快运算。
[0061]
方法900包括涉及从一组控制寄存器读取值的第一框910。这些控制寄存器可包括图1或图3中的控制寄存器115或315。所述一组控制寄存器中的值根据通信地耦接到协处理器的主处理单元所指示写入。例如,cpu 350或控制cpu 710可将值写入它们的地址空间中的地址,所述地址空间被存储器映射到协处理器的控制寄存器。控制寄存器可类似于图8所示的那些控制寄存器,并且值可包括被存储为w位字的有正负号或无正负号的整数值。例如,大小参数crbl_r_sizx和crbl_r_sizy可包括无正负号(即,正)整数,而增量参数crbl_z_incx和crbl_z_incy可包括有正负号整数(即,允许正整数值和负整数值)。
[0062]
在框920处,确定密码运算所使用的函数。例如,对于基于格或代码的密码运算,函数可包括布尔逻辑和整数算术(例如,乘法、加法和减法)中的一者或多者。函数可基于所述一组控制寄存器中的至少一个值(例如,存储在函数说明符控制寄存器crbl_r_oper内的正w位整数)选自一组不同的可用函数。函数不是诸如加密或解密的高级密码运算或者对称密钥运算,函数是在这些密码运算中(例如,通常重复)使用的数学基函数。这样,函数可对应于高级编程语言中的单行语句或用于密码运算的伪代码。例如,函数可涉及存储为协处理器所使用的存储器中的每个字内的一个或多个位序列的整数值的乘法,或被实现为二进制算术计算的那些序列的加法/减法。函数可被描述为离散函数,因为它对二进制序列或由这些二进制序列定义的整数而不是用于近似连续计算的非整数表示进行运算。
[0063]
在框930处,生成与一组源和至少一个目的地相关联的一组相应地址。源表示函数的输入。目的地表示函数的输出。源和目的地可在密码协处理器内具有对应寄存器(例如,
作为用于所执行计算的内部寄存器或高速缓存)。这些对应寄存器可替代地形成协处理器的内部存储器的一部分。所生成地址对应于协处理器的内部存储器和由主处理单元使用的系统存储器中的一者或多者,例如,图3的存储器335或355或者图7的740或750中的一者。如本文所论述,协处理器的内部存储器是优选的。地址是主处理单元能够访问的,例如,所述地址可形成主处理单元的地址空间的一部分。在一种情况下,内部存储器可包括主处理单元的存储器映射资源。还应注意,尽管框930在框940之前示出,但这仅是源所需的;对目的地地址的确定可与框940和/或950并行地或在其之后执行,只要它可用于在框960处存储所得数据即可。
[0064]
在框940处,从与所述一组源相关联的所生成地址加载数据。可存在一个或多个源。此数据将用作函数的输入。这可包括提取操作,其中地址用于从存储器检索字长位序列并将这些位序列存储在检索数据以执行函数的一组(临时)源寄存器中。在框950处,执行函数。这可包括将位操纵应用于存储在源寄存器中的位序列,即,在框940处从存储器读取的位序列。函数可通过在fpga或asic内执行一组编程逻辑来实现。函数可花费协处理器的一个或多个时钟周期。函数的输出包括可存储在(临时)目的地寄存器中的例如具有字长或具有w位的位序列。框950可包括图4和/或图5b所示的运算。
[0065]
在框960处,将函数的输出存储在与目的地相关联的所生成地址处。例如,这可包括将存储在目的地寄存器中的值传送到内部存储器或系统存储器中的一者或多者中,其中这些存储器中的一个中的位置由所生成地址确定。
[0066]
在框970处,向主处理单元提供输出能够在与目的地相关联的所生成地址处获得的指示。这可包括被动指示,例如,诸如图8中的crbl_r_stat的状态读出控制寄存器可被设置为预定义值以指示运算完成(例如,这在图8的实例中可被设置为零值以指示协处理器不再忙碌)。在其他实例中,可提供主动指示,诸如主处理单元的中断。
[0067]
在一种情况下,框970处的指示仅在一组迭代完成之后才提供。所述一组迭代可包括零次或多次迭代(例如,不重复框930至960,或者如图9的虚线箭头所指示,这些框迭代一次或多次)。集合中的迭代次数可使用控制寄存器中的值来限定。
[0068]
在一种情况下,重复方法900(特别是框930至960)以将函数应用于与多个源中的每一个相关联的多维数据阵列。这在图5a和图5b的实例中示出。在这种情况下,与目的地相关联的多维数据阵列可存储在与目的地相关联的多个所生成地址处,例如,在每次迭代之后存储阵列的不同部分的位置。如关于图5a和图5b所解释,多个多维阵列中的一个或多个内的自定义或可编程路径可通过框930处的地址生成进行配置。例如,在框930处生成的地址可基于起始地址(诸如图8中的crbl_z_addr,其中z={a,b,c,d})和一个或多个维度的增量值(诸如的图8中crbl_z_incd,其中z={a,b,c,d}并且d={x,y})来确定。因此,协处理器的完整运算或“位块传送”可针对多个源执行,所述源各自定义为多维阵列,并且提供呈另一多维阵列形式的输出,所述输出的值存储在主处理单元可访问的存储器中。框970处的指示可在目的地的完整阵列准备好读取时提供。
[0069]
在某些实例中,协处理器的运算可视为类似于普通cpu的流水线进程。在这些实例中,某些运算可并行执行和/或被优化以加快协处理器的运算。例如:在流水线中的第一步骤处,针对源和/或目的地生成地址;在流水线中的第二步骤处,从源地址提取数据字并任选地使其移位(例如,按照图6);在第三步骤处,可执行一个函数,例如,执行为d=fi(a,b,
c)或(d,进位)=fi(a,b,c,进位),后者在下文更详细地解释;并且在第四步骤处,将d写入目的地地址。如果存在仅一个源a,则第四步骤可例如与加载a的下一值同时执行,因为在函数中使用了前一值。如果存在三个源a/b/c并且使用了双端口存储器,则四个步骤可在两个周期内执行。当优化流水线并且并行地执行步骤时,可在第一步骤处生成第(t-3)次迭代的地址,在第二步骤处提取第(t-2)次迭代的数据字,对第(t-1)次迭代的值执行函数,并且在第四步骤处存储第t次迭代的值d。双端口存储器允许在一个周期内读取或写入两个地址,因此可在一个周期内读取(a,b),并且在另一周期内读取c和写入d。
[0070]
一般来说,方法900可视为密码协处理器的一个“位块传送”,其中每个“位块传送”运行通过多维阵列的区域(例如,通过图9中以虚线示出的循环)。如果多维阵列是诸如图5a所示的二维阵列,则可存在crbl_r_sizx*crbl_r_sizy(即,宽度*高度)次迭代。一旦区域已经工作,就可安排新运算,例如,方法900的新一轮运行。如果运算是大整数乘法,则源的多维阵列可表示要相乘的大整数,例如,宽度和高度可分别指示要相乘的两个数的长度。在其中宽度和高度中的一者或多者为一的情况下,则此运算可表示列或行向量运算。
[0071]
方法900和上述变型可由协处理器执行。在主处理单元(或cpu)一侧上,方法可包括图9中的框910之前的一系列框。在由主处理单元执行的第一框处,可确定要执行的密码运算。这可包括运行已知密码算法(诸如ntru、round5、sabre、xmss、bike、dilithium或kyber)的指令。已知的密码算法可包括后量子算法,即提供保护免受量子计算机攻击的密码算法。一般来说,密码算法可包括以下中的一者或多者:基于格的密码算法;基于代码的密码算法;椭圆曲线密码算法;以及基于同源的密码算法。
[0072]
在第二框处,主处理单元可将密码运算分解成一个或多个函数。例如,这可包括执行指示函数的编译和/或机器代码,和/或可包括执行已经适于使用对协处理器的函数调用的计算机程序代码。例如,加密、解密或生成密钥的密码算法可具有涉及共同基布尔或整数算术函数的多个子运算。然后可标识这些函数并将其分配给协处理器。在某些情况下,密码协处理器仅使用对所述一组控制寄存器的写入(例如,写入特定的“go”寄存器)来简单地控制,并且这启动协处理器运算(或“位块传送”)。这可使用任何形式的计算机程序代码(包括汇编语言和低级编码语言诸如c或rust)来执行。密码协处理器不需要与主处理单元同步,它可简单地执行运算并指示何时结果可用。当结果可用并且协处理器不再忙碌时,可通过再次写入控制寄存器来发起新运算。通常,密码协处理器的使用需要对高级密码算法的程序流进行低到最小的更改。
[0073]
在此方法内,主处理单元可针对要在密码算法内执行的每个所标识函数重复一系列子框。第一子框可包括根据主处理单元所指示将值加载到协处理器的所述一组控制寄存器中。这些值是稍后可在方法900的框910处读取的值。第二子框可包括根据主处理单元所指示将数据加载到协处理器的内部存储器和由主处理单元使用的系统存储器中的一者或多者中。例如,主处理单元可将数据存储在所标识起始地址处,所述起始地址的范围等于任何定义的多维阵列的大小。主处理单元可将数据直接加载到协处理器的内部存储器中,例如其方式为将内部存储器作为存储器映射资源来访问和/或协处理器可被布置为从由主处理单元使用的存储器检索数据(例如,用于直接使用或复制到其自己的内部存储器中)。例如,在图3或图7的情况下,协处理器可直接访问外部存储器(例如,355或740)以将组块复制到内部存储器(例如,335或750)中。在第三子框处,主处理单元被配置为通过将起始值加载
到所述一组控制寄存器中来启动协处理器。这可包括布尔起始标志,或者可包括将非零函数标识符写入函数说明符控制寄存器(例如,图8中的crbl_r_oper)。
[0074]
在上述子框之后,可执行方法900。在此期间,主处理单元可等待输出能够在与目的地相关联的所生成地址处获得的指示。这可包括等待参考框970描述的指示,例如,等待控制寄存器值的改变或者中断。在所述等待期间,主处理单元能够执行其他运算。例如,这可使密码算法的不同部分能够有效地并行化。
[0075]
在图8的示例性实现方式中,写入crbl_r_oper寄存器可启动协处理器运算(例如,发起方法900),并且还可定义正在对多个源(例如,图4和图5b中的a、b和c)执行的函数(例如,图4和图5b中的f)。在图8中,w位函数控制字crbl_r_oper指定使用什么类型的逻辑来组合源输入字(例如,a、b、c)以产生输出字d。架构是灵活的,并且可根据配置支持一组不同的函数。写入crbl_r_oper寄存器可在确保已将适当控制值写入所述一组控制寄存器之后执行。在一种情况下,由控制寄存器值指示的由协处理器使用的内部变量仅在协处理器运算(“位块传送”)开始时加载,因此在协处理器正在执行时更改变量对协处理器的运算没有影响。这允许快速连续地执行一系列协处理器运算(例如“位块传送”,其中每个“位块传送”可包括方法900)。例如,可在协处理器执行第一函数时准备第二函数的运算。在某些情况下,可定义协处理器方法调用(例如,定义为c api调用)以避免需要直接写入crbl_r_oper寄存器。可针对等待运算定义类似的协处理器方法调用,其中方法调用将阻断,直到所有正在运行的协处理器运算完成,例如其方式为轮询crbl_r_stat状态寄存器或等待中断。两个协处理器方法调用是由主处理单元执行的调用。
[0076]
如本文实例中所述的由算术引擎应用的函数可包括用于基于代码和基于格的密码学中的一者或多者、例如用于如上所述的算法的子函数。所述函数可实现布尔逻辑运算,例如将源值视为可使用布尔逻辑运算组合的位序列。所述函数还可实现整数算术运算,例如,整数乘法、整数减法和整数加法中的一者或多者,其中整数值由存储在定义字地址处的位序列定义。
[0077]
在某些实例中,本文实例中所述的密码协处理器可被配置为评估多个函数并且将相应输出存储在相应多个目的地地址中。例如,密码协处理器可包括多个算术引擎和/或能够同时评估多个函数的算术引擎。在一种情况下,可并行评估多个函数并将输出存储在对应目的地地址中。同时评估的函数可包括不同函数。所述函数可基于共同函数集来设置。函数可能够通过所述一组控制寄存器中的相应函数标识符来选择。在一种情况下,每个函数可对相同的一组源进行运算,但生成不同的目的地结果。在这种情况下,密码协处理器的控制逻辑可被配置为选择目的地中的一个。此选择可有条件地、例如基于存储在目的地中的值执行。在另一类似变型中,可存在共享共同存储器(例如,类似于图3中的内部存储器335)的多个密码协处理器。
[0078]
图10示出可如何为示例性布尔逻辑运算定义真值表。如上所述,这可使用存储在图8的crbl_r_oper寄存器中的值来设置。例如,当使用32位字并且crbl_r_oper的值呈000000xx形式(即,高24位为零)时,则8位值xx可为任意3输入布尔函数定义真值表,其中布尔函数被应用于源(例如,a、b和c)的位。这样,这些低8位中的每一个定义了如何针对给定输入位组合(例如,如字a、b、c所指示)生成目的地(d)的输出。
[0079]
例如,如果将8位视为一组1位变量“hgfedcba”,其中最高有效位(“h”)是图10中的“运算位7”,并且最低有效位(“a”)是图10中的“运算位0”。然后设置1位变量中的每一个的值指示图10的表的最后三行所示的不同1位组合的输出。例如,位值“a”指示将源中的每一个的三个0位组合的结果(例如,0或1),位值“d”指示将a源中的0以及b和c源中的1组合的结果,并且位值“h”指示将源中的每一个中的三个1位组合的结果。因此,不同的8位序列中的每一个定义了不同的真值表。例如,如果来自源(a、b、c)中的每一个的一个位等于(1,0,1),则函数标识符0xcc(呈十六进制)意味着序列“hgfedcba”等于11001100,并因此“运算位5”(“f”)等于0,并且组合(即,d)的输出为0。相比之下,如果函数标识符为0x80(呈十六进制),则这意味着序列“hgfedcba”等于1000000,即,对所有三个源进行的逻辑与运算。可对源中的序列中的每个位并行执行位比较,例如,如果寄存器是32位,则并行执行32位比较。如果存在n个源,则在函数标识符内利用2n个位指示真值表。因此,密码协处理器能够实现多个自定义二进制逻辑运算。
[0080]
可为函数说明符的某些值分配常数,例如,利用一填充目的地的掩码运算可具有函数说明符值000000ff,可定义为用于主处理单元的程序的c常数(crbl_op_mask)。常数crbl_op_mask可用于保证高位为零。全零(即,00000000)可以是仅忽略输入并将零写入目的地的函数。值000000f0(例如,设置为常数crbl_op_asrc)可仅将存储在源寄存器a中的值复制到目的地d,并且被设置为约crbl_op_asrc和crbl_op_mask(即,值和上述掩码)的crbl_r_oper可导致同一源寄存器的逻辑反转被写入目的地d。定义常数的不同组合可用于指示不同布尔运算。例如,如果crbl_op_bsrc被设置为0x000000cc(将源寄存器b中的值复制到目的地d)并且crbl_op_csrc被设置为0x000000aa(将源寄存器c中的值复制到目的地寄存器d),则表达式诸如(crbl_op_asrc&crbl_op_bsrc)^crbl_op_csrc将评估为0x6a,并且将导致(aand b)xor c的布尔运算。布尔运算可用于多种任务。布尔运算尤其可用于对称密码算法的(位切片)实现方式。
[0081]
可形成所述一组函数的一部分的函数的另一实例是所谓的“行运算”原语。行运算原语允许协处理器快速地相互加减整数向量。不同函数可以不同方式解释存储在一组输入源寄存器(例如a、b和c)中的位序列。一个函数可计算d=a b-c,其中源寄存器a、b、c被解释为四个8位整数的紧缩阵列。另一函数可计算同一系列的加减法,即,d=a b-c,但将源寄存器a、b、c解释为两个16位整数的紧缩阵列。例如,如果w=32并且使用8位运算,则实际上正在执行四个并行的独立8位算术运算,例如,目的地d的第二字节取决于源a、b、c的第二字节,其中任何结果可解释为模256。
[0082]
在某些实例中,由算术引擎应用的函数是无状态的。然而,为了允许长整数算术(例如,其中长意味着发生上溢或下溢),另外的“进位”寄存器可由算术引擎用于存储算术的进位。这可指示为(d,进位)=fi(a,b,c,进位)。例如,可定义具有相同总和的函数d=a b

c,但其中源寄存器被解释为全长w位整数。在这种情况下,可需要设置可能够从进位寄存器访问的另外的进位变量。进位寄存器还可存储指示“借位”的负值。当对多维阵列进行迭代时(例如,当在y维度上执行一个步骤时),进位寄存器可在每一行开始时重置。这些行运算原语中的每一个可具有不同的函数说明符(即,标识符)值。进位可不能够由外部处理单元直接读取。在一个实现方式中,进位寄存器可在每个运算(例如方法900的每次执行)开始时和/或在每一行结束时(例如,当如前所述进行y增量时)被清除。
[0083]
另一函数可以是整数乘法。与行运算原语一样,整数乘法可通过使用不同的函数
说明符值对源寄存器位序列进行不同解释来执行。三个源(a、b和c)上的乘法函数可包括组合函数d=a b*c。在一种情况下,任意长度的整数(例如,大的)可在协处理器的单个运算(例如,方法900的单次运行)中相乘。这可使用进位。在某些整数乘法中,2w位乘积可被计算出,并且这可在目的地寄存器中的w位与进位寄存器中的w位之间拆分。任意长度乘法函数的等效描述,组合函数d=a b*c在c编程语言中可以是:
[0084]
carry =((uint64_t)a_data) ((uint64_t)b_data)*((uint64_t)c_data);
[0085]
d_data=(uint32_t)carry;
[0086]
carry>>=32;
[0087]
现在将描述如何配置上述大整数乘法的实例。此实例还示出了可如何将协处理器配置为使用多维阵列。假设低位优先大整数表示(但可通过函数定义来配置其他表示)。在这种情况下,定义为源b的“m-1”个字的整数乘以定义为源c的n个字的整数。源b被定义为从crbl_b_addr开始,其中另外的高字设置为零(即,实际上是m个字的位序列),并且源c定义为从crbl_c_addr开始。首先,(n m-1)个字的目的地阵列被清除并且源a(例如,如通过crbl_a_addr定义)和目的地d(例如,如通过crbl_d_addr定义)两者被配置为指向它。全乘积b*c然后能够通过协处理器的单个运算(例如方法900的一次迭代)来计算。配置可使用以下c代码准备:
[0088]
crbl_c[crbl_a_incx]=1;//a:(x)advance by 1.
[0089]
crbl_c[crbl_a_incy]=2-m;//a:(y)rewind back,advance by one.
[0090]
crbl_c[crbl_a_csrl]=0;
[0091]
crbl_c[crbl_b_incx]=1;//b:(x)advance by 1.
[0092]
crbl_c[crbl_b_incy]=1-m;//b:(y)rewind all the way back.
[0093]
crbl_c[crbl_b_csrl]=0;
[0094]
crbl_c[crbl_c_incx]=0;//c:(x)same value entire row.
[0095]
crbl_c[crbl_c_incy]=1;//c:(y)advance by 1
[0096]
crbl_c[crbl_c_csrl]=0;
[0097]
crbl_c[crbl_d_incx]=1;//d:(x)same as a,advance by 1.
[0098]
crbl_c[crbl_d_incy]=2-m;//d:(y)rewind back,advance by one.
[0099]
crbl_c[crbl_r_sizx]=m;//width(b size 1 zero word).
[0100]
crbl_c[crbl_r_sizy]=h;//height(c size).
[0101]
crbl_go(crbl_op_m32a);//start the multiplication operation.
[0102]
crbl_wait();//(wait for it to finish.)
[0103]
在上述运算中,首先将目的地设置为0,并且使用源寄存器a来在最终乘积准备好之前读回中间值。作为使用十进制值的(假设)实例,想象需要将值相乘123*456,并且字长是单个十进制数位。在这种情况下,b=123并且c=456。在第一组迭代中:a=0,b*c=3*6=18,d=8,进位输出=1;a=0,b*c=2*6=12 1=13,d=3,进位输出=1;并且a=0:b*c=1*6=6 1=7:d=0,进位输出=0。这些迭代表示第一行并且d=00738。现在,对于表示第二行的第二组迭代,a=d并且a和b被倒带。对于第二组迭代,a、c和d是步进的,并且实际上,a、d步进通过中间3个数位。第二组迭代因此进行如下:a=3,b*c=3*5=15 3=18,d=8,进位输出=1;a=7,b*c=2*5=10 7 1=18,d=8,进位输出=1;并且a=0,b*c=1*5=5 1=6,
d=6,进位输出=0。第二行现在已完成,并且d=06888。对于第三组迭代,步进通过a和d的高3数位:a=8,b*c=3*4=12 8=10,d=0,进位输出=1;a=6,b*c=2*4=8 6 1=16,d=6,进位输出=1;并且a=0,b*c=1*4=4 1=5,d=4,进位输出=0。在此行之后,d=56088=123*456,即单个运算或“位块传送”之后输出的最终结果。当然,实际上,整数表示为二进制而不是十进制整数,但步骤类似。
[0104]
本文所述的某些实例提供了辅助主处理单元进行密码运算的方法和系统。所述方法和系统允许以较小处理器开销和较低复杂性来执行密码运算。还可降低功耗,因为需要更少的主处理单元操作周期并且协处理器可被实现为低功率fpga或asic。这提供了比较向量或单指令多数据(simd)处理器可能无法实现的益处。例如,simd主要实现为主或外部处理单元的特征,而不是涉及单独的协处理器,并且密码协处理器可不像simd架构那样具有机器指令或“指令流”。此外,在支持simd寄存器访问的架构中,向量或阵列被视为cpu的寄存器文件的一部分;这意味着无需加载和存储到主(即,外部)存储器即可存储的数据的量严重受限,因为对系统总线和主存储器的访问是通过主或外部处理单元进行的。
[0105]
协处理器适于执行多种常见密码基函数,例如算术,诸如字的加法或减法,或者由移位、间接寻址和多输入布尔函数的评估组成的复杂位操纵运算。这些常见密码基函数可被设计为支持一种或多种已知的后量子密码算法。协处理器可用于帮助在从服务器到智能卡的大量设备上实现后量子(即,量子抵抗)密码学。协处理器被专门设计来加快密码运算,诸如大规模线性代数和大整数算术。这与比较浮点协处理器不同,后者被设计为利用定义指数和有效位但不适合执行常见密码基函数的位序列进行操作。结合本实例中所述方面的协处理器的基本设计可被灵活地配置以应对不同类型密码算法的实现挑战,包括帮助快速支持未来开发的算法(其可使用相同的基函数但以不同次序和组合使用)。可由协处理器执行的所述一组函数可根据目标系统的需要来配置,例如,如果智能卡仅需要实现仅需要行运算原语的一个密码算法,则可不需要其他函数并且可提供更小尺寸的协处理器。
[0106]
本文所述的某些实例提供了一种将专用密码处理单元与更大的处理单元高效地接口连接的密码架构和操作这种架构的方法。本文所述的某些实例提供了可适合于在低资源微控制器和嵌入式设备上实现以及实现高速安全数据处理的密码方法。所描述的密码架构与所使用的处理单元的类型无关,不同控制程序的选项可通过一组控制寄存器获得。密码架构可使用存储器映射和/或其他方法来实现,从而提供对不同类型的处理单元的简单或透明的数据访问。本文所述的某些实例可用于实现使用较小的基础密码函数作为“构建块”的高级密码算法的高效硬件和/或软件实现。密码协处理器可代表处理器或微处理器执行快速密码基函数,这样,为低功率嵌入式设备和高通量服务器设备提供了益处。
[0107]
虽然某些实例是指访问特定寄存器内的数据,和从这种寄存器读取和/或写入数据,但应理解,实际上中间数据存储装置和/或数据结构可在某些实现方式中使用,并且对
“……
中的数据”的引用也可适用于“来源于
……
的数据”,例如,除了所描述的那些之外,来自一个或多个中间过程的数据。对一组寄存器的引用可指示对一个或多个寄存器的引用。以主处理单元、外部处理单元或中央处理单元为特征的实例也可以相同或不同类型的多个此类单元为特征。例如,其中实现密码协处理器的计算系统可包括具有不同类型的多个cpu(例如,其中cpu共享共同系统总线)的异构系统。此外,即使协处理器的“控制”已关于外部处理单元进行描述,但其他设备诸如磁盘驱动器和网络接口也可执行到可访问协处理器存
储器区域的dma(直接存储器访问)传输。还应理解,对耦接到某些部件的电路系统的引用可替代地实现为该部件内的功能性,例如是否通过经执行固件代码和/或专用硬件电路系统。如本文所述的“电路系统”可以在硬件中实现,例如,使用fpga的数字逻辑门或可编程门,和/或作为从存储器加载并由处理器诸如微处理器执行的计算机程序代码。本文所述的某些系统部件和方法可通过可存储在非暂时性存储介质诸如只读可更新固件存储器上的计算机程序代码诸如固件或指令集来实现。
[0108]
以上实例应被理解为示例性的。可设想另外的实例。例如,本文所论述的特定值是基于测试实例的,并且可根据实现方式(例如,根据微控制器规范和类型、安全要求和其他因素)而变化。尽管已经单独描述了每个实例的某些部件,但应理解,参考一个实例描述的功能性可适合在另一实例中实现,并且可根据实现方式省略某些部件。应理解,关于任何一个实例所描述的任何特征可单独使用,或与所描述的其他特征结合使用,并且也可与实例中的任何其他实例或实例中的任何其他实例的任何组合的一个或多个特征结合使用。例如,关于系统部件描述的特征也可适于作为所描述方法的一部分来执行。此外,在不脱离随附权利要求中限定的本发明的范围的情况下也可采用上文未描述的等效物和修改。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献