Giả sử tôi muốn sử dụng một mật mã có kích thước khóa lớn, chẳng hạn như ISAAC hỗ trợ khóa ogf 8192 bit.
Tôi có thể băm với sha-256 hoặc sha-512 và lặp lại cho đến khi đạt đến kích thước khóa nhưng tôi sẽ không nhận được 8192 bit bảo mật vì trạng thái bên trong của các hàm băm này được giới hạn ở 256 hoặc 512 bit.
Tôi có thể băm bằng XOF (Chức năng đầu ra có thể mở rộng) chẳng hạn như Skein, SHAKE, KangarooTwelve, Blake3 hoặc Blake2x nhưng một lần nữa, vấn đề là trạng thái bên trong nhỏ và dựa trên các lần lặp trong hàm nén, chúng không mang lại sự an toàn hơn 256/512 bit ngay cả khi đầu ra được chọn tùy ý.
Có thể sử dụng chức năng KDF chuyên biệt như Argon2 hoặc Scrypt.
Câu hỏi của tôi là cụ thể về Argon2.
Tài liệu về nó nói rằng nó chấp nhận đầu vào lớn cho thông báo, muối và kích thước tiêu hóa của nó có thể được chọn tùy ý.
Tôi đã biên dịch chương trình thời gian chạy argon2 để băm các tệp trong thiết bị đầu cuối, chẳng hạn như ảnh và tôi không thể thấy sự khác biệt về thời gian khi kích thước đầu ra nhỏ hoặc lớn.
$ thời gian con mèo ~/some_file | argon2-static 00000000 -d -t 2000000 -m 3 -p 1 -r -l 32 &>/dev/null
thực 0m6.334s
người dùng 0m6.329s
hệ thống 0m0.004s
$ thời gian con mèo ~/some_file | argon2-static 00000000 -d -t 2000000 -m 3 -p 1 -r -l 1024 &>/dev/null
thực 0m6.455s
người dùng 0m6.443s
hệ thống 0m0.008s
Cả hai kích thước đầu ra 32 byte (256 bit) và 1024 (8192 bit) đều có thời gian gần như bằng nhau khi băm bằng Argon2.
Điều này khiến tôi nghi ngờ.
Trạng thái bên trong của Argon2 có cùng kích thước đầu ra không? Hoặc có thể các lần lặp duy nhất của nó trên hàm băm?
Tôi hỏi điều này vì Argon2 sử dụng Blake2b làm hàm băm và nó có 512-bit trạng thái bên trong, không phải 8192 mà tôi muốn.
Tôi có được bảo mật 8192 bit không nếu một số đầu vào có entropy cao (bằng hoặc lớn hơn đầu ra) được xử lý theo kích thước đầu ra này trong Argon2?