Tôi đang sử dụng Fernet của python.cryptography với hàm băm cụm mật khẩu PBKDF2 để mã hóa một phần dữ liệu (giá trị) được lưu trữ, mã hóa trong cơ sở dữ liệu. Cụm mật khẩu được băm là không phải được lưu trữ trong cơ sở dữ liệu và vì lý do đó không phải là muối. Thay vào đó, muối đến từ kho mật khẩu trong môi trường thời gian chạy của ứng dụng, sau đó được sửa đổi để làm cho nó trở thành duy nhất trên mỗi giá trị.
Tôi có một câu hỏi về vấn đề này là: nếu kẻ tấn công có cụm mật khẩu và dữ liệu được mã hóa cho một giá trị, liệu chúng có thể thiết kế ngược muối (điều này sẽ giúp chúng tấn công dữ liệu còn lại) không? Điều gì sẽ xảy ra nếu họ cũng có một bản sao của phiên bản dữ liệu không được mã hóa cho một giá trị đó?
(Vectơ tấn công đang được xem xét ở đây là một trong đó kẻ tấn công có tài khoản người dùng thông thường trên hệ thống và đã lấy được một bản sao của cơ sở dữ liệu với các giá trị được mã hóa. Do đó, chúng có thể tạo một giá trị duy nhất (của chúng) mà chúng biết cụm mật khẩu và giá trị được mã hóa kết quả. Họ cũng có quyền truy cập vào một bản sao mã của ứng dụng, vì đó là mã nguồn mở.)
Theo yêu cầu, đây là cách xử lý muối:
- Muối được tạo bởi người quản trị (chúng tôi khuyên dùng giá trị ngẫu nhiên 32 byte).
- Muối được lưu trữ trong hầm mật khẩu (dịch vụ mạng)
- Khi ứng dụng được triển khai, muối sẽ được đưa vào trong thời gian chạy
- Khi các giá trị mới được lưu, muối bí mật được kết hợp với một ID giá trị duy nhất để tạo thành muối theo giá trị
- Sau đó, muối này được sử dụng với cụm mật khẩu do người dùng cung cấp để tạo khóa bằng PBKDF2 (với 500 nghìn lần lặp lại).
- Các giá trị của người dùng sau đó được mã hóa bằng các khóa riêng của họ
Tôi tin rằng ở trên được gọi là mô hình "muối và hạt tiêu".