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条)