Tàng HìnhWiki
Tìm
Mật thư & mực vô hình

Mật mã Caesar là gì: cách hoạt động và vì sao rất dễ bị phá

Mật mã Caesar thay mỗi chữ bằng chữ đứng sau nó 3 bước, theo Suetonius. Chỉ có 25 khoá nên thử hết là phá được; phép đếm tần suất của al-Kindi còn phá nhanh hơn.

Mật mã Caesar là gì: cách hoạt động và vì sao rất dễ bị phá

Mật mã Caesar là cách thay mỗi chữ cái bằng chữ đứng sau nó một số bước cố định trong bảng chữ cái; theo sử gia La Mã Suetonius, Julius Caesar dùng bước dịch 3, tức A thành D, B thành E. Nó dễ phá vì với bảng 26 chữ chỉ có 25 cách dịch khác nhau, thử hết trong vài phút, và kiểu chữ lặp lại của ngôn ngữ vẫn lộ nguyên sau khi mã hoá.

Dù yếu, mật mã Caesar là bài học nhập môn hoàn hảo: nó chứa gần đủ những khái niệm cốt lõi của mật mã học — thuật toán, khoá, và cách tấn công.

Suetonius kể gì về Caesar

Nguồn chính là cuốn Cuộc đời mười hai hoàng đế của Suetonius, viết vào đầu thế kỷ II. Trong phần về Julius Caesar, Suetonius kể rằng khi cần viết điều gì bí mật, Caesar thay mỗi chữ bằng chữ đứng thứ tư tính từ nó trong bảng chữ cái — D thay cho A, và cứ thế. "Thứ tư" theo cách đếm của người La Mã (tính cả chữ gốc) chính là dịch đi 3 bước.

Cũng Suetonius kể về hoàng đế Augustus, người kế vị: Augustus dùng bước dịch 1 — B thay cho A — và không quay vòng về đầu bảng; chữ cuối cùng được viết thành AA. Như vậy cả hai đời hoàng đế đầu tiên của La Mã đều dùng biến thể của cùng một ý tưởng.

Ngoài Suetonius, nhà văn Aulus Gellius ở thế kỷ II cũng nhắc tới việc Caesar có những bức thư viết bằng chữ cái bị đổi chỗ. Chúng ta không có bức thư mã hoá nào của Caesar còn sót lại.

Cách hoạt động: từng bước

Viết hai hàng chữ

Cách dễ hiểu nhất là viết bảng chữ cái thành hai hàng, hàng dưới trượt sang trái 3 ô:

Chữ gốcABCDEFGHIJKLM
Chữ mãDEFGHIJKLMNOP
Chữ gốcNOPQRSTUVWXYZ
Chữ mãQRSTUVWXYZABC

Ba chữ cuối X, Y, Z quay vòng về A, B, C. Đây là điểm khác so với cách của Augustus.

Thử một câu

Lấy câu tiếng Việt viết không dấu "HEN NHAU BEN GOC DA", dịch mỗi chữ đi 3 bước:

  • HEN → KHQ
  • NHAU → QKDX
  • BEN → EHQ
  • GOC → JRF
  • DA → GD

Thư mã hoá là "KHQ QKDX EHQ JRF GD". Người nhận biết bước dịch là 3 thì làm ngược lại: lùi mỗi chữ 3 bước.

Viết bằng toán

Đánh số A = 0, B = 1, … Z = 25. Gọi khoá là k. Mã hoá: chữ mã = (chữ gốc + k) chia lấy dư cho 26. Giải mã: chữ gốc = (chữ mã − k) chia lấy dư cho 26. Phép "chia lấy dư" chính là cái vòng quay từ Z về A — giống như kim đồng hồ đi quá 12 thì quay về 1.

Ba khái niệm mật mã nằm sẵn trong Caesar

  • Thuật toán: quy tắc chung — "dịch mỗi chữ đi k bước". Thuật toán có thể công khai.
  • Khoá: con số k cụ thể. Khoá phải giữ bí mật.
  • Không gian khoá: số khoá có thể có. Với bảng 26 chữ, chỉ có 25 khoá có nghĩa (k = 0 thì thư không đổi).

