SecLab
Cryptography & SecretswalkthroughĐộ khó 3/526 phút

Mã hoá dữ liệu lưu trữ, và câu hỏi "chống ai"

Mục tiêu: Sau bài này bạn nói được mã hoá ở tầng nào chống được mối đe doạ nào, và vì sao mã hoá đĩa không chống được SQL injection.

V14V11A04:2025
Bước 1 / 5 · read6 phút

Ba tầng, ba mối đe doạ khác nhau

"Dữ liệu của chúng ta được mã hoá khi lưu trữ" là câu trả lời cho một câu hỏi kiểm toán, và nó thường không trả lời câu hỏi thật: mã hoá đó chống được ai?

Ba tầng, và mỗi tầng chống đúng một mối đe doạ:

TầngChống đượcKHÔNG chống được
Mã hoá đĩa (LUKS, EBS encryption)Ai đó lấy được ổ đĩa vật lý, hoặc một snapshot bị copyMọi thứ đi qua cơn sở dữ liệu đang chạy
TDE / mã hoá ở DBAi đó copy được file dữ liệu hoặc bản backupMột truy vấn SQL — kể cả truy vấn của kẻ tấn công
Mã hoá ở tầng ứng dụngCả DBA, cả người đọc backup, và cả SQL injectionKẻ tấn công đã chạy được code trong ứng dụng

Điểm quan trọng nhất và hay bị hiểu sai: mã hoá đĩa và TDE trong suốt với mọi truy vấn. Cơ sở dữ liệu giải mã khi đọc, nên một SELECT * FROM users trả về plaintext — dù đó là truy vấn của bạn hay của một kẻ tấn công đi qua SQL injection. Hai tầng đó chống mất thiết bị, không chống mất quyền truy cập.

Nghĩa là nếu mối đe doạ bạn lo là "một lỗ hổng trong ứng dụng làm rò rỉ số thẻ", thì mã hoá đĩa không đóng góp gì, và chỉ mã hoá ở tầng ứng dụng mới đóng góp.

Nhưng mã hoá ở tầng ứng dụng có ba cái giá thật, và chúng là lý do đừng mã hoá tất cả:

  • Không tìm kiếm được. WHERE email = @x không hoạt động trên cột đã mã hoá. Cần tìm thì phải lưu thêm một cột HMAC của giá trị (không phải hash thường, vì hash không khoá thì dò được bằng từ điển) để so khớp chính xác. So khớp một phần thì không làm được.
  • Không sắp xếp, không so sánh khoảng. Một cột salary đã mã hoá không ORDER BY được.
  • Quản khoá trở thành bài toán của bạn. Và đó là bài toán khó hơn mã hoá.

Nên câu hỏi thực dụng không phải "có mã hoá không" mà "cột nào, chống ai, và chấp nhận mất gì".

Xem lộ trình

Bình luận

Tham gia thảo luận
Đăng ký để bình luận

Bình luận cần tài khoản đã hoàn thành ít nhất một bài học. Điều kiện đó là thứ giữ cho luồng thảo luận này còn đáng đọc: mỗi ý kiến gắn với một người có thể bị hỏi lại, và reputation tích luỹ theo thời gian.

Đăng kýĐăng nhập

Bạn vẫn đọc được toàn bộ bình luận dưới đây mà không cần tài khoản. Đăng nhập xong bạn sẽ quay lại đúng chỗ này, không phải đầu trang.

Đang tải bình luận…