Предположим, я хочу использовать шифр с большим размером ключа, такой как ISAAC, который поддерживает 8192-битный ключ ogf.
Я могу хешировать с помощью sha-256 или sha-512 и повторять до тех пор, пока не будет достигнут размер ключа, но я не получу 8192 бит безопасности, поскольку внутреннее состояние этой хеш-функции ограничено 256 или 512 битами.
Я могу хэшировать с помощью XOF (расширяемой функции вывода), такой как Skein, SHAKE, KangarooTwelve, Blake3 или Blake2x, но опять же проблема заключается в том, что внутреннее состояние является небольшим и основано на итерациях в функции сжатия, они не обеспечивают безопасность больше, чем 256/512 бит, даже если вывод выбран произвольно.
Возможно, можно использовать специализированную функцию KDF, такую как Argon2 или Scrypt.
Мой вопрос конкретно об Argon2.
В документации к нему говорится, что он принимает большие входные данные для сообщения, соли и размер его дайджеста могут быть выбраны произвольно.
Я скомпилировал программу времени выполнения argon2 для хеширования файлов в терминале, таких как фотографии, и я не вижу разницы во времени, когда размер вывода мал или велик.
$ время кошка ~/some_file | argon2-static 00000000 -d -t 2000000 -m 3 -p 1 -r -l 32 &>/dev/null
реальное 0m6.334s
пользователь 0m6.329s
система 0m0.004s
$ время кошка ~/some_file | argon2-static 00000000 -d -t 2000000 -m 3 -p 1 -r -l 1024 &>/dev/null
реальное 0м6.455с
пользователь 0m6.443s
система 0m0.008s
Выходные размеры 32 байта (256 бит) и 1024 (8192 бита) имеют почти одинаковые тайминги при хешировании с помощью Argon2.
Это позвольте мне сомневаться.
Имеет ли внутреннее состояние Argon2 такой же размер вывода? Или, может быть, это единственные итерации хэш-функции?
Я спрашиваю об этом, потому что Argon2 использует Blake2b в качестве хеш-функции и имеет 512-битное внутреннее состояние, а не 8192, как мне нужно.
Будет ли у меня 8192-битная безопасность, если некоторый ввод с высокой энтропией (равный или больший, чем вывод) обрабатывается до этого размера вывода в Argon2?