Nguyên tắc mà nhà mật mã học Auguste Kerckhoffs phát biểu năm 1883 — một hệ mã tốt vẫn phải an toàn ngay cả khi đối phương biết thuật toán, chỉ không biết khoá — cho thấy ngay điểm chết của Caesar: biết thuật toán rồi thì 25 khoá là quá ít.

Cách phá thứ nhất: thử hết các khoá

Gặp một thư mã Caesar, bạn chỉ cần viết 25 phiên bản dịch ngược, mỗi phiên bản một khoá, rồi nhìn xem dòng nào đọc ra nghĩa. Với một câu ngắn, làm bằng tay mất vài phút. Kỹ thuật này gọi là vét cạn (brute force): không cần thông minh, chỉ cần kiên nhẫn.

Mẹo nhỏ: chỉ cần thử trên một từ ngắn của thư. Với "GD" ở cuối thư mẫu, lùi 1 bước được "FC", lùi 2 được "EB", lùi 3 được "DA" — một từ tiếng Việt có nghĩa. Thử khoá 3 cho cả thư là xong.

Cách phá thứ hai: đếm tần suất chữ

Phát hiện của al-Kindi

Phương pháp quan trọng hơn được mô tả lần đầu trong một chuyên luận của học giả Ả Rập al-Kindi ở Baghdad, thế kỷ IX, về cách giải các thư mã hoá. Ý tưởng của ông: trong mọi ngôn ngữ, một số chữ cái xuất hiện nhiều hơn hẳn các chữ khác. Đếm chữ trong thư mã, chữ nào nhiều nhất có lẽ ứng với chữ thông dụng nhất của ngôn ngữ đó.

Với mã Caesar, chỉ cần đoán đúng một cặp chữ là biết khoá, vì mọi chữ đều dịch cùng một bước. Trong tiếng Anh, E là chữ thông dụng nhất; thư mã nào có chữ H nhiều nhất thì rất có thể khoá là 3.

Với tiếng Việt viết không dấu

Tiếng Việt bỏ dấu có những chữ xuất hiện dày đặc vì nằm trong các tổ hợp quen như NG, NH, TH, CH và các nguyên âm A, I. Một thư mã Caesar tiếng Việt đủ dài sẽ lộ ra vài chữ nổi trội rất rõ. Dấu cách giữa các từ còn giúp thêm: từ một chữ cái hiếm khi gặp trong tiếng Việt viết không dấu, còn từ hai chữ như "DA", "LA", "CO" thì rất nhiều — đoán một từ ngắn là đủ.

Đó là lý do người dùng mật mã nghiêm túc thời sau bỏ dấu cách và gom chữ thành từng nhóm năm.

Các biến thể của Caesar

Biến thểCách làmCó khó phá hơn không
Caesar gốcDịch 3 bướcKhông: 25 khoá
Cách của AugustusDịch 1 bước, không quay vòngKhông, còn lộ hơn
ROT13Dịch 13 bước; làm hai lần thì về lại thư gốcKhông — chỉ dùng để che tạm lời giải, câu đố trên mạng
Thay thế đơn bảngMỗi chữ thay bằng một chữ bất kỳ theo một bảng xáo trộnNhiều khoá hơn hẳn, nhưng vẫn gục trước phép đếm tần suất
VigenèreMỗi chữ dịch theo một bước khác nhau, lặp theo một từ khoáCó — đứng vững gần ba thế kỷ

Bảng thay thế xáo trộn có tới khoảng 400 triệu tỉ tỉ cách sắp (26 giai thừa) — nhiều hơn số hạt cát trên Trái Đất rất nhiều. Nhưng phép đếm tần suất của al-Kindi vẫn phá được, vì mỗi chữ gốc luôn biến thành cùng một chữ mã. Bài học lớn: nhiều khoá chưa chắc đã an toàn, nếu cấu trúc ngôn ngữ vẫn lộ ra ngoài.

Đĩa mã: làm một dụng cụ Caesar bằng bìa

