Khi mô tả hàm băm chúng tôi sẽ sử dụng các ký hiệu đã đ−ợc sử dụng khi mô tả các thuật toán chữ ký số GOST P 34.10-94 và GOST P 34.10-2001, ngoài ra, gọi M là dãy nhị phân cần băm; h- hàm băm, ánh xạ dãy M vào từ h(M) ∈ V256(2); EK(A) - kết quả phép băm từ A với khoá K bởi thuật toán mã khối GOST 28147-89 ở chế độ thay thế đơn giản; H - vecto khởi điểm để băm.
Mô tả chung Chúng ta hiểu hàm băm là một ánh xạ h: B* → V256(2). Để định nghĩa hàm băm cần có: • • • • • • •
thuật toán tính băm theo từng b−ớc κ κ: V256(2) x V256(2) → V256(2)
mô tả quá trình lặp để tính giá trị hàm băm Thuật toán tính băm theo từng b−ớc gồm 3 phần:
tạo 4 khoá có 256 bit
biến đổi mã: mã các từ con 64 bit của từ H bằng các khoá Ki (i=1, 2, 3, 4) bằng thuật toán GOST 28147-89 ở chế độ thay thế đơn giản
ánh xạ xáo trộn kết quả mã Tạo khoá Xét X=(b256, b255,..., b1) ∈ V256(2). Giả sử X = x4||x3||x2||x1 = η16||η15||...||η1=ξ32||ξ31||...||ξ1 với xi ∈V64(2), i=1..4; ηj∈V16(2), j=1..16; ξk∈ V8(2), k=1..32. Ký hiệu A(X)= (x1⊕ x2)||x4||x3||x2.
Biến đổi P: V256(2) → V256(2) chuyển từ ξ32||ξ31||...||ξ1 thành từ ξϕ(32)||ξϕ(31)||...||ξϕ(1)
với ϕ(i+1+4(k-1))=8i+k, i=0..3, k=1..8. Để tạo khoá cần sử dụng các dữ liệu sau:
các từ H, M ∈V256(2);
các hằng số: các từ Ci (i=2, 3, 4) có các giá trị C2=C4=0256 và C3=180811602411608(0818)21808(0818)4(1808)4 còn C1??
Thuật toán tính khoá nh− sau: 1. Gán các giá trị i=1, U=H, V=M 2. Thực hiện W=U ⊕ V, K1=P(W)
5
C.U.Mfhbxtd, D.D. Ujyxfhjd, H.T.Cthjd, Jcyjds cjdhtvtyyjq rhbgnjuhfabb,
3. Gán i=i+1
4. Kiểm tra điều kiện i=5. Nếu đúng nhảy đến b−ớc 7, sai thì tiếp b−ớc 5. 5. Tính U=A(U) ⊕ Ci, V=A(A(V)), W=U ⊕ V, Ki=P(W).
6. Chuyển về b−ớc 3 7. Kết thúc
Biến đổi mã
Đây là giai đoạn mã 4 từ con 64 bit của từ H bởi các khoá Ki (i=1, 2, 3, 4). Chúng ta cần các dữ liệu sau: H=h4||h3||h2||h1 , hi∈V64(2) và bộ khoá Ki (i=1, 2, 3, 4). Sau khi mã ta có si =EKi (hi),i=1,2,3,4 và vecto kết quả là: S= s4||s3||s2||s1 .
Biến đổi trộn
Trộn dãy thu đ−ợc nhờ thanh dịch. Các dữ liệu ban đầu là các từ H, M, S ∈ V256(2). Biến đổi ∉: V256(2) → V256(2) chuyển từ η16||η15||...||η1, ηi∈V16(2), i=1..16 thành từ
η1⊕η2⊕η3⊕η4⊕η13⊕η16||η16 ||..||η2
Khi đó giá trị băm từng b−ớc là từ
κ(M,H) = ∉61
(H⊕∉(M⊕∉12
(S))) với ∉i
là biến đổi ∉ làm i lần.
Tính giá trị băm
Giá trị ban đầu để tính giá trị hàm băm là dãy M ∈ B*. Tham số là vecto khởi điểm H- một từ cố định tuỳ ý từ V256(2).
Thủ tục tính hàm h ở mỗi vòng lặp sử dụng các đại l−ợng sau:
M ∈ B* - phần của dãy M, ch−a đi qua hàm băm ở những vòng lặp tr−ớc H ∈V256(2) - giá trị hiện tại của hàm băm
Σ∈V256(2) - giá trị hiện tại của tổng kiểm tra
L ∈V256(2) - giá trị hiện tại của độ dài phần của dãy M đã đ−ợc xử lý ở các vòng lặp tr−ớc.
Thuật toán tính hàm h đ−ợc chia làm 3 giai đoạn:
Giai đoạn 1.Gán các giá trị ban đầu cho các đại l−ợng hiện tại M:=M; H:=H; Σ :=0256; L:=0256
Giai đoạn 2.Kiểm tra điều kiện |M| > 256. Nếu đúng thì chuyển sang b−ớc 3. Ng−ợc lại thì thực hiện các phép tính sau:
L:=<L+|M|>256; M’:=0256-|M|||M; Σ:=Σ [+] M’; H:=κ(M’,H); H:=κ(L,H); H:=κ(Σ,H)
Kết thúc thuật toán. H là giá trị hàm băm.
Giai đoạn 3. Tính từ con MS∈V256(2) của từ M (M=MP||MS). Tiếp tục thực hiện dãy phép tính:
H:=κ(M’,H); L:=<L+256>256; Σ:= Σ [+]MS; M:=MP. Chuyển lên b−ớc 2.