Một hệ thống thông tin không có đủ các biện pháp an ninh, an toàn sẽ rất khó có thể vận hành tốt và đem lại hiệu quả cao cho người sử dụng.
An toàn cơ sở dữ liệu liên quan đến ba bài toán lớn: Tính bí mật của dữ liệu; tính toàn vẹn của dữ liệu; tính sẵn sàng của hệ thống dữ liệu.
Tính bí mật của dữ liệu đảm bảo cho nội dung của dữ liệu không bị đọc trộm bởi những người không được phép. Tính toàn vẹn đảm bảo cho nội dung của dữ liệu không bị sửa đổi trái phép. Tính sẵn sàng đảm bảo cho việc truy nhập đến hệ thống cũng như dữ liệu của người dùng hợp pháp luôn được thông suốt. Khi tính sẵn sàng bị vi phạm, hệ thống sẽ bị tê liệt.
Bài báo này chỉ đề cập tới một khía cạnh của việc bảo đảm tính bí mật của dữ liệu dùng kỹ thuật mật mã. Dữ liệu có thể được mã hóa trong quá trình truyền tin giữa các client và server hoặc khi dữ liệu được lưu trên các thiết bị phần cứng. Việc mã hóa dữ liệu lưu trên các ổ cứng nhằm mục đích chống lại những tấn công vào hệ điều hành hoặc dựa vào một số quyền hạn nhất định đối với hệ điều hành để có thể đọc được toàn bộ dữ liệu của cơ sở dữ liệu lưu trên máy tính. Tuy nhiên, đây là một giải pháp tương đối phức tạp.
Thông thường có hai giải pháp để mã hoá dữ liệu: mã hoá dữ liệu bên trong và mã hóa dữ liệu bên ngoài hệ quản trị. Việc sử dụng giải pháp nào phụ thuộc vào mức độ nhạy cảm của dữ liệu. Chính vì vậy các hệ quản trị cơ sở dữ liệu thông dụng thường không có các tính năng mã hoá dữ liệu bên trong hệ quản trị.
Bài viết này giới thiệu một giải pháp bảo mật dữ liệu trên các ổ cứng dùng kỹ thuật mật mã trong một số hệ quản trị có mã nguồn mở. Đặc biệt, giải pháp này có tính khả thi cao đối với hệ quản trị cơ sở dữ liệu MySQL.
Nói chung, với hệ quản trị cơ sở dữ liệu MySQL chúng ta có thể giải quyết được một số bài toán bảo mật dữ liệu sau:
Mã hóa dữ liệu trên đường truyền giữa các client và server, giữa các server trong các mô hình lặp dữ liệu.
Mã hóa dữ liệu lưu trên các ổ đĩa cứng.
Xác thực người sử dụng dùng chữ ký số.
Trong suốt đối với người sử dụng.
2. Giải pháp mã hóa dữ liệu lưu trên các ổ cứng
Chúng ta sẽ xem xét mô hình tổng quát của giải pháp này trong hình vẽ sau:
Khi một người sử dụng (ứng dụng) gửi một câu truy vấn đến hệ quản trị cơ sở dữ liệu thì mọi thao tác của hệ quản trị cơ sở dữ liệu được thực hiện theo trình tự sau:
Nhận câu truy vấn và phân tích cú pháp của câu lệnh.
Phân tích các dữ liệu tham số của câu lệnh.
Ghi/đọc dữ liệu vào/từ cơ sở dữ liệu.
Gửi kết quả về cho người sử dụng (ứng dụng).
Giải pháp đơn giản nhất là chúng ta sẽ thực hiện các thao tác mã hóa dữ liệu khi hệ quản trị ghi dữ liệu vào các cơ sở dữ liệu và giải mã dữ liệu khi hệ quản trị đọc dữ liệu từ các cơ sở dữ liệu. Điều này đảm bảo rằng việc mã hóa dữ liệu không ảnh hưởng đến các quá trình xử lý khác của hệ quản trị.
Trong hệ quản trị cơ sở dữ liệu MySQL tất cả các thao tác đọc/ghi dữ liệu được thực hiện thông qua các bộ đệm hệ thống nhờ một thành phần của hệ quản trị là Các phương pháp truy nhập. Các phương pháp truy nhập thực hiện việc đóng gói dữ liệu và ghi lại hoặc đọc các gói dữ liệu ra từ các file dữ liệu. Chúng ta có thể xây dựng các chức năng thực hiện việc mã hóa/giải mã dữ liệu bằng các hệ mật có tốc độ cao và cài đặt vào hệ quản trị MySQL trong thành phần Các phương pháp truy nhập. Sau khi đóng gói các dữ liệu cần ghi vào cơ sở dữ liệu thì chức năng mã hoá sẽ được sử dụng để mã hóa gói dữ liệu. Kết thúc việc mã hóa dữ liệu thì quá trình ghi dữ liệu vào cơ sở dữ liệu sẽ được thực hiện.
Quá trình giải mã được thực hiện ngược lại. Khi dữ liệu được đọc từ cơ sở dữ liệu ra, trước khi mở gói dữ liệu các hàm giải mã sẽ được gọi để giải mã dữ liệu. Gói dữ liệu được mở ở trạng thái dữ liệu đã được giải mã.
Như vậy toàn bộ dữ liệu được mã hóa trước khi ghi vào cơ sở dữ liệu và được giải mã ngay sau khi đọc từ cơ sở dữ liệu. Quá trình này không làm ảnh hưởng đến mọi thao tác xử lý dữ liệu của hệ quản trị MySQL.
Ngoài ra để có thể thực hiện được giải pháp này chúng ta phải xây dựng được một hệ thống khóa để mã hóa dữ liệu và một cơ chế quản lý các khóa bí mật này. Đối với mỗi một quan hệ dữ liệu chúng ta có thể tạo một khóa bí mật để mã hóa các dữ liệu trong quan hệ. Các khoá này được lưu ở khóa bí mật của bảng được lấy ra để thực hiện việc mã hóa/giải mã.
3. Khả năng ứng dụng
Giải pháp nêu trên có tính khả thi đối với các hệ quản trị có mã nguồn mở nói chung và hệ quản trị MySQL nói riêng. Để thực thi giải pháp này chúng ta cần phải:
- Có một hệ quản trị mã nguồn mở.
- Phân tích các thành phần của hệ quản trị.
- Xác định các thành phần thực hiện các chức năng mật mã: mã hoá, giải mã, quản lý khóa.
- Xây dựng các thành phần mật mã.
- Tích hợp các thành phần mật mã vào hệ quản trị.
Một số ưu điểm của giải pháp này là:
- Có tính trong suốt đối với người sử dụng: không đòi hỏi người sử dụng phải có các kiến thức nhất định về mật mã. Việc bảo mật dữ liệu hoàn toàn trong suốt.
- Có thể giải quyết nhiều vấn đề mà rất khó để có thể thực hiện được đối với các hệ quản trị cơ sở dữ liệu thương mại: mã hóa các chỉ số, các dữ liệu có điều kiện ràng buộc, …
- Giải quyết được một số bài toán khác: mã hóa dữ liệu trên đường truyền, xác thực người sử dụng và phân phối khoá phiên, mã hoá dữ liệu trên các server lặp…
- Có thể kiểm soát được độ an toàn.
Tuy nhiên giải pháp này có một số nhược điểm sau:
- Chỉ áp dụng được với các hệ quản trị cơ sở dữ liệu có mã nguồn mở, vì vậy phạm vi ứng dụng không lớn. Thông thường chỉ dùng cho những mục đích đặc biệt.
- Việc xây dựng khá phức tạp, đòi hỏi nhiều kiến thức về hệ quản trị, lập trình ứng dụng, phân tích các chương trình nguồn…
- Làm giảm hiệu năng của hệ thống: đòi hỏi thời gian và năng lực tính toán lớn để mã và giải mã dữ liệu. Đây là một nhược điểm chung khi chúng ta thực hiện việc bảo mật dữ liệu. Có một giải pháp có thể khắc phục một phần nhược điểm này là sử dụng các thiết bị phần cứng như card mã hoá để thực hiện các chức năng mật mã.