TOÁN HỌC VÀ MẬT MÃ
Mật mã Ceasar
Bản thân là người nhút nhát, ít giao tiếp, có thể là xem là người hướng nội, có lẽ vậy mà thời còn học cấp hai, Caolac đã từng nghĩ ra một bảng mã riêng cho mình để có thể viết những thứ mà chỉ mỗi mình có thể hiểu được. Bản mã mà Caolac nghĩ ra lúc đó rất đơn giản và ngây thơ, đúng là kiến thức và kinh nghiệm như thế nào, thì chỉ nghĩ được và sáng tạo được trong phạm vi thế ấy, nói như thế để thấy được quá trình học tập và trau dồi thêm kiến thức, kinh nghiệm là điều cực kỳ cần thiết và quan trọng.
Thời đó (thậm chí thời giờ luôn, Caolac tin rằng có nhiều người chưa hẳn đã thuộc bảng chữ cái Tiếng Việt nếu không thực sự để ý) Caolac nghĩ rất đơn giản, ứng với mỗi chữ cái trong Tiếng Việt thì Caolac lại vẽ một mẫu hình tương ứng, quy tắc dấu vẫn giữ nguyên. Chỉ một ý tưởng đơn giản như vậy thôi mà Caolac đã tạo ra được một bảng mã cho riêng mình một cách sơ khai nhất. Nhưng vấn đề là để thuộc lòng hình mẫu của bảng ký tự ấy cũng quả là một điều nan giải, nó chả khác nào một học sinh mới đi học phải thuộc lòng bảng chữ cái, ấy vậy mà lúc đó Caolac đã thuộc và viết ở một tốc độ bình thường được (giờ thì lâu quá rồi cũng không còn nhớ chi tiết từng ký hiệu mình đã vẽ nữa)
Tuy đơn giản, nhưng với lứa tuổi học sinh cấp hai như thời Caolac thì chẳng đứa nào đủ kiên nhẫn để có thể giải những gì Caolac ghi, một là không quan tâm, hai là cũng chẳng rảnh, nhưng với Caolac thì đó như là một công trình, kiểu vậy, cảm thấy thú vị và nghĩ nó là rất đỉnh (bởi vì kiến thức và hiểu biết lúc đó chỉ tới vậy)
Sau này biết đến tin học, tìm hiểu một ít thì mới biết cái tư duy, cái cách nghĩ của Caolac thời đó chính là tạo ra mật mã, một bộ môn mật mã học luôn, rất nghiêm túc, rất chuẩn chỉnh và ứng dụng cực kỳ nhiều, cực kỳ ý nghĩa cho cuộc sống, nhưng cái cấp độ của Caolac lúc đó thì chắc chỉ là $1+1=2$
Nói đến mật mã thì chắc ai cũng biết là để làm gì, nôm na nhất là để giấu thông tin với những người không liên quan, chỉ có những người cần biết mới được biết, thời bây giờ có thể hiểu như là mật khẩu tài khoản gmail, mật khẩu thẻ ngân hàng hay những thứ tương tự,… dĩ nhiên là những thứ như trên không thể tồn tại nếu kỹ thuật mật mã không phát triển, sẽ chẳng ai dám bỏ tiền vào một cái thẻ ngân hàng mà bất kỳ ai bỏ ra vài phút mò mẫm là biết được mật khẩu
Lý thuyết về những kỹ thuật mật mã áp dụng cho các ứng dụng trong cuộc sống của chúng ta không hề đơn giản, đòi hỏi ta phải có một kiến thức về Toán nhất định, nó là kết quả của một quá trình phát triển mà sự đóng góp của Toán học thuần tuý là yếu tố chính, với một người không chuyên về mật mã như bản thân Caolac và đa số mọi người, thì việc hiểu những thứ đó là vô cùng hại não, tuy nhiên ở cấp độ cơ bản, ta cũng nên biết để tạo nền tảng cho tư duy cũng như để biết được thêm một ứng dụng của Toán vào cuộc sống (điều mà trước đây Caolac hay nghĩ học toán để làm gì)
Quay lại câu chuyện của Caolac, thực ra ý tưởng của Caolac thời cấp hai chính là mật mã Ceasar (mật mã chuyển vị). Ceasar đã sống cách đây hơn 2000 năm và nghĩ ra kiểu mã hoá riêng của ông, 2000 năm sau Caolac do không biết đến ông nên nghĩ ra điều na ná kakaka (nói na ná cho vui vậy thôi chứ về logic thì không thể so sánh được), vậy mới thấy là trước khi ta muốn tự sáng tạo nên điều gì, thì nên tìm tòi học hỏi kỹ, vì như thế sẽ tiết kiệm được rất nhiều thời gian cho những thứ mà các bậc tiền bối đã dày công nghiên cứu, nếu không ta lại rơi vào hoàn cảnh “đi phát minh lại chiếc bánh xe”
Ở đây Caolac sẽ lấy bảng chữ cái Tiếng Anh là ví dụ
Ở dòng đầu tiên (phía cuối có số 0) là bảng chữ cái gốc
Ở dòng thứ hai (phía cuối có số 1) nghĩa là ta dịch toàn bộ bảng chữ cái sang phải 1, nếu như vậy thì ta sẽ trống ô đầu tiên và mất chữ Z ở cuối, ta lại đem chữ Z để vào ô đầu tiên
Tương tự ở dòng thứ 3 (phía cuối có số 2) nghĩa là ta dịch toàn bộ bảng chữ cái sang phải 2, nếu như vậy ta thừa 2 ô trống ở đầu và mất 2 chữ Y, Z ở cuối, ta lại đem hai chữ Y, Z để vào 2 ô trống ở đầu (lưu ý là theo thứ tự Y, Z)
Tới đây thì ta có thể hoàn toàn mở rộng ra bằng cách dịch chuyển sang phải một số bất kỳ (nhỏ hơn hoặc bằng 26)
Sau khi dịch chuyển ta được một bảng mã mới, với “chìa khoá” chính là ở số cuối
Ta sẽ thông qua một ví dụ
Giả sử ta có đoạn văn bản: “HELLO IM CAOLAC”
Khi đó nếu ta dùng bảng mã ở dòng 1 ở trên thì đoạn văn trên sẽ được mã hoá là
“GDKKN HL BZNKZB”
Một câu vô nghĩa, tuy nhiên nếu ta biết được “chìa khoá” là 1 và quy tắc dịch sang phải, thì chắc chưa tới 5 phút, ta đã biết câu trên ý nghĩa là gì bằng cách làm ngược lại quá trình
Vấn đề đặt ra một cách tự nhiên là ta cứ dịch qua phải 1 nấc, ta sẽ được một bảng mã mới, nhưng nếu dịch qua phải 27 nấc, nó sẽ quay lại ban đầu, do đó với quy tắc dịch phải như trên ta có tập “chìa khoá” là tập $S=\{1;2;\ldots;26\}$
Vậy nếu nếu theo quy tắc trên, với một đoạn văn bản mã hoá, bằng một cách mò mẫm, ta vẫn suy ra được văn bản ban đầu do không gian khoá quá nhỏ, hoàn toàn có thể thực hiện bằng tay, chứ chưa nói tới máy tính có thể thực hiện cả tỷ phép toán trên giây. Như vậy, việc mã hoá theo cách dịch chuyển như trên là không an toàn.
Câu hỏi đặt ra một cách tự nhiên là có cách nào làm cho nó an toàn hơn không?
Ngẫm nghĩ một chút ta thấy nếu giờ ta không dịch chuyển nữa mà ta thay đổi vị trí tuỳ thích (hay gọi là hoán vị, kiến thức này nằm ở chương trình toán lớp 11) thì ta sẽ được một bảng mã có vẻ lộn xộn hơn, khó đoán hơn
Ví dụ như sau
Quá lộn xộn đúng không nào, nghĩa là cứ hoán vị một cách ngẫu nhiên 26 chữ cái, ta sẽ được 1 bảng mã mới
Nếu nhớ thêm một chút về kiến thức hoán vị của lớp 11 thì với 26 chữ cái ta sẽ có số hoán vị (cũng chính là không gian khoá) là $P=26!$, một con số vô cùng lớn. Nó lớn đến mức nào? Thử tưởng tượng nếu có một máy tính có thể tính 1 tỷ phép toán mỗi giây thì cũng phải mất 6 tỷ năm để có thể giải mã (năm nay mới là năm 2022 à). Tới đây thì ta thấy độ an toàn cho việc mã hoá hoán vị này là quá quá quá quá ok rồi.
Khẳng định trên sẽ là hoàn toàn đúng nếu toàn bộ mọi người trên thế giới đều học “dở” toán (bởi vì công việc trên là bất khả thi nếu suy nghĩ thông thường), tiếc thay điều này không xảy ra vì có quá nhiều người giỏi toán, chính vì giỏi toán nên họ đã làm được cái công việc mà máy tính có thể mất cả tỷ năm để làm trong thời gian cho phép.
Tuy nhiên để làm được điều này phải có sự đóng góp rất lớn của những người nghiên cứu ngôn ngữ học. What? Tự nhiên đang giải mã toán liên quan gì mấy ông nghiên cứu ngôn ngữ ở đây? Xưa giờ ta cứ hay đề cao các ngành tự nhiên quá mà không quan tâm đến mấy ngành xã hội, qua ví dụ nhỏ này cho thấy ngành nào trong cuộc sống cũng quan trọng, tương hỗ lẫn nhau (à, lại nâng được tầm tư duy lên rồi, không được xem thường bất kỳ lĩnh vực gì)
Quay lại vấn đề, vậy thì việc giải mã liên quan gì tới việc nghiên cứu ngôn ngữ học. Liên quan rất mật thiết, nhờ những kết quả của những nghiên cứu ngôn ngữ học mà việc giải mã ở trên trở nên khả thi
Theo những nhà nghiên cứu ngôn ngữ học, trong tiếng anh thì tần suất (kiến thức lớp 10 đã được trang bị) các ký tự trong một văn bản là không giống nhau, nghĩa là, cùng một văn bản, có một số ký tự sẽ xuất hiện nhiều lần lần hơn các ký tự khác và người ta thống kê sơ bộ như sau
Dĩ nhiên để có được những con số trên đây là cả một sự nghiên cứu nghiêm túc, chứ không đơn thuần là cho đại
Vậy thì vấn đề này có thể giúp gì cho việc giải mã ở trên? Như ta đã biết, mỗi hoán vị là một bản mã, do đó nếu ký tự E ( ứng với tần suất cao nhất là 12,6) thì khi thay bằng một ký tự nào đó thì ký tự đó cũng có tần suất là 12,6, Wao! Vậy ý nghĩa của nó là gì? Nghĩa là, ký tự ta có thể thay đổi tuỳ thích không ai biết, tuy nhiên tần suất nó sẽ không thay đổi. Chính vì thế, ta có thể thống kê tần suất của các ký tự trong bảng mã, sau đó so sánh với tần suất hay xuất hiện của bảng ký tự ban đầu, từ đó có thể dần đoán ra ý nghĩa của bảng mã, dĩ nhiên là con người nên việc đoán nghĩa là dễ dàng. Ví dụ sau khi thay thế bằng bảng tần suất ta có “I LKVE POU”, rõ ràng vẫn chưa biết, nhưng ta sẽ đoán là “I LOVE YOU”, từ đó sẽ suy ra “K” tương ứng với “O” và “P” tương ứng với “Y”, cứ như thế ta sẽ lần ra được bảng mã. Việc này là hoàn toàn khả thi trong thời gian cho phép.
Một chú ý nhỏ là do phương pháp này dựa theo tần suất của ký tự xuất hiện trong văn bản, nên văn bản càng dài, thì càng dễ để giải mã. Điều này thì chắc Caolac không thể viết thư tình dài để gửi được rồi, vì chỉ cần học xong lớp 10, cộng với search google bản phân bố tần suất các ký tự trong văn bản tiếng Việt là có thể mò mẫm đoán được rồi!
Qua những phân tích như trên thì cái việc tưởng chừng như bất khả thi ấy lại trở nên khả thi, thật là chán Toán quá đi, chính Toán tạo ra sự mã hoá an toàn, và giờ chính Toán cũng phá hỏng sự an toàn đó
Lại tiếp tục một câu hỏi tự nhiên đặt ra là, có cách nào mã hoá an toàn hơn không? Chứ như trên thì mấy đệ học xong lớp 10 nó phá mã hết!
Trước khi ngẫm nghĩ câu trả lời cho câu hỏi trên thì ta nhận thấy, nguyên nhân của việc phá mã phía trên dễ dàng là do sử dụng thống kê về tần suất các ký tự. Vậy tần suất các ký tự là nguyên nhân, chính vì thế, ta phải nghĩ ra một cách mã hoá nào đó mà việc thống kê tần suất các ký tự cũng không có tác dụng, nghĩa là nếu ta có 100 chữ A ban đầu, sau khi mã hoá phải ra 100 ký tự khác nhau hoàn toàn, chứ không phải là cùng 100 ký tự nào đó.
Vậy phương pháp mã hoá đó là gì?
Bài viết đã quá dài, ta sẽ cùng nhau đi trả lời cho câu hỏi trên ở một bài viết khác. Nếu đã đọc tới những dòng này thì chắc hẳn các bạn cũng có một chút yêu thích về Toán, hãy để lại cảm nhận của các bạn dưới phần comment để chia sẻ cùng mọi người nhé!
0 Comments
Vui lòng đăng nhập google để bình luận
Để gõ công thức toán, hãy đặt [biểu thức toán] trong dấu $$
Ví dụ: $[biểu thức toán]$