Mật mã Vigenère
Mã hóa và giải mã mật mã Vigenère với từ khóa do bạn chọn. Chuyển đổi giữa Vigenère cổ điển, biến thể Autokey và Beaufort, theo dõi từng bước trên bảng tabula recta tương tác, rồi sao chép, tải xuống hoặc chia sẻ kết quả. Mọi thứ đều chạy trong trình duyệt của bạn.
Vigenère cổ điển: từ khóa lặp lại trên toàn bộ thông điệp, thêm một mức dịch chuyển khác nhau cho mỗi chữ cái.
Nhập văn bản ở trên để xem kết quả tại đây.
Tabula recta (ô vuông Vigenère)
Tìm chữ cái khóa của bạn ở cột bên trái và chữ cái thường của bạn dọc theo hàng trên cùng; ô nơi chúng gặp nhau là chữ cái mã hóa. Các hàng ứng với những chữ cái trong từ khóa của bạn được làm nổi bật.
Cách sử dụng Mật mã Vigenère
- 1
Chọn mã hóa hoặc giải mã
Chọn Mã hóa để biến văn bản thường thành văn bản mã hóa, hoặc Giải mã để biến văn bản mã hóa trở lại thành văn bản thường bằng cùng một từ khóa.
- 2
Chọn một biến thể mật mã
Chọn Vigenère cổ điển, Autokey mạnh hơn với khóa không bao giờ lặp lại, hoặc biến thể Beaufort tự nghịch đảo. Một gợi ý ngắn dưới từ khóa giải thích từng biến thể.
- 3
Nhập từ khóa của bạn
Nhập một từ khóa như LEMON. Chỉ các chữ cái A đến Z trong từ khóa được sử dụng, và nó được lặp lại hoặc mở rộng tự động để khớp với thông điệp của bạn.
- 4
Nhập hoặc dán văn bản của bạn
Nhập thông điệp của bạn và mật mã chạy ngay khi bạn gõ. Các chữ cái được mã hóa trong khi khoảng trắng, chữ số và dấu câu được giữ nguyên không đổi.
- 5
Sao chép, tải xuống hoặc chia sẻ
Sao chép kết quả, tải xuống dưới dạng tệp văn bản, hoặc chia sẻ một liên kết mở lại công cụ với đúng từ khóa, văn bản và thiết lập của bạn, sẵn sàng để dùng.
Tìm hiểu về mật mã Vigenère
Mật mã Vigenère là gì?
Mật mã Vigenère là một mật mã thay thế đa bảng chữ cái, mã hóa văn bản bằng một từ khóa. Thay vì dịch chuyển mọi chữ cái đi cùng một lượng cố định như mật mã Caesar làm, nó dùng mỗi chữ cái của từ khóa để áp dụng một mức dịch chuyển khác nhau cho mỗi chữ cái của thông điệp, lặp đi lặp lại từ khóa hết vòng này đến vòng khác. Vì cùng một chữ cái thường có thể trở thành nhiều chữ cái mã hóa khác nhau tùy theo vị trí của nó, mật mã này che giấu mẫu hình tần suất chữ cái đơn, điều khiến các mật mã đơn giản dễ bị phá đến vậy.
Trong khoảng ba thế kỷ nó được xem là không thể phá, mang lại biệt danh tiếng Pháp le chiffre indéchiffrable, mật mã không thể giải. Ngày nay nó là một mục được ưa chuộng trong các câu đố, phòng thoát hiểm và thử thách capture-the-flag, đồng thời là một bài học kinh điển về cách một khóa làm cho mật mã mạnh hơn.
Mã hóa Vigenère hoạt động như thế nào
Trước tiên bạn chọn một từ khóa, chẳng hạn LEMON. Từ khóa được lặp lại phía trên thông điệp sao cho mỗi chữ cái của văn bản thường được ghép với một chữ cái của khóa. Mỗi chữ cái khóa đại diện cho một mức dịch chuyển: A nghĩa là dịch chuyển 0, B là 1, C là 2, và cứ thế cho đến Z, dịch chuyển 25. Để mã hóa, bạn cộng mỗi chữ cái văn bản thường với chữ cái khóa của nó và vòng lại quanh bảng chữ cái; để giải mã, bạn trừ đi thay vì cộng.
Chỉ các chữ cái A đến Z được mã hóa, và mỗi chữ giữ nguyên dạng hoa hoặc thường của nó. Khoảng trắng, chữ số và dấu câu được giữ nguyên không động đến và không tiêu tốn một chữ cái khóa, nên khóa luôn giữ thẳng hàng với các chữ cái thực sự của thông điệp.
Ví dụ thực hành: từ khóa LEMON
Lấy cụm từ ATTACK AT DAWN và từ khóa LEMON. Xếp từ khóa lặp lại thẳng hàng với các chữ cái sẽ cho LEMONLEMONLE. Cộng mỗi chữ cái văn bản thường với chữ cái khóa của nó, A cộng L là L, T cộng E là X, T cộng M là F, và cứ thế, tạo ra văn bản mã hóa LXFOPVEFRNHR. Lưu ý rằng hai chữ T trong ATTACK trở thành các chữ cái mã hóa khác nhau, X và F, vì chúng nằm dưới các chữ cái khóa khác nhau. Đó chính là điều đánh bại phân tích tần suất đơn giản.
Để giải mã, bạn đảo ngược quá trình với cùng một từ khóa, trừ đi mỗi chữ cái khóa, hoặc đọc bảng tabula recta ngược lại. Không có từ khóa, văn bản mã hóa gần như chẳng để lộ điều gì.
Công thức Vigenère và bảng tabula recta
Nếu các chữ cái được đánh số từ 0 đến 25, với A là 0 và Z là 25, mã hóa là C = (P + K) mod 26 và giải mã là P = (C - K) mod 26, trong đó P là chữ cái văn bản thường, K là chữ cái khóa hiện tại, và phép mod 26 khiến bảng chữ cái vòng lại. Cùng một thao tác có thể thực hiện bằng tay nhờ bảng tabula recta, một lưới 26 nhân 26 gồm các bảng chữ cái đã dịch chuyển. Tìm chữ cái khóa ở bên trái và chữ cái văn bản thường dọc theo trên cùng, và ô nơi hàng và cột gặp nhau là chữ cái mã hóa.
Biến thể Autokey và Beaufort
Biến thể Autokey khắc phục điểm yếu chính của mật mã tiêu chuẩn, đó là khóa lặp lại. Sau khi từ khóa hết, khóa tiếp tục bằng chính văn bản thường, nên dòng khóa đang chạy không bao giờ lặp lại và mật mã khó tấn công hơn nhiều. Việc giải mã khôi phục văn bản thường từng chữ cái một và đưa nó trở lại vào dòng khóa.
Biến thể Beaufort dùng công thức C = (K - P) mod 26. Vì trừ đi từ khóa là phép nghịch đảo của chính nó, cùng một thao tác vừa mã hóa vừa giải mã, điều này khiến nó tiện lợi cho các đĩa mật mã từng được dùng trên biển. Công cụ này hỗ trợ cả ba biến thể để bạn có thể so sánh chúng trên cùng một văn bản và từ khóa.
Làm thế nào để phá mật mã Vigenère
Mật mã được phá theo hai giai đoạn. Trước tiên bạn tìm độ dài của từ khóa, theo cách cổ điển là dùng phép kiểm tra Kasiski, vốn tìm các nhóm chữ cái lặp lại trong văn bản mã hóa và đo khoảng cách giữa chúng, hoặc dùng phép thử Friedman, vốn dựa vào chỉ số trùng hợp. Một khi đã biết độ dài khóa, văn bản mã hóa được tách thành bấy nhiêu cột, mỗi cột được mã hóa bằng một mức dịch chuyển Caesar duy nhất, và phân tích tần suất thông thường phá từng cột một cách riêng rẽ.
Điều này có nghĩa là một mật mã Vigenère với khóa ngắn trên một thông điệp dài khá dễ bị phá, đó là lý do sức mạnh của mật mã phụ thuộc rất nhiều vào việc dùng một khóa dài, không lặp lại. Các ý tưởng Autokey và one-time-pad nảy sinh trực tiếp từ nỗ lực loại bỏ sự lặp lại đó.
Lược sử mật mã Vigenère
Ý tưởng dùng một từ khóa để chuyển đổi giữa các bảng chữ cái lần đầu được Giovan Battista Bellaso công bố vào năm 1553, dựa trên các bảng đa bảng chữ cái của Johannes Trithemius và Leon Battista Alberti. Phương pháp này về sau bị gán nhầm cho nhà ngoại giao Pháp Blaise de Vigenère, người mà cái tên đã gắn liền với nó dù chính công trình của ông mô tả phiên bản Autokey mạnh hơn. Mật mã khóa lặp lại đã kháng cự các nhà phân tích mật mã suốt nhiều thế kỷ cho đến khi Charles Babbage phá được nó một cách riêng tư vào thập niên 1850 và Friedrich Kasiski công bố một phương pháp tổng quát vào năm 1863.
Mật mã Vigenère có an toàn không?
Không theo tiêu chuẩn hiện đại. Một khi các phương pháp Kasiski và Friedman được công bố, bất kỳ mật mã Vigenère nào với khóa lặp lại đều trở nên có thể phá được nếu kiên nhẫn, và ngày nay thì phá được tức thì bằng máy tính. Giá trị thực sự của nó bây giờ mang tính giáo dục và giải trí: đó là cách rõ ràng nhất để thấy một khóa biến một mật mã tầm thường thành một mật mã mạnh hơn nhiều như thế nào, và nó vẫn là một mục cơ bản của các câu đố và bài tập lập trình. Để có sự an toàn thực sự, người ta dùng các thuật toán hiện đại như AES thay thế.
Câu hỏi thường gặp
Mật mã Vigenère là gì?
Mật mã Vigenère khác mật mã Caesar như thế nào?
Từ khóa là gì, và được dùng như thế nào?
Bạn có thể cho một ví dụ Vigenère thực hành không?
Bảng tabula recta hay ô vuông Vigenère là gì?
Các biến thể Autokey và Beaufort là gì?
Làm sao để phá hay bẻ khóa một mật mã Vigenère?
Tại sao mật mã Vigenère được gọi là không thể giải?
Ai đã phát minh ra mật mã Vigenère?
Nó có thay đổi số, khoảng trắng hay dấu câu không?
Mật mã Vigenère có an toàn không?
Văn bản của tôi có được tải lên máy chủ không?
Làm thế nào để viết một mật mã Vigenère bằng mã lập trình?
Công cụ liên quan
Tiếp tục với những công cụ hữu ích này