Как указать желаемую длину вывода HKDF с помощью `crypto.subtle.deriveKey`Javascript

Форум по Javascript
Ответить
Anonymous
 Как указать желаемую длину вывода HKDF с помощью `crypto.subtle.deriveKey`

Сообщение Anonymous »

API веб-криптографии определяет две разные утилиты KDF, а именно DerivitBits и DerivateKey. Хотя первый позволяет указать желаемую длину вывода (RFC 5869 называет этот параметр L), второй, похоже, этого не делает.
Мне нужно использовать HKDF с SHA-512 (поскольку этого требует спецификация, которую я реализую), чтобы получить ключ HMAC-SHA256. Другими словами, достаточно 256 выходных битов; но только DereBitBits, похоже, имеет соответствующий параметр:

Код: Выделить всё

const baseKey = await crypto.subtle.importKey('raw', new Uint8Array(32), { name: 'HKDF' }, false, ['deriveKey', 'deriveBits'])
const salt = new Uint8Array(16)
const info = new Uint8Array(8)

// deriveBits → derives 256 bit:
const rawHmacKey1 = await crypto.subtle.deriveBits({ name: 'HKDF', hash: 'SHA-512', salt: salt, info: info }, baseKey, 256);
const hmacKey1 = await crypto.subtle.importKey('raw', rawHmacKey1, { name: 'HMAC', hash: 'SHA-256' }, true, ['sign']);
const exported1 = new Uint8Array(await crypto.subtle.exportKey('raw', hmacKey1));
console.log(btoa(exported1)) // MTgxLDEyLDgsMTExLDI3LDI0OCw4NSw3OCw0MywxMCw5MywyNDIsMTksMTg5LDE5MSwxNzMsMTM2LDEwMCwyMSwyMjcsMzksMTI2LDE3OSwxOTYsNTAsODYsNjEsMjcsMTQzLDIxMiwxOTksMjAz

// deriveKey → derives 512 bit:
const hmacKey2 = await crypto.subtle.deriveKey({ name: 'HKDF', hash: 'SHA-512', salt: salt, info: info }, baseKey, { name: 'HMAC', hash: 'SHA-256' }, true, ['sign']);
const exported2 = new Uint8Array(await crypto.subtle.exportKey('raw', hmacKey2));
console.log(btoa(exported2)) // MTgxLDEyLDgsMTExLDI3LDI0OCw4NSw3OCw0MywxMCw5MywyNDIsMTksMTg5LDE5MSwxNzMsMTM2LDEwMCwyMSwyMjcsMzksMTI2LDE3OSwxOTYsNTAsODYsNjEsMjcsMTQzLDIxMiwxOTksMjAzLDUwLDE4Myw3Miw4OSwyMDQsMTcsMzksMTY5LDE4OCw5Niw3NSw5NSwxMTMsMjQ3LDExNywxOTQsNDYsMTY0LDIyOSwyMTMsNzUsMjE5LDI0NCwyMjYsMjAwLDE2MCw5NCwxNCw3MiwxNjMsMTcwLDEwMg==

Обратите внимание, что при использовании DerivEKey я явно указал { name: 'HMAC', hash: 'SHA-256' в качестве параметра использования ключа. Независимо от того, длина полученного ключа, похоже, зависит исключительно от указанного алгоритма хеширования ( → 64 байта).
Поскольку я предпочитаю использовать DerivateKey, мой вопрос: как мне указать желаемый размер выходного ключа?

Подробнее здесь: https://stackoverflow.com/questions/793 ... -derivekey
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»