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 khóa công khai chống tấn công giam giữ nhóm con nhỏ

    Trong triển khai Diffie–Hellman an toàn, người ta thường chọn ppp là một số nguyên tố an toàn (safe prime), tức p=2q+1p = 2q + 1p=2q+1 với qqq cũng là số nguyên tố. Khi đó nhóm nhân Zp∗\mathbb{Z}_p^{*}Zp∗​ có cấp p−1=2qp-1=2qp−1=2q, chỉ chứa hai nhóm con thực sự không tầm thường: nhóm con cấp 222 (gồm {1,p−1}\{1, p-1\}{1,p−1}) và nhóm con cấp qqq (nhóm con lớn, dùng để sinh khóa).

    Nếu không kiểm tra, kẻ tấn công có thể gửi một khóa công khai BBB nằm trong nhóm con cấp 222 (tấn công giam giữ nhóm con nhỏ — small subgroup confinement), khiến khóa chung chỉ nhận một trong hai giá trị, dễ dàng đoán được. Để phòng chống, bên nhận phải kiểm tra khóa công khai BBB nhận được có thật sự nằm trong nhóm con cấp qqq hay không, bằng điều kiện:

    1<B<p−1vaˋBq mod p=11 < B < p - 1 \quad \text{và} \quad B^{q} \bmod p = 11<B<p−1vaˋBqmodp=1

    Cho ppp (đảm bảo là số nguyên tố an toàn, q=(p−1)/2q = (p-1)/2q=(p−1)/2) và TTT giá trị BBB cần kiểm tra, với mỗi giá trị hãy in ra VALID nếu BBB thỏa cả hai điều kiện trên, ngược lại in ra INVALID.

    Ví dụ: p=23p=23p=23 (nên q=11q=11q=11). Với B=6B=6B=6: 611 mod 23=16^{11} \bmod 23 = 1611mod23=1 và 1<6<221<6<221<6<22, nên VALID. Với B=22=p−1B=22=p-1B=22=p−1: vi phạm điều kiện B<p−1B<p-1B<p−1, nên INVALID.

    • Định dạng đầu vào:
      • Dòng đầu tiên chứa số nguyên tố an toàn ppp (5≤p≤10125 \le p \le 10^{12}5≤p≤1012).
      • Dòng thứ hai chứa số nguyên TTT (1≤T≤10001 \le T \le 10001≤T≤1000).
      • TTT dòng tiếp theo, mỗi dòng chứa một số nguyên BBB (0≤B≤p0 \le B \le p0≤B≤p).
    • Định dạng đầu ra:

      In ra TTT dòng, dòng thứ iii là VALID hoặc INVALID tương ứng với giá trị BBB thứ iii.

    Ví dụ:

    Đầu vào:

    47
    4
    12
    36
    42
    30
    

    Đầu ra:

    VALID
    VALID
    VALID
    INVALID
    

    Đầu vào:

    23
    6
    0
    1
    22
    6
    16
    4
    

    Đầu ra:

    INVALID
    INVALID
    INVALID
    VALID
    VALID
    VALID
    

    Đang tải editor...