Cho bản mã Vigenère C (chỉ gồm chữ in hoa A…Z, không có ký tự khác) và độ dài khóa m đã biết (chẳng hạn suy ra từ phương pháp Kasiski hoặc từ IC trung bình). Hãy khôi phục khóa và bản rõ bằng phân tích tần suất từng cột, tương tự việc phá nhiều mã Caesar độc lập.
Với mỗi cột j=0,1,…,m−1 (nhóm con gồm các ký tự C tại vị trí j,j+m,j+2m,…, đánh số từ 0), thử mọi khóa dịch k=0,…,25: giải mã cột bằng cách dịch ngược k vị trí, rồi tính thống kê chi-bình phương so với bảng tần suất chuẩn tiếng Anh (công thức và bảng giống hệt bài toán phá mã Caesar):
χ2(k)=∑i=AZEi(Oi−Ei)2,Ei=pi×L
với L là độ dài cột, pi là tần suất chuẩn (bảng bên dưới). Chọn kj là khóa dịch có χ2 nhỏ nhất cho cột j (nếu có nhiều khóa cùng nhỏ nhất, chọn khóa nhỏ nhất). Ký tự thứ j của khóa Vigenère là chữ cái ứng với số kj (A tương ứng 0, ..., Z tương ứng 25).
Ghép các kj lại được khóa K=k0k1…km−1 (độ dài m). Dùng khóa này giải mã toàn bộ C: ký tự bản rõ tại vị trí i (đánh số từ 0) là kết quả dịch ngược Ci đi k(imodm) vị trí.
Bảng tần suất chuẩn của các chữ cái tiếng Anh (%):
| Chữ | Tần suất (%) | Chữ | Tần suất (%) |
|---|---|---|---|
| A | 8.167 | N | 6.749 |
| B | 1.492 | O | 7.507 |
| C | 2.782 | P | 1.929 |
| D | 4.253 | Q | 0.095 |
| E | 12.702 | R | 5.987 |
| F | 2.228 | S | 6.327 |
| G | 2.015 | T | 9.056 |
| H | 6.094 | U | 2.758 |
| I | 6.966 | V | 0.978 |
| J | 0.153 | W | 2.360 |
| K | 0.772 | X | 0.150 |
| L | 4.025 | Y | 1.974 |
| M | 2.406 | Z | 0.074 |
Ví dụ: với m=1, thuật toán trên tương đương với phá mã Caesar. Bản mã KHOOR với m=1 cho khóa K= O (tương ứng k0=14) và bản rõ WTAAD (đây là kết quả của thuật toán thống kê, không nhất thiết trùng với bản rõ "đúng" theo trực giác khi văn bản quá ngắn để thống kê chính xác).
In ra 2 dòng:
Ví dụ:
Đầu vào:
KHOOR
1
Đầu ra:
O
WTAAD
Đầu vào:
ABCDE
5
Đầu ra:
WXYZA
EEEEE
Đang tải editor...