Bộ mã hóa Vigenère

Mật mã Vigenère, được Giovan Battista Bellaso mô tả lần đầu vào năm 1553 và về sau bị gán nhầm cho Blaise de Vigenère, dịch chuyển mỗi chữ cái một lượng khác nhau tùy theo một từ khóa lặp lại. Dù suốt 300 năm được gọi là “le chiffre indéchiffrable”, cuối cùng nó cũng bị phá vỡ bởi cuộc tấn công thống kê của Friedrich Kasiski vào năm 1863. Bộ mã hóa này cho phép bạn mã hóa và giải mã cho câu đố, thử thách CTF và mật mã học trong lớp học.

Cách dùng mật mã Vigenère

  1. 1

    Nhập tin nhắn của bạn

    Các chữ cái từ A đến Z được dịch chuyển; chữ số, khoảng trắng, dấu câu và mọi ký tự không phải Latin đều đi qua nguyên vẹn.

  2. 2

    Đặt một từ khóa

    Chọn bất kỳ từ hoặc cụm từ nào. Chỉ các chữ cái của nó được tính, và từ khóa dài thì khó phá hơn.

  3. 3

    Chọn mã hóa hoặc giải mã

    Cùng một công cụ xử lý cả hai chiều bằng bảng vuông Vigenère.

  4. 4

    Đọc kết quả

    Mỗi chữ cái dịch chuyển theo chữ cái từ khóa tương ứng (A=0, B=1, v.v.); chữ hoa và chữ thường được giữ nguyên.

Một ví dụ có lời giải

Công cụ khởi đầu với Hello World và khóa KEY. Mã hóa cho ra:

Gốc:  Hello World
Khóa: KEYKE YKEYK
Mã:   Rijvs Uyvjn

Lưu ý rằng chữ hoa/thường được giữ nguyên (H vẫn là chữ hoa và thành R), khoảng trắng được giữ lại, và con trỏ khóa chỉ tiến trên các chữ cái. Chuyển sang giải mã với cùng khóa đó, Rijvs Uyvjn trở lại thành Hello World.

Bảng vuông Vigenère

Mỗi chữ cái của văn bản và mỗi chữ cái của khóa chọn một hàng và một cột trong lưới 26x26 các phép dịch Caesar. Nếu chữ cái văn bản là H và chữ cái khóa là K, kết quả là R, vì H (7) + K (10) = 17 = R. Ví dụ kinh điển trong sách giáo khoa dùng một khóa lặp lại:

Gốc:  ATTACKATDAWN
Khóa: LEMONLEMONLE
Mã:   LXFOPVEFRNHR

Vì sao nó thắng các mật mã trước đó

Các mật mã đơn bảng như Caesar và Atbash luôn mã hóa E theo cùng một cách, nên chữ cái xuất hiện nhiều nhất trong bản mã sẽ để lộ chữ cái xuất hiện nhiều nhất trong bản rõ. Vigenère xoay vòng lượng dịch, nên E có thể thành X lần này và K lần sau, làm phẳng tần suất chữ cái và đánh bại phân tích đơn giản.

Tấn công Kasiski trong một đoạn

Những nhóm chữ cái lặp lại trong bản mã, cách nhau một khoảng cố định, gợi ý rằng độ dài khóa chia hết khoảng cách đó. Thu thập vài khoảng cách như vậy, lấy ước chung lớn nhất của chúng, và bạn có độ dài khóa khả dĩ. Chia bản mã thành bấy nhiêu luồng Caesar và áp dụng phân tích tần suất cho từng luồng.

Lưu ý bảo mật

Vigenère là một mật mã cổ điển chỉ có giá trị giáo dục. Nó không an toàn trước bất kỳ cuộc tấn công hiện đại nào: một văn bản tiếng Anh ngắn với khóa sáu chữ cái bị phá trong vài giây. Để bảo mật thực sự, hãy dùng AES-GCM hoặc ChaCha20-Poly1305 từ một thư viện đã được kiểm chứng, đừng bao giờ dùng mật mã làm bằng tay.

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

Chỉ 26 chữ cái A-Z được dịch chuyển. Các chữ a-z không dấu trong tiếng Việt sẽ được mã hóa, nhưng các chữ có dấu (ă, â, đ, ê, ô, ơ, ư và các dấu thanh) đi qua nguyên vẹn, nên văn bản tiếng Việt chỉ được mã hóa một phần. Để mã hóa toàn bộ, hãy dùng chữ Latin không dấu.

Có. Văn bản chữ thường tạo ra kết quả chữ thường và chữ hoa vẫn là chữ hoa. Bản thân từ khóa không phân biệt hoa thường.

Chắc chắn rồi. Đây là món quen thuộc của CTF cho người mới. Gợi ý thường cho biết độ dài khóa trong đề bài hoặc để lại một nhóm chữ cái lặp lại trong bản mã.

Văn bản và khóa của bạn được gửi đến máy chủ của chúng tôi để tính toán mật mã, nơi chúng được xử lý và không được lưu hay ghi nhật ký. Vì Vigenère không an toàn, đừng bao giờ mã hóa một bí mật thật bằng bất kỳ mật mã cổ điển nào.

Công cụ liên quan

Công cụ này có phiên bản bằng các ngôn ngữ khác