Hmacsha1 Trăn

Nếu items[], keys[], values[], iteritems[], iterkeys[]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

Định nghĩa[sửa]

Định nghĩa này được lấy từ RFC 2104

HMAC⁡[K,m]=H⁡[[K′⊕opad]∥H⁡[[K′⊕ipad]∥m]]K′={H⁡[K]nếu K lớn hơn

ở đâu

H là hàm băm mật mã. m là tin nhắn được xác thực. K là khóa bí mật. K' là khóa có kích thước khối bắt nguồn từ khóa bí mật, K; . ‖ biểu thị nối. ⊕ biểu thị loại trừ bitwise hoặc [XOR]. opad là phần đệm bên ngoài có kích thước khối, bao gồm các byte lặp lại có giá trị 0x5c. ipad là phần đệm bên trong có kích thước khối, bao gồm các byte lặp lại có giá trị 0x36. [3]

Thực hiện[sửa]

Mã giả sau minh họa cách HMAC có thể được triển khai. Kích thước khối là 512 bit [64 byte] khi sử dụng một trong các hàm băm sau. SHA-1, MD5, RIPEMD-128. [3]

function hmac is
    input:
        key:        Bytes    // Array of bytes
        message:    Bytes    // Array of bytes to be hashed
        hash:       Function // The hash function to use [e.g. SHA-1]
        blockSize:  Integer  // The block size of the hash function [e.g. 64 bytes for SHA-1]
        outputSize: Integer  // The output size of the hash function [e.g. 20 bytes for SHA-1]

    // Compute the block sized key
    block_sized_key = computeBlockSizedKey[key, hash, blockSize]

    o_key_pad ← block_sized_key xor [0x5c blockSize]   // Outer padded key
    i_key_pad ← block_sized_key xor [0x36 blockSize]   // Inner padded key

    return  hash[o_key_pad ∥ hash[i_key_pad ∥ message]]

function computeBlockSizedKey is
    input:
        key:        Bytes    // Array of bytes
        hash:       Function // The hash function to use [e.g. SHA-1]
        blockSize:  Integer  // The block size of the hash function [e.g. 64 bytes for SHA-1]
 
    // Keys longer than blockSize are shortened by hashing them
    if [length[key] > blockSize] then
        key = hash[key]

    // Keys shorter than blockSize are padded to blockSize by padding with zeros on the right
    if [length[key] < blockSize] then
        return  Pad[key, blockSize] // Pad key with zeros to make it blockSize bytes long

    return  key

Nguyên tắc thiết kế[sửa | sửa mã nguồn]

Thiết kế của đặc tả HMAC được thúc đẩy bởi sự tồn tại của các cuộc tấn công vào các cơ chế tầm thường hơn để kết hợp khóa với hàm băm. Ví dụ: người ta có thể cho rằng có thể đạt được mức bảo mật tương tự mà HMAC cung cấp với MAC = H[key ∥ message]. Tuy nhiên, phương pháp này có một lỗ hổng nghiêm trọng. với hầu hết các hàm băm, thật dễ dàng để thêm dữ liệu vào thông báo mà không cần biết khóa và lấy MAC hợp lệ khác ["tấn công mở rộng độ dài"]. Phương án thay thế, nối thêm khóa bằng cách sử dụng MAC = H[thông báo ∥ khóa], gặp phải vấn đề là kẻ tấn công có thể tìm thấy xung đột trong hàm băm [không khóa] sẽ xảy ra xung đột trong MAC [vì hai thông báo m1 và m2 tạo ra . Sử dụng MAC = H[key ∥ message ∥ key] sẽ tốt hơn, nhưng nhiều tài liệu bảo mật đã đề xuất các lỗ hổng với phương pháp này, ngay cả khi sử dụng hai khóa khác nhau. [1][7][8]

Không có cuộc tấn công mở rộng đã biết nào được tìm thấy đối với đặc tả HMAC hiện tại được định nghĩa là H[key ∥ H[key ∥ message]] vì ứng dụng bên ngoài của hàm băm che giấu kết quả trung gian của hàm băm bên trong. Các giá trị của ipad và opad không quan trọng đối với tính bảo mật của thuật toán, nhưng được xác định theo cách có khoảng cách Hamming lớn với nhau và do đó, các khóa bên trong và bên ngoài sẽ có ít bit chung hơn. Việc giảm bảo mật của HMAC yêu cầu chúng phải khác nhau ít nhất một chút. [cần dẫn nguồn]

Hàm băm Keccak, được NIST chọn là người chiến thắng trong cuộc thi SHA-3, không cần phương pháp lồng nhau này và có thể được sử dụng để tạo MAC bằng cách chỉ cần thêm khóa vào thông báo, vì nó không dễ bị ảnh hưởng bởi độ dài- . [9]

Bảo mật[sửa]

Độ mạnh mật mã của HMAC phụ thuộc vào kích thước của khóa bí mật được sử dụng và tính bảo mật của hàm băm cơ bản được sử dụng. Người ta đã chứng minh rằng tính bảo mật của cấu trúc HMAC liên quan trực tiếp đến các thuộc tính bảo mật của hàm băm được sử dụng. Cuộc tấn công phổ biến nhất đối với HMAC là vũ phu để khám phá khóa bí mật. Về cơ bản, các HMAC ít bị ảnh hưởng bởi va chạm hơn so với các thuật toán băm cơ bản của chúng. [2][10][11] Đặc biệt, Mihir Bellare đã chứng minh rằng HMAC là một PRF theo giả định duy nhất rằng hàm nén là một PRF. [12] Do đó, HMAC-MD5 không mắc phải các điểm yếu giống như trong MD5. [13]

RFC 2104 yêu cầu "các khóa dài hơn B byte trước tiên được băm bằng H" dẫn đến va chạm giả khó hiểu. nếu khóa dài hơn kích thước khối băm [e. g. 64 byte cho SHA-1], thì HMAC[k, m] được tính là HMAC[H[k], m]. Thuộc tính này đôi khi được coi là điểm yếu có thể có của HMAC trong các tình huống băm mật khẩu. người ta đã chứng minh rằng có thể tìm thấy một chuỗi ASCII dài và một giá trị ngẫu nhiên có hàm băm cũng sẽ là một chuỗi ASCII và cả hai giá trị sẽ tạo ra cùng một đầu ra HMAC. [14][15][16]

Năm 2006, Jongsung Kim, Alex Biryukov, Bart Preneel và Seokhie Hong đã chỉ ra cách phân biệt HMAC với các phiên bản rút gọn của MD5 và SHA-1 hoặc các phiên bản đầy đủ của HAVAL, MD4 và SHA-0 từ một hàm ngẫu nhiên hoặc HMAC với một hàm ngẫu nhiên. . Bộ phân biệt khác biệt cho phép kẻ tấn công nghĩ ra một cuộc tấn công giả mạo trên HMAC. Hơn nữa, các bộ phân biệt vi phân và hình chữ nhật có thể dẫn đến các cuộc tấn công tiền ảnh thứ hai. HMAC với phiên bản đầy đủ của MD4 có thể được giả mạo với kiến ​​​​thức này. Các cuộc tấn công này không mâu thuẫn với bằng chứng bảo mật của HMAC, nhưng cung cấp cái nhìn sâu sắc về HMAC dựa trên các hàm băm mật mã hiện có. [17]

In 2009, Xiaoyun Wang et al. đã trình bày một cuộc tấn công khác biệt vào HMAC-MD5 mà không sử dụng các khóa liên quan. Nó có thể phân biệt việc khởi tạo HMAC với MD5 với việc khởi tạo bằng hàm ngẫu nhiên có 297 truy vấn với xác suất 0. 87. [18]

Vào năm 2011, một thông tin RFC 6151 đã được xuất bản để tóm tắt các cân nhắc về bảo mật trong MD5 và HMAC-MD5. Đối với HMAC-MD5, RFC tóm tắt rằng – mặc dù tính bảo mật của bản thân hàm băm MD5 bị xâm phạm nghiêm trọng – “các cuộc tấn công vào HMAC-MD5 hiện được biết đến dường như không chỉ ra một lỗ hổng thực tế khi được sử dụng làm mã xác thực thư”, nhưng nó . [13]

Vào tháng 5 năm 2011, RFC 6234 đã được xuất bản nêu chi tiết về lý thuyết trừu tượng và mã nguồn cho các HMAC dựa trên SHA. [19]

Làm cách nào để tính toán HMAC bằng Python?

Tạo hmac liên quan đến việc sử dụng khóa "riêng tư". .
nhập hashlib
nhập khẩu hmac
khóa = '8oe0i89o7es243t5s234'
message = 'Nội dung cho hàm băm. ';
# Tạo hàm băm
chữ ký = hmac. Mới[
thông điệp,

HMAC trong Python là gì?

Mã xác thực thông báo dựa trên hàm băm [hoặc HMAC] là công cụ để tính toán mã xác thực thông báo bằng cách sử dụng hàm băm mật mã kết hợp với khóa bí mật. You can use an HMAC to verify both the integrity and authenticity of a message.

HMAC mới là gì?

HMAC là cơ chế xác thực thông báo bằng hàm băm mật mã . HMAC có thể được sử dụng với bất kỳ hàm băm mật mã lặp nào, chẳng hạn như. g. , MD5, SHA-1, kết hợp với khóa chia sẻ bí mật. Mô-đun này thực hiện thuật toán HMAC.

Chủ Đề