Thế kỷ XV, kiến trúc sư người Ý Leon Battista Alberti mô tả một chiếc đĩa mã gồm hai vòng chữ đồng tâm xoay được. Bạn có thể làm phiên bản đơn giản ở nhà:

  1. Cắt hai đĩa bìa, một to (đường kính khoảng 12 cm) và một nhỏ (khoảng 9 cm).
  2. Chia mép mỗi đĩa thành 26 ô bằng nhau (mỗi ô khoảng 13,8 độ), ghi A đến Z theo cùng chiều.
  3. Chồng đĩa nhỏ lên đĩa to, ghim ở tâm bằng đinh ghim giấy hai chân.
  4. Xoay đĩa nhỏ sao cho A của vòng ngoài thẳng hàng với D của vòng trong: đó là khoá 3. Tra chữ ở vòng ngoài, đọc chữ mã ở vòng trong.

Với trẻ lớn, đây là bài thủ công kết hợp toán: chia đường tròn, đếm bước, hiểu "quay vòng".

Góc nhìn hôm nay: Caesar vẫn còn ở đâu

  • Mật thư đi trại: kiểu mật thư "dịch chuyển" chính là mã Caesar, với khoá ẩn trong một câu đố (xem bài mật thư đi trại).
  • ROT13 trên mạng: dùng để giấu lời giải câu đố hay nội dung tiết lộ cốt truyện — ai muốn đọc thì tự giải.
  • Lớp học lập trình: viết chương trình mã hoá Caesar là bài tập kinh điển cho người mới học, vì nó dạy vòng lặp, xử lý chuỗi và phép chia lấy dư.
  • Đọc thêm: The Code Book (Simon Singh, 1999) kể lịch sử mật mã từ Caesar tới thời hiện đại rất dễ đọc, và đã có bản dịch tiếng Việt.

Điều đáng nhớ: Caesar không an toàn, nhưng hiểu vì sao nó không an toàn là bước đầu tiên để hiểu mọi hệ mã mạnh hơn sau này.

Câu hỏi thường gặp

Mật mã Caesar là gì?

Mật mã Caesar là cách mã hoá thay mỗi chữ cái bằng chữ đứng sau nó một số bước cố định trong bảng chữ cái. Theo Suetonius, Julius Caesar dùng bước dịch 3, tức A thành D, B thành E, và X, Y, Z quay vòng về A, B, C.

Làm sao giải mật mã Caesar khi không biết khoá?

Cách đơn giản nhất là thử lần lượt cả 25 bước dịch, dòng nào đọc ra nghĩa thì đó là khoá đúng. Cách thứ hai là đếm tần suất chữ cái trong thư mã và so với chữ thông dụng nhất của ngôn ngữ.

Vì sao mật mã Caesar dễ phá?

Vì chỉ có 25 khoá khả dĩ với bảng 26 chữ, thử hết rất nhanh. Ngoài ra mỗi chữ gốc luôn biến thành cùng một chữ mã, nên kiểu lặp chữ của ngôn ngữ vẫn lộ nguyên trong thư mã hoá.

ROT13 có phải là mật mã Caesar không?

Có, ROT13 là mật mã Caesar với bước dịch 13. Vì bảng chữ Latinh có 26 chữ, mã hoá hai lần bằng ROT13 sẽ ra lại thư gốc. Nó chỉ dùng để che tạm nội dung, không dùng để bảo mật.

Ai phát minh cách phá mã bằng đếm tần suất chữ?

Mô tả sớm nhất được biết thuộc về học giả Ả Rập al-Kindi ở Baghdad vào thế kỷ IX. Ông nhận ra mỗi ngôn ngữ có những chữ cái xuất hiện nhiều hơn hẳn, và dùng điều đó để đoán chữ gốc từ chữ mã.

Mở app Tàng Hình

Lẻn qua lính gác, núp bóng tối, lấy ngọc rồi biến mất

Mở app Tàng Hình

Bài viết liên quan

Mở app Tàng Hình

Lẻn qua lính gác, núp bóng tối, lấy ngọc rồi biến mất

Mở app Tàng Hình Xem app khác