Ý chính: Mã hóa chỉ an toàn khi danh tính, quyền truy cập, khóa và quy trình vận hành đều được kiểm soát.
Thuật ngữ trong bài: Secret: thông tin bí mật như mật khẩu hoặc token; KMS: dịch vụ quản lý khóa; envelope encryption: mã hóa dữ liệu bằng khóa riêng rồi tiếp tục bảo vệ khóa đó bằng khóa chính.
Bài toán thực tế
Secret lưu trong file môi trường thường tồn tại quá lâu. Dịch vụ có thể được cấp quyền rộng hơn cần thiết, còn việc đổi khóa bị trì hoãn vì không biết dữ liệu nào dùng khóa nào. Hệ thống nhiều khách hàng cần chính sách rõ cho khóa dùng chung và khóa riêng.
Mã hóa không an toàn hơn nếu dịch vụ nào cũng đọc được khóa chính hoặc bí mật tồn tại nhiều năm trong file môi trường. Danh tính tiến trình, quyền truy cập và khả năng xoay khóa quan trọng không kém thuật toán mã hóa.
Với SaaS nhiều khách hàng, cần xác định dữ liệu nào dùng khóa chung, dữ liệu nào cần khóa riêng và cách tìm lại phiên bản khóa khi giải mã hoặc phục hồi.
Thiết kế và triển khai
- Kiểm kê bí mật và khóa theo người phụ trách, dịch vụ sử dụng và thời điểm hết hạn.
- Dùng danh tính tiến trình để lấy thông tin xác thực ngắn hạn thay vì phân phối bí mật tĩnh.
- Áp dụng mã hóa phong bì và lưu tham chiếu phiên bản khóa cùng bản mã.
Mã minh họa: Giải mã và xoay khóa theo phiên bản
record = { ciphertext, wrappedDataKey, masterKeyVersion }
dataKey = kms.decrypt(record.wrappedDataKey, context = tenantId)
plaintext = decrypt(dataKey, record.ciphertext)
if record.masterKeyVersion != current:
enqueueRewrap(record.id)Đưa mã khách hàng cùng loại dữ liệu vào ngữ cảnh xác thực để bản mã không thể bị di chuyển âm thầm qua ranh giới dữ liệu.
Rủi ro cần tính trước
- Xoay khóa tắt phiên bản cũ trước khi mọi tiến trình đọc hỗ trợ khóa mới.
- Khôi phục bản sao lưu nhưng thiếu phiên bản khóa lịch sử cần để giải mã.
- Người vận hành xuất dữ liệu rõ ra ngoài trong lúc chẩn đoán sự cố.
Nên theo dõi gì?
| Tín hiệu | Điều tín hiệu cho biết |
|---|---|
| Tuổi của bí mật và khóa | Phát hiện việc xoay vòng bị trễ hoặc thông tin xác thực không còn người phụ trách. |
| Tỷ lệ giải mã lỗi và truy cập bị từ chối | Phát hiện sự cố khóa hoặc lỗi hồi quy trong chính sách. |
| Số bản ghi theo từng phiên bản khóa | Cho biết tiến độ xoay vòng và lượng dữ liệu còn phụ thuộc vào khóa cũ. |
Đưa vào production từng bước
Kiểm kê bí mật và loại chúng khỏi mã nguồn trước. Cấp danh tính ngắn hạn cho một dịch vụ, áp dụng mã hóa phong bì cho một nhóm dữ liệu quan trọng, rồi diễn tập xoay khóa và phục hồi trước khi mở rộng sang khóa riêng theo khách hàng.
Điều cần nhớ
Quản lý khóa là một vòng đời gồm danh tính, phân quyền, xoay vòng và phục hồi; nó không kết thúc sau một lời gọi mã hóa.
