Mã xác thực thông điệp băm dựa trên, hoặc HMAC, là một khối xây dựng quan trọng để chứng minh rằng dữ liệu được truyền giữa các thành phần của một hệ thống đã không bị giả mạo.
HMAC là một công nghệ mã hóa được sử dụng rộng rãi. Gần đây tôi đã xem qua việc sử dụng nó trong một hệ thống RFID.
Có lẽ việc sử dụng phổ biến nhất của HMAC là trong Layer Security TLS-Vận tải, trước đây gọi là SSL. Này được sử dụng mỗi khi bạn truy cập một "https: //" URL trong trình duyệt của bạn. Để thực sự hiểu HMAC, bạn có thể đọc các RFC.
Tuy nhiên, tôi sẽ cung cấp cho bạn những chiếc nhẫn giải mã bí mật ở đây. Bạn cần phải hiểu Message Authentication Code (MAC) đầu tiên. Hãy tưởng tượng tôi có một khối dữ liệu, có thể là một tập tin video. Tôi muốn gửi nó cho bạn và tôi sẽ như bạn để có thể chứng minh rằng nó đã được cố định ở quá cảnh, và rằng tôi là người đã gửi nó cho bạn.
Ý tưởng đằng sau MAC là tôi tính một hàm băm mật mã, có lẽ MD5 hoặc SHA-1, hơn cả các khối dữ liệu mà tôi muốn gửi, và một khóa bí mật mà chúng tôi chia sẻ. Sau đó tôi chuyển các khối dữ liệu và băm cho bạn. Bạn gắn thêm các chia sẻ cùng một khóa bí mật để các khối dữ liệu và tính toán cùng một hàm băm. Nếu bạn nhận được kết quả hash giống như tôi truyền đi, sau đó tin nhắn chưa bị hỏng, và nó đến từ những người biết chia sẻ bí mật-có lẽ là tôi. Về mặt toán học, chúng tôi có thể viết
MAC = H (key || message)
Trong công thức này, H biểu thị hàm băm mật mã của chúng tôi (MD5, SHA1, vv); || biểu thị nối; quan trọng là chia sẻ của chúng tôi bí mật; và thông điệp là các khối dữ liệu, chúng tôi muốn gửi.
Có gì sai với MAC? Vâng, nó biến ra rất nhiều người đã dành rất nhiều thời gian để tìm ra cách để thay đổi dữ liệu trong một thông báo nhưng nó có kết quả tương tự hàm băm. Đặc biệt, nó chỉ ra rằng nếu:
H (message1) == H (message2)
Sau đó, điều này cũng đúng:
H (key || message1) == H (key || message2)
Bởi bản chất của nó, một hàm băm có va chạm như vậy mà nhiều tin nhắn băm cùng giá trị. Vấn đề ở đây là một người nào đó có thể sửa đổi được thông báo mà không biết chìa khóa, cung cấp cho nó cho bạn, và nó dường như là từ tôi.
HMAC giải quyết vấn đề này bằng cách sử dụng các công trình sau đây:
HMAC = H (key1 || H (khóa2 || nhắn ))
Không tấn công được biết đến cho phép kẻ tấn công để sửa đổi các thông điệp và có giá trị HMAC cùng mà không biết key1 và khóa2 giá trị.
HMAC là một chìa khóa để SSL / TLS bảo mật, vì những lý do được mô tả trong email này gần đây bởi một kỹ sư tại Microsoft. Trong ngắn, HMAC là một công cụ mạnh mẽ để chứng thực các dữ liệu đó là khá dễ dàng để thực hiện và hiểu được.
đang được dịch, vui lòng đợi..
