密码算法中用于支持散列值生成的SIMD指令

密码算法中用于支持散列值生成的SIMD指令


2024年4月27日发(作者:)

XOR ROR(B,25))且ROR(P,Q)为值P右旋转Q位位置。

SHA256H2Qd,Qn,Vm.4S

X=Qn;

Y=Qd;

for(i=0to3)

相应地,根据示例性实施例,单一指令多重数据处理电路经配置以由

另外的程序指令控制,该另外的程序指令具有自该单一指令多重数据寄存

器文件读取的第一输入操作数Qd[127:0]及第二输入操作数Qn[127:0]两

者,且该向量数据值包含Vm[Index+31:Index],其中Index为0至

中N为正整数,该另外的处理操作产生该输出操作数

有与由以下步骤给出的值相同的值:

2N,其

Qdoutput[127:0],以具

其中Choose(B,C,D)为(((C XOR D)AND B)XOR D),Majority(B,C,

D)为((B AND C)OR((B OR C)AND D)),Sigma0(B)为(ROR(B,2)XOR

ROR(B,13)XOR ROR(B,22)),Sigma1(B)为(ROR(B,6)XOR ROR(B,11)

XOR ROR(B,25))且ROR(P,Q)为值P右旋转Q位位置。

SHA256H预期散列摘要的前4x32位字在Qd中,剩余4x32位字在

且调度数据的4x32位字在Vm.4S中。

SHA256H2预期散列摘要的第二4x32位字在Qd中,前4x32位字在

且调度数据的4x32位字在Vm.4S中。

请注意,因为SHA256H破坏散列摘要的前4x32位字,所以在执行

SHA-256散列更新指令变体

如先前对于SHA-1散列更新指令所概述,用于较宽向量SIMD的

256指令的变体可包括以下各项:

SHA256(H|H2)Qd,Qn,Vm.8S

SHA256(H|H2)Qd,Qn,Vm.16S

这些指令将分别处理散列更新函数的8次及16次迭代。较宽的SIMD

SHA256H Od,Vm.8S

SHA256H Od,Vm.16S

在Od为256位宽寄存器的情况下,不必提供SHA256H2操作,整个

要将适合在向量寄存器中。

数据路径亦可允许:

Qn中

Qn中

SHA256H之前必须进行复制以便正确值可被传递至Qn中的SHA256H2。

SHA-

散列摘

SHA-256调度更新

如先前所概述,对于SHA-1,实现来自SHA-256算法的加速需要在散

SHA-256调度更新函数将来自数据调度的四个32位字结合为单一所

该单一所得字扩展调度,或在循环队列的情况下,该单一所得字将

的字重写。

调度更新操作由逻辑异或、固定移位及固定旋转(已知)组成。

uint32schedule_update(int round,uint32*w){

retum w[round]+sigma1(w[round-2])+w[round-7]+sigma0(w[round-15]);

}

其中:

sigma0(x)=ror(x,7)^ror(x,18)^shr(x,3);

sigma1(x)=ror(x,17)^ror(x,19)^shr(x,10);

这亦可以循环队列表达(已知):

void schedule_update(int round,uint32*w){

w[round]=

列更新函数与调度更新函数之间的平衡。

得字,

调度中

sigma1(w[round+14mod16])+w[round+9mod16]+sigma0(w[r

ound+ 1mod16]);

}

SHA-256调度更新向量化及替代

SHA-256调度更新函数亦可以适合于4向SIMD的方式被向量化。

w[round]=sigma1(w[round+14])+w[round+9]+sigma0(w[round+1]);

w[round+1]=sigma1(w[round+15])+w[round+10]+sigma0(w[round+2]);

w[round+2]=sigma1(w[round])+w[round+11]+sigma0(w[round+3]);

w[round+3]=sigma1(w[round+1])+w[round+12]+sigma0(w[round+4]);

请注意,存在两个相依性,亦即w[round]及w[round+1]。用于SHA-

替代法通过代入零值且然后决定结果而像以前一样起作用。该方法

下:

w[round]=sigma1(w[round+14])+w[round+9]+sigma0(w[round+1]);

w[round+1]=sigma1(w[round+15])+w[round+10]+sigma0(w[round+2]);

w[round+2]=sigma1(w[0])+w[round+11]+sigma0(w[round+3]);

w[round+3]=sigma1(w[0])+w[round+12]+sigma0(w[round+4]);

w[round+2]+=sigma1(w[round]);

256的

说明如

w[round+3]+=sigma1(w[round]);

可将上述程序代码区块重新因素分解以对具有4x32位的数据路径大

SIMD架构利用4通道向量操作。

SHA-256调度更新及散列更新平衡

为了使调度更新操作与散列更新操作平衡,我们提出如先前所述处理

在合理的SIMD实施中,与用以执行建议的SHA-1散列函数的技术相

对此存在数个原因:

含有元素{round+1,round+2,round+3,round+4}及{round+9,round+10,

含有{round+14,round+15,0,0}的寄存器将需要使用提取组成。

sigma操作含有旋转,且SIMD向量旋转在例如ARM高阶SIMD的

指令集中不常见。在这些架构中的向量旋转需要两个向量位移及OR

考虑替代的安排亦将需要提取寄存器。

sigma0及sigma1操作由大约7个向量操作组成。

SIMD

指令。

round+11,round+12}的向量将跨越多于一个向量寄存器。

比,向量化技术将更多执行循环以计算调度数据。

调度更新,亦即,使用四向向量化处理调度更新。这允许单个调度更新为

后续散列函数指令产生足够的4x32位字的数据。

小的

归因于Amdahl定律,需要平衡SHA-256算法之两部分以免较慢部分

实现的加速量。

这些观察产生用于加速SHA-256调度更新函数的以下SIMD指令。

