Trình giải Vigenère
Dán văn bản mã hóa Vigenère và khôi phục từ khóa cùng thông điệp gốc mà không cần biết khóa. Trình giải tìm độ dài khóa từ chỉ số trùng hợp, xác nhận bằng phương pháp Kasiski, phá từng cột như một mật mã Caesar, rồi chọn bản giải mã đọc giống tiếng Anh nhất. Mọi thứ đều chạy trong trình duyệt của bạn.
Thử một mẫu:
Dán văn bản mã hóa Vigenère vào ô trên, và khóa được khôi phục, thông điệp đã giải mã cùng phân tích độ dài khóa sẽ hiện ra ở đây. Bạn cung cấp càng nhiều văn bản, câu trả lời càng đáng tin cậy.
Cách sử dụng Trình giải mã Vigenère
- 1
Dán văn bản mã hóa
Sao chép văn bản đã mã hóa Vigenère và dán vào ô. Một đoạn văn trở lên cho kết quả tốt nhất; chữ cái được đọc không phân biệt hoa thường, còn khoảng trắng, chữ số và dấu câu bị bỏ qua khi giải.
- 2
Đọc khóa khôi phục được
Trình giải hiển thị từ khóa có khả năng nhất ở trên cùng. Sao chép nó chỉ với một cú bấm — bạn có thể dán nó vào công cụ Mật mã Vigenère để xác minh rằng nó giải mã ra cùng thông điệp.
- 3
Đọc thông điệp đã giải mã
Bên dưới khóa, toàn bộ văn bản rõ hiện ra với chữ hoa, khoảng cách và dấu câu gốc được khôi phục. Sao chép nó để giữ lại kết quả.
- 4
Kiểm tra bằng chứng về độ dài khóa
Biểu đồ chỉ số trùng hợp và bảng Kasiski cho thấy vì sao độ dài khóa đó được chọn. Nếu một kết quả trông sai, hãy bấm một độ dài khác trong biểu đồ để buộc giải lại, hoặc nới rộng độ dài khóa tối đa.
- 5
Chia sẻ hoặc xóa
Sao chép một liên kết chia sẻ mở lại công cụ với đúng văn bản mã hóa của bạn — văn bản nằm trong phần URL sau dấu thăng, vốn không bao giờ đến máy chủ. Nút Xóa thiết lập lại mọi thứ.
Phá mật mã Vigenère, giải thích cặn kẽ
Công cụ này làm gì
Mật mã Vigenère giấu một thông điệp bằng cách dịch mỗi chữ cái đi một lượng khác nhau, theo một từ khóa lặp lại. Suốt ba thế kỷ, ý tưởng đơn giản đó đã mang lại cho nó biệt danh le chiffre indéchiffrable — mật mã không thể giải — vì mẹo thông thường là đếm tần suất chữ cái lại bất lực trước nó. Công cụ này vẫn phá được nó, một cách tự động, mà bạn không cần cung cấp khóa. Dán văn bản mã hóa vào và nó trả về từ khóa có khả năng nhất cùng thông điệp đã giải mã.
Nó hoạt động theo cách một nhà phân tích mật mã làm, chỉ nhanh hơn: nó tìm ra khóa dài bao nhiêu, tách thông điệp thành chừng ấy mật mã Caesar riêng biệt, giải từng cái, rồi kiểm tra rằng kết quả thực sự đọc giống tiếng Anh. Không cần khóa, không phỏng đoán, và không gì rời khỏi trình duyệt của bạn — toàn bộ cuộc tấn công chạy ngay trên máy của bạn.
Vì sao mật mã Vigenère có thể bị phá
Một từ khóa có độ dài L mã hóa mỗi chữ cái thứ L bằng cùng một phép dịch. Vậy nếu bạn lấy chữ cái thứ 1, thứ (L+1), thứ (2L+1) và cứ thế, mọi chữ cái trong nhóm đó đều được dịch đi cùng một lượng — chúng tạo thành một mật mã Caesar thông thường. Điều tương tự đúng cho mỗi vị trí bắt đầu trong L vị trí. Một mật mã Vigenère vì thế không phải một bài toán khó mà là L bài toán dễ xếp chồng lên nhau, và thứ duy nhất ngăn bạn với văn bản rõ là việc tìm ra L.
Một khi đã biết độ dài khóa, mỗi cột giữ nguyên tần suất chữ cái lệch lạc của tiếng Anh, chỉ được dán nhãn lại bằng một phép dịch duy nhất. Đó chính xác là tình huống mà phân tích tần suất cổ điển được tạo ra để xử lý. Toàn bộ nghệ thuật phá Vigenère do đó quy về một câu hỏi: khóa dài bao nhiêu?
Tìm độ dài khóa bằng chỉ số trùng hợp
Chỉ số trùng hợp đo khả năng hai chữ cái lấy ngẫu nhiên từ một văn bản là giống nhau. Tiếng Anh thông thường nằm quanh 0.066 vì các chữ cái của nó được dùng rất không đều; văn bản hoàn toàn ngẫu nhiên nằm gần 0.038. Khi bạn tách văn bản mã hóa thành đúng số cột, mỗi cột là đơn bảng chữ và chỉ số trùng hợp của nó bật trở lại về phía giá trị của tiếng Anh. Tách thành sai số, và các cột vẫn phẳng lì, trông ngẫu nhiên ở mức 0.038.
Công cụ thử mọi độ dài khóa từ một cho tới mức tối đa bạn chọn, đo chỉ số trùng hợp trung bình của các cột cho từng độ dài, và vẽ kết quả thành một biểu đồ cột. Độ dài đúng nổi bật lên thành một thanh cao — và các bội số của nó cũng vậy, vì độ dài mười cũng làm mọi nhóm năm xếp thẳng hàng. Sự mơ hồ do bội số đó chính là lý do công cụ không đơn thuần tin vào thanh cao nhất, như các phần sau sẽ giải thích.
Phương pháp Kasiski
Có một cách thứ hai, lâu đời hơn, để tìm độ dài khóa, do Friedrich Kasiski phát hiện vào năm 1863. Khi một từ thông dụng như THE xếp thẳng với cùng một phần của từ khóa hai lần, nó mã hóa thành cùng một chuỗi văn bản mã hóa cả hai lần. Khoảng cách giữa hai lần lặp như vậy phải là một số nguyên lần độ dài khóa — nên độ dài khóa chia hết khoảng cách đó. Tìm vài chuỗi lặp lại, đo các khoảng cách, và độ dài khóa ẩn mình trong các ước số chung của những khoảng cách ấy.
Công cụ quét văn bản mã hóa để tìm các chuỗi ba chữ cái lặp lại, thu thập các khoảng cách giữa chúng, và đếm xem mỗi ước số ứng viên chia hết bao nhiêu khoảng cách. Những ước số được ủng hộ nhiều nhất là độ dài khóa có khả năng nhất. Điều này được trình bày như một bảng bằng chứng riêng, độc lập với chỉ số trùng hợp, để hai kỹ thuật khác nhau có thể nhất trí về câu trả lời.
Giải từng cột và đọc ra từ khóa
Với độ dài khóa đã cố định, mỗi cột là một mật mã Caesar, và các mật mã Caesar gục ngã ngay lập tức. Với mỗi cột, trình giải thử cả hai mươi sáu phép dịch và giữ lại phép dịch mà các chữ cái giải mã được khớp nhất với tần suất kỳ vọng của tiếng Anh, đo bằng phép kiểm chi bình phương. Phép dịch thắng cuộc của một cột là một chữ cái của từ khóa: phép dịch mười một là L, phép dịch bốn là E, và cứ thế. Đọc các phép dịch thắng cuộc theo thứ tự và từ khóa tự nó hiện ra.
Giải mã toàn bộ thông điệp bằng từ khóa khôi phục được sẽ trả lại văn bản rõ, với chữ hoa, khoảng cách và dấu câu gốc được đặt lại đúng chỗ ban đầu. Nếu khóa khôi phục được tình cờ là một sự lặp lại — chẳng hạn LEMONLEMON khi khóa thật là LEMON — công cụ thu gọn nó về chu kỳ ngắn nhất, để bạn luôn thấy từ khóa thật, tối giản.
Giải trước, rồi kiểm chứng — vì sao bigram quan trọng
Một trình giải ngây thơ chọn độ dài khóa từ chỉ số trùng hợp rồi dừng lại. Điều đó sai trong hai trường hợp thường gặp: một thông điệp lặp đi lặp lại có thể làm méo mó thống kê, và một độ dài đúng rất dễ bị nhầm với các ước số của nó. Công cụ này tránh được cái bẫy bằng cách giải ở mọi độ dài ứng viên rồi đánh giá kết quả theo mức độ mỗi bản giải mã thực sự đọc giống tiếng Anh — giải trước, kiểm chứng sau.
Người đánh giá không phải là tần suất chữ cái đơn lẻ, vốn dễ bị đánh lừa đến bất ngờ: một khóa hơi sai có thể tạo ra văn bản lộn xộn nhưng tình cờ lại có hỗn hợp chữ cái hợp lý. Thay vào đó, công cụ chấm điểm mỗi bản giải mã bằng các bigram của nó — khả năng xuất hiện của mỗi cặp chữ cái liền kề, học được từ một khối lượng lớn văn bản tiếng Anh. Tiếng Anh thực sự dồi dào những cặp như TH, HE và ER và gần như không bao giờ chứa QJ hay ZX, nên chỉ một chữ cái khóa sai cũng tiêm vào những cặp bất khả thi và kéo chìm điểm số. Bản giải mã có độ khớp bigram tốt nhất thắng cuộc, và khi hòa thì khóa ngắn hơn thắng, đó là lý do một mật mã Caesar đơn thuần được giải đúng thành một khóa chỉ một chữ cái.
Bạn cần bao nhiêu văn bản, và khi nào nó gặp khó
Vì mỗi cột được giải bằng phân tích tần suất, điều quan trọng là bao nhiêu chữ cái rơi vào mỗi cột — tức là tổng độ dài chia cho độ dài khóa. Với khoảng bốn mươi chữ cái mỗi cột trở lên, việc khôi phục thường chính xác, cả khóa lẫn văn bản rõ. Một đoạn văn hai trăm chữ cái dễ dàng phá được một khóa ngắn; một khóa dài hơn cỡ chục chữ cái lại cần vài trăm chữ cái văn bản mã hóa mới chắc chắn.
Khi văn bản mã hóa ngắn so với khóa, các cột trở nên mỏng và số đếm tần suất mỗi cột trở nên nhiễu. Trình giải vẫn trả về nỗ lực tốt nhất của nó — thường là một kết quả suýt đúng, sai một hai chữ cái khóa nhưng vẫn đọc được — thay vì không trả về gì. Nếu một kết quả trông gần như đúng, cách khắc phục thông thường đơn giản là thêm văn bản mã hóa, hoặc tự tay điều chỉnh độ dài khóa bằng biểu đồ. Mật mã chỉ kháng cự khi quả thực không có đủ văn bản để đo lường.
Câu hỏi thường gặp
Có thực sự phá được mật mã Vigenère mà không cần khóa không?
Trình giải tìm độ dài khóa bằng cách nào?
Chỉ số trùng hợp là gì?
Phương pháp Kasiski là gì?
Vì sao khóa khôi phục được có thể hơi sai?
Tôi cần bao nhiêu văn bản mã hóa?
Vì sao công cụ kiểm tra bigram thay vì chỉ tần suất chữ cái?
Tôi có thể buộc dùng một độ dài khóa cụ thể không?
Nó có hiệu quả với Beaufort, Gronsfeld hay các mật mã đa bảng chữ khác không?
Văn bản mã hóa của tôi có được gửi tới máy chủ không?
Cái này khác công cụ Mật mã Vigenère như thế nào?
Công cụ liên quan
Tiếp tục với những công cụ hữu ích này