OSS-GOST-Crypto/gost-yescrypt
Хеширование паролей на ГОСТ
В 2013-2015 был проведен международный конкурс Password Hashing Competition (PHC) <http://password-hashing.net/> в котором были особо отмечены несколько алгоритмов хеширования паролей, среди которых yescrypt <https://www.openwall.com/yescrypt/>.
yescrypt разработан как усовершенствование популярного алгоритма scrypt (Colin Percival 2009, RFC 7914), который в свою очередь использует PBKDF2 (RSA, RFC 2898, RFC 8018) для преобразования входных данных в начальный блок алгоритма scrypt и для обратного преобразования конечного блока в выходное значение. (Описание yescrypt: http://password-hashing.net/submissions/specs/yescrypt-v2.pdf). Безопасность yescrypt обеспечивается свойствами SHA-256 и HMAC.
gost-yescrypt является расширением yescrypt, где криптографические свойства обеспечиваются применением алгоритма вычисления кода аутентификации сообщения HMAC_GOSTR3411_2012_256 поверх результата работы yescrypt, по формуле:
где
- HMAC256 это функция HMAC_GOSTR3411_2012_256 (определена в рекомендациях по стандартизации Р 50.1.113─2016 и RFC 7836);
- sb256, это функция streebog256, т.е. функция Streebog с длиной хэш-кода 256-бит (определена в ГОСТ Р 34.11─2012 и RFC 7091);
- P пароль;
- S соль.
Функция yescrypt() используется как черный ящик и не влияет на криптографические свойства всей конструкции. Таким образом, обеспечивается как расширенная устойчивость к перебору паролей - благодаря yescrypt, так и криптографические свойства всей конструкции ГОСТом.
Формат строки с хэшем: $gy$params$salt$hash
, где params, salt и hash закодированы в base64, а "gy" текстовый идентификатор.