Alpha Security Hub
Trang chủ › An Ninh Dữ Liệu

Mã hóa cơ sở dữ liệu và các nguyên tắc cốt lõi

Ban biên tập Alpha Security Hub · · Cập nhật
Mã hóa cơ sở dữ liệu và các nguyên tắc cốt lõi

Mã hóa cơ sở dữ liệu biến dữ liệu thành dạng không đọc được nếu không có khóa, giúp bảo vệ thông tin khi ổ đĩa, bản sao lưu hay đường truyền rơi vào tay kẻ xấu. Tuy nhiên, mã hóa không phải "nút bấm an toàn tuyệt đối". Mỗi kiểu mã hóa bảo vệ trước một loại rủi ro khác nhau, và quản lý khóa thường khó hơn bản thân việc mã hóa. Bài viết trình bày các lớp mã hóa phổ biến và những nguyên tắc cốt lõi khi triển khai.

Ba trạng thái của dữ liệu

  • Dữ liệu lưu trữ (at rest): nằm trên ổ đĩa, file dữ liệu, bản sao lưu.
  • Dữ liệu truyền (in transit): đi giữa ứng dụng và máy chủ cơ sở dữ liệu, giữa các máy chủ.
  • Dữ liệu đang xử lý (in use): nằm trong bộ nhớ khi truy vấn, tính toán.

Mỗi trạng thái cần biện pháp riêng. Một hệ thống chỉ mã hóa ổ đĩa vẫn để lộ dữ liệu nếu kết nối từ ứng dụng không mã hóa, hoặc nếu kẻ tấn công chiếm được tài khoản ứng dụng.

Các lớp mã hóa cơ sở dữ liệu

LớpCách hoạt độngBảo vệ trướcKhông bảo vệ trước
Mã hóa ổ đĩa / hệ thống fileToàn bộ ổ đĩa được mã hóa ở tầng lưu trữMất ổ cứng, thanh lý thiết bịNgười có quyền truy cập máy chủ đang chạy
Mã hóa dữ liệu minh bạch (TDE)Hệ quản trị CSDL mã hóa file dữ liệu và log, tự giải mã khi đọcĐánh cắp file dữ liệu, bản sao lưuTruy vấn qua tài khoản hợp lệ, SQL injection
Mã hóa cột / trườngMã hóa riêng các cột nhạy cảmQuản trị viên CSDL xem trộm, lộ bản saoỨng dụng bị chiếm có quyền giải mã
Mã hóa phía ứng dụngỨng dụng mã hóa trước khi ghi vào CSDLXâm phạm máy chủ CSDL, quản trị viên CSDLỨng dụng bị xâm phạm
Mã hóa kết nối (TLS)Mã hóa đường truyền giữa client và serverNghe lén mạngDữ liệu tại hai đầu

Không có lớp nào đủ một mình. Nhiều tổ chức kết hợp TDE cho toàn bộ cơ sở dữ liệu, TLS cho mọi kết nối, và mã hóa cấp trường cho dữ liệu đặc biệt nhạy cảm như số giấy tờ tùy thân, thông tin sức khỏe.

Nguyên tắc 1: Bắt đầu từ phân loại dữ liệu

Không phải dữ liệu nào cũng cần cùng mức bảo vệ. Hãy phân loại: công khai, nội bộ, nhạy cảm, đặc biệt nhạy cảm. Dữ liệu đặc biệt nhạy cảm như thông tin tài chính, sức khỏe, sinh trắc học cần lớp bảo vệ mạnh hơn. Phân loại cũng giúp xác định dữ liệu nào không nên lưu ngay từ đầu.

Nguyên tắc 2: Dùng thuật toán chuẩn, không tự chế

Hãy dùng thuật toán và thư viện được công nhận rộng rãi như AES cho mã hóa đối xứng, cùng các chế độ hoạt động có xác thực như GCM. Không tự thiết kế thuật toán, không dùng thuật toán đã lỗi thời như DES hay RC4. Với thư viện, chọn thư viện mật mã được duy trì tích cực, cập nhật thường xuyên.

Nguyên tắc 3: Mật khẩu không mã hóa mà băm

Mật khẩu người dùng không nên được mã hóa (vì có thể giải mã) mà phải được băm bằng hàm băm chuyên dụng cho mật khẩu như bcrypt, scrypt hoặc Argon2, kèm salt riêng cho từng người dùng. Các hàm băm nhanh như MD5, SHA-1 không phù hợp để lưu mật khẩu.

Nguyên tắc 4: Quản lý khóa là trọng tâm

