Chƣơng 1 : CÁC KHÁI NIỆM CƠ BẢN
1.3.3. Một số hàm băm sử dụng trong chữ ký số
MD5 (Message-Digest algorithm 5) [5] là một hàm băm đƣợc sử dụng phổ biến với giá trị băm 128 bit, đƣợc phát triển bởi Ron Rivest tại đại học MIT.
MD5 chuyển một đoạn thông tin chiều dài bất kỳ thành một giá trị băm chiều dài 128 bit. Giải thuật MD5 gồm 5 bƣớc thao tác trên khối 512 bit.
Mẩu tin đầu vào đƣợc chia thành từng đoạn 512 bit, sau đó đƣợc ghép thêm các bit sao cho chiều dài của nó chia hết cho 512.
Giải thuật MD5:
- Bước 1: Ghép thêm dữ liệu
Hình 1.4: Ghép thêm dữ liệu hàm băm MD5
Ghép thêm các bit sao cho dữ liệu có độ dài l ≡ 448 mod 512 hay l = n * 512 + 448 (n, l nguyên). Luôn thực hiện việc ghép dữ liệu ngay cả khi dữ liệu ban đầu có độ dài mong muốn. Ví dụ, dữ liệu có độ dài 448 đƣợc ghép thêm 512 bit để đƣợc độ dài 960 bit. Số lƣợng bit đƣợc ghép thêm vào nằm trong khoảng từ 1 đến 512. Các bit ghép vào gồm có một bit 1 ở đầu và theo sau là các bit 0.
- Bước 2: Thêm độ dài
Khối dữ liệu ban đầu đƣợc biểu diễn dƣới dạng nhị phân 64 bit (chƣa tính phần đƣợc ghép thêm vào) và đƣợc thêm vào cuối chuỗi nhị phân kết quả của bƣớc 1. Nếu độ dài của khối dữ liệu ban đầu lớn hơn 264 thì chỉ 64 bit thấp đƣợc sử dụng, nghĩa là giá trị đƣợc thêm vào bằng K mod 264. Kết quả có đƣợc từ 2 bƣớc đầu là một khối dữ liệu có độ dài là bội số của 512. Khối dữ liệu đƣợc biểu diễn:
Bằng một dãy L khối 512 bit Y0, Y1,…, YL-1
Bằng một dãy N từ (word) 32-bit M0, M1, MN-1. Vậy N= L x 16 (32 x 16 = 512).
Hình 1.5: Khối dữ liệu sau khi thêm độ dài của hàm băm MD5
512 bits 512 bits 512 bits
… …
512 bits
Y0 Y1 YL-1
L x 512 bits = N x 32 bits
Yq
Khối dữ liệu ban đầu 100……00
0
64b K bits
l=488(mod 512)
- Bước 3: Khởi tạo bộ đệm MD
Một bộ đệm 128 bit đƣợc khởi tạo để lƣu trữ các giá trị băm trung gian và kết quả trong bộ đệm đƣợc biểu diễn bằng 4 thanh ghi 32 bit (ký hiệu A, B, C, D) với các giá trị khởi tạo với những hằng số cố định ở dạng little-endian (byte có trọng số nhỏ nhất trong từ nằm ở địa chỉ thấp nhất) nhƣ sau:
A = 67 45 23 01 B = EF CD AB 89 C = 98 BA DC FE D = 10 32 54 76
Các giá trị này tƣơng đƣơng với các từ 32 bit nhƣ sau: A = 0x01234567
B = 0x89abcdef C = 0xfedcba98 D = 0x76543210
- Bước 4: Xử lý các khối dữ liệu 512 bit
Thuật toán sử dụng hàm nén thực hiện qua 4 vòng lặp, mỗi vòng gồm 16 tác vụ giống nhau, nhƣng sử dụng các phép toán logic khác nhau. Các phép toán logic đƣợc sử dụng bao gồm: AND, OR, XOR và MODULO 232.
- Bước 5: Đầu ra (tính kết quả giá trị băm)
Sau khi xử lý hết L khối 512 bit, đầu ra của lần xử lý thứ L là giá trị băm 128 bit.
Giải thuật MD5 đƣợc tóm tắt nhƣ sau: CV0 = IV
CVq+1 = SUM32[CVq,RFI(Yq,RFH(Yq,RFG(Yq,RFF(Yq,CVq))))] MD = CVL-1
Với các tham số:
IV: bộ đệm gồm 4 thanh ghi ABCD Yq: khối dữ liệu thứ q gồm 512 bit L: số khối 512 bit sau khi ghép dữ liệu
CVq: đầu ra của khối thứ q sau khi áp dụng hàm nén RFx: hàm luận lý sử dụng trong các “vòng” (F,G,H,I) MD: message digest – giá trị băm
Hình 1.6: Xử lý hàm băm MD5
1.3.3.2. H m băm SHA-1
SHA-1 (Secure Hash Algorithm-1) là thuật toán băm một chiều đƣợc cơ quan an ninh Mỹ phát minh năm 1995 và đã trở nên rất phổ biến. SHA-1 là một trong ba thuật toán SHA có cấu trúc khác nhau là: SHA-0, SHA-1 và SHA-2 (SHA-224, SHA- 256, SHA-384, SHA-512).
SHA-1 nhận dữ liệu đầu vào có độ dài tối đa 264 bit và trả ra kết quả là giá trị băm có độ dài 160 bit.
Giải thuật SHA-1 gồm 5 bƣớc: - Bước 1: Ghép thêm dữ liệu
Ghép thêm các bit sao cho dữ liệu có độ dài l ≡ 448 mod 512 hay l = n * 512 + 448 (n,l nguyên). Luôn thực hiện việc ghép dữ liệu dữ liệu ngay cả khi dữ liệu ban đầu có độ dài mong muốn. Ví dụ, dữ liệu có độ dài 448 đƣợc ghép thêm 512 bit để đƣợc độ dài 960 bit. Số lƣợng bit đƣợc ghép thêm vào nằm trong khoảng từ 1 đến 512. Các bit ghép vào gồm có một bit 1 ở đầu và theo sau là các bit 0.
Hình 1.7: Ghép thêm dữ liệu hàm băm SHA-1
- Bước 2: Thêm độ dài
Khối dữ liệu ban đầu đƣợc biểu diễn dƣới dạng nhị phân 64 bit (chƣa tính phần đƣợc ghép thêm vào) và đƣợc thêm vào cuối chuỗi nhị phân kết quả của bƣớc 1. Nếu
Khối dữ liệu ban đầu 100……00
0
64b K bits
l=488(mod 512)
độ dài của khối dữ liệu ban đầu lớn hơn 264 thì chỉ 64 bit thấp đƣợc sử dụng, nghĩa là giá trị đƣợc thêm vào bằng K mod 264. Kết quả có đƣợc từ 2 bƣớc đầu là một khối dữ liệu có độ dài là bội số của 512. Khối dữ liệu đƣợc biểu diễn:
Bằng một dãy L khối 512-bit Y0, Y1,…, YL-1
Bằng một dãy N từ (word) 32-bit M0, M1, MN-1. Vậy N = L x 16 (32 x 16 = 512)
Hình 1.8: Các khối dữ liệu sau khi thêm độ dài của hàm băm SHA-1
- Bước 3: Khởi tạo bộ đệm
Một bộ đệm 160 bit đƣợc khởi tạo để lƣu trữ các giá trị băm trung gian và kết quả. Bộ đệm đƣợc biểu diễn bằng 5 thanh ghi 32 bit (ký hiệu A, B, C, D, E) với các giá trị khởi tạo ở dạng little-endian (byte có trọng số nhỏ nhất trong từ nằm ở địa chỉ thấp nhất) nhƣ sau: A = 01 23 45 67 B = 89 AB CD EF C = FE DC BA 98 D = 76 54 32 10 E = C3 D2 E1 F0
Các giá trị này tƣơng đƣơng với các từ 32 bit nhƣ sau: A = 01 23 45 67
B = 89 AB CD EF C = FE DC BA 98 D = 76 54 32 10 E = C3 D2 E1 F0
Bước 4: Xử lý các khối dữ liệu 512 bit
Thuật toán sử dụng hàm nén thực hiện qua 4 vòng lặp có cấu trúc giống nhau với tất cả 80 bƣớc nhƣng sử dụng các phép toán logic khác nhau. Các phép toán logic đƣợc sử dụng bao gồm: AND, OR, XOR và MODULO 232.
- Bước 5: Đầu ra
Sau khi xử lý hết L khối 512-bit, đầu ra của lần xử lý thứ L là giá trị băm 160 bit.
Giải thuật SHA-1 đƣợc tóm tắt nhƣ sau: CV0 = IV
CVq+1 = SUM32(CVq, ABCDEq)
512 bits 512 bits 512 bits
… …
512 bits
Y0 Y1 YL-1
L x 512 bits = Nx 32 bits
MD = CVL Với các tham số:
IV: giá trị khởi tạo của bộ đệm gồm 5 thanh ghi ABCDE L: số khối 512-bit sau khi ghép dữ liệu
ABCDEq: đầu ra của hàm nén trên khối thứ q MD: giá trị băm
SUM32: cộng modulo 232 trên từng từ của đầu vào
So sánh MD5 và SHA-1
- Giống nhau:
Cả hai thuật toán đều có thể nhận mọi dạng dữ liệu đầu vào và đều độn thêm bit giả để thành khối chia hết cho 512 bit, nhƣng SHA-1 sử dụng hàm phi tuyến f cho cả 4 vòng.
Cả hai thuật toán đều gồm 5 bƣớc đƣợc mô tả đơn giản và dễ cài đặt.
- Khác nhau:
Về thuật toán: MD5 sử dụng mỗi hằng số duy nhất cho mỗi bƣớc biến đổi, SHA sử dụng mỗi hằng số cho mỗi vòng biến đổi.
Trong hàm phi tuyến thứ 2 của MD5 có sự cải tiến so với MD4, SHA sử dụng lại hàm phi tuyến của MD4
Trong MD5 với mỗi bƣớc đƣợc cộng kết quả của bƣớc trƣớc đó. Sự khác biệt với SHA là cột thứ 5 đƣợc cộng
Đầu vào của MD5 là chuỗi có độ dài bất kỳ còn SHA-1 là chuỗi có độ dài tối đa 264 bit.
Tốc độ: SHA-1 thực hiện nhiều hơn 16 bƣớc và thao tác trên thanh ghi 160 bit nên tốc độ thực hiện chậm hơn.
Độ an toàn: để tạo ra thông điệp có giá trị băm cho trƣớc cần 2128 thao tác với MD5 và 2160 thao tác với SHA-1. Để tìm 2 thông điệp cùng giá trị băm, cần 264 thao tác với MD5 và 280 thao tác với SHA-1.