Để hiểu rõ hơn về mã hóa trong ngành CNTT, trong phần này Quản Trị Mạng sẽ cùng các bạn tìm hiểu một chút về mật mã cổ điển. Từ những kiến thức cơ bản về mật mã này các bạn sẽ dễ dàng tiếp cận cũng như thấu hiểu được về mã hóa.
1. Lịch sử phát triển của mật mã
Trong lịch sử phát triển của nhân loại, từ khi con người xuất hiện nhu cầu trao đổi thông tin với nhau thì nhu cầu giữ bí mật và đảm bảo tính an toàn của những thông tin đó cũng xuất hiện theo. Đó có thể là những thông tin quân sự quan trọng không thể để lộ ra cho kẻ thù, những âm mưu được ấp ủ, chỉ được thông báo cho những người liên quan, những ghi chép về kho báu hay thậm chí là thư từ cá nhân.
Sự cần thiết của việc tìm ra một phương pháp đơn giản, hiệu quả để đảm bảo an toàn cho một thông điệp cần gửi đi chính là nguyên nhân của sự hình thành mật mã.
Và cuộc chiến giữa một bên luôn muốn che giấu thông tin của mình còn một bên luôn muốn đọc được những thông tin đó đã thúc đẩy mật mã ngày càng phát triển.
2. Các khái niệm cơ bản
Ngành Mật mã (cryptology) thường được quan niệm như sự kết hợp của 2 lĩnh vực con:
- Sinh, chế mã mật (cryptography): nghiên cứu các kỹ thuật toán học nhằm cung cấp các công cụ hay dịch vụ đảm bảo an toàn thông tin.
- Phá giải mã (cryptanalysis): nghiên cứu các kỹ thuật toán học phục vụ phân tích phá mật mã và/hoặc tạo ra các đoạn mã giản nhằm đánh lừa bên nhận tin.
Hai lĩnh vực con này tồn tại như hai mặt đối lập, “đấu tranh để cùng phát triển” của một thể thống nhất là ngành khoa học mật mã (cryptology). Tuy nhiên, do lĩnh vực thứ hai (cryptanalysis) ít được phổ biến quảng đại nên dần dần, cách hiểu chung hiện nay là đánh đồng hai thuật ngữ cryptography và cryptology.
Theo thói quen chung này, hai thuật ngữ này có thể dùng thay thế nhau. Thậm chí cryptography là thuật ngữ ưa dùng, phổ biến trong mọi sách vở phổ biến khoa học, còn cryptology thì xuất hiện trong một phạm vi hẹp của các nhà nghiên cứu học thuật thuần túy.
- Plaintext: Văn bản ban đầu khi chưa được mã hóa, thường được gọi là bản rõ.
- Ciphertext: Văn bản sau khi đã được mã hóa, thường được gọi là bản mã.
- Encrypt: Hành động biến đổi bản rõ thành bản mã, sử dụng một thuật toán mã hóa nào đó.
- Decrypt : Hành động biển đổi bản mã thành bản rõ, sử dụng thuật toán giải mã tương ứng với thuật toán mã hóa đã được sử dụng để tạo ra bản mã.
3. Mật mã cổ điển
Ta có nhiều cách để phân loại mật mã.
- Dựa theo tính chất của khóa ta có thể phân chia thành Mật mã khóa đối xứng(còn được gọi là mật mã khóa bí mật) và Mật mã khóa bất đối xứng (mật mã khóa công khai).
- Dựa theo cách thức tiến hành mã hóa ta có thể phân chia thành Mật mã dòng (Stream Cipher) và Mật mã khối (Block Cipher).
- Dựa theo thời gian xuất hiện hệ mã hóa ta có thể phân chia thành mật mã hiện đại và mật mã cổ điển. Mật mã cổ điển là các loại mật mã xuất hiện trước năm 1970 còn mật mã hiện đại là các mật mã xuất hiện trong khoảng thời gian từ 1970 đến nay.
Bản thân mật mã cổ điển có thể được chia thành 2 nhánh : Chuyển vị và Thay thế.
2 nhánh này có bản chất của quá trình mã hóa khác nhau:
- Chuyển vị: là sự thay đổi vị trí các thành phần (thường là ký tự) của bản rõ. Bản rõ và bản mã có các ký tự giống nhau, chỉ khác nhau về vị trí của các ký tự đó.
- Thay thế: là việc thay một ký tự của bản rõ bằng một ký tự khác trong bản mã. Bản rõ và bản mã có các ký tự là khác nhau cả về số lượng và vị trí.
4. Một số loại mật mã cơ bản
4.1. Mật mã chuyển vị
Mật mã chuyển vị là sự sắp xếp lại các ký tự trong bản rõ đến tạo ra bản mã là một hoán vị của bản rõ.
Với một bản rõ có độ dài nhỏ, việc sử dụng chuyển vị để mã hóa sẽ kém an toàn. Ví dụ một thông điệp gồm 3 ký tự :”now” sẽ chỉ tạo ra tối đa 6 hoán vị, sẽ dễ dàng cho kẻ tấn công tìm ra bản rõ dù không biết quá trình mã hóa.
Tuy nhiên khi độ dài của bản rõ tăng lên thì số cách sắp xếp khả dĩ cũng tăng lên, khiến không thể tìm lại được bản rõ từ bản mã nếu không biết chính xác cách mã hóa.
Một mật mã chuyển vị sơ khai nhất chính là khúc gỗ bí mật (Scytale) của người Sparta có từ thế kỷ thứ 5 trước công nguyên.
Scytale là một khúc gỗ có hình dạng và kích thước xác định có quấn quanh bằng một dải da. Người gửi sẽ viết thư theo chiều dài của khúc gỗ rồi sau đó bóc dải da ra, lúc nãy trên dây chỉ là một dãy chữ cái vô nghĩa.
Ví dự như bản rõ là : “Help me I am under attack” và được viết lên dải da như sau.
| | | | | | |
| H | E | L | P | M | |
__| E | I | A | M | U |__|
| | N | D | E | R | A |
| | T | T | A | C | K |
| | | | | | |
Ta có bản mã sẽ là HENTEIDTLAEAPMRCMUAK.
Để giải mã thông điệp trên thì người nhận chỉ cần quấn dải da quanh Scytale và đọc được bản rõ.
Thực chất Scytale là việc ta viết bản rõ theo hàng ngang với số cột trên mỗi hàng cố định rồi đọc theo hàng dọc để có được bản mã.
Từ đó ta cũng có một số loại mã hóa chuyển vị khác tương tự bằng cách đọc các cột theo thứ tự khác nhau hay đọc theo đường xoắn ốc.
Sau đây là một bản mã chờ mọi người giải mã:
“AIOTCTOUOUNGRTYIGANTNLNO”
4.2. Mật mã đa bản thế (polyalphabetic cipher)
Ở mật mã một bảng thế, ta có ánh xạ 1-1 giữa các ký tự trong bản rõ và bản mã. Khóa của mật mã 1 bảng thế chính là thứ tự sắp xếp giữa các ký tự trong bản rõ và bản mã tương ứng.
Trong mật mã đa bảng thế, ta sử dụng nhiều bảng thế khác nhau theo một thứ tự xác định. Ánh xạ giữa bản rõ và bản mã là Một – Nhiều. Khóa của mật mã nhiều bản thế ngoài các bản thế được sử dụng còn cần thêm thông tin về thứ tự sử dụng các bản thế đó.
Xét một hệ mã đơn giản với bảng chữ gồm 4 chữ cái {a,b,c,d} Giả sử tần xuất xuất hiện của mỗi chữ trong ngôn ngữ như sau: Pa = 0.5, Pb =0.05, Pc = 0.2, Pd = 0.25 Ta dùng hai bảng thế và một chuỗi khóa để quyết định thứ tự hòa trộn hai bảng thế này.
Bảng thế 1:
[INDENT=3]a b c d
B D A C
[/INDENT]
Bảng thế 2:
[INDENT=3]a b c d
D B C D
[/INDENT]
Tạo mã bằng phương pháp trộn 2 bảng thế theo khóa “12”:
[INDENT]X : aba cada da ca baa
Z : 121 2121 21 21 212
Y : BBB CBAB AB CB BBD
[/INDENT]
Ở ví dụ trên người ta đã hoà trộn hai bảng thế liên tục kế tiếp nhau. Nhờ đó phân bố tần xuất xuất hiện của các chữ mã sẽ bị thay đổi so với tin và bằng phẳng hơn.
4.3. Mật mã Vigenère
Mật mã Vigenère là một phương pháp mã hóa văn bản bằng cách sử dụng xen kẽ một số phép mã hóa Caesar khác nhau dựa trên các chữ cái của một từ khóa. Nó là một dạng đơn giản của mật mã thay thế dùng nhiều bảng chữ cái.
Trong phép mã hóa Caesar, mỗi ký tự của bảng chữ cái được dịch đi một khoảng nhất định, ví dụ với bước dịch là 4, A trở thành E, B trở thành F... Mật mã Vigenère là sự kết hợp xen kẽ vài phép mã hóa Caesar với các bước dịch khác nhau.
Để mã hóa, ta dùng một hình vuông Vigenère. Nó gồm 26 hàng, mỗi hàng dịch về bên trái một bước so với hàng phía trên, tạo thành 26 bảng mã Caesar. Trong quá trình mã hóa, tùy theo từ khóa mà mỗi thời điểm ta dùng một dòng khác nhau để mã hóa văn bản.
Ví dụ về mật mã Vigenère:
[TABLE]
[TR]
[TD][B]Khóa[/B][/TD]
[TD][B]vigenerevigenerevig[/B][/TD]
[/TR]
[TR]
[TD][B]Bản rõ[/B][/TD]
[TD][B]polyalphabeticciphe[/B][/TD]
[/TR]
[TR]
[TD][B]Bản mã[/B][/TD]
[TD][B]KWRCNPGLVJKXVGTMKPK[/B][/TD]
[/TR]
[/TABLE]
Phần thứ 5 của loạt bài mã hóa xin được kết thúc tại đây. Hẹn gặp lại các bạn trong phần tiếp theo.