Mã hóa mạnh đến đâu cũng vô nghĩa nếu khóa nằm ngay cạnh dữ liệu. Các nguyên tắc quản lý khóa:

  • Tách khóa khỏi dữ liệu: lưu khóa trong hệ thống quản lý khóa (KMS) hoặc thiết bị bảo mật phần cứng (HSM), không lưu trong mã nguồn hay file cấu hình.
  • Mã hóa phong bì (envelope encryption): dữ liệu được mã hóa bằng khóa dữ liệu, khóa dữ liệu được mã hóa bằng khóa chính nằm trong KMS.
  • Phân quyền truy cập khóa: chỉ dịch vụ cần thiết mới được dùng khóa, mọi lần sử dụng được ghi nhật ký.
  • Xoay vòng khóa: thay khóa định kỳ và khi nghi ngờ bị lộ.
  • Sao lưu khóa an toàn: mất khóa đồng nghĩa mất dữ liệu.
  • Phân tách nhiệm vụ: người quản trị cơ sở dữ liệu không nên đồng thời quản lý khóa.

Nguyên tắc 5: Mã hóa mọi kết nối

Bật TLS cho kết nối giữa ứng dụng và cơ sở dữ liệu, giữa các nút trong cụm, cho công cụ quản trị. Kiểm tra chứng chỉ phía client để tránh tấn công giả mạo máy chủ. Tắt các phiên bản giao thức cũ.

Nguyên tắc 6: Mã hóa không thay thế kiểm soát truy cập

Với TDE, bất kỳ ai đăng nhập được vào cơ sở dữ liệu với quyền đọc đều thấy dữ liệu đã giải mã. Vì vậy, mã hóa phải đi cùng:

  • Phân quyền tối thiểu cho tài khoản ứng dụng và con người.
  • Không dùng tài khoản quản trị cho ứng dụng.
  • Ghi nhật ký truy vấn với dữ liệu nhạy cảm.
  • Phòng chống SQL injection bằng truy vấn tham số hóa.

Xem thêm bài quản lý quyền truy cập dữ liệu nhạy cảm.

Nguyên tắc 7: Đừng quên bản sao lưu và môi trường thử nghiệm

Bản sao lưu cơ sở dữ liệu cũng cần mã hóa, và khóa cho bản sao lưu phải được quản lý để có thể khôi phục khi cần. Môi trường phát triển, thử nghiệm thường dùng bản sao dữ liệu thật nhưng bảo vệ lỏng lẻo hơn; nên dùng dữ liệu giả hoặc dữ liệu đã được che (masking) thay vì bản sao nguyên vẹn. Hướng dẫn sao lưu an toàn có trong bài cấu hình sao lưu đám mây an toàn.

Các kỹ thuật bổ trợ: che dữ liệu và token hóa

  • Che dữ liệu (data masking): hiển thị một phần, ví dụ chỉ bốn số cuối của số tài khoản, cho người dùng không cần xem toàn bộ.
  • Token hóa: thay giá trị nhạy cảm bằng mã thay thế, giá trị thật lưu trong kho riêng được bảo vệ chặt chẽ. Thường dùng cho dữ liệu thẻ thanh toán.

Cân nhắc hiệu năng và vận hành

Mã hóa có chi phí: CPU, độ trễ, độ phức tạp vận hành. Mã hóa cấp trường có thể khiến việc tìm kiếm, sắp xếp, đánh chỉ mục khó hơn. Hãy thử nghiệm với tải thực tế, chọn mức mã hóa phù hợp từng loại dữ liệu, và tài liệu hóa quy trình khôi phục khi có sự cố liên quan đến khóa.

Lời kết

Mã hóa cơ sở dữ liệu hiệu quả khi bạn hiểu rõ nó bảo vệ trước rủi ro nào. Hãy kết hợp nhiều lớp, quản lý khóa nghiêm ngặt, và luôn nhớ rằng kiểm soát truy cập, giám sát và tối thiểu hóa dữ liệu vẫn là những trụ cột không thể thiếu.

Câu hỏi thường gặp

TDE có chống được SQL injection không?

Không. TDE chỉ bảo vệ file dữ liệu khi bị đánh cắp ở tầng lưu trữ. Khi truy vấn qua ứng dụng, dữ liệu được giải mã tự động, nên SQL injection vẫn đọc được dữ liệu.

Nên mã hóa toàn bộ cơ sở dữ liệu hay chỉ một số cột?

Nhiều tổ chức kết hợp: mã hóa toàn bộ ở tầng lưu trữ để bảo vệ cơ bản, và mã hóa cấp trường cho dữ liệu đặc biệt nhạy cảm. Lựa chọn tùy vào phân loại dữ liệu và yêu cầu hiệu năng.

Lưu khóa mã hóa trong file cấu hình có được không?

Không nên. Khóa nằm cạnh ứng dụng sẽ bị lộ cùng nếu máy chủ hoặc mã nguồn bị xâm phạm. Hãy dùng hệ thống quản lý khóa hoặc kho bí mật chuyên dụng.

Mã hóa và băm khác nhau thế nào?

Mã hóa có thể đảo ngược khi có khóa, dùng cho dữ liệu cần đọc lại. Băm là một chiều, dùng để xác minh như kiểm tra mật khẩu mà không cần lưu mật khẩu gốc.

Bài liên quan