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ấn công lỗi chữ ký RSA-CRT (Bellcore Attack)

    Để ký nhanh hơn, nhiều hệ thống RSA tính chữ ký bằng Định lý phần dư Trung Hoa (CRT): với n=p⋅qn = p \cdot qn=p⋅q, thay vì tính trực tiếp s=md mod ns = m^{d} \bmod ns=mdmodn, người ta tính hai phần riêng trên ppp và qqq

    sp=md mod (p−1) mod p,sq=md mod (q−1) mod qs_p = m^{d \bmod (p-1)} \bmod p, \qquad s_q = m^{d \bmod (q-1)} \bmod qsp​=mdmod(p−1)modp,sq​=mdmod(q−1)modq

    rồi ghép lại bằng CRT để được s≡md(modn)s \equiv m^d \pmod ns≡md(modn) (nhanh hơn nhiều vì p,qp, qp,q chỉ bằng nửa số bit của nnn).

    Lỗi Bellcore (fault attack): Nếu do lỗi phần cứng/nhiễu điện, một trong hai phép tính CRT bị sai (giả sử sqs_qsq​ bị tính sai thành sq′s_q'sq′​, còn sps_psp​ vẫn đúng), chữ ký ghép ra s′s's′ sẽ thoả:

    s′≡sp≡s(modp)nhưngs′≢s(modq)s' \equiv s_p \equiv s \pmod p \qquad \text{nhưng} \qquad s' \not\equiv s \pmod qs′≡sp​≡s(modp)nhưngs′≡s(modq)

    Nghĩa là p∣(s−s′)p \mid (s - s')p∣(s−s′) nhưng q∤(s−s′)q \nmid (s - s')q∤(s−s′). Do đó nếu kẻ tấn công có được một chữ ký đúng sss và một chữ ký lỗi s′s's′ của cùng một thông điệp (cùng khoá), hắn phân tích được nnn ngay lập tức mà không cần bất kỳ thuật toán phân tích thừa số nào:

    p=gcd⁡(∣s−s′∣, n),q=n/pp = \gcd(|s - s'|,\ n), \qquad q = n / pp=gcd(∣s−s′∣, n),q=n/p

    Từ p,qp, qp,q và số mũ công khai eee, tính được φ(n)=(p−1)(q−1)\varphi(n) = (p-1)(q-1)φ(n)=(p−1)(q−1) và khoá riêng d=e−1 mod φ(n)d = e^{-1} \bmod \varphi(n)d=e−1modφ(n).

    Yêu cầu: Cho nnn, eee, chữ ký đúng sss và chữ ký lỗi s′s's′ (cùng ký một thông điệp, lỗi xảy ra ở nhánh CRT theo qqq), hãy tìm lại p,qp, qp,q (với p<qp < qp<q) và khoá riêng ddd.

    Ví dụ: Với (n,e,s,s′)(n, e, s, s')(n,e,s,s′) ở input mẫu, kết quả in ra là ba số p q dp\ q\ dp q d thoả p⋅q=np \cdot q = np⋅q=n và e⋅d≡1(mod(p−1)(q−1))e \cdot d \equiv 1 \pmod{(p-1)(q-1)}e⋅d≡1(mod(p−1)(q−1)).

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

      Một dòng gồm 4 số nguyên cách nhau bởi khoảng trắng: n e s s′n\ e\ s\ s'n e s s′ (chữ ký đúng sss, chữ ký lỗi s′s's′).

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

      Một dòng gồm 3 số nguyên cách nhau bởi khoảng trắng: p q dp\ q\ dp q d, với p<qp < qp<q là hai thừa số nguyên tố của nnn, ddd là khoá riêng tương ứng với eee.

    Ví dụ:

    Đầu vào:

    3955387110974271379950693432403506566053311680300222237829655245011522722098157 17 2520225132573903072830192198388818154642774710592757866026779452140348093071719 453173238271576135013674932229397577937817462638994417556808375328941176308720
    

    Đầu ra:

    682737606360306568900897226171803821641 5793422061603654149291899945924345759877 3257377620802341136429982826685240701450335134638330345856498486455998353837233
    

    Đầu vào:

    5815617891818088795452012254563964686955115344004514667651416122327 65537 4032633746761473104062536090135228552259120514126268456811824910287 1515385129980889702876258684843627301603508738039471442828468068562
    

    Đầu ra:

    677856206920889468095955655526919 8579427070875537228002299847386033 4316390519764644020757385600294488914812968582469143397661717965889
    

    Đang tải editor...