khóa
MAC (Message Authentication Code) là phương pháp bảo vệ chống sửa đổi bất hợp pháp nội dung bản tin. MAC được thực hiện bằng các hàm băm một chiều kết hợp với khóa bí mật.
Hình 4.12: Xác thực tính toàn vẹn dựa trên mã xác thực bản tin MAC
Lý do xây dựng mã xác thực bản tin MAC là vì bản thânh MD không cung cấp bất kỳ bảo vệ nào chống lại việc thay đổi bất hợp pháp nội dung của bản tin. Khi một người nào đó thay đổi nội dung của bản tin trên đường truyền dẫn thì anh ta cũng có thể tính lại giá trị hash MD5 hay SHA dựa trên nội dung bản tin đã thay đổi đó. Như vậy, tại phía thu, giá trị hash của bản tin nhận được vẫn hoàn toàn hợp lệ.
Phía phát Phía thu
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 Keyed Hash Funtion Keyed Hash Funtion MAC MAC Key Key 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 Keyed Hash Funtion Keyed Hash Funtion MAC MAC Key Key MAC MAC Kênh truyền So sánh
Để giải quyết vấn đề này, phải sử dụng một khóa bí mật trong quá trình tính vân tay của bản tin thì mới đảm bảo chống lại những thay đổi bất hợp pháp. Phía thu (nơi có khóa bí mật) tạo ra một giản lược thông điệp hợp lên (valid MD), gọi là mã xác thực bản tin MAC. Phía thu sử dụng khóa bí mật để xác định tính hợp lệ của bản tin bằng cách tính lại giá trị MAC và so sánh với giá trị MAC mà phía phát truyền đi. Đến đây, vấn đề là xây dựng các hàm băm một chiều sử dụng khóa dựa trên các hàm băm đã trình bày ở trên.
RFC 2104 đưa ra một phương án để xây dựng các hàm băm có sử dụng khóa trên cơ sở các hàm băm như MD5, SHA.
Hình 4.13: Quá trình tạo mã xác thực bản tin MAC
Phía trước bản tin cần xác thực, thêm vào 512 bit khóa bên trong (inner key). Khóa này được hình thành bằng cách thêm các bit đêm (padding) vào khóa bí mật cho đủ 512 bit, sau đó XOR khối này với các giá trị 0x36. Để đảm bảo tính an toàn cao nhất thì độ dài của khóa bí mật phải lớn hơn hoặc bằng độ dài của giá trị hash (128 bit đối với MD5 và 160 bit đối với SHA).
Bản tin bây giờ được đưa tới hàm băm. Vì giá trị hash của khối dữ liệu trước luôn đóng vai trò là vectơ khởi tạo cho khối sau, nên hàm băm thực hiện trên khối inner key
512 bit 0x36…0x36
0x36…0x36
Key
Key PadPad
0x5C…0x5C 0x5C…0x5C
Inner Key
Inner Key DocumentDocument
Hàm băm MD5/SHA Hàm băm MD5/SHA
Outer Key
Outer Key HashHash
Hàm băm MD5/SHA Hàm băm MD5/SHA
Hash
Hash MACMAC
XOR
sẽ tạo ra một vectơ khởi tạo để thực hiện hash cho bản tin gốc ban đầu, giá trị của vectơ khởi tạo này chỉ phụ thộc vào khóa bí mật mà thôi. Như vây, khi khóa bí mật giữ nguyên thì tất cả các bản tin đều có thể được ký sử dụng cùng một vectơ khởi tạo bí mật.
Tương tự đối với khóa ngoài (outer key). Khóa ngoài được hình thành bằng cách XOR khóa bí mật (đã chèn các bit đệm) với các giá trị 0x5C. Khi đó, hàm băm thực hiện trên khối outer key sẽ tạo ra một vectơ khởi tạo để thực hiện hash cho chính giá trị hash tính ở vòng thứ nhất.
Thông thường giá trị MAC cuối cùng được tạo ra bằng cách cắt ngán giá trị hash thu được bởi MD5 (128 bit) và SHA (160 bit) xuống còn 96 bit. Mặc dù việc cắt ngắn này làm giảm đáng kể số các tổ hợp cần thử đối với một tấn công kiểu brute fore, nhưng nó có tác dụng che dấu trạng thái bên trong của thuật toán băm và sẽ khó khăn hơn rất nhiều cho kẻ tấn công để có thể đi từ đầu ra của vòng băm thứ hai tới kết quả trung gian của vòng băm thứ nhất.
Phưong pháp xác thực tính toàn vẹn sử dụng MAC có ưu điểm là thực hiện nhanh và hiệu quả, vì việc tạo MAC dựa trên các hàm băm tương đối đơn giản, do đó thường được sử dụng để xác thực các cụm dữ liệu ở tốc độ cao. Nhược điểm là phía thu phải biết được khóa bí mật thì mới xác định được tính toàn vẹn của bản tin, dẫn đến vấn đề phân phối khóa một cách an toàn.