NỘI DUNG
Sau vô số lần luồn lách, lươn lẹo, né tránh vấn đề, cuối cùng cũng đã đến thời khắc tôi phải đối mặt với cái khái niệm Cryptography khó nhằn hay còn gọi với cái tên trìu mến là “Mật mã học”. Dĩ nhiên, với Series này, tôi không có ý định trình bày hết mọi ngóc ngách của Cryptography (có muốn làm thế tôi cũng không có đủ khả năng). Thực tế, mục tiêu của tôi trong loạt bài này chỉ nhằm ghi nhận lại một cách tổng quát các thuật ngữ liên quan đến Cryptography (ở cấp độ gà mờ thôi) theo phương châm mì ăn liền, đánh nhanh thắng nhanh.
Như tôi đã giới thiệu trong bài Bảo mật kết nối VPN – Phần 1: Đặc quyền khi tự quản lý VPN Server, khi nghiên cứu vấn đề bảo mật và mã hóa, nếu cứ đụng một nội dung hoặc khái niệm mới, bạn dừng lại tìm nguồn tham khảo để nắm rõ rồi mới xem tiếp thì coi chừng “quên cả lối về” luôn đấy. Do vậy, tôi có đề nghị bạn cứ tạm bỏ qua các nội dung không rõ để nắm hết mạch chuyện. Sau đó hãy quay lại các khái niệm này sau bằng cách đọc các nguồn tham khảo bổ sung (như cái Series tôi đang làm đây).
Đối với loạt bài này, tôi nghĩ bạn chỉ nên đọc đúng đầu mục liên quan đang cần tìm hiểu, đừng đọc kiểu tiểu thuyết từ đầu đến đít xong lại bảo tôi là “tiến sĩ gây mê”.
Lưu ý: Trong Series này, để bạn thuận tiện tra cứu các nguồn tham khảo bổ sung, tôi sẽ ưu tiên sử dụng các từ gốc tiếng Anh. Mặc dù tôi cũng dịch qua tiếng Việt một số chỗ nhưng bạn đọc cho biết thôi chứ đừng dùng làm từ khóa để tìm kiếm vì có thể tôi dịch ba xàm đấy.
Ok, thôi dông dài quá rồi, tôi vào việc ngay đây.
#1 CIA Triangle
Điều đầu tiên tôi cần nói ngay CIA ở đây không Central Intelligence Agency của mấy ông Mẽo đâu (càng không phải “CIA-BJ” gì đâu nhé). CIA này còn ghê gớm hơn nhiều với tên gọi đầy đủ là CIA Triangle (Tam giác bảo mật CIA) gồm 3 thành phần:
– Confidentiality (Tính bí mật)
– Integrity (Tính toàn vẹn)
– Availability (Tính sẵn sàng)
Hiểu đơn giản, đây là một Security Model nhằm định hướng cho các chính sách bảo mật của hệ thống nói chung. Còn nếu nói riêng thì nó có thể được dùng như nguyên tắc sinh tồn cho các giang hồ khi tham gia “giao thông” trên không gian mạng.
Việc thứ hai tôi cần nói đó là thứ tự của các thành phần. Bạn đừng thấy cái thứ tự C-I-A mà dõng dạc tự tin tuyên bố Confidentiality là số một, Integrity, Availability thì vất đi cho rồi. Lý tưởng mà nói thì các hệ thống nên có sự cân bằng giữa 3 yếu tố này. Tuy nhiên, thực tế đời không như mơ nên bạn hãy tiếp tục lăn chuột xuống phần bên dưới để xem chi tiết.
#2 Confidentiality
Như tên gọi thể hiện, Confidentiality hay “Tính bí mật” ý cho biết thông tin chỉ được phép truy cập bởi Authorized Users (“các đối tượng có thẩm quyền”). Nếu bạn hay coi phim Mỹ thì chắc cũng không xa lạ gì với cụm từ “Thẩm quyền an ninh” hay chữ Classified như dưới đây.
Thực chất tài liệu được đóng dấu Classified không đồng nghĩa với chữ “Mật”. Nó được hiểu rộng hơn là tài liệu được “Phân loại” hay “Dán nhãn”. Và khi đó, mỗi đối tượng có thẩm quyền khác nhau có thể có các mức độ truy cập khác nhau với tài liệu được phân loại này. Như vậy, bạn có thể thấy tùy cấp độ Classified của tài liệu, mà mức độ yêu cầu đối với Confidentiality có thể khác nhau.
Bây giờ đến câu hỏi quan trọng là “Làm sao để bảo đảm Confidentiality?”. Trả lời tổng thể thì bạn có thể sử dụng các giải pháp vật lý như khóa tủ, thuê bảo vệ, lính gác cổng đến các phương án xác thực phi vật lý như yêu cầu xác thực đăng nhập 2, 3 lớp hay mã hóa.
Và trong phạm vi của Series này (tôi đang muốn bàn về Cryptography), hiển nhiên tôi sẽ tập trung vào vấn đề Encryption (“Mã hóa”). Nói ngắn gọn thì việc mã hóa sẽ chuyển các thông tin có thể đọc được thành các dạng Cipher (“Mật mã”) trời ơi đất hỡi để các đối tượng không có thẩm quyền (người, máy, thú hay gì đó) không đọc được. Trường hợp muốn nói cho dài dòng, mã hóa sẽ liên quan đến việc sử dụng:
– Algorithm (“Thuật toán”): Các phương pháp tính toán áp dụng lên dữ liệu để mã hóa. Cái này thì nên được công bố rộng rãi để bà con cô bác vào “review và comment” dạo;
– Key (“Khóa”): Là một “sản phẩm” khi áp dụng Algorithm với các thông số cụ thể. Nó được dùng để chuyển một Plain Data (“Thông tin gốc”) sang Cipher Data (“Thông tin đã mã hóa”) và hiển nhiên bạn sẽ “bốc sh*t” nếu công bố hết mấy cái Key của mình cho thiên hạ biết.
Lưu ý: Data ở dạng Data-at-rest, Data-in-transit sẽ có thể được mã hóa để đảm bảo tính bí mật. Data-in-use là đám dữ liệu đang được sử dụng nên sẽ không thể mã hóa (bạn muốn mã hóa thì phải chờ dùng xong cái đã).
Đối với Encryption, có 2 phương án cơ bản được sử dụng bao gồm:
– Symetric Encryption (mã hóa đối xứng): Mã hóa và giải mã với cùng 1 Key;
– Asymetric Encryption (mã hóa bất đối xứng): Mã hóa và giải mã với 1 cặp Public – Private Key.
Lưu ý: Tôi có trình bày việc áp dụng cụ thể 2 phương án này trong bài Giải ngố Blockchain – Phần 3: Nguyên lý cơ bản của Elliptic Curve Cryptography và vấn đề mã hóa. Bạn có thể xem qua nội dung này trước. Tôi sẽ sắp xếp để trình bày chi tiết hơn về vấn đề Encryption sau.
#3 Integrity
Đối với thành phần Integrity (hay “Tính toàn vẹn”), mục tiêu hàng đầu là để bảo đảm dữ liệu không bị thằng nào chọc ngoáy vào khi không có thẩm quyền (bạn lưu ý xóa cũng là 1 dạng chọc ngoáy chứ không phải mỗi chỉnh sửa thôi đâu nhé). Nếu xét trên phương diện thông tin liên lạc đơn thuần, Integrity thực sự có thể được xem xét ưu tiên đảm bảo trước vì thông tin sai lệch đôi khi còn tai hại hơn không có thông tin.
Và cũng như trên, câu hỏi quan trọng là “Làm sao để bảo đảm Integrity?”. Câu trả lời ở đây tương đối ngắn gọn hơn, đó là Hashing. Hashing là việc sử dụng một thuật toán lên dữ liệu để sản xuất ra 1 đống bấy nhầy – gọi là Hash (hay Checksum). Các điểm mấu chốt cần nhớ đối với Hashing đó là:
– Cùng 1 dữ liệu đầu vào và một Algorithm, kết quả Hash/Checksum sẽ luôn giống nhau;
– Việc tính toán xác định lại dữ liệu đầu vào dựa vào kết quả Hash/Checksum là không khả thi (tính đến thời điểm hiện tại tôi viết bài này);
– Các Hashing Algorithm phổ biến bao gồm Message Digest 5 (MD5), Secure Hash Algorithm (SHA), Hash-based Message Authentication Code (HMAC), RACE Integrity Primitives Evaluation Message Digest (RIPEMD). Các thể loại này cũng có nhiều điểm cần bàn nhưng tạm thời tôi sẽ dừng ở đây và quay lại phần chi tiết sau.
Để hình dung đơn giản, bạn có thể nghĩ đến tình huống sau khi download file từ một trang nào đó (https://gnupg.org/download/integrity_check.html trong ví dụ sau), bạn có thể xác định mình có download nhầm hàng đểu hay không bằng cách tính Hash/Checksum của file bạn đã download rồi so sánh với kết quả Hash/Checksum chính chủ. Nếu kết quả không khớp thì 100% bạn đã lấy trúng hàng đểu. Còn nếu khớp thì bạn đã lấy đúng file cần download (với điều kiện trang bạn lấy Hash/Checksum phải đúng hàng chính chủ và cái Hash/Checksum vẫn còn chuẩn “cmn” mực)
Lưu ý:
Tôi sẽ trình bày kỹ hơn về phần Hashing này sau, tuy nhiên bạn có thể xem qua trước nội dung Checksum liên quan trong Giải ngố Tor Browser – Phần 3: Làm sao để kiểm tra signature file cài đặt.
#4 Availability
Cuối cùng là thành phần Availability (Tính sẵn sàng). Như tôi đã nói ở đầu bài, bạn đừng nghĩ thằng này nằm cuối cùng là kém quan trọng. Thực tế, đối với một số hoạt động công nghiệp, việc bảo đảm hệ thống điều khiển công nghiệp bao gồm các yếu tố như van điều khiển, cảm biến,…,tính sẵn sàng lúc này thực sự là yếu tố sống còn theo đúng nghĩa đên. Để dễ hình dung, bạn thử tưởng tượng tình huống khi cần đóng khẩn cấp một van điều khiển để ngăn khí dễ cháy nổ thất thoát ra môi trường mà hệ thống điểu khiển lại không sẵn sàng đáp ứng thì sao.
Ngoài tình huống trên, với nhu cầu kết nối đơn thuần như VPN, việc cân đối 2 yếu tố Confidentiality và Availability cũng cần xem xét. Nếu bạn đẩy thiết lập mã hóa lên kịch kim để ưu tiên yếu tố Confidentiality dẫn đến tốc độ của kết nối VPN (yếu tố Availability) tương đương Dial-up thì chả khác nào tự vả vào mồm mình!
Đối với thằng Availability, nguyên tắc chung để đảm bảo đó là phải có “kênh dự phòng” cho tình huống sự cố. Vấn đề này tùy thuộc vào từng hệ thống cụ thể và cũng hơi xa rời nội dung Cryptography nên tôi xin phép không bàn thêm nữa.
Tôi nghĩ đến đây chắc dừng phần giới thiệu CIA là được rồi, trong những kỳ tiếp theo, tôi sẽ đầu đi sâu vào các nội dung chi tiết liên quan.
hay nha!!!