a) Giản lược thông điệp MD (Message Digest)
MD là phương pháp sử dụng để phát hiện lỗi truyền dẫn, nó được thực hiện bằng các hàm băm một chiều. MD có độ dài cố định hoạt động như một dấu vân tay duy nhất cho một bản tin có độ dài tùy ý. Với độ dài thông thường của một MD từ 128 bit đến 256 bit thì có thể đại diện cho 1038 đến 1077 giá trị vân tay khác nhau. Con số này là cực lớn nếu lấy một ví dụ như sau: giả sử trong thế kỷ 21, dân số 10 tỷ người, mỗi người trong một ngày viết 100 văn bản, như vậy tổng số văn bản mới chỉ là 365.1014. Nếu mỗi văn bản có một dấu vân tay xác định thì cũng chỉ có một phần rất nhỏ trong số 1038 khả năng có thể của MD được sử dụng.
b) Các hàm băm một chiều
Các hàm băm một chiều được sử dụng để tính MD. Một hàm băm được coi là tốt nếu thỏa mãn các yêu cầu sau:
- Việc tính toán MD đơn giản, hiệu quả, cho phép tính MD của các bản tin có kích thước nhiều GB.
- Không có khả năng tính ngược lại bản tin ban đầu khi biết giá trị MD của nó. Đây là lý do tại sao hàm băm được gọi là một chiều.
- Giá trị MD phải phụ thuộc vào tất cả các bit của bản tin tương ứng. Dù chỉ một bit trong bản tin bị thay đổi, thêm vào hoặc xóa bớt thì sẽ có khoảng 50% các bản tin trong MD sẽ thay đổi giá trị một cách ngẫu nhiên. Hình 4.9 diễn tả điều này. Hàm băm có khả năng thực hiện ánh xạ message - to - digest giả ngẫu nhiên, nghĩa là với hai bản tin gần giống hệt nhau thì mã hash của chúng lại hoàn toàn khác nhau.
- Do bản chất giả ngẫu nhiên của hàm băm và số lượng cực lớn các giá trị hash có thể có, nên hầu như không có khả năng hai bản tin phân biệt có cùng giá trị hash. Vì vậy, với các ứng dụng thực tế hiện nay, có thể coi đầu ra của hàm băm thực hiện trên một bản tin là dấu vân tay duy nhất của bản tin đó.
Hình 4.9: Một bít thay đổi trong bản tin dẫn đến 50% các bít MD thay đổi
Có hai hàm băm thông dụng là MD5 (Message Digest #5) và SHA (Secured Hash Funtion). MD5 do Ron Rivest (RSA Sercurity Inc) phát minh, tính giá trị hash 128 bit từ một bản tin nhị phân độ dài tùy ý. SHA được phát triển bởi NIST (US National Institute of Standards and Technology) với sự cộng tác của NSA (National Security Agency). SHA-1 tính giá trị hash 160 bit từ một bản tin nhị phân có độ dài tùy ý. Thuật toán này tương tự như MD5 nhưng an toàn hơn vì kích thước hash lớn hơn. Thuật toán SHA-2 với các kích thước hash là 256, 384 và 512 bít đã được NIST công bố vào tháng 10 năm 2000 để thích ứng với các khóa có độ dài lớn của thuật toán AES.
1 0 1 0 1 1 1 0 0 1 0 1 0 0 1 1 0 1 1 1 0 1 0 0 0 1 0 1 0 1 1 0 1 0 1 1 1 0 1 1 0 1 0 0 1 1 0 1 1 1 0 1 0 0 0 1 0 1 0 1 Hàm Hash Hàm Hash 1 0 1 1 0 1 0 0 0 1 0 0
Tài liệu hoặc bản tin (Độ dài tùy ý)
Message Digest (độ dài cố định) Hàm băm một chiều
Hình 4.10: Các hàm băm thông dụng MD5, SHA
c) Cấu trúc cơ bản của các hàm băm một chiều
Hình 4.12 cho thấy cấu trúc cơ bản của các hàm băm một chiều MD5 và SHA.
Hình 4.11: Cấu trúc cơ bản của MD5, SHA
MD5 và SHA là các thuật toán mã khối:
- Cả MD5 và SHA đều làm việc với các khối dữ liệu đầu vào 512 bit. Như vậy, bản tin ban đầu được phân thành số nguyên lần các khối dữ liệu này. Điều này thực hiện bằng cách thêm một trường L (Document Length: độ dài bản tin) 64 bit vào cuối bản tin, sau đó chen 0÷512 bit
1 0 1 0 1 1 1 0 0 1 0 1 0 0 1 1 0 1 1 1 0 1 0 0 0 1 0 1 0 1 1 0 1 0 1 1 1 0 0 1 0 1 0 0 1 1 0 1 1 1 0 1 0 0 0 1 0 1 0 1 MD5 SHA 128 bit 160 bit
Tài liệu hoặc bản tin (Độ dài tùy ý)
Message Digest: Vân tay hàm băm Hàm băm một chiều
Document Pad L
Khối 1
512 bit Khối 2512 bit Khối N512 bit
Hàm băm
MD5/SHA MD5/SHAHàm băm MD5/SHAHàm băm H a s h H a s h H a s h I V N x 512 bit
IV 128/160 bit Initialization vector P Padding
đệm vào trước trường L để khối dữ liệu cuối cùng có độ dài đúng 512 bit.
- Việc xử lý theo từng khối này cho phép tính giá trị hash của các bản tin lớn theo kiểu nối tiếp.
Vectơ khởi tạo IV và giá trị hash:
- Ngoài 512 bit khối dữ liệu đầu vào, hàm băm còn yêu cầu một vectơ khởi tạo IV (Initialization Vector) có kích thước bằng kích thước của hash (128 bit đối với MD5 và 160 bit đối với SHA-1).
- Trong vòng tính đầu tiên, IV lấy giá trị định nghĩa trước trong các chuẩn MD5, SHA. Một giá trị hash sẽ được tính dựa trên khối 512 bit đầu vào đầu tiên. Giá trị hash này sẽ đóng vai trò IV trong vòng tính thứ hai. Quá trình tiếp tục với giá trị hash của vòng trước là IV của vòng sau. Sau khi khối dữ liệu 512 bit cuối cùng được xử lý thì giá trị hash tính được chính là MD (vân tay) của toàn bộ bản tin.