Trang được liệt kê nói về mã hóa AES-128-CBC với Encrypt-then-MAC Mac với HMAC.
Các nghĩa vụ của người dùng là cung cấp thông báo, khóa ngẫu nhiên thống nhất 256 bit và dấu thời gian.
Fernet chia 256 bit của khóa thành hai phần có kích thước bằng nhau.Đầu tiên, một phần được sử dụng trong mã hóa tin nhắn bằng AES-128-CBC, sau đó là thẻ xác thực $t$
$$ t = \operatorname{HMAC-SHA-256}( Phiên bản â Dấu thời gian â IV â Bản mã)$$ được tính toán với phần khác của khóa.
điều gì có thể xảy ra nếu tôi sử dụng lại khóa với Fernet?
mã hóa của quá nhiều tin nhắn với cùng một phím có thể gây ra xung đột IV dưới cùng một phím.
Điều này có thể rò rỉ rằng phần đầu của các tin nhắn giống nhau. Nếu bạn chỉnh sửa tệp của mình và không mã hóa tệp bằng IV khác thì tệp sẽ bị rò rỉ cùng một tiền tố.
Chà, người ta cần mã hóa $2^{64}$ tin nhắn có xung đột IV dưới cùng một khóa. 50% là quá cao so với lợi thế của kẻ tấn công, người ta nên xem xét các xác suất thấp hơn.
mã hóa của quá nhiều khối dữ liệu
Có thể gây xung đột bản mã sử dụng Ngọt32 tấn công. X-or của khối tin nhắn có thể bị xóa nếu $c_i = c_j$ với $i \neq j$ $$m_i \oplus m_j = c_{1-1} \oplus c_{j-1}.$$
Một lần nữa, 50% là quá cao so với lợi thế của kẻ tấn công, người ta nên xem xét các xác suất thấp hơn.
Hai vấn đề này thực sự phụ thuộc vào số lượng tệp bạn có và kích thước của chúng.
Không hoàn toàn an toàn, sử dụng các khóa và IV khác nhau cho mỗi tệp sẽ tốt hơn. Trên thực tế, API của Fernet cho phép điều này.
Cách tiếp cận thay thế của tôi, nếu việc sử dụng lại khóa không an toàn, sẽ là mã hóa các tệp như sau:
- Chọn một loại muối ngẫu nhiên
- Sử dụng KDF để tính toán khóa riêng lẻ từ khóa và muối được chia sẻ
- Mã hóa tệp bằng khóa riêng lẻ và nối thêm muối
Nhưng điều này có vẻ sai (muối chỉ được sử dụng với mật khẩu, không phải với dữ liệu ngẫu nhiên...) và quan trọng hơn là yêu cầu tôi sử dụng các nguyên hàm mật mã cấp thấp rõ ràng không phải là bằng chứng ngu ngốc.
Đây là những gì chúng ta làm; có các khóa và IV khác nhau trên mỗi tệp. Bạn có thể dùng HKDF thậm chí chỉ mở rộng một phần để lấy khóa và IV.
Một cách trung thực, tôi luôn hỏi tại sao ai đó lại cần những thứ phức tạp trong khi các thùng chứa được mã hóa của VeraCrypt xử lý việc này tốt hơn cả các chuyên gia.Người ta không cần phải xem xét mã hóa. Chỉ cần học cách có một mật khẩu tốt như dicewire đã gõ và bạn đã hoàn tất.