Tôi cần lưu trữ dữ liệu nhạy cảm (như ảnh của khách hàng) trong cơ sở dữ liệu SQL theo cách an toàn nhất trong trường hợp vi phạm bảo mật. Dữ liệu sẽ không được khách hàng truy cập, chỉ truy cập vào các quy trình nội bộ thực hiện một số xác thực. Khách hàng không có bất kỳ thông tin đầu vào nào như mật khẩu, họ chỉ cần đăng ký với chúng tôi và chúng tôi theo dõi dữ liệu của họ. Không thể mã hóa phía máy khách trong thiết lập hiện tại, đó là lý do tại sao chúng tôi cần mã hóa phía máy chủ và chúng tôi cũng có một HSM trong mạng riêng của mình với các khóa riêng.
Một ý tưởng là sử dụng mã hóa khóa đối xứng và lưu trữ khóa đó cục bộ.Vấn đề với giải pháp đó là nếu kẻ tấn công có quyền truy cập vào máy chủ và cơ sở dữ liệu, hắn có thể dễ dàng lấy được khóa đó và giải mã dữ liệu.
Một ý tưởng khác là sử dụng mô-đun HSM mà công ty có và mã hóa khóa đối xứng bằng khóa chung HSM. Khi máy chủ cần xử lý dữ liệu, nó sẽ gửi khóa mã hóa đến HSM và chỉ xử lý khóa đối xứng trong bộ nhớ. Vấn đề với giải pháp đó là tôi cần lưu trữ thông tin đăng nhập kết nối HSM và nếu kẻ tấn công lấy được thông tin đó và giải mã khóa đối xứng, thì toàn bộ cơ sở dữ liệu sẽ bị xâm phạm.
Nó có đủ an toàn để tạo các khóa đối xứng ngẫu nhiên cho mỗi tệp chúng tôi mã hóa, sau đó mã hóa khóa đối xứng bằng khóa chung HSM và lưu trữ cả dữ liệu được mã hóa và khóa sym được mã hóa không?
Và nếu vậy, cách tốt nhất để lưu trữ nó là gì? Một chuỗi pkcs7 base64?