Saya mencoba mendapatkan kunci AES-KW di js seperti:

let { publicKey: pub, privateKey: key } = 
  await crypto.subtle.generateKey(
    { name: 'ECDH', namedCurve: 'P-521' },
    true,
    ['deriveKey'],
  )

await crypto.subtle.deriveKey(
  { name: 'ECDH', public: pub },
  key,
  { name: 'AES-KW', length: 256 },
  false,
  ["encrypt", "decrypt"],
)

Dengan kesalahan: Tidak tertangkap (dalam janji) DOMException: Tidak dapat membuat kunci menggunakan penggunaan kunci yang ditentukan.

Saya tidak tahu kenapa, karena AES-GCM bisa berhasil.

1
JinSheng Chen 18 Maret 2020, 08:38

1 menjawab

Jawaban Terbaik

Secara teknis, crypto.subtle.deriveKey dengan name: 'AES-KW' karena derivedKeyAlgorithm menyediakan kunci yang dapat digunakan untuk membungkus kunci lain menurut RFC 3394, lihat juga AES-KW. Untuk ['wrapKey', 'unwrapKey'] ini harus digunakan sebagai keyUsages alih-alih ['encrypt', 'decrypt'], lihat juga contoh (getKey).

Dengan name: 'AES-GCM' sebagai derivedKeyAlgorithm dan ['encrypt', 'decrypt'] sebagai keyUsages, sebuah kunci disediakan yang dapat digunakan untuk enkripsi dan dekripsi dengan AES-GCM.

Contoh untuk AES-KW:

crypto.subtle.generateKey(
    { name: 'ECDH', namedCurve: 'P-521' }, 
    true, 
    ['deriveKey']
    ).then(function(keypair){
        crypto.subtle.deriveKey(
            { name: 'ECDH', public: keypair.publicKey },  // In practice, this is the public key of the recipient
            keypair.privateKey,                           // In practice, this is the own private key
            { name: 'AES-KW', length: 256 },
            true,
            ["wrapKey", "unwrapKey"],
        ).then(function(wrappingKey){
            console.log(wrappingKey);
        })
    })
0
Topaco 18 Maret 2020, 12:41