расширение ключа
Имеется мастер ключ размером 128 бит. Его требуется расширить, например, до 168 бит для использования в 3DES, или до 256 бит для ГОСТ-28147, или до какого еще произвольного размера.
Существует ли стандартная общепринятая процедура для расширения ключа?
http://www.zas-comm.ru
Key Derivation Function[link1], HMAC-based Extract-and-Expand Key Derivation Function (HKDF)[link2], Key stretching[link3].
Под KDF обычно имеют в виду другое: вычислительно трудоемкую функцию для преобразования пароля в ключ.
См. например, pkf.cpp из исходников zas communicator.
Можно использовать, например, ANSI 9.31, но хотелось бы более эффективного. Вариантов реализации легко придумать много всяких разных. Пригоден любой CPRNG с 128-битной стойкостью. Вопрос в том, есть ли общепринятый способ.
Я могу ошибаться, но вроде это подразумевают под PKDF.
А KDF обычно как раз и используется для:
– сжатия/расширения ключа;
– получения нескольких ключей из общего секрета.
Да всё правильно. Вообще, если особо жёстких требований нет (например протокол согласования ключа с недоверяемым противником, который используется не просто для шифрования, а для какого-то голосования и пр.), то можно просто и похэшировать.