расширение ключа


Имеется мастер ключ размером 128 бит. Его требуется расширить, например, до 168 бит для использования в 3DES, или до 256 бит для ГОСТ-28147, или до какого еще произвольного размера.
Существует ли стандартная общепринятая процедура для расширения ключа?

http://www.zas-comm.ru


Комментарии
— unknown (28/01/2015 12:13, исправлен 28/01/2015 12:16)   

Key Derivation Function[link1], HMAC-based Extract-and-Expand Key Derivation Function (HKDF)[link2], Key stretching[link3].

— ZAS (28/01/2015 19:05)   
Под KDF обычно имеют в виду другое: вычислительно трудоемкую функцию для преобразования пароля в ключ.
См. например, pkf.cpp из исходников zas communicator.

Можно использовать, например, ANSI 9.31, но хотелось бы более эффективного. Вариантов реализации легко придумать много всяких разных. Пригоден любой CPRNG с 128-битной стойкостью. Вопрос в том, есть ли общепринятый способ.
— gegel (28/01/2015 20:46)   
Под KDF обычно имеют в виду другое: вычислительно трудоемкую функцию для преобразования пароля в ключ.

Я могу ошибаться, но вроде это подразумевают под PKDF.
А KDF обычно как раз и используется для:
– сжатия/расширения ключа;
– получения нескольких ключей из общего секрета.
— unknown (28/01/2015 21:01)   

Да всё правильно. Вообще, если особо жёстких требований нет (например протокол согласования ключа с недоверяемым противником, который используется не просто для шифрования, а для какого-то голосования и пр.), то можно просто и похэшировать.

Ссылки
[link1] https://en.wikipedia.org/wiki/Key_derivation_function

[link2] https://tools.ietf.org/html/rfc5869

[link3] https://en.wikipedia.org/wiki/Key_stretching