Các lượt nộp
    Danh sách bài
    Trang chủ
    Báo lỗi

    solution

    Đề bài: [An toàn thông tin] Tự cài đặt HMAC-SHA256

    HMAC (Hash-based Message Authentication Code) là cơ chế dùng hàm băm để tạo mã xác thực thông điệp, đảm bảo cả tính toàn vẹn lẫn xác thực nguồn gốc. Trong bài này, bạn cài đặt HMAC-SHA256 thủ công theo chuẩn RFC 2104 (không được dùng thư viện hmac có sẵn, chỉ dùng hashlib.sha256).

    SHA-256 có kích thước khối B=64B = 64B=64 byte. Cho khóa key và thông điệp message (chuỗi UTF-8), thuật toán như sau:

    1. Nếu độ dài key (tính theo byte UTF-8) lớn hơn BBB, thay key bằng SHA256(key)\text{SHA256}(key)SHA256(key) (32 byte).
    2. Đệm thêm byte 0x00 vào cuối key cho đủ đúng B=64B = 64B=64 byte, gọi kết quả là KKK.
    3. Tính ipad=K⊕(0x36×B)ipad = K \oplus (\texttt{0x36} \times B)ipad=K⊕(0x36×B) và opad=K⊕(0x5c×B)opad = K \oplus (\texttt{0x5c} \times B)opad=K⊕(0x5c×B) (XOR từng byte).
    4. Kết quả HMAC: HMAC=SHA256(opad ∥ SHA256(ipad ∥ message))\text{HMAC} = \text{SHA256}\big(opad \,\Vert\, \text{SHA256}(ipad \,\Vert\, message)\big)HMAC=SHA256(opad∥SHA256(ipad∥message))

    trong đó ∥\Vert∥ là nối byte.

    Hãy in ra giá trị HMAC-SHA256 dạng hex.

    Ví dụ: key = "key", message = "The quick brown fox jumps over the lazy dog" cho kết quả HMAC-SHA256 chuẩn, có thể kiểm chứng bằng thư viện hmac của Python (kết quả phải trùng khớp).

    • Định dạng đầu vào:
      • Dòng 1: chuỗi key (có thể rỗng, có thể dài hơn 64 byte).
      • Dòng 2: chuỗi message (có thể rỗng).
    • Định dạng đầu ra:

      In ra duy nhất một dòng: giá trị HMAC-SHA256 dạng chuỗi hex 64 ký tự thường.

    Ví dụ:

    Đầu vào:

    
    
    

    Đầu ra:

    b613679a0814d9ec772f95d778c35fc5ff1697c493715653c6c712144292c5ad
    

    Đầu vào:

    key
    The quick brown fox jumps over the lazy dog
    

    Đầu ra:

    f7bc83f430538424b13298e6aa6fb143ef4d59a14946175997479dbc2d1a3cd8
    

    Đang tải editor...