Nhân dịp tết đến xuân sang, chim hát ca, hoa đua nở. Mình xin đưa đến các bạn một trò chơi, cuộc thi, sự kiện Giải mã nhận quà.


Quy định vô cùng đơn giản, mình sẽ cung cấp cho các bạn phương pháp mã hóa cùng một thông điệp đã được mã hóa theo phương pháp đã cung cấp. Việc của các bạn là tìm được nội dung thông điệp.

Trong trường hợp tìm được khóa là thành công nhất, tuy nhiên có một số cách để dự đoán thông điệp trên cơ sở bản mã và gợi ý. Quyết định của mình sẽ là quyết định cuối cùng về người thắng cuộc.

Phần thưởng duy nhất dành cho người đầu tiên phá mã thành công như sau:

  • Sách 101+ ý tưởng khởi nghiệp
  • Sách Người giỏi không bởi học nhiều
  • Sách Đừng đợi đến khi tốt nghiệp đại học
  • Sách Bản CV hoàn hảo
  • Sách Thật đơn giản Phỏng vấn tuyển dụng
  • Giáo trình mật mã và an toàn thông tin (bản photo)
  • Toàn bộ mã nguồn chương trình mã hóa được sử dụng trong sự kiện này
  • Xin phép Diep_phong cho mình lấy cuốn Tam tự kinh làm phần thưởng (Diep_phong comment đồng ý thì sẽ có).

Nào, giờ bắt đầu vào phần phương pháp mã hóa. Sự thật mình muốn lấy hệ mật mã enigma đem ra để làm sự kiện. Tuy nhiên nó quá khó để các bạn có thể phá mã được. Vậy nên mình xin sử dụng hệ mã hóa cổ điển kết hợp giữa hệ mã Caesarhệ mã hoán vị đã được trình bày cụ thể ở Hệ mật mã cổ điển. Vậy hệ mật mã kết hợp hoạt động như thế nào?


Với một thông điệp P, ta chia thông điệp làm nhiều phần (gọi là block) có độ dài n ký tự.

Với mỗi block ta sẽ thay thế từng ký tự theo mã Caesar với các khóa khác nhau. 

Cách làm quá là đơn giản luôn. Và giờ, demo một thông điệp nào:

Đầu tiên, quy ước quy đổi các ký tự từ A đến Z bằng số theo bảng sau:

Hiểu là A ứng với 0, B ứng với 1 v.v...

Tiếp theo là một thông điệp với nội dung: "Ban AnDanh vo cung dep trai va quyen ru".

Chọn khóa nào, key mình chọn là: "nice" => Khóa này hiểu là chia văn bản thành các block có độ dài 4 ký tự, với mỗi ký tự trong block sẽ được mã hóa bằng hệ mã Caesar với khóa lần lượt là n, i, c, e.

Ta chia văn bản thành:

"Ban AnDanh vo cung dep trai va quyen ru" => "BanA|nDan|hvoc|ungd|eptr|aiva|quye|nru"

Giờ ví dụ mã hóa block đầu tiên, chuỗi "BanA" ta có bảng mã hóa như sau:

 Vậy BANA được mã hóa thành OIPE. Làm tương tự với các block còn lại. Vì sao có bảng như trên, các bạn có thể đọc lại phần 1 mật mã mình đã viết.

Cuối cùng thông điệp ban đầu sẽ được mã hóa thành: oipealcrudqghvihrxvvnqxedcaiazw

Việc giải mã làm tương tự với bản mã. Ta chia bản mã làm các block và giải mã từng ký tự theo hệ mã Ceasar đã được trình bày ở bài viết trước.

Mọi việc đều được xử lý bằng máy tính, bằng chứng đây:

Giờ đến phần quan trọng nhất, thông điệp của chúng ta:

tycpkxsaadzcjyqmpgoebgqedgkrre

Gợi ý: 

+ Đây là một câu tiếng Anh.

+ Tất cả các mật mã đều có chung 1 điểm yếu đấy là Được sử dụng bởi con người

Phần gợi ý update:

+ Đọc kỹ lại bài đăng này cũng các bình luận. Có chữ nào trên màn hình đọc cho hết, nghiền ngẫm thêm nữa.

+ Trong thông điệp tồn tại chuỗi ký tự spi.

Mình xin phép ấn định thứ 7 ngày 21/01/2017 và thứ 4 ngày 25/01/2017 nếu chưa có ai thành công phá mã sẽ đưa ra thêm gợi ý cụ thể hơn (tất nhiên sẽ đi kèm với giảm dần phần thưởng). Hạn chót là 23h59' ngày 04/02/2017.


p/s: Mình hứa là một ngày đẹp trời sẽ viết về máy Enigma và cuộc chiến của Alan Turing trong thế chiến thứ hai.

Cảm ơn Spiderum team đã tạo ra môi trường, cơ hội để mình tổ chức sự kiện nhỏ này. 

Chúc các bạn may mắn!!!