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] Xích băm Lamport

    Xích băm Lamport (Lamport hash chain) là kỹ thuật dùng để sinh ra chuỗi các giá trị OTP dùng-một-lần: xuất phát từ một giá trị hạt giống (seed) x0x_0x0​ (một chuỗi ký tự ASCII), người ta tính liên tiếp

    xi=SHA-256(xi−1),i=1,2,…,nx_i = \text{SHA-256}(x_{i-1}), \quad i = 1, 2, \ldots, nxi​=SHA-256(xi−1​),i=1,2,…,n

    trong đó phép băm được áp dụng lên chuỗi byte (không phải chuỗi hex) của xi−1x_{i-1}xi−1​: cụ thể x0x_0x0​ là chuỗi seed mã hoá UTF-8, còn x1,x2,…x_1, x_2, \ldotsx1​,x2​,… là các chuỗi 32 byte (kết quả thô của SHA-256, không qua bước chuyển sang hex ở giữa các bước). Giá trị cuối cùng xnx_nxn​ thường được máy chủ lưu lại làm "chốt xác thực" (anchor) công khai cho việc xác thực OTP về sau.

    Cho seed và số nguyên n≥1n \ge 1n≥1, hãy tính xnx_nxn​ và in ra dưới dạng chuỗi hex (chữ thường).

    Ví dụ: với seed = hello, n=1n=1n=1, ta có x1=SHA-256("hello")=x_1 = \text{SHA-256}(\texttt{"hello"})=x1​=SHA-256("hello")= 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824.

    • Định dạng đầu vào:

      Gồm 2 dòng:

      • Dòng 1: seed — chuỗi ASCII in được, không chứa khoảng trắng, độ dài từ 1 đến 200 ký tự.
      • Dòng 2: số nguyên nnn (1≤n≤2000001 \le n \le 2000001≤n≤200000).
    • Định dạng đầu ra:

      Một dòng duy nhất: chuỗi hex chữ thường gồm đúng 64 ký tự, biểu diễn xnx_nxn​.

    Ví dụ:

    Đầu vào:

    a
    1
    

    Đầu ra:

    ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb
    

    Đầu vào:

    Hello
    10
    

    Đầu ra:

    44f6720b3d9f0c25411bce1914f838fa5aa6535fbb215eea92a2d897e6e727d6
    

    Đang tải editor...