SHA-512的轮函数计算,哈希函数是支撑单向性最重要的步骤,80轮计算是否可逆我不是很清楚,因为在我的脑子里所有关系式最终可以变成y=f(x),只不过有可能是离散的,有可能是连续的.
1. 基本步骤

2. 辅助公式
在
的计算1
2
3
4/* SIGMA0 */
uint64_t SIGMA0(uint64_t x) {
return ROTR(x, 28) ^ ROTR(x, 34) ^ ROTR(x, 39);
} 的计算1
2
3
4/* SIGMA1 */
uint64_t SIGMA1(uint64_t x) {
return ROTR(x, 14) ^ ROTR(x, 18) ^ ROTR(x, 41);
}Ch函数的实现
1
2
3
4/* Ch ... choose */
uint64_t Ch(uint64_t x, uint64_t y, uint64_t z) {
return (x & y) ^ (~x & z) ;
}Maj函数的实现
1
2
3
4/* Maj ... majority */
uint64_t Maj(uint64_t x, uint64_t y, uint64_t z) {
return (x & y) ^ (x & z) ^ (y & z);
}
3. 轮函数计算
这里说明一下K512常数数组的来源: 对自然数前80个素数开立方根,取小数部分的前64位。(备注:轮函数计算是80次)
1 |
|
v1.4.14