Thuật Toán Mã Hóa Có Thể Bị Bẻ Khóa Không?

Thuật Toán Mã Hóa Có Thể Bị Bẻ Khóa Không?

Hiện nay, những thuật toán mã hóa được sinh ra nhằm bảo vệ thông tin khỏi sự can thiệp của người lạ. Sau đây, mình sẽ giới thiệu về mã hóa và một số thuật toán mã hóa hiện đại được sử dụng.

Mã hóa là gì?

Mã hóa đơn giản là quá trình ta biến đổi thông tin từ định dạng bình thường sang một định dạng khác không thể đọc được nếu ta không có một phương pháp giải mã. Ví dụ, mình có một dòng chữ như thế này: "eqfgngctp.kq". Rõ ràng các bạn không thể hiểu được dòng chữ đó nghĩa là gì đúng không? Giờ hãy thử lùi những chữ cái trong dòng chữ đó 2 đơn vị trong bảng chữ cái, ví dụ như "c" -> "a", "d" -> "b", và tương tự với những chữ cái khác. Bùm, từ dòng chữ "eqfgngctp.kq" ta đã có dòng "codelearn.io". Điều các bạn vừa làm đó chính là giải mã.

Mã hóa có cần thiết không?

Con đường vận chuyển thông tin từ điểm đầu đến điểm cuối không phải là một đường thẳng. Khi bạn nhấp "Gửi", tin nhắn sẽ không đi thẳng đến máy của người bạn đang chờ phía bên kia, mà di chuyển qua rất nhiều thiết bị chuyển tiếp, nhiều máy chủ rồi mới đến điểm dừng. Trong quá trình đó, người lạ hoàn toàn có thể can thiệp vào dòng di chuyển của dữ liệu, đọc trộm dữ liệu, hoặc có thể tùy chỉnh, thay đổi dữ liệu rồi cho chúng đi tiếp. Vì vậy, mã hóa rất quan trọng để ngăn người lạ đọc được thông tin bạn gửi đi trên internet, đặc biệt là những thông tin nhạy cảm như mật khẩu hoặc hình ảnh, tin nhắn cá nhân.

Ta cần phân biệt mã hóa và hash. Mã hóa là một hàm hai chiều, tức là định dạng mã hóa hoàn toàn có thể được giải mã bằng một phương tiện nhất định. Còn hash thì không như vậy. Hash trộn tung đầu vào, xuất ra đầu ra là một giá trị băm duy nhất. Một thuật toán hash tiêu chuẩn thì không thể đảo ngược đầu ra, giống như bạn lấy 5 + 4 = 9, nhưng nếu có mỗi số 9 thì bạn không thể biết được hai số ban đầu là bao nhiêu.

Một số chuẩn mã hóa thông dụng

Công nghệ phần cứng ngày càng phát triển, những thuật toán mã hóa càng được cải tiến, những thuật toán mới cũng xuất hiện nhiêu thêm để thay thế cái cũ. Cùng điểm qua một số mã hóa thông dụng:

HTTPS

Quen thuộc nhất với các bạn đó là giao thức HTTPS khi các bạn truy cập vào hầu hết những trang web. HTTPS viết tắt của HyperText Transfer Protocol Secure, dần được thay thế cho HTTP (không có "secure"). Có thể nói thực ra HTTPS là một sự nâng cấp từ HTTP với sự kết hợp với chứng chỉ SSL hoặc TLS, cho phép trao đổi thông tin trên mạng Internet một cách bảo mật. Mọi thông tin từ website sử dụng HTTPS đều được mã hóa, đi kèm với chứng chỉ xác thực tính toàn vẹn của thông tin (để đảm bảo rằng thông tin không bị thay đổi trên đường tới điểm đến) và chắc chắn rằng website nơi điểm đến không phải giả mạo.

WEP - WPA - WPA2

WEP (Wired Equivalent Privacy) là một giao thức mã hóa Wi-Fi rất phổ biến từ thời mới được phê chuẩn năm 1997. Nó sử dụng khóa 64-bit (10 ký tự) và 128-bit (26 ký tự) để mã hóa dữ liệu. Tuy nhiên, với sự nâng cấp và phát triển nhanh chóng của công nghệ phần cứng, những khóa đó dễ dàng bị bẻ và WEP không còn được sử dụng nữa.

WPA (Wi-Fi Protected Access) ra đời chính là sự thay thế cho WEP, sử dụng khóa 256-bit, một cải tiến đáng kể so với khóa 64-bit và 128 bit của WEP. Ngoài ra, WPA còn bao gồm cả kiểm tra tính toàn vẹn của tin nhắn, ngăn không cho kẻ tấn công can thiệp vào nội dung tin nhắn. WPA triển khai TKIP (Temporal Key Integrity Protocol), sử dụng khóa cho mỗi gói dữ liệu, không sử dụng khóa tĩnh như WEP. 

