Мне нужно зашифровать локальную связь двух устройств.Мне нужно получить ключ шифрования для безопасной связи между такими устройствами.Чтобы получить ключ шифрования, обе стороны должны:
- Поделиться секретом переменной длины для получения материала ключа.
- Получите ключ, используя PBKDF2_HMAC_SHA1
В настоящее время я использую Stanford Javascript Crypto Library (sjcl), и я могу получить ключ.
const hmacSHA1 = function(key) {
const hasher = new sjcl.misc.hmac(key, sjcl.hash.sha1);
this.encrypt = function() {
return hasher.encrypt.apply(hasher, arguments);
};
};
const derivedKey = sjcl.misc.pbkdf2('password', passwordSalt, 100, 256, hmacSHA1);
const hexKey = sjcl.codec.hex.fromBits(derivedKey);
console.log(derivedKey, hexKey);
});
Я ожидаю, что материал производного ключа состоит из 80 байтов: 32-байтового ключа шифра, 32-байтового ключа HMAC и 16-байтового вектора инициализации (IV).IV XORed со случайным одноразовым номером, который генерируется для каждого сообщения при шифровании.
Как я могу убедиться, что получаю ожидаемые активы с ожидаемой длиной байта?Насколько я знаю, sjcl уже применяет вектор инициализации IV.