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ác minh Merkle Proof

    Một Merkle Proof (đường dẫn xác minh) cho phép chứng minh một giao dịch (lá) thuộc về một Merkle root đã biết mà không cần biết toàn bộ cây. Proof gồm một dãy các hash anh em (sibling) kèm vị trí tương đối (trái L hoặc phải R so với nút hiện tại), đi từ lá lên gốc.

    Xuất phát từ current = leaf (mã băm giao dịch cần xác minh). Với mỗi bước (sibling,pos)(sibling, pos)(sibling,pos) theo thứ tự cho trước:

    • Nếu pos=Lpos = Lpos=L: current ←\leftarrow← SHA256(bytes(sibling) ∥\parallel∥ bytes(current))
    • Nếu pos=Rpos = Rpos=R: current ←\leftarrow← SHA256(bytes(current) ∥\parallel∥ bytes(sibling))

    trong đó bytes(⋅\cdot⋅) là chuyển chuỗi hex về dạng byte thô trước khi nối và băm. Sau khi xử lý hết các bước, so sánh current với root đã cho: nếu trùng khớp thì proof hợp lệ, ngược lại không hợp lệ.

    Ví dụ: với cây Merkle 4 lá, để chứng minh lá thứ 3 (chỉ số 2, hash L2L_2L2​) thuộc cây, proof gồm 2 bước: (L3,R)(L_3, R)(L3​,R) rồi (N01,L)(N_{01}, L)(N01​,L) — với N01N_{01}N01​ là nút cha của L0,L1L_0, L_1L0​,L1​. Nếu kết quả cuối trùng với root đã cho, in VALID.

    • Định dạng đầu vào:
      • Dòng 1: leaf — mã băm SHA-256 (hex, 64 ký tự) của giao dịch cần xác minh.
      • Dòng 2: mmm — số bước trong proof (0≤m≤320 \le m \le 320≤m≤32).
      • mmm dòng tiếp theo: mỗi dòng gồm sibling pos, trong đó sibling là mã băm hex (64 ký tự) và pos là L hoặc R.
      • Dòng cuối cùng: root — mã băm hex (64 ký tự) cần so khớp.
    • Định dạng đầu ra:

      Một dòng: in VALID nếu proof hợp lệ (khớp root), ngược lại in INVALID.

    Ví dụ:

    Đầu vào:

    95cd603fe577fa9548ec0c9b50b067566fe07c8af6acba45f6196f3a15d511f6
    0
    95cd603fe577fa9548ec0c9b50b067566fe07c8af6acba45f6196f3a15d511f6
    

    Đầu ra:

    VALID
    

    Đầu vào:

    27ca64c092a959c7edc525ed45e845b1de6a7590d173fd2fad9133c8a779a1e3
    2
    1f3cb18e896256d7d6bb8c11a6ec71f005c75de05e39beae5d93bbd1e2c8b7a9 R
    9db4d4c69f3d7236f4de569987d746845d8d85250703351226c5a3cdaf1f66ea L
    9db19fd4038d720fb19dec0f50cd6afbafe918851ddbb718773abff9783faeb0
    

    Đầu ra:

    VALID
    

    Đang tải editor...