T

Text Machine

Công cụ văn bản mạnh mẽ, ngay trong trình duyệt của bạn

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:

Văn bản mã hóa Vigenère

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. 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. 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. 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. 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. 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?
Có. Một mật mã Vigenère khóa lặp là vài mật mã Caesar đan xen vào nhau, và các mật mã Caesar gục ngã trước phân tích tần suất. Trình giải tìm ra độ dài khóa, tách thông điệp thành chừng ấy cột, phá từng cột, và đọc ra từ khóa từ các kết quả — tất cả mà không cần bạn biết khóa từ trước.
Trình giải tìm độ dài khóa bằng cách nào?
Hai cách cùng lúc. Nó đo chỉ số trùng hợp trung bình cho mọi độ dài ứng viên — độ dài đúng và các bội số của nó đạt gần 0.066, giống tiếng Anh, trong khi độ dài sai trông ngẫu nhiên ở gần 0.038 — và nó chạy phương pháp Kasiski, phân tích ước số của các khoảng cách giữa những chuỗi lặp lại. Độ dài mà cả hai phương pháp nhất trí thì gần như luôn đúng.
Chỉ số trùng hợp là gì?
Đó là xác suất hai chữ cái lấy ngẫu nhiên từ một văn bản là giống nhau. Tiếng Anh khoảng 0.066 vì các chữ cái của nó được dùng không đều; văn bản ngẫu nhiên khoảng 0.038. Khi văn bản mã hóa được tách thành đúng số cột, mỗi cột lại trông giống tiếng Anh, đó là cách công cụ phát hiện độ dài khóa.
Phương pháp Kasiski là gì?
Một phương pháp do Friedrich Kasiski công bố vào năm 1863. Khi một từ lặp lại xếp thẳng với cùng một phần của khóa, nó mã hóa giống hệt nhau, và khoảng cách giữa những lần lặp đó là một bội số của độ dài khóa. Bằng cách thu thập những khoảng cách như vậy và xem xét các ước số chung của chúng, bạn khôi phục được các độ dài khóa ứng viên một cách độc lập với thống kê tần suất.
Vì sao khóa khôi phục được có thể hơi sai?
Mỗi cột được giải bằng phân tích tần suất, vốn cần đủ chữ cái để đáng tin cậy. Nếu văn bản mã hóa ngắn so với độ dài khóa, một số cột có quá ít chữ cái và một hai chữ cái khóa có thể sai. Văn bản rõ thường vẫn đọc được; cách khắc phục là thêm văn bản mã hóa, hoặc tự tay điều chỉnh độ dài khóa trong biểu đồ.
Tôi cần bao nhiêu văn bản mã hóa?
Hãy nhắm tới ít nhất bốn mươi chữ cái mỗi cột — đó là tổng độ dài chia cho độ dài khóa. Một khóa ngắn dễ dàng bị phá từ một đoạn văn duy nhất, trong khi một khóa dài cỡ chục chữ cái lại cần vài trăm chữ cái văn bản mã hóa để khôi phục chính xác. Càng nhiều văn bản thì càng tốt.
Vì sao công cụ kiểm tra bigram thay vì chỉ tần suất chữ cái?
Tần suất chữ cái đơn lẻ có thể bị đánh lừa — một khóa hơi sai đôi khi cho ra văn bản lộn xộn với hỗn hợp chữ cái hợp lý. Độ khớp bigram chấm điểm mọi cặp chữ cái liền kề so với tiếng Anh thực, nơi TH và HE phổ biến còn QJ hay ZX thực tế gần như không bao giờ xuất hiện. Một khóa sai tiêm vào những cặp bất khả thi và bị chấm điểm kém, nên bản giải mã thực sự là tiếng Anh sẽ thắng.
Tôi có thể buộc dùng một độ dài khóa cụ thể không?
Có. Bấm bất kỳ thanh nào trong biểu đồ độ dài khóa để giải tại đúng độ dài đó, và nhấn Tự động để trở về chế độ phát hiện tự động. Bạn cũng có thể nâng độ dài khóa tối đa mà công cụ tìm kiếm nếu nghi ngờ một khóa dài. Điều này tiện lợi khi bạn đã biết hoặc đoán được độ dài.
Nó có hiệu quả với Beaufort, Gronsfeld hay các mật mã đa bảng chữ khác không?
Trình giải này nhắm vào mật mã Vigenère khóa lặp tiêu chuẩn. Những họ hàng gần như Gronsfeld (một Vigenère dạng số) thường giải được một phần, nhưng Beaufort và các biến thể autokey dùng số học khác và có thể không giải được. Nếu bạn không chắc đang có mật mã nào, hãy chạy Trình nhận dạng mật mã trước, rồi dùng công cụ phù hợp.
Văn bản mã hóa của tôi có được gửi tới máy chủ không?
Không. Toàn bộ cuộc tấn công chạy trong trình duyệt của bạn, nên văn bản của bạn không bao giờ được tải lên, ghi nhật ký hay lưu trữ. Ngay cả liên kết chia sẻ cũng giữ văn bản mã hóa của bạn trong phần URL sau dấu thăng, vốn được trình duyệt không bao giờ gửi tới máy chủ, nên nó vẫn riêng tư cho đến khi bạn chọn chia sẻ.
Cái này khác công cụ Mật mã Vigenère như thế nào?
Công cụ Mật mã Vigenère mã hóa và giải mã khi bạn đã biết khóa. Trình giải này dành cho khi bạn không biết: nó khôi phục khóa và văn bản rõ chỉ từ văn bản mã hóa. Dùng trình giải để phá một thông điệp, rồi dùng công cụ mật mã để xác nhận khóa mã hóa lại nó một cách chính xác.

Công cụ liên quan

Tiếp tục với những công cụ hữu ích này

Bộ chuyển đổi Unix Timestamp

Bộ chuyển đổi JSON ↔ CSV

Bộ chuyển đổi CSV sang JSON

Bộ chuyển đổi JSON ↔ YAML

Bộ chuyển đổi Văn bản ↔ Nhị phân

Bộ chuyển đổi Văn bản ↔ Hex