Gần đây, một số ngân hàng đã bắt đầu cho phép khách hàng tự đăng kí tài khoản ngân hàng ngay tại nhà. Thay vì phải đến các phòng giao dịch, khách hàng chỉ cần kết nối mạng, cung cấp thông tin xác minh và tài khoản đã được tạo. Đương nhiên, thông tin của khách hàng được đảm bảo an toàn như việc đăng kí qua phòng giao dịch.
Vậy làm cách nào để những thông tin được coi là nhạy cảm có thể đến được ngân hàng qua Internet mà vẫn được bảo đảm? Bài viết dưới đây, Bizfly Cloud sẽ giải thích một trong những phần “lõi” của sự an toàn kia, đó là mã hóa thông tin.
1. Mã hóa thông tin là gì?
Bài viết chỉ giới thiệu những khái niệm và những tính chất cơ bản nhất của mã hóa thông tin. Để biết một cách đầy đủ, người đọc có thể tìm hiểu về mật mã học (Cryptography) và một trong những ngành liên quan mật thiết đến mật mã và mã hóa là An toàn thông tin (Information security).
Mã hóa thông tin là một hình thức biến đổi dữ liệu thành một dạng dữ liệu khác có ý nghĩa khác với dữ liệu trước khi bị biến đổi ban đầu, với mục đích chỉ cho phép một số người nhất định có thể đọc được dữ liệu ban đầu, thông qua việc giải mã dữ liệu sau khi biến đổi.
Hay nói cách khác, mã hóa là biến dữ liệu ban đầu A thành dữ liệu B, và việc đọc dữ liệu A sẽ thông qua việc giải mã dữ liệu B về A.
Định nghĩa khá phức tạp, nên chúng ta sẽ trả lời một số câu hỏi để làm rõ khái niệm mã hóa ở trên:
Biến đổi dữ liệu là gì?
Biến đổi dữ liệu là một quy tắc nào đó biến đổi một lượng dữ liệu này thành một lượng dữ liệu khác. Nếu nhìn theo khía cạnh toán học, thì biến đổi dữ liệu chính là một dạng hàm số y = f(x) với x là dữ liệu ban đầu, y là dữ liệu sau khi biến đổi từ dữ liệu x và f là hàm biến đổi.
Trong mật mã học, khi nghiên cứu về mã hóa thông tin, dữ liệu ban đầu được gọi là Plaintext (kí hiệu là P), dữ liệu sau khi mã hóa được gọi là Ciphertext (kí hiệu là C), hàm biến đổi/mã hóa được gọi là phương pháp mã hóa và được kí hiệu là E (Encryption).
Dữ liệu sau khi biến đổi khác với dữ liệu ban đầu, nhưng có thể đọc hay hiểu được không?
Nhiều tài liệu khi nói về dữ liệu sau khi biến đổi, hay Ciphertext (kí hiệu C), thường cho rằng Ciphertext không thể đọc hoặc hiểu được, nhưng thật sự điều đó không chính xác.
Chúng ta cùng xem qua ví dụ sau với một trong những phương pháp mã hóa thông tin đơn giản nhất: mã hóa không thành có và có thành không.
Bob: Hôm qua trời có mưa không?
Alice: Không (Sự thật là có)
Eve: (Hiểu là Không theo lời của Alice)
Nhưng trước đó, Bob và Alice đã thỏa thuận trước về câu trả lời: nếu Không thì câu trả lời chính xác là có và ngược lại.
Câu trả lời “Không” của Alice chính là Ciphertext, còn dữ liệu ban đầu là “Có” hay Plaintext. Ta có thể thấy cả Ciphertext và Plaintext đều có thể đọc và hiểu được. Vì vậy nhận định Ciphertext không thể đọc được là không chính xác. Chỉ cần hai bên (Alice và Bob) thống nhất cách mã hóa và giải mã thì người thứ ba sẽ có thể hiểu sai ý nghĩa, ngay cả với những Ciphertext có thể hiểu được.
Lí do nhiều tài liệu lại cho rằng Ciphertext không thể đọc hay hiểu được là do rất nhiều các phương pháp mã hóa thông tin, đặc biệt là hầu như tất cả các phương pháp mã hóa sử dụng trong các hệ thống thông tin và truyền tin hiện tại đều biến đổi thông tin thành các dạng không thể đọc được.
Trong mật mã học, người gửi và nhận thông tin thường được gọi là Alice và Bob, còn người thứ ba “nghe trộm (Eavesdropper)” thường được gọi là Eve
Nếu Ciphertext không giải mã được thì sao?
Mã hóa luôn đi kèm với giải mã. Nếu như chỉ “mã hóa thông tin” mà không có phương thức giải mã, chúng ta không gọi đó là “Encryption”. Một trong những kiểu “mã hóa” không có phương thức giải mã phổ biến đó là các hàm băm (Hash function).
Từ “mã hóa” trong tiếng Việt đôi lúc được sử dụng cho cả hai từ “Encryption” và “Encoding“, nhưng thật sự hai khái niệm này khác nhau. Thêm nữa, từ “Encoding” trong tiếng Anh cũng có được sử dụng cho nhiều định nghĩa liên quan đến dữ liệu. Vì vậy, rất khó để dịch các định nghĩa về “Encoding” sang tiếng Việt.
Một nhóm người có thể sử dụng, vậy ít nhất là có hai bên: bên gửi (mã hóa) dữ liệu và bên nhận (giải mã) dữ liệu?
Người giải mã dữ liệu có thể là chính bản thân người mã hóa. Ví dụ như mã hóa thông tin cá nhân trên iOS, mã hóa dữ liệu bằng mật khẩu qua các chương trình nén trên PC như WinRAR, WinZip,…
Để mã hóa và giải mã, rất nhiều các phương pháp mã hóa cần thêm một số giá trị nhất định để sử dụng trong quá trình mã hóa và giải mã. Những giá trị đó được gọi là chìa khóa (Key), kí hiệu là K.
Nói tóm lại, một hệ thống mã hóa (Cryptosystem) là một bộ (P, C, K, E, D) gồm các thành phần sau:
– P là tập các Plaintext (từ hiện)
– C là tập các Ciphertext (từ mã)
– K là tập khóa mã (Key)
– E là phương pháp mã hóa và D là phương pháp giải mã.
Các hành động sử dụng các cách khác nhau để dịch ngược P từ C mà không được biết K hoặc D được gọi là các hình thức tấn công mã hóa, hay còn gọi là phá khóa, phá mã,…
2. Mã hóa thông tin trong quá khứ
Khi nhìn vào định nghĩa mã hóa thông tin, chúng ta có thể thấy một trong những lĩnh vực rất cần thiết để áp dụng mã hóa trong quá khứ: trao đổi liên lạc giữa các bên trong chiến tranh. Hai đồng minh cần phải trao đổi thông tin mà đảm bảo kẻ thù không thể đọc được, vì vậy việc mã hóa dữ liệu khi trao đổi là một trong những yếu tố quyết định trong việc truyền tin mà không thể tạo được một kênh kết nối an toàn và bí mật.
Một trong những cách mã hóa đơn giản nhưng rất phổ biến đó là mã hóa Ceasar (Caesar cipher), cách mã hóa thông tin này đơn giản là dịch chuyển một khoảng nhất định trong bảng chữ cái được sắp xếp theo thứ tự.
Ví dụ: HELLO chuyển sang trái 3 kí tự sẽ thành EBIIL (H->E, E->B, L->I, O->L)
Việc giải mã được làm theo chiều ngược lại, chuyển sang phải 3 kí tự.
Đây là một trong những cách mã hóa đơn giản nhất. Nếu như sử dụng bất kì một máy tính nào hiện nay, ngay cả với việc thử tất cả trường hợp thì thời gian phá được hệ thống mã hóa này có thể đếm được bằng giây.
Cách tấn công vào hệ thống mã hóa cơ bản nhất là brute force, hay nói cách khác là thử tất cả các trường hợp. Như ví dụ trên, chỉ cần thử 25 trường hợp thì hầu hết sẽ tìm ra được phương pháp giải mã.
Có một số trường hợp nếu như thử cả 25 trường hợp, một đoạn kí tự có thể cho ra 2 cách (Ví dụ Ciphertext “ALIIP” có thể ra hai từ có nghĩa là “DOLLS” và “WHEEL”). Tuy nhiên với những đoạn văn dài, tỉ lệ ra đúng đoạn văn bản trước khi mã hóa là gần như 100%.
Trong chiến tranh thế giới lần thứ II, một trong những cỗ máy mã hóa thông tin nổi tiếng nhất thời đó là Enigma. Được phát triển bởi phe Trục, có cách mã hóa các đoạn chữ với 26 chữ cái Latinh thành một đoạn chữ khác. Mỗi ngày, cách mã hóa lại thay đổi, kiến cho phe Đồng minh nếu như thử lần lượt từng cách mã hóa thì phải cần hơn 17000 cách thử trong 24 giờ [1]. Tuy nhiên, cỗ máy đã bị hóa giải ngay trong thời kì đó.
3. Mã hóa thông tin ở hiện tại
Trong mật mã học, mã hóa thông tin được chia làm hai loại là mã hóa khóa đối xứng (Symmetric-key) và mã hóa khóa công khai (Asymmetric cryptography hay Public-key cryptography).
Mã hóa khóa đối xứng sử dụng cùng một loại chìa khóa trong việc mã hóa và giải mã. Tuy nhiên, chìa khóa phải đảm bảo bí mật giữa hai bên trao đổi thông tin. Nếu như bên thứ ba (Eve) có được chìa khóa thì sẽ có thể sử dụng để giải mã thông tin được truyền đi. Một số loại mã hóa khóa đối xứng nổi tiếng như DES, AES,…
Mã hóa khóa công khai sử dụng hai loại khóa khác nhau: khóa công khai là khóa không cần giữ bí mật với các bên khác và khóa bí mật, loại khóa chỉ được biết bởi chính người sở hữu. Một số loại mã hóa có thể kể đến là RSA,…
Hiện nay, các công nghệ mật mã đã được tích hợp rất sâu vào các hệ thống máy tính và truyền tin, ví dụ như việc dần thay thế giao thức HTTP bằng HTTPS (HTTP sử dụng TLS/SSL). Trong giao thức HTTP, bên gửi và nhận dữ liệu đều không mã hóa dữ liệu được gửi của mình. Vì vậy, kẻ thứ ba (được gọi là man-in-the-middle, trong mô hình Alice-Bob-Eve thì chính là Eve) hoàn toàn có thể đọc được dữ liệu mà hai bên gửi cho nhau. HTTPS đã khắc phục nhược điểm của HTTPS bằng việc mã hóa dữ liệu trước khi gửi để các kẻ có ý định đọc thông tin được gửi chỉ còn cách giải mã dữ liệu – một công việc hoàn toàn không hề đơn giản.
Do đặc tính mã hóa dữ liệu khi gửi đó, các hệ thống truy cập bằng tài khoản, các hệ thống liên quan đến tiền tệ đều ưu tiên sử dụng HTTPS. Ngay cả trong một số trình duyệt cũng có cảnh báo cho người dùng như “You should not enter any sensitive information on this site (for example, passwords or credit cards), because it could be stolen by attackers.” (Tạm dịch là bạn không nên nhập bất kì thông tin nhạy cảm nào vào trang web này (ví dụ mật khẩu hoặc thẻ tín dụng), bởi vì những kẻ tấn công có thể đánh cắp dữ liệu đó.)
Như đã đề cập tới brute force ở trên, hầu hết các cách mã hóa thông tin đều “có thể” phá nếu như có một hệ thống máy tính có khả năng tính toán đủ lớn để thực hiện việc giải mã. Vì vậy, một số nhà nghiên cứu cho rằng, chỉ cần có đủ thời gian và khả năng tính toán đủ lớn, tất cả các cách mã hóa mà không giới hạn số lần giải mã đều có thể phá được.
AES 256bit, một cách mã hóa khóa đối xứng, nếu như sử dụng brute force với siêu máy tính mạnh nhất hiện tại (Supercomputer Fugaku [2]) có khả năng tính toán là gần 420 PetaFLOPS (420 x 1015 FLOPS), giả sử mỗi lần kiểm tra một khóa cần 500 FLOPS thì thời gian để thử hết tất cả các trường hợp khóa của AES 256bit là hơn 4.37 x 1054 năm.
Một lưu ý rằng mật khẩu không phải là một loại mã hóa thông tin, về bản chất mật khẩu và mã hóa không hề liên quan đến nhau: mật khẩu dùng để xác thực một người có quyển sử dụng dữ liệu hay không còn mã hóa dùng để ngăn cản người sử dụng không được phép truy cập dữ liệu. Tuy nhiên, mật khẩu được tích hợp vào trong các phương pháp sử dụng đồng thời mã hóa và mật khẩu do mật khẩu có nhiều đặc điểm có thể bổ trợ cho mã hóa: dễ ghi nhớ và có tính cá nhân, đặc biệt là các dạng mật khẩu như vân tay, khuôn mặt,…
4. Mã hóa thông tin với tương lai
Dữ liệu sau khi mã hóa có an toàn không? Để dễ hình dung, chúng ta hãy cùng nhắc đến một trong những loại malware được coi là nguy hiểm nhất hiện nay: ransomware. Loại phổ biến hiện nay sẽ mã hóa dữ liệu trên máy tính bị nhiễm sau đó đòi tiền để nhận được chìa khóa giải mã. Khi đó người dùng chỉ có các phương án sau:
– Trả tiền để mong có thể lấy lại được dữ liệu. Cách này có thể sẽ cứu được dữ liệu (đương nhiên, nếu như chủ của ransomware đó giữ lời) nhưng số tiền là khá lớn và không phải ai cũng có thể trả được.
– Chờ các nhóm và tập đoàn bảo mật đưa ra các công cụ cứu dữ liệu. Cách này rất bị động và không phải ransomware nào cũng có công cụ giải mã. (Vì vậy, đừng quá tin vào những quảng cáo 100% ransomware data recovery.)
– Dữ liệu được backup ở chỗ khác và chưa bị nhiễm. Cách này được coi là khả thi và đảm bảo nhất (nếu như có backup)
– Bỏ dữ liệu đã bị mã hóa.
Trong 4 cách trên, ta có thể thấy chỉ có đúng 1 cách là sử dụng giải mã dữ liệu bị mã hóa. Hơn nữa, các công cụ đó có thể được phát hành sau 3, 4 tháng, thậm chí là vài năm sau khi ransomware xuất hiện và chỉ sử dụng được với một số ransomware có chìa khóa dùng để giải mã đơn giản. Cho nên, dữ liệu sau khi mã hóa nếu không biết chìa khóa hay phương thức thì rất khó để giải mã.
Vậy thử hình dung nếu như chúng ta tới hai tương lai, một tương lai không có mã hóa và một tương lai tất cả mọi thứ đều được mã hóa.
Trước tiên, nếu tất cả mọi thứ đều được mã hóa thì sao? Android Encryption trên Android, Data Protection trên iOS và iPad, FileVault trên Mac, BitLocker trên Windows. Mọi dữ liệu của người dùng sẽ được an toàn, và đôi lúc an toàn ngay cả với người dùng. Nếu như quên hoặc mất mật khẩu trong các loại mã hóa sử dụng mật khẩu, người dùng sẽ phải tìm cách khôi phục bằng các công cụ khôi phục nếu như có hỗ trợ, sử dụng bản backup hoặc bỏ dữ liệu. Rõ ràng, lúc này “Eve” không phải là mối lo ngại nhất mà chính là việc quên mật khẩu.
Nếu như ngược lại, tất cả dữ liệu không mã hóa thì sao. Bạn vừa nhập thông tin thẻ tín dụng lên một trang web mua sắm nào đó? Tin nhắn thẻ tín dụng vừa sử dụng 50 triệu mà bạn chưa kịp mua một món gì cả (và ngay ở hiện tại, việc sử dụng các thẻ tín dụng bị đánh cắp thông tin cũng là một trong những việc vi phạm pháp luật phổ biến nhất với thẻ tín dụng). Và sau đó, các hình thức mua sắm trực tuyến sẽ không còn ai sử dụng nữa do không đảm bảo an toàn cho tài chính của người dùng.
Nói tóm lại, mã hóa thông tin luôn đi cùng với sự phát triển của các hệ thống trao đổi thông tin, đặc biệt là Internet cũng như việc bảo vệ thông tin của mỗi người. Tuy nhiên, không nên áp dụng mã hóa quá nhiều dẫn đến ảnh hưởng ngược lại tới người dùng hơn cả việc an toàn. Đồng thời những hành động đối phó với việc sử dụng mã hóa để trục lợi cũng cần phải có những biện pháp thích hợp để ngăn chặn.
Chú thích:
[1] sentayho.com.vn/wiki/Encryption Chú thích 6[2] sentayho.com.vn/lists/top500/2020/06/
[3] sentayho.com.vn/wiki/WannaCry_ransomware_attack Chú thích 35
Theo BizFly Cloud tìm hiểu
>> Có thể bạn quan tâm: Cisco Talos phát hiện lỗ hổng của Chrome cho phép điều khiển từ xa