Nếu items(), keys(), values(), iteritems(), iterkeys() và itervalues() được gọi mà không có sửa đổi can thiệp nào đối với từ điển, các danh sách sẽ tương ứng trực tiếp
Trong mật mã học, HMAC (đôi khi được mở rộng dưới dạng mã xác thực thông báo băm có khóa hoặc mã xác thực thông báo dựa trên hàm băm) là một loại mã xác thực thông báo (MAC) cụ thể liên quan đến hàm băm mật mã và khóa mật mã bí mật. Như với bất kỳ MAC nào, nó có thể được sử dụng để xác minh đồng thời cả tính toàn vẹn dữ liệu và tính xác thực của thông báo
HMAC có thể cung cấp xác thực bằng cách sử dụng bí mật chung thay vì sử dụng chữ ký số với mật mã bất đối xứng. Nó đánh đổi nhu cầu về cơ sở hạ tầng khóa công khai phức tạp bằng cách ủy quyền trao đổi khóa cho các bên liên lạc, những người chịu trách nhiệm thiết lập và sử dụng một kênh đáng tin cậy để đồng ý về khóa trước khi liên lạc
Chi tiết[sửa]
Bất kỳ hàm băm mật mã nào, chẳng hạn như SHA-2 hoặc SHA-3, có thể được sử dụng để tính toán HMAC; . g. HMAC-SHA256 hoặc HMAC-SHA3-512). Độ mạnh mã hóa của HMAC phụ thuộc vào độ mạnh mã hóa của hàm băm cơ bản, kích thước đầu ra hàm băm của nó cũng như kích thước và chất lượng của khóa. [1]
HMAC sử dụng hai lần tính toán hàm băm. Trước khi vượt qua, khóa bí mật được sử dụng để lấy hai khóa - bên trong và bên ngoài. Tiếp theo, bước đầu tiên của thuật toán băm tạo ra một hàm băm bên trong bắt nguồn từ thông báo và khóa bên trong. Lần thứ hai tạo ra mã HMAC cuối cùng bắt nguồn từ kết quả hàm băm bên trong và khóa bên ngoài. Do đó, thuật toán cung cấp khả năng miễn dịch tốt hơn trước các cuộc tấn công mở rộng chiều dài
Hàm băm lặp (hàm sử dụng cấu trúc Merkle–Damgård) chia thông báo thành các khối có kích thước cố định và lặp lại chúng bằng hàm nén. Ví dụ: SHA-256 hoạt động trên các khối 512 bit. Kích thước đầu ra của HMAC giống như kích thước của hàm băm bên dưới (e. g. , 256 và 512 bit trong trường hợp SHA-256 và SHA3-512, tương ứng), mặc dù nó có thể bị cắt bớt nếu muốn
HMAC không mã hóa tin nhắn. Thay vào đó, tin nhắn (được mã hóa hoặc không) phải được gửi cùng với hàm băm HMAC. Các bên có khóa bí mật sẽ tự băm lại tin nhắn và nếu nó là xác thực, thì giá trị băm nhận được và tính toán sẽ khớp với nhau
Định nghĩa và phân tích cấu trúc HMAC lần đầu tiên được xuất bản vào năm 1996 trong một bài báo của Mihir Bellare, Ran Canetti và Hugo Krawczyk,[1][2] và họ cũng đã viết RFC 2104 vào năm 1997. [3] Bài báo năm 1996 cũng định nghĩa một biến thể lồng nhau gọi là NMAC (Nested MAC). FIPS PUB 198 khái quát hóa và tiêu chuẩn hóa việc sử dụng HMAC. [4] HMAC được sử dụng trong IPsec,[2] Các giao thức SSH và TLS và cho Mã thông báo web JSON