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] Ước lượng độ dài khóa Vigenère bằng chỉ số trùng hợp

    Xét bản mã sinh bởi mật mã Vigenère với khóa có độ dài mmm. Nếu chia bản mã CCC (đánh số ký tự từ 0) thành mmm nhóm con, trong đó nhóm con thứ jjj (0≤j<m0 \le j < m0≤j<m) gồm các ký tự ở vị trí j,j+m,j+2m,…j, j+m, j+2m, \ldotsj,j+m,j+2m,…, thì mỗi nhóm con thực chất là kết quả của một phép dịch Caesar cố định trên bản rõ tiếng Anh. Do đó chỉ số trùng hợp (IC) trung bình của mmm nhóm con sẽ gần với IC của tiếng Anh tự nhiên (khoảng 0.065) khi mmm là (bội số của) độ dài khóa thật, và gần với IC của chuỗi ngẫu nhiên (khoảng 1/26≈0.03851/26 \approx 0.03851/26≈0.0385) khi mmm chọn sai.

    Công thức IC của một chuỗi ký tự (độ dài LLL, số lần xuất hiện chữ iii là fif_ifi​): IC=∑ifi(fi−1)L(L−1)IC = \dfrac{\sum_i f_i(f_i-1)}{L(L-1)}IC=L(L−1)∑i​fi​(fi​−1)​ nếu L≥2L \ge 2L≥2; quy ước IC=0IC = 0IC=0 nếu L<2L < 2L<2.

    Cho bản mã CCC (chỉ gồm chữ in hoa A…ZA \ldots ZA…Z) và số nguyên MMM. Hãy xét mọi độ dài khóa ứng viên m=1,2,…,Mm = 1, 2, \ldots, Mm=1,2,…,M. Với mỗi mmm: chia CCC thành mmm nhóm con như mô tả trên, tính IC của từng nhóm, rồi tính IC trung bình (trung bình cộng của mmm giá trị IC). Tìm m∗m^*m∗ có IC trung bình lớn nhất; nếu nhiều mmm cùng đạt giá trị lớn nhất, chọn mmm nhỏ nhất.

    Ví dụ: với C=C = C= BBBBBBBB và M=4M = 4M=4: mọi cách chia đều cho IC trung bình =1.0= 1.0=1.0 (vì chỉ có một chữ cái duy nhất), nên m∗=1m^* = 1m∗=1 (nhỏ nhất) được chọn, IC trung bình =1.000000= 1.000000=1.000000.

    • Định dạng đầu vào:
      • Dòng 1: bản mã CCC (chuỗi in hoa A…ZA \ldots ZA…Z, độ dài từ 1 đến 2000).
      • Dòng 2: số nguyên MMM (1≤M≤201 \le M \le 201≤M≤20, M≤M \leM≤ độ dài của CCC).
    • Định dạng đầu ra:

      In ra 2 dòng:

      • Dòng 1: giá trị m∗m^*m∗ tìm được.
      • Dòng 2: giá trị IC trung bình tương ứng, làm tròn đúng 6 chữ số thập phân.

    Ví dụ:

    Đầu vào:

    AAAA
    2

    Đầu ra:

    1
    1.000000
    

    Đầu vào:

    BBBBBBBB
    4

    Đầu ra:

    1
    1.000000
    

    Đang tải editor...