Nếu đã quen mật thư dời chữ kiểu "A thành D, B thành E", bạn sẽ thấy nó khá dễ phá: chỉ cần thử đủ 25 cách dời là ra. Mật thư Vigenère nâng cấp ý tưởng đó bằng một từ khoá: mỗi chữ trong bản tin được dời một khoảng khác nhau, tuỳ theo chữ tương ứng của từ khoá. Cùng một chữ A trong bản rõ có thể biến thành C, M hay T, nên người không có khoá rất khó đoán.
Trong sinh hoạt Đoàn – Đội, hướng đạo hay trại kỹ năng, Vigenère là loại mật thư "hạng nặng" vừa phải: đủ khó để cả đội phải ngồi tính, nhưng chỉ cần giấy, bút và một bảng chữ cái. Điều thú vị nhất là cuộc săn tìm từ khoá, thường được giấu trong bài hát, khẩu hiệu hay tên trại.
Nguồn gốc ngắn
Cách mã hoá này được nhà mật mã học người Ý Giovan Battista Bellaso mô tả năm 1553. Đến thế kỷ 19, nó lại bị gán nhầm cho nhà ngoại giao Pháp Blaise de Vigenère (người viết về mật mã năm 1586 và đề xuất một dạng khoá tự động mạnh hơn), và cái tên "Vigenère" gắn với nó từ đó.
Suốt khoảng ba thế kỷ, người ta gọi nó là "mật mã không thể giải". Phải tới giữa thế kỷ 19, Charles Babbage và sau đó Friedrich Kasiski (công bố năm 1863) mới tìm ra cách phá khi không có khoá, dựa vào các đoạn chữ lặp lại. Với trò chơi mật thư, ta không cần đến những kỹ thuật ấy: ban tổ chức luôn để lại manh mối dẫn tới từ khoá.
Cách nhận biết mật thư Vigenère
- Bản mật mã toàn chữ cái, thường giữ nguyên khoảng trắng giữa các từ, trông như "tiếng nước ngoài" vô nghĩa.
- Chữ cái phân bố khá đều. Các chữ hiếm trong tiếng Việt viết Telex như Z, K, Q, X lại xuất hiện nhiều.
- Cùng một từ ngắn trong bản rõ có thể ra hai dạng khác nhau, nên thử dời chữ đơn giản không ra kết quả.
- Đi kèm thường có một gợi ý về khoá: "Chìa khoá nằm trong bài ca của đơn vị", "Hãy hỏi trạm trưởng tên trại", hoặc một chữ in đậm ở đâu đó.
Nếu thử giải như mật thư dời chữ (xem bài Mật thư chữ bằng chữ) mà thất bại, hãy nghĩ ngay tới Vigenère.
Bảng Vigenère (tabula recta)
Bảng Vigenère gồm 26 hàng. Mỗi hàng là bảng chữ cái dời đi một bước so với hàng trên. Hàng đầu tiên (A) giữ nguyên, hàng B bắt đầu bằng B, hàng C bắt đầu bằng C, và cứ thế.
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
+----------------------------------------------------
A | A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
B | B C D E F G H I J K L M N O P Q R S T U V W X Y Z A
C | C D E F G H I J K L M N O P Q R S T U V W X Y Z A B
D | D E F G H I J K L M N O P Q R S T U V W X Y Z A B C
...
I | I J K L M N O P Q R S T U V W X Y Z A B C D E F G H
...
R | R S T U V W X Y Z A B C D E F G H I J K L M N O P Q
...
T | T U V W X Y Z A B C D E F G H I J K L M N O P Q R S
...
Z | Z A B C D E F G H I J K L M N O P Q R S T U V W X Y
Cách tra rất gọn: hàng là chữ khoá, cột là chữ bản rõ, ô giao nhau là chữ mật mã.
Mẹo: Khi đi trại, bạn không cần mang cả bảng. Chỉ cần chép một dòng chữ cái A–Z lên giấy, rồi đếm bước dời bằng tay. Hoặc dùng phép cộng số ở mục bên dưới.
Mã hoá từng bước
Bản rõ: "Gốc cây". Viết theo quy ước Telex (xem bài Quy ước dấu tiếng Việt trong mật thư) ta được GOOCS CAAY. Từ khoá: TRAI.
Bước 1. Viết từ khoá lặp lại ngay dưới bản rõ, mỗi chữ cái một chữ khoá, bỏ qua khoảng trắng:
Bản rõ : G O O C S C A A Y
Khoá : T R A I T R A I T
Bước 2. Tra bảng từng cặp. Chữ G ở hàng T cho Z, chữ O ở hàng R cho F, chữ O ở hàng A vẫn là O, cứ thế:
Bản rõ : G O O C S C A A Y
Khoá : T R A I T R A I T
Mật mã : Z F O K L T A I R
Bản mật thư gửi đi: ZFOKL TAIR.
Để ý: hai chữ O liền nhau trong GOOCS lại thành F và O, hai chữ A trong CAAY thành A và I. Đó chính là sức mạnh của Vigenère.
Phép cộng số: cách làm nhanh không cần bảng
Đánh số chữ cái từ 0: A=0, B=1, C=2, … Z=25.
A B C D E F G H I J K L M
0 1 2 3 4 5 6 7 8 9 10 11 12
N O P Q R S T U V W X Y Z
13 14 15 16 17 18 19 20 21 22 23 24 25
- Mã hoá: số bản rõ + số khoá. Nếu kết quả từ 26 trở lên thì trừ 26.
- Giải mã: số mật mã − số khoá. Nếu kết quả âm thì cộng 26.
Kiểm tra lại ví dụ trên:
| Bản rõ | Khoá | Cộng | Sau khi trừ 26 | Mật mã |
|---|---|---|---|---|
| G (6) | T (19) | 25 | 25 | Z |
| O (14) | R (17) | 31 | 5 | F |
| O (14) | A (0) | 14 | 14 | O |
| C (2) | I (8) | 10 | 10 | K |
| S (18) | T (19) | 37 | 11 | L |
| C (2) | R (17) | 19 | 19 | T |
| A (0) | A (0) | 0 | 0 | A |
| A (0) | I (8) | 8 | 8 | I |
| Y (24) | T (19) | 43 | 17 | R |
Từ đây cũng thấy: chữ khoá A không làm thay đổi gì, nên từ khoá tốt nên tránh có quá nhiều chữ A.
Giải mã từng bước
Nhận được ZFOKL TAIR và biết khoá TRAI:
- Viết khoá lặp lại dưới bản mật mã.
- Với mỗi cặp, lấy số mật mã trừ số khoá: Z(25) − T(19) = 6 → G; F(5) − R(17) = −12, cộng 26 được 14 → O; …
- Nếu dùng bảng: vào hàng của chữ khoá, tìm chữ mật mã trong hàng đó, rồi nhìn lên đầu cột để đọc chữ bản rõ.
Kết quả GOOCS CAAY, đọc theo Telex là "Gốc cây".
Khoá thường được giấu ở đâu?
Một mật thư Vigenère hay là mật thư mà việc tìm khoá cũng vui như việc giải. Vài chỗ quen thuộc:
- Bài hát sinh hoạt: "Khoá là chữ đầu tiên của bài hát chúng ta vừa hát lúc chào cờ." Đội nào thuộc bài sẽ có lợi.
- Khẩu hiệu, châm ngôn: "Sẵn sàng" của Đội viên, "Sắp sẵn" của hướng đạo. Khoá có thể là SAWNXSANGF hoặc viết không dấu SANSANG, ban tổ chức phải nói rõ quy ước.
- Tên trại, tên đơn vị, tên chủ đề: khoá TRAI, DOAN, BINHMINH… Tên trại in trên băng rôn hay trên huy hiệu là chỗ giấu rất tự nhiên.
- Một mật thư khác: trạm 1 giải ra một từ, từ đó chính là khoá cho trạm 2. Cách nối này rất hợp với trò chơi lớn (xem bài Mật thư kết hợp).
- Câu đố: "Khoá là con vật trong bài 'Con cò bé bé'" → khoá CO.
Lưu ý cho người soạn: luôn ghi rõ khoá viết có dấu Telex hay không dấu. Khoá SANSANG và SAWNXSANGF cho ra hai bản mật mã khác hẳn nhau.
Mẹo giải khi chưa chắc khoá
1. Biết một phần bản rõ. Mật thư trong trò chơi thường mở đầu bằng những từ quen như "Tập trung", "Đi về", "Tìm". Giả sử bạn nhận được:
VAMIA TZWNS HNR ACAZ
và đoán nó bắt đầu bằng TAAPJ TRUNG (tập trung). Lấy mật mã trừ bản rõ đoán:
Mật mã : V A M I A T Z W N S
Bản rõ đoán: T A A P J T R U N G
Hiệu : C A M T R A I C A M
Chuỗi hiệu là CAMTRAI CAM… lặp lại, vậy khoá là CAMTRAI (cắm trại). Giải tiếp phần còn lại sẽ được TAAPJ TRUNG OWR SAAN – "Tập trung ở sân". Mẹo này hoạt động vì: mật mã − bản rõ = khoá.
2. Thử các khoá gợi ý ngắn trước. Giải 4–5 chữ đầu với từng khoá ứng viên. Khoá đúng sẽ cho ngay một âm tiết tiếng Việt hợp lý.
3. Chia việc trong đội. Một bạn đọc số khoá, một bạn tính, một bạn ghi. Cách làm này nhanh hơn hẳn so với một người làm hết.
4. Cẩn thận với khoảng trắng. Khoá chỉ áp lên chữ cái, không áp lên dấu cách hay dấu câu. Đếm sai một chữ là phần sau sai hết.
Biến thể
- Khoá tự động (autokey): sau khi hết từ khoá, dùng chính bản rõ làm khoá tiếp. Đây là dạng mà Vigenère thực sự đề xuất, khó hơn nhiều, chỉ nên dùng cho đội lớn tuổi.
- Khoá dài bằng bản tin: khoá là cả một câu hát. Gần như không thể phá nếu không biết bài hát.
- Beaufort: lấy khoá trừ bản rõ thay vì cộng. Hay ở chỗ mã hoá và giải mã dùng cùng một phép tính.
- Dạng số: gửi luôn chuỗi số kết quả (ví dụ
25 5 14 10 11) thay vì chữ, kết hợp với kiểu mật thư chữ bằng số.
Thử sức
Mật thư 1. Khoá là HOA, bản rõ viết Telex:
CSEM RDPQHZ
Mật thư 2. Khoá là con vật trong bài hát "Con cò bé bé", viết không dấu:
NSGB FRQCKT
Đáp án
Mật thư 1. Giải bằng khoá HOA (7, 14, 0): VEEF DDICHS – "Về đích".
Mật thư 2. Khoá là CO (C=2, O=14). Kết quả: LEEN DDOOIF – "Lên đồi".
