- vừa được xem lúc

Caesar cổ điển: Một thuật toán mã hóa đơn giản nhưng hiệu quả

0 0 4

Người đăng: Vũ Viết Văn

Theo Viblo Asia

Về thời Trung Cổ, hoàng đế La Mã nổi tiếng là Julius Caesar tạo một công cụ lập mã rất đơn giản cho thuật toán gọi là “mã vòng” (cyclic code) tương tự như thuật toán atbash của người Hebrew nhưng đây không phải là một sự thay thế bất kỳ mà là một sự thay thế theo hoán vị vòng quanh. Caesar dùng hai vành tròn đồng tâm, trên cả hai vành đều ghi bảng chữ cái La-tinh, vành trong ứng với plaintext còn vành ngoài ứng với ciphertext. Chìa khóa mã hóa là phép xoay vành tròn bên ngoài một số bước, do đó các chữ cái thay đổi đi.

1. Mã hóa Caesar

Mã hóa Caesar (Xê da), còn gọi là mật mã dịch chuyển, là một trong những mật mã đơn giản và được biết đến nhiều nhất. Hệ mã Caesar là một hệ mã hóa thay thế đơn âm, làm việc trên bẳng chữ cái tiếng Anh 26 ký tự. Đó là một dạng của mật mã thay thế, trong đó mỗi ký tự trong văn bản được thay thế bằng một ký tự cách nó một đoạn trong bảng chữ cái để tạo thành bản mã.

Chẳng hạn nếu chìa khóa là +3 tức là xoay theo chiều thuận +3 ô thì các chữ cái A, B, C…X, Y, Z trong plaintext sẽ chuyển đến D, E, F …A, B, C trong ciphertext, từ HANOI trong plaintext được mã hóa thành từ KDQRL trong ciphertext. Người nhận sẽ giải mã bằng cách xoay ngược vành chữ ngoài -3 ô thì tìm lại được plaintext.

1.1 Mã hóa

Ci = (Pi + ki mod m) mod 26

Trong công thức Ci = (Pi + ki mod m) mod 26 , các biến có ý nghĩa như sau:

Ci: Ký tự mã hóa ở vị trí thứ i trong văn bản mã hóa.)
Pi: Ký tự cần mã hóa ở vị trí thứ i trong văn bản gốc.)
ki: Khóa hoặc "chìa khóa" sử dụng để mã hóa.)
m: Một giá trị hằng số (thường là kích thước của bảng mã hoặc tập hợp các ký tự có thể được mã hóa).)

Trong ví dụ sau muốn mã hóa một ký tự Pi bằng cách thêm một giá trị khóa ki vào nó, sau đó thực hiện toán tử mod m và cuối cùng mod 26 để đảm bảo kết quả nằm trong khoảng từ 0 đến 25 (vì có 26 chữ cái trong bảng chữ cái tiếng Anh).

Dưới đây là một ví dụ cụ thể:

Văn bản gốc: "HELLO")
Khóa ki: 3 (được chọn ngẫu nhiên))
Mỗi ký tự Pi trong "HELLO" sẽ được mã hóa bằng công thức Ci = (Pi + 3) mod 26.)

H (7 + 3) mod 26 = 10 (ký tự "K")
E (4 + 3) mod 26 = 7 (ký tự "H")
L (11 + 3) mod 26 = 14 (ký tự "O")
L (11 + 3) mod 26 = 14 (ký tự "O")
O (14 + 3) mod 26 = 17 (ký tự "R")

Do đó, khi mã hóa "HELLO" với khóa 3, ta sẽ nhận được "KHOOQ" như là văn bản đã được mã hóa.

1.2 Giải mã

Pi = (Ci - ki mod m) mod 26

Trong công thức Pi = (Ci - ki mod m) mod 26, giữa các biến, ta có:

Pi: Ký tự gốc ở vị trí thứ i trong văn bản gốc.)
Ci: Ký tự đã được mã hóa ở vị trí thứ i trong văn bản mã hóa.)
ki: Khóa hoặc "chìa khóa" sử dụng để mã hóa.)
m: Một giá trị hằng số (thường là kích thước của bảng mã hoặc tập hợp các ký tự có thể được mã hóa).)

Dưới đây là một ví dụ cụ thể:

Văn bản mã hóa: "KHOOQ")
Khóa ki: 3 (giả sử ta biết khóa đã được sử dụng))
Mỗi ký tự Ci trong "KHOOQ" sẽ được giải mã bằng công thức Pi = (Ci - 3) mod 26.)

K (10 - 3) mod 26 = 7 (ký tự "H")
H (7 - 3) mod 26 = 4 (ký tự "E")
O (14 - 3) mod 26 = 11 (ký tự "L")
O (14 - 3) mod 26 = 11 (ký tự "L")
Q (17 - 3) mod 26 = 14 (ký tự "O")

Do đó, khi ta giải mã "KHOOQ" với khóa 3, sẽ nhận được "HELLO" như là văn bản đã giải mã.

2.Tại sao mã hóa Caesar đơn giản nhưng hiệu quả

