Вы правы, вам следует придерживаться рекомендуемого размера для DHKE. Распространенным способом является использование функции вывода ключей на выходе обмена ключами Diff ie -Hellman.
HKDF подходит для вас. HKDF следует парадигме «извлечение-затем-расширение», и, как правило, expand
будет достаточно, если вы найдете и реализацию, которая предоставляет доступ к этим функциям. Ниже приведен текст futoin-hkdf ;
const hkdf = require('futoin-hkdf');
// Parameter overview
//-------------------
// initial keying material
const ikm = 'string-or-buffer';
// required output length in bytes
const length = 32;
// can be empty string or false equivalent
const salt = 'strongly-encouraged';
// optional parameter
const info = 'optional-context';
// HMAC hashing algorithm to use
const hash = 'SHA-256';
// Generic derivation
//-------------------
hkdf(ikm, length, {salt, info, hash}); // Buffer(length) - derived key
IKM - ваш производный ключ, и, пожалуйста, не называйте его паролями. Это больше, чем это. Называйте, например, sharedKey
или exchangedKey
.
Дополнительный контекст может использоваться для разделения домена, так что вы можете получить разные ключи для разных приложений. Посмотрите на детали здесь; Многократное получение ключа AES из мастер-ключа
И, для дальнейшей секретности, не забудьте стереть ключ после использования.
- Почему мы должны обработать результат обмена ключами Диффа ie -Хеллмана?
Безопасность обмена ключами Диффа ie -Хеллмана основана на Deciffal Diff ie -Хеллмана предположение. Это предположение говорит о том, что обмененный ключ является групповым элементом, который в вычислительном отношении неотличим от случайного / равномерно распределенного элемента в группе.
Следует отметить, что результат не является равномерно распределенным элементом, т.е. каждый бит имеет 1 / 2. Вероятность того, что он равен 0 или 1. MSB может быть неравномерно распределен.
Рекомендуемый способ извлечения экстропии - использовать га sh или лучше для обработки с помощью функции получения ключа. HKDF будет хорошо здесь.