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] Kiểm tra chuỗi chứng chỉ số (Certificate Chain)

    Trong TLS, máy chủ trình một chuỗi chứng chỉ (certificate chain) để trình duyệt xác minh danh tính; mỗi chứng chỉ được ký bởi chứng chỉ ở cấp cao hơn (issuer), chứng chỉ gốc tự ký.

    Đơn giản hoá: chuỗi gồm kkk chứng chỉ, đánh số từ 111 (chứng chỉ máy chủ / leaf) đến kkk (chứng chỉ gốc / root). Chứng chỉ thứ iii có khóa công khai RSA (ni,ei)(n_i, e_i)(ni​,ei​) và một "digest" HiH_iHi​ (số nguyên, 0≤Hi<ni0 \le H_i < n_i0≤Hi​<ni​, đại diện cho băm rút gọn nội dung chứng chỉ) cùng chữ ký SigiSig_iSigi​.

    • Với i<ki < ki<k: chứng chỉ iii được ký bởi chứng chỉ i+1i+1i+1 (issuer), chữ ký hợp lệ nếu Sigi ei+1 mod ni+1=HiSig_i^{\,e_{i+1}} \bmod n_{i+1} = H_iSigiei+1​​modni+1​=Hi​.
    • Với i=ki = ki=k (chứng chỉ gốc, tự ký): chữ ký hợp lệ nếu Sigk ek mod nk=HkSig_k^{\,e_k} \bmod n_k = H_kSigkek​​modnk​=Hk​.

    Cho toàn bộ chuỗi, hãy kiểm tra xem tất cả các chữ ký có hợp lệ hay không. Nếu tất cả hợp lệ, in VALID. Nếu không, in ra chỉ số nhỏ nhất iii mà chữ ký SigiSig_iSigi​ không hợp lệ.

    Ví dụ: chuỗi 1 chứng chỉ gốc tự ký với n=1022117,e=65537,H=555555,Sig=838664n=1022117, e=65537, H=555555, Sig=838664n=1022117,e=65537,H=555555,Sig=838664 thoả Sige mod n=HSig^e \bmod n = HSigemodn=H → in VALID.

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

      Dòng đầu là số nguyên kkk (1≤k≤1001 \le k \le 1001≤k≤100). kkk dòng tiếp theo, dòng thứ iii (ứng chứng chỉ iii, từ leaf đến root) gồm 4 số nguyên ni ei Hi Sigin_i\ e_i\ H_i\ Sig_ini​ ei​ Hi​ Sigi​ cách nhau bởi khoảng trắng (2≤ni≤10182 \le n_i \le 10^{18}2≤ni​≤1018).

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

      In ra VALID nếu toàn bộ chuỗi hợp lệ; ngược lại in ra chỉ số nguyên nhỏ nhất iii có chữ ký sai.

    Ví dụ:

    Đầu vào:

    1
    1022117 65537 555555 838664
    

    Đầu ra:

    VALID
    

    Đầu vào:

    1
    1022117 65537 555555 838663
    

    Đầu ra:

    1
    

    Đang tải editor...