SubtleCrypto.exportKey с параметрами формата "spki" или "pkcs" всегда дает одинаковый результат в Chrome.
(async()=>{
const keyPair = await window.crypto.subtle.generateKey({
name: "RSA-OAEP",
modulusLength: 4096,
publicExponent: new Uint8Array([1, 0, 1]),
hash: "SHA-256"
}, true, ["encrypt", "decrypt"]);
const exported = await window.crypto.subtle.exportKey("pkcs8", keyPair.privateKey)
const jwk = await window.crypto.subtle.exportKey("jwk", keyPair.privateKey)
console.log({exported,jwk})
}
)()
Я создал этот простой фрагмент для создания пар ключей RSA. Идея состоит в том, чтобы сначала создатьArrayBuffer
и использовать это для создания файла PEM с преобразованием строки позже. Когда я запускаю фрагмент несколько раз, экспортированные открытые / закрытые ключи всегда одинаковы, если я используюspki
или pkcs8
форматы (которые приводят к ArrayBuffers) .
Когда я запускаю этот фрагмент на Chrome, результат для exported
всегда [[Int8Array]]: Int8Array(2374) [48, -126, 9, 66, 2, 1, 0, 48,...]
Как ни странно, я не столкнулся с той же проблемой при экспорте с использованием jwk
формат, поскольку он генерирует разные выходные данные при каждом генерации ключа (как и ожидалось).
Чтобы воспроизвести проблему, вы можете просто запустить это на своей консоли Chrome или создать фрагмент Chrome.
Дополнительная информация о создании и экспорте ключей: https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/exportKey
У меня еще не было возможности попробовать другой браузер, но мне интересно, является ли это ошибкой в chrome/webkit?
Любые идеи приветствуются!