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] Phân tích RSA bằng thuật toán Fermat

    Nếu người tạo khóa RSA vô tình chọn hai số nguyên tố p,qp, qp,q gần nhau thì môđun n=p⋅qn = p \cdot qn=p⋅q có thể bị phá vỡ rất nhanh bằng thuật toán phân tích Fermat, không cần thử chia lần lượt các số nguyên tố.

    Ý tưởng: vì p,qp, qp,q gần nhau nên tồn tại a,ba, ba,b nguyên không âm sao cho

    n=a2−b2=(a−b)(a+b),p=a−b, q=a+b.n = a^2 - b^2 = (a-b)(a+b), \quad p = a - b,\ q = a + b.n=a2−b2=(a−b)(a+b),p=a−b, q=a+b.

    Thuật toán bắt đầu từ a=⌈n⌉a = \lceil \sqrt{n} \rceila=⌈n​⌉, kiểm tra a2−na^2 - na2−n có phải số chính phương không; nếu chưa thì tăng dần aaa lên 1 đơn vị và lặp lại, đến khi tìm được bbb nguyên sao cho b2=a2−nb^2 = a^2 - nb2=a2−n.

    Cho n=p⋅qn = p \cdot qn=p⋅q với p,qp, qp,q là hai số nguyên tố (có thể bằng nhau) và hiệu ∣p−q∣|p - q|∣p−q∣ đủ nhỏ để thuật toán Fermat hội tụ nhanh, hãy tìm ppp và qqq.

    Ví dụ: n=10201=101×101n = 10201 = 101 \times 101n=10201=101×101, in ra 101 101.

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

      Một dòng chứa số nguyên lẻ nnn (nnn là tích của hai số nguyên tố p≤qp \le qp≤q với ∣p−q∣|p - q|∣p−q∣ không vượt quá vài chục nghìn, 9≤n<10309 \le n < 10^{30}9≤n<1030).

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

      In ra hai số nguyên ppp và qqq (p≤qp \le qp≤q) cách nhau bởi một khoảng trắng, sao cho p⋅q=np \cdot q = np⋅q=n.

    Ví dụ:

    Đầu vào:

    10201

    Đầu ra:

    101 101
    

    Đầu vào:

    99799811

    Đầu ra:

    9973 10007
    

    Đang tải editor...