Tôi nhận thấy điều này phụ thuộc vào việc triển khai của tôi và việc triển khai các thư viện mà tôi sử dụng. Tôi đang hỏi về quy trình của mình với giả định rằng các thư viện mã hóa và mã của tôi không bị lỗi/xâm phạm, mật khẩu của người dùng được bảo mật và máy không bị xâm phạm.
Mục tiêu ở đây là bảo vệ tính bảo mật của các tệp bằng mật khẩu và có thể mã hóa chúng mà không cần nhập mật khẩu.
Thiết lập ban đầu:
- Tạo cặp khóa RSA
- Nhắc người dùng nhập mật khẩu và cho rằng họ sử dụng mật khẩu đủ an toàn
- Mã hóa khóa riêng ở định dạng DER, pkcs=8, scheme=scryptAndAES256-CBC bằng mật khẩu người dùng
Đối với mỗi tệp:
- Tạo khóa phiên ngẫu nhiên 32 byte
- Mã hóa khóa phiên bằng khóa chung ban đầu
- Tạo một nonce ngẫu nhiên 12 byte
- Ghi ra file xuất:
- Khóa phiên được mã hóa
- nonce
- Luồng tệp được mã hóa bằng AES GCM bằng cách sử dụng khóa phiên 32B ngẫu nhiên và 12B nonce
Khi giải mã một tập tin
- Nhắc người dùng nhập mật khẩu, giải mã khóa riêng ban đầu
- Đọc khóa phiên được mã hóa và nonce từ đầu tệp
- Giải mã khóa phiên bằng khóa riêng ban đầu
- Giải mã luồng tệp bằng khóa phiên và nonce
Điều duy nhất khác cần lưu ý là tôi đã chọn GCM vì tốc độ của nó, chẳng hạn như CBC. Tôi cũng biết vấn đề xung đột khi sử dụng một nonce ngẫu nhiên, tuy nhiên tôi hiểu rằng đây sẽ là vấn đề lớn hơn nếu tôi có hàng tỷ tệp sử dụng cùng một khóa phiên. Và với khóa ngẫu nhiên 32 byte, về cơ bản, tôi có 44 byte dung lượng để tránh va chạm. Tôi mong muốn không phải theo dõi một nonce.
Có bất kỳ vấn đề nào với kế hoạch này hay đây sẽ là một cách an toàn để bảo vệ quyền riêng tư của các tệp giả sử mã giả đã được triển khai đúng cách?