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] Bẻ khóa PIN từ mã băm SHA-256

    Hàm băm mật mã (cryptographic hash function) như SHA-256 được thiết kế để không thể đảo ngược về mặt lý thuyết: biết h=SHA256(x)h = \text{SHA256}(x)h=SHA256(x), việc tìm lại xxx (tấn công tiền ảnh — preimage attack) là bất khả thi nếu không gian giá trị của xxx đủ lớn. Tuy nhiên, nếu xxx chỉ là một mã PIN gồm NNN chữ số (N≤6N \le 6N≤6, tức không gian chỉ tối đa 10610^6106 giá trị), ta hoàn toàn có thể vét cạn (brute-force) toàn bộ khả năng trong thời gian ngắn — đây chính là lỗ hổng thường gặp khi hệ thống dùng PIN/OTP quá ngắn.

    Một hệ thống lưu PIN dưới dạng h=SHA256(pin)h = \text{SHA256}(\text{pin})h=SHA256(pin), trong đó pin là chuỗi NNN chữ số thập phân (có thể có số 0 ở đầu, ví dụ PIN 4 chữ số giá trị 7 được biểu diễn là 0007), và băm trên chuỗi ký tự biểu diễn PIN (không phải giá trị số nhị phân). Cho NNN và hhh (dạng hex thường, 64 ký tự), hãy tìm lại PIN gốc bằng cách vét cạn mọi giá trị PIN có thể từ "0"*N đến "9"*N.

    Ví dụ: với N=1N=1N=1 và h=h=h= ef2d127de37b942baad06145e54b0c619a1f22327b2ebbcfbec78f5564afe39d thì PIN là 5 (vì hashlib.sha256(b"5").hexdigest() cho đúng giá trị hhh trên).

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

      Dòng 1: số nguyên NNN (1≤N≤61 \le N \le 61≤N≤6) — số chữ số của PIN. Dòng 2: chuỗi hex 64 ký tự (chữ thường) là giá trị SHA-256 của PIN.

    • Định dạng đầu ra:

      In ra một dòng duy nhất là PIN tìm được, dạng chuỗi đúng NNN chữ số (giữ nguyên số 0 ở đầu nếu có).

    Ví dụ:

    Đầu vào:

    4
    03ac674216f3e15c761ee1a5e255f067953623c8b388b4459e13f978d7c846f4

    Đầu ra:

    1234
    

    Đầu vào:

    4
    f15cea39f11dc0371cfb9a4b7b1c38d5c636feb72d70e2759b0e505905ee9d01

    Đầu ra:

    0007
    

    Đang tải editor...