SHA256SU0Vd.4S,Vn.4S

T<127:0>=Vn<31:0>:Vd<127:32>

T<127:0>=VecROR32(T,7)XOR VecROR32(T,18)XOR VecSHR32(T,3)

Vd=VecADD32(T,Vd)

SHA256SU1Vd.4S,Vn.4S,Vm.4S

T0<127:0>=Vm<31:0>:Vn<127:32>

T1<63:0>=Vm<127:64>

T1<63:0>=VecROR32(T1<63:0>,17)XOR VecROR32(T1<63:0>,19)

T3<63:0>=VecADD32(Vd<63:0>,T0<63:0>)

T1<63:0>=VecADD32(T3<63:0>,T1<63:0>)

T2<63:0>=VecROR32(T1<63:0>,17)XOR VecROR32(T1<63:0>,19)

XOR VecSHR32(T1<63:0>,10)

限制可

XOR VecSHR32(T1<63:0>,10)

T3<63:0>=VecADD32(Vd<127:64>,T0<127:64>)

Vd=VecADD32(T3<63:0>,T2<63:0>):T1<63:0>

指令假设循环队列常驻于四个4x32位向量寄存器中。指令不排除使

扩展。

在指令内部实现元素的重新排序及提取。然后,微架构能够选择以将

在大部分微架构中,指令可具有低循环等待时间。

因此,根据示例性实施例,单一指令多重数据处理电路经配置以由第

T[127:0]={Sp[31:0]:Sq[127:32]};

T[127:0]=VecROR32(T[127:0],7)XOR VecROR32(T[127:0],18)XOR

Sq[127:0]=VecADD32(T[127:0],Sq[127:0]),

其中VecROR32(A,B)为在A内的每个32位字单独右旋转B位位

VecADD32(A,B)为在A内的每个32位字单独增加至在B内的相

位字。

VecROR32(T[127:0],3);及

这些及固定移位与旋转实施为布线。

用调度

一调度指令控制,该第一调度指令具有输入操作数Sp[127:0]且产生输出操

作数Sq[127:0],该输出操作数的值与由以下步骤给出的值相同:

置,且

应32

因此,根据示例性实施例,单一指令多重数据处理电路经配置以由第

二调度指令控制,该第二调度指令具有第一输入操作数Sp[127:0]及第二输

入操作数Sq[127:0]且产生输出操作数Sr[127:0],该输出操作数的值与由以

下步骤给出的值相同:

T0[127:0]={Sq[31:0]:Sp[127:32]};

T1[63:0]=Sq[127:64];

T1[63:0]=VecROR32(T1[63:0],17)XOR VecROR32(T1[63:0],19)XOR

VecROR32(T1[63:0],10);

T3[63:0]=VecADD32(Sr[63:0],T0[63:0]);

T1[63:0]=VecADD32(T3[63:0],T1[63:0]);

T2[63:0]=VecROR32(T1[63:0],17)XOR VecROR32(T1[63:0],19)XOR

VecROR32(T1[63:0],10);

T3[63:0]=VecADD32(Sr[127:64],T0[127:64]);及

Sr[127:0]={VecADD32(T3[63:0],T2[63:0]):T1[63:0]},

其中VecROR32(A,B)为在A内的每个32位字单独右旋转B位位

VecADD32(A,B)为在A内的每个32位字单独增加至B内的相应

字。

在SHA-256与SHA-512之间的差异

置,且

32位

SHA-512算法非常类似于SHA-256算法。在描述对SHA-256的支持

中概述的相同方法可同样地应用于SHA-512,仅存在以下小的不

输入数据分成128字节的区块,且以大端(big endian)形式处理为

位字。

SHA-512对8x64位字有效

SHA-512需要散列函数的80次迭代。

散列函数及调度更新对64位字有效,且散列函数及调度更新含有不

移位、旋转,及逻辑异或。

为了简便起见,我们忽略SHA-512算法。

将SHA-512、SHA-384、SHA-512/256及SHA-512/256算法作为目标

将SHA-256作为目标的指令的目的与对于SHA-512算法的目的相

们列出将SHA-512作为目标的这些指令的可能实现。

在SIMD寄存器为128位,且假定每散列4次迭代及调度指令的情况

SHA512H{Qd,Qd+1},{Qn,Qn+1},{Vm.2D,Vm+1.2D}

SHA512H2{Qd,Qd+1},{Qn,Qn+1},{Vm.2D,Vm+1.2D}

的部分

同:

16x64

同固定

同。我

下:

的指令。

SHA512SU0{Vd.2D,Vd+1.2D},{Vn.2D,Vn+1.2D}

SHA512SU1{Vd.2D,Vd+1.2D},{Vn.2D,Vn+1.2D},{Vm.2D,Vm+1.2D}

请注意,上述指令有可能需要寄存器锁定(register pinning);在微架构

定一个寄存器且暗示第二寄存器。指令将不再属于典型RISC三元

然而,这些类型操作存在优先,例如,在ARM有限公司的Neon载

储多重指令中。

在较宽SIMD寄存器可用的情况下,指令的可能的变体包括:

SHA512H Od,On,Vm.4D

SHA512H2Od,On,Vm.4D

SHA512SU0Vd.4D,Vn.4D

SHA512SU1Vd.4D,Vn.4D,Vm.4D

这些指令的变体亦处理用于散列的迭代及调度更新操作,但是归因于

较宽SIMD寄存器符合三元RISC形式。

使用如FIPS180-4中所述的截断,这些指令可同样地以SHA-384、

512/256及SHA-512/224为目标。

之内指

形式,

入/存

SHA-


发布者:admin,转转请注明出处:http://www.yc00.com/web/1714193366a2399549.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信