Bài này nói rằng Blake2b của Argon2 là một giảm một, cũng được đồng ý bởi Thông số kỹ thuật của Argon2 vì nó nói rằng nó chỉ sử dụng Blake2b 2 vòng.
Nhưng mặt khác, trang 15
thông số kỹ thuật của Argon2 nói rằng nó sửa đổi Blake2b để thêm các phép nhân 32 bit nhằm tăng độ trễ (tôi đoán chúng có nghĩa là cần đợi thêm chu kỳ CPU?).
Câu hỏi của tôi là:
- Nếu Argon2 muốn làm cho Blake2b khó hơn, tại sao nó lại giảm 12 vòng xuống chỉ còn 2?
- Có sự khác biệt nào khác mà tôi không đề cập ở đây không?
- Những khác biệt này ảnh hưởng như thế nào đến tính bảo mật của Blake2b của Argon2 so với Blake2b tiêu chuẩn được tìm thấy trong, chẳng hạn như,
libsodium
?
Suy nghĩ của tôi
Tôi nghĩ rằng việc Argon2 sử dụng hàm băm (Blake2b) để lấp đầy bộ nhớ không phải là lựa chọn tốt nhất. Bởi vì không có quá trình nén nào liên quan đến việc lấp đầy bộ nhớ; Đầu vào 1024 byte trở thành đầu ra 1024 byte khác. Không xảy ra nén, do đó, tất cả các vòng tích cực của hàm băm cố gắng duy trì entropy đầu vào tối đa trong khi nén thành ít byte hơn là hoàn toàn không cần thiết.
Tôi nghĩ đây là lý do tại sao Argon2 tiếp tục tạo biến thể Blake2b rút gọn của riêng mình chỉ với 2 vòng thay vì 12: bởi vì rõ ràng là không cần phải băm.
Một cách hiệu quả bằng cách sửa đổi Blake2b, Argon2 đã tạo ra một biến thể của mật mã khối đối xứng và họ cũng tiếp tục sử dụng nó như một mật mã (đầu vào cố định trở thành đầu ra cố định có kích thước bằng nhau).
Tôi nghĩ rằng cách tiếp cận tốt hơn so với Argon2 là, thay vì phát minh lại một mật mã khối đối xứng từ hàm băm (bằng cách sửa đổi Blake2b), là cắt bỏ cuộc rượt đuổi và sử dụng một mật mã đối xứng hiện có như ChaCha20.
Sử dụng mật mã đối xứng như ChaCha20 sẽ nhanh như mật mã đối xứng được phát minh lại của Argon2 (Blake2b giảm), mặc dù đó là ChaCha20 20 vòng. ChaCha20 theo các thử nghiệm của tôi chỉ chậm hơn một chút so với Argon2 khi thực hiện cùng một công việc. Cộng với các lợi ích khác: tận dụng các thư viện hiện có và nhiều nghiên cứu phân tích mật mã hơn đã được áp dụng cho các mật mã hiện có.