Mã hóa Caesar là một mã hóa đơn giản nhưng có hiệu quả, đặc biệt là trong bối cảnh của thời kỳ Trung đại, khi sự phát triển của công nghệ mã hóa chưa đạt đến mức độ phức tạp như ngày nay.

Dưới đây là một số lý do giải thích vì sao mã hóa Caesar đơn giản nhưng hiệu quả trong bối cảnh của thời kỳ Trung đại:

Dễ triển khai: Mã hóa Caesar không đòi hỏi nhiều tính toán phức tạp hoặc sử dụng bảng tham số phức tạp. Quá trình mã hóa và giải mã có thể được thực hiện dễ dàng bằng cách dịch chuyển các ký tự trong bảng chữ cái theo một khoảng cố định (khóa).

Dễ hiểu: Phương pháp này rất dễ hiểu và có thể được áp dụng mà không cần kiến thức chuyên sâu về toán học hay lý thuyết thông tin. Điều này làm cho nó trở thành một lựa chọn phổ biến trong việc truyền thông tin mật qua các kênh không đảm bảo.

Không yêu cầu lưu trữ khóa: Mã hóa Caesar không yêu cầu việc lưu trữ khóa phức tạp như một số hệ thống mã hóa khác. Khóa chỉ là một giá trị nguyên duy nhất, thường là một con số nhỏ.

Tuy nhiên, cũng cần lưu ý rằng mã hóa Caesar có nhược điểm lớn: dễ bị tấn công bằng phương pháp thử và lỗi (brute force) vì có ít khả năng khác nhau cho mỗi khóa. Chỉ cần thử mọi giá trị khóa có thể để tìm ra khóa đúng.

Trong thời kỳ hiện đại, mã hóa Caesar không còn được coi là phương pháp mã hóa an toàn.

Dễ bị tấn công bằng phương pháp thử và lỗi (brute force): Với số lượng khóa có thể là một trong số 26 giá trị khác nhau, một tấn công brute force dễ dàng có thể thử mọi giá trị khóa để tìm ra khóa đúng. Trong khi một số kỹ thuật cải tiến như mã hóa đa chùm có thể giảm độ an toàn của tấn công brute force, mã hóa Caesar cơ bản vẫn dễ bị tấn công.

Khả năng chiến thuật tần suất ký tự (frequency analysis): Trong tiếng Anh, có sự phân bố không đều về tần suất xuất hiện của các ký tự trong văn bản. Bằng cách sử dụng phân tích tần suất ký tự, tấn công có thể suy luận được khóa và giải mã dữ liệu.

Sự tiện lợi của công nghệ hiện đại: Các máy tính bình thường có thể giải mã bằng thử brute force rất nhanh

Sự phổ biến của các mã hóa mạnh mẽ khác: Ngày nay, có nhiều phương pháp mã hóa khác an toàn hơn như AES (Advanced Encryption Standard), RSA, hoặc ECC (Elliptic Curve Cryptography),... Các phương pháp này được thiết kế để đối mặt với những thách thức và tấn công phức tạp hơn.

Vì lý do này, mã hóa Caesar hiện nay thường chỉ được sử dụng cho mục đích giáo dục, giải đố,...

Có thể bạn chưa biết

Một máy tính bình thường hiện nay có thể giải chuỗi mã hóa Caesar 1000 kí tự bằng phương pháp thử và lỗi (brute force) trong bao 26ms (26 mili giây).

Assuming:
Chuỗi mã hóa có độ dài 1000 ký tự.
Số lượng khóa có thể có là 26.

Cách tính thời gian tấn công brute force:
Mỗi lần thử một giá trị khóa, cần kiểm tra xem kết quả có đúng hay không. Điều này đòi hỏi ít nhất 1000 phép so sánh với chuỗi đã mã hóa.
Tổng số lần thử (26 khóa * 1000 so sánh) sẽ là 26,000.
Giả sử một máy tính thực hiện 1 triệu phép tính trên 1s, thời gian tối thiểu sẽ là 26,000 / 1,000,000 giây = 0.026 giây, tức là khoảng 26 mili giây.

3. Tổng kết

*Mã hóa Caesar là một mã hóa đơn giản nhưng có hiệu quả ở thời kỳ Trung đại và không còn hiệu quả tại thời kỳ hiện nay. *

Hy vọng, qua bài viết trên, các bạn sẽ nắm được thông tin bổ ích này. Nếu thấy có sai sót có thể đóng góp dưới phần Bình luận mình xin tiếp thu các ý kiến của mọi người đóng góp Tại phần sau mình sẽ nói MD5, SHA và SM3 là các thuật toán mã hóa một chiều phổ biến
Cảm ơn các bạn đã theo dõi bài viết của mình và mong rằng các bạn sẽ tiếp tục ủng hộ những bài viết tiếp theo của mình nhé!

Nguồn tham khảo : Giáo trình MẬT MÃ HỌC & HỆ THỐNG THÔNG TIN AN TOÀN (CRYPTOGRAPHY AND SECURE INFORMATION SYSTEM) - TS. THÁI THANH TÙNG
Wkipedia tiếng việt

Bình luận