Hàm băm h là hàm băm một chiều (one-way Hash) với các đặc tính sau: 1/. Với tài liệu đầu vào x, chỉ thu đƣợc một giá trị băm duy nhất z=h(x)
2/. Nếu dữ liệu trong bản tin x bị thay đổi hay bị xoá để thành bản tin x’ thì giá trị băm h(x’)h(x).
3./ Nội dung của tin gốc khó có thể suy ra từ giá trị hàm băm của nó. Nghĩa là: với thông điệp x thì dễ tính đƣợc z=h(x), nhƣng lại khó tính ngƣợc lại đƣợc x nếu biết giá trị băm h(x) (kể cả khi biết hàm băm h)
2.2.2.3.Thuật toán băm SHA
SHA (Secure Hash Function) đƣợc chuẩn hoá năm 1993, sau đó đƣợc chỉnh sửa năm 1995 và đặt tên là SHA-1, từ đó phiên bản cũ đƣợc gọi là SHA-0.
SHA-1 tạo ra mã băm có chiều dài cố định là 160 bit, Về sau có nhiều nâng cấp đối với SHA, chủ yếu là tăng chiều dài mã băm, từ đó xuất hiện các phiên bản khác nhau của SHA bao gồm: SHA-256, SHA-512, SHA-224
Sau đây là mô tả thuật toán SHA-1
Đầu vào: Thông điệp với độ dài tối đa 264 bit. Đầu ra: Giá trị băm có độ dài 160 bit
Thuật toán gồm năm bƣớc thao tác trên các khối 512 bit. - Gắn bit đệm (Append pauding bit)
- Gắn chiều dài (Append length)
- Khởi tạo bộ đệm MD (Initialize MD buffer)
- Xử lý thông tin theo từng khối 512 bit (Process message) - Xuất kết quả (Output)
57
Thông điệp gốc đƣợc gắn thêm các bit thừa để có chiều dài 448 mod 512 bit, tức là tất cả các khối trƣớc có chiều dài bằng nhau là 512 bit, riêng khối cuối cùng là 448 bit. Thông điệp gốc luôn luôn đƣợc chèn thêm các bit, kể cả khi thông điệp gốc có số bit chính xác bằng 448 mod 512 (khi đó ta chèn chuỗi 512 bit). Phần thêm vào cuối dữ liệu gồm một bit 1 và theo sau là các bit 0.
Bƣớc 2: Gắn chiều dài (Append length)
Độ dài của thông điệp ban đầu đƣợc biểu diễn dƣới dạng nhị phân 64 bit và đƣợc thêm vào cuối chuỗi nhị phân mà ta thu đƣợc ở bƣớc 1. Chuỗi nhị phân này đƣợc xử lý nhƣ số nguyên không dấu, cho biết chiều dài của thông điệp gốc khi chƣa thực hiện bƣớc 1.
Kết quả thu đƣợc sau bƣớc này, khối thông tin nhận đƣợc có chiều dài là bội số của 512, đƣợc chia thành các nhóm, mỗi nhóm tƣơng đƣơng với 16 thanh ghi 32 bit (16 x 32 =512 bit).
Bƣớc 3: Khởi tạo bộ đệm MD (Initialize MD buffer)
Bộ đệm MD (Message Digest) là bộ nhớ dung lƣợng 160 bit đƣợc dùng lƣu trữ các giá trị trung gian và kết quả cuối cùng của mã băm. Bộ đệm đƣợc biểu diễn bằng 5 thanh ghi 32 bit với các giá trị khởi tạo ở dạng big-endian (byte có trọng số lớn nhất trong từ nằm ở địa chỉ thấp nhất) và có hai bộ đệm.
Bộ đệm đầu tiên có 5 thanh ghi đƣợc đặt tên là A,B,C,D,E và bộ đệm thứ hai cũng có 5 thanh ghi đặt tên là H0 ,H1,H2,H3,H4 có giá trị nhƣ sau (Hex)
H0=67452301 H1=EFCDAB89 H2=98BADCFE H3=10325476 H4=C3D2E1F0
Bƣớc 4: Xử lý thông tin theo từng khối 512 bit (Process message)
Đây là bƣớc trung tâm của giải thuật gồm 4 vòng lặp, mỗi vòng bao gồm 20 bƣớc. Cấu trúc của 4 vòng lặp là nhƣ nhau, chỉ khác nhau ở các hàm logic f1,f2,f3,f4.
58
Mỗi vòng có đầu vào là khối 512 bit hiện thời cùng với giá trị của đệm thứ nhất A,B,C,D,E. Mỗi vòng sử dụng một biến cộng kt(0 t 79) biểu diễn cho 80 bƣớc của 4 vòng. Tuy nhiên chỉ có 4 giá trị k khác nhau nhƣ sau:
Bƣớc Giá trị k( Hexa) 0 t 19 5A827999 t k 20 t 39 6ED9EBA11 t k 40 t 59 8F1BBCDC t k 60 t 79 CA62C1D6 t k
Đầu ra của vòng 4 (bƣớc 80) đƣợc cộng với giá trị bộ đệm khởi tạo đầu tiên để tạo ra CVq+1.
Thao tác cộng đƣợc thực hiện một cách độc lập ứng với từng thanh ghi trong bộ đệm MD với một từ tƣơng ứng trong CVq, sử dụng phép cộng modulo 232
. Bƣớc 5: Xuất kết quả (Output)
Sau khi tất cả các khối 512 bit đã đƣợc xử lý, đâu ra của khối cuối cùng chính là mã băm. H=H0H1H2H3H4 với H0=H0+A H1=H1+B H2=H2+C H3=H3+D H4=H4+E
59
Hình 2.8 Xử lý thông tin trong SHA-1
Một thuộc tính quan trọng của thuật toán băm SHA-1là mỗi bit trong mã băm đều có quan hệ với tất cả các bit trong thông tin gốc. Việc lặp lại các hàm f một cách phức tạp nhƣ vậy nhằm mục đích bảo đảm rằng dữ liệu đã đƣợc trộn một cách kỹ lƣỡng và do đó rất khó tìm đƣợc hai khối thông tin gốc khác nhau có thể tạo ra cùng một mã băm.
60