WPA2 lại là một sự thay thế cho WPA. Một trong những nâng cấp lớn nhất của WPA2 so với người tiền nhiệm là việc đưa vào sử dụng thuật toán AES (Advanced Encrytion Standard) thay thế cho RC4 đã cũ. Ngoài ra còn có sự giới thiệu về chuẩn CCMP (Counter Cipher Mode with Block Chaining Message Authentication Code Protocol) để thay thế cho TKIP do những lo ngại về vấn đề bảo mật.

Một số thuật toán mã hóa

Caesar Cipher

Caesar cipher là một trong những kỹ thuật mã hóa đơn giản và phố biến nhất. Kỹ thuật này được phát triển từ thời Rome cổ đại, được đặt tên sau Julius Caesar khi ông sử dụng kỹ thuật để truyền tin bí mật. Caesar Cipher đơn giản chỉ di chuyển từng ký tự của tin nhắn ban đầu đi một số khoảng cách nhất định, tạo ra một tin nhắn mới không có nghĩa. Như ví dụ tôi đưa ra cho các bạn ở trên, biến "codelearn.io" thành "eqfgngctp.kq" bằng cách di chuyển từng ký tự trong tin nhắn đầu lên 2 đơn vị trong bảng chữ cái.

Vigenere Cipher

Vigenere Cipher có phần phức tạp hơn Caesar Cipher một chút, nhưng cơ chế của chúng gần như tương tự. Để giải mã Vigerene Cipher bạn cần một có một từ khóa (ở đây ta sẽ dùng khóa là LEMON) và một bảng chữ cái được sắp xếp như thế này:

Từ bảng chữ cái và khóa "LEMON", giờ ta sẽ tiến hành giải mã cụm từ "NSPSYPEDB". Đầu tiên, ta lặp lại khóa thành một từ có độ dài bằng cụm từ ta cần giải mã, tức là "NSPSYPEDB" có 9 ký tự thì ta sẽ có cụm từ "LEMONLEMO". Sau đó sử dụng bảng chữ cái ở trên, đối chiếu vị trí của từng chữ cái của cụm khóa với cụm từ bị mã hóa, từ cột "L" ta gióng xuống chữ "N", sau đó gióng sang ngang, ta được chữ "C", tiếp tục từ cột "E" gióng xuống chữ "S" rồi gióng sang ngang, ta được chữ "O". Cứ dùng phương pháp đó ta giải mã được cụm "NSPSYPEDB" với khóa "LEMON" thành "CODELEARN".

Việc mã hóa một cụm bất kỳ cũng khá đơn giản. Chỉ cần chọn ra một khóa, lặp lại khóa sao cho bằng với độ dài cum từ cần mã hóa, sau đó lấy giao điểm hàng và cột từng chữ cái của khóa và cụm từ với nhau. Ví dụ, ta có cụm khóa LEMONLEMO với từ CODELEARN cần mã hóa, ta tìm giao điểm của cột "C" với hàng "L", ta được chữ "N", tương tự giao của cột "O" và hàng "E" là "S", ... Làm tương tự ta sẽ mã hóa được cụm từ ban đầu. 

Base64

Mã hóa base64 hoạt động khá đơn giản, chuyển đổi ký tự 8-bit thông thường thành định dạng ký tự base64 6-bit. Bảng ký tự 6-bit của base64 sẽ trông như sau:

Ví dụ cho dễ hiểu, ta sẽ thử mã hóa từ "Man" bằng base64. Thông thường, mỗi ký tự đều có thể được biểu diễn dưới dạng nhị phân 8-bit, "M" dịch sang nhị phân là 01001101 , "a" là 01100001, "n" là 01101110, hợp lại ta được một dãy nhị phân có độ dài 24 ký tự. Với 24 ký tự đó, ta chia ra thành 4 phần, mỗi phần là 6 ký tự, dịch ra theo bảng ký tự base64:

Tạm kết

Hiện nay, rất nhiều thuật toán mã hóa được sử dụng cùng độ phức tạp cực kỳ cao. Để hiểu rõ những thuật toán đó đòi hỏi sự tìm hiểu kỹ lưỡng và hiểu biết về toán học. Với sức mạnh của máy tính bây giờ, có thể những thuật toán đó sẽ chưa bị bẻ khóa, nhưng trong tương lai thì hoàn toàn có thể. Vì vậy, con người luôn không ngừng tìm tòi, phát minh ra những thuật toán mã hóa mới hiệu quả, khó để bị bẻ khóa.