SHA-1 算法
以下有关 SHA 算法的说明译自安全散列标准(Secure Hash Standard)SHA-1 文档,该文档可从
NIST 网站下载(www.itl.nist.gov/fipspubs/fip180-1.htm)。该算法采用十六个 32 位字 Mt(0 ≤ t ≤
15)作为输入数据,如表 1,2 和 4 所示,分别被用于 Compute Next Secret、Copy Scratchpad
和 Read Authenticated Page 命令。SHA 算法涉及到一个称为 Wt(0 ≤ t ≤ 79)的八十个 32 位字的
序列,一个称为 Kt(0 ≤ t ≤ 79)的八十个 32 位字的序列,一个布尔函数 ft(B,C,D)(0 ≤ t ≤
79),其中 B,C 和 D 为 32 位字,以及另外三个 32 位字,称为 A,E 和 TMP。SHA 算法用到的
操作有不带进位的算术加(“+”),逻辑反或 1 的补码(“\”),异或(“⊕”),逻辑与
(“∧”),逻辑或(“∨”),赋值(“:=”),以及 32 位字的循环移位。表达式“Sn(X)”表
示将 X 向左循环移 n 位,X 是一个 32 位字。
函数 ft 定义如下:
ft (B,C,D) = (B ∧ C) ∨ ((B\) ∧ D) (0 ≤ t ≤ 19)
B ⊕ C ⊕ D (20 ≤ t ≤ 39)
(B ∧ C) ∨ (B ∧ D) ∨ (C ∧ D) (40 ≤ t ≤ 59)
B ⊕ C ⊕ D (60 ≤ t ≤ 79)
序列 Wt (0 ≤ t ≤ 79)定义如下:
Wt := Mt (0 ≤ t ≤ 15)
S1(Wt-3 ⊕ Wt-8 ⊕ Wt-14 ⊕ Wt-16) (16 ≤ t ≤ 79)
序列 Kt(0 ≤ t ≤ 79)定义如下:
Kt := 5A827999h (0 ≤ t ≤ 19)
6ED9EBA1h (20 ≤ t ≤ 39)
8F1BBCDCh (40 ≤ t ≤ 59)
CA62C1D6h (60 ≤ t ≤ 79)
变量A、B、C、D、E初始化如下:
A := 67452301h
B := EFCDAB89h
C := 98BADCFEh
D := 10325476h
E := C3D2E1F0h
当t从0循环至79,执行了下面的一系列计算后,160位MAC是A,B,C,D和E的串联(不考虑任何进位):
TMP := S5(A) + ft(B,C,D) + Wt + Kt + E
E := D
D := C
C := S30(B)
B := A
A := TMP