Web Crypto API
[履歴]
バージョン | 変更点 |
---|---|
v23.5.0 | アルゴリズムEd25519 とX25519 が安定版になりました。 |
v19.0.0 | Ed25519 、Ed448 、X25519 、X448 アルゴリズムを除き、実験的なものではなくなりました。 |
v20.0.0, v18.17.0 | 引数は、他の Web Crypto API 実装と同様に、WebIDL 定義に従って強制的に変換および検証されるようになりました。 |
v18.4.0, v16.17.0 | プライベートな'node.keyObject' インポート/エクスポート形式を削除しました。 |
v18.4.0, v16.17.0 | プライベートな'NODE-DSA' 、'NODE-DH' 、'NODE-SCRYPT' アルゴリズムを削除しました。 |
v18.4.0, v16.17.0 | 'Ed25519' 、'Ed448' 、'X25519' 、'X448' アルゴリズムを追加しました。 |
v18.4.0, v16.17.0 | プライベートな'NODE-ED25519' と'NODE-ED448' アルゴリズムを削除しました。 |
v18.4.0, v16.17.0 | 'ECDH' アルゴリズムからプライベートな'NODE-X25519' と'NODE-X448' 名前付き曲線を削除しました。 |
Node.js は標準のWeb Crypto APIの実装を提供します。
このモジュールにアクセスするには、globalThis.crypto
またはrequire('node:crypto').webcrypto
を使用します。
const { subtle } = globalThis.crypto
;(async function () {
const key = await subtle.generateKey(
{
name: 'HMAC',
hash: 'SHA-256',
length: 256,
},
true,
['sign', 'verify']
)
const enc = new TextEncoder()
const message = enc.encode('I love cupcakes')
const digest = await subtle.sign(
{
name: 'HMAC',
},
key,
message
)
})()
例
キーの生成
<SubtleCrypto>
クラスを使用して、対称キー(秘密キー)または非対称キーペア(公開キーと秘密キー)を生成できます。
AES キー
const { subtle } = globalThis.crypto
async function generateAesKey(length = 256) {
const key = await subtle.generateKey(
{
name: 'AES-CBC',
length,
},
true,
['encrypt', 'decrypt']
)
return key
}
ECDSA キーペア
const { subtle } = globalThis.crypto
async function generateEcKey(namedCurve = 'P-521') {
const { publicKey, privateKey } = await subtle.generateKey(
{
name: 'ECDSA',
namedCurve,
},
true,
['sign', 'verify']
)
return { publicKey, privateKey }
}
Ed25519/X25519 キーペア
const { subtle } = globalThis.crypto
async function generateEd25519Key() {
return subtle.generateKey(
{
name: 'Ed25519',
},
true,
['sign', 'verify']
)
}
async function generateX25519Key() {
return subtle.generateKey(
{
name: 'X25519',
},
true,
['deriveKey']
)
}
HMAC キー
const { subtle } = globalThis.crypto
async function generateHmacKey(hash = 'SHA-256') {
const key = await subtle.generateKey(
{
name: 'HMAC',
hash,
},
true,
['sign', 'verify']
)
return key
}
RSA キーペア
const { subtle } = globalThis.crypto
const publicExponent = new Uint8Array([1, 0, 1])
async function generateRsaKey(modulusLength = 2048, hash = 'SHA-256') {
const { publicKey, privateKey } = await subtle.generateKey(
{
name: 'RSASSA-PKCS1-v1_5',
modulusLength,
publicExponent,
hash,
},
true,
['sign', 'verify']
)
return { publicKey, privateKey }
}
暗号化と復号化
const crypto = globalThis.crypto
async function aesEncrypt(plaintext) {
const ec = new TextEncoder()
const key = await generateAesKey()
const iv = crypto.getRandomValues(new Uint8Array(16))
const ciphertext = await crypto.subtle.encrypt(
{
name: 'AES-CBC',
iv,
},
key,
ec.encode(plaintext)
)
return {
key,
iv,
ciphertext,
}
}
async function aesDecrypt(ciphertext, key, iv) {
const dec = new TextDecoder()
const plaintext = await crypto.subtle.decrypt(
{
name: 'AES-CBC',
iv,
},
key,
ciphertext
)
return dec.decode(plaintext)
}
キーのエクスポートとインポート
const { subtle } = globalThis.crypto
async function generateAndExportHmacKey(format = 'jwk', hash = 'SHA-512') {
const key = await subtle.generateKey(
{
name: 'HMAC',
hash,
},
true,
['sign', 'verify']
)
return subtle.exportKey(format, key)
}
async function importHmacKey(keyData, format = 'jwk', hash = 'SHA-512') {
const key = await subtle.importKey(
format,
keyData,
{
name: 'HMAC',
hash,
},
true,
['sign', 'verify']
)
return key
}
キーのラップとアンラップ
const { subtle } = globalThis.crypto
async function generateAndWrapHmacKey(format = 'jwk', hash = 'SHA-512') {
const [key, wrappingKey] = await Promise.all([
subtle.generateKey(
{
name: 'HMAC',
hash,
},
true,
['sign', 'verify']
),
subtle.generateKey(
{
name: 'AES-KW',
length: 256,
},
true,
['wrapKey', 'unwrapKey']
),
])
const wrappedKey = await subtle.wrapKey(format, key, wrappingKey, 'AES-KW')
return { wrappedKey, wrappingKey }
}
async function unwrapHmacKey(wrappedKey, wrappingKey, format = 'jwk', hash = 'SHA-512') {
const key = await subtle.unwrapKey(format, wrappedKey, wrappingKey, 'AES-KW', { name: 'HMAC', hash }, true, [
'sign',
'verify',
])
return key
}
署名と検証
const { subtle } = globalThis.crypto
async function sign(key, data) {
const ec = new TextEncoder()
const signature = await subtle.sign('RSASSA-PKCS1-v1_5', key, ec.encode(data))
return signature
}
async function verify(key, signature, data) {
const ec = new TextEncoder()
const verified = await subtle.verify('RSASSA-PKCS1-v1_5', key, signature, ec.encode(data))
return verified
}
ビットとキーの導出
const { subtle } = globalThis.crypto
async function pbkdf2(pass, salt, iterations = 1000, length = 256) {
const ec = new TextEncoder()
const key = await subtle.importKey('raw', ec.encode(pass), 'PBKDF2', false, ['deriveBits'])
const bits = await subtle.deriveBits(
{
name: 'PBKDF2',
hash: 'SHA-512',
salt: ec.encode(salt),
iterations,
},
key,
length
)
return bits
}
async function pbkdf2Key(pass, salt, iterations = 1000, length = 256) {
const ec = new TextEncoder()
const keyMaterial = await subtle.importKey('raw', ec.encode(pass), 'PBKDF2', false, ['deriveKey'])
const key = await subtle.deriveKey(
{
name: 'PBKDF2',
hash: 'SHA-512',
salt: ec.encode(salt),
iterations,
},
keyMaterial,
{
name: 'AES-GCM',
length,
},
true,
['encrypt', 'decrypt']
)
return key
}
ダイジェスト
const { subtle } = globalThis.crypto
async function digest(data, algorithm = 'SHA-512') {
const ec = new TextEncoder()
const digest = await subtle.digest(algorithm, ec.encode(data))
return digest
}
アルゴリズムマトリックス
この表は、Node.js Web Crypto API の実装でサポートされているアルゴリズムと、各アルゴリズムでサポートされている API の詳細を示しています。
アルゴリズム | generateKey | exportKey | importKey | encrypt | decrypt | wrapKey | unwrapKey | deriveBits | deriveKey | sign | verify | digest |
---|---|---|---|---|---|---|---|---|---|---|---|---|
'RSASSA-PKCS1-v1_5' | ✔ | ✔ | ✔ | ✔ | ✔ | |||||||
'RSA-PSS' | ✔ | ✔ | ✔ | ✔ | ✔ | |||||||
'RSA-OAEP' | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | |||||
'ECDSA' | ✔ | ✔ | ✔ | ✔ | ✔ | |||||||
'Ed25519' | ✔ | ✔ | ✔ | ✔ | ✔ | |||||||
'Ed448' | ✔ | ✔ | ✔ | ✔ | ✔ | |||||||
'ECDH' | ✔ | ✔ | ✔ | ✔ | ✔ | |||||||
'X25519' | ✔ | ✔ | ✔ | ✔ | ✔ | |||||||
'X448' | ✔ | ✔ | ✔ | ✔ | ✔ | |||||||
'AES-CTR' | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | |||||
'AES-CBC' | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | |||||
'AES-GCM' | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | |||||
'AES-KW' | ✔ | ✔ | ✔ | ✔ | ✔ | |||||||
'HMAC' | ✔ | ✔ | ✔ | ✔ | ✔ | |||||||
'HKDF' | ✔ | ✔ | ✔ | ✔ | ||||||||
'PBKDF2' | ✔ | ✔ | ✔ | ✔ | ||||||||
'SHA-1' | ✔ | |||||||||||
'SHA-256' | ✔ | |||||||||||
'SHA-384' | ✔ | |||||||||||
'SHA-512' | ✔ |
クラス: Crypto
追加されたバージョン: v15.0.0
globalThis.crypto
は Crypto
クラスのインスタンスです。Crypto
は、crypto API の残りの部分へのアクセスを提供するシングルトンです。
crypto.subtle
追加されたバージョン: v15.0.0
SubtleCrypto
API へのアクセスを提供します。
crypto.getRandomValues(typedArray)
追加されたバージョン: v15.0.0
typedArray
<Buffer> | <TypedArray>- 戻り値: <Buffer> | <TypedArray>
暗号的に安全な乱数値を生成します。与えられた typedArray
は乱数値で埋められ、typedArray
への参照が返されます。
与えられた typedArray
は、<TypedArray> の整数ベースのインスタンスである必要があります。つまり、Float32Array
と Float64Array
は受け入れられません。
与えられた typedArray
が 65,536 バイトより大きい場合、エラーがスローされます。
crypto.randomUUID()
追加日: v16.7.0
- 戻り値: <string>
RFC 4122 バージョン 4 UUIDを生成します。UUID は、暗号化擬似乱数ジェネレータを使用して生成されます。
クラス: CryptoKey
追加日: v15.0.0
cryptoKey.algorithm
追加日: v15.0.0
キーが使用できるアルゴリズムの詳細と、アルゴリズム固有の追加パラメータを記述したオブジェクト。
読み取り専用。
cryptoKey.extractable
追加日: v15.0.0
- 型: <boolean>
true
の場合、<CryptoKey>はsubtleCrypto.exportKey()
またはsubtleCrypto.wrapKey()
を使用して抽出できます。
読み取り専用。
cryptoKey.type
追加日: v15.0.0
- 型: <string>
'secret'
,'private'
, または'public'
のいずれか。
キーが対称キー('secret'
)か非対称キー('private'
または'public'
)かを識別する文字列。
cryptoKey.usages
追加日: v15.0.0
- 型: <string[]>
キーを使用できる操作を識別する文字列の配列。
可能な用途は次のとおりです。
'encrypt'
- データの暗号化に使用できます。'decrypt'
- データの復号に使用できます。'sign'
- デジタル署名の生成に使用できます。'verify'
- デジタル署名の検証に使用できます。'deriveKey'
- 新しいキーの導出に使用できます。'deriveBits'
- ビットの導出に使用できます。'wrapKey'
- 別のキーのラップに使用できます。'unwrapKey'
- 別のキーのアンラップに使用できます。
有効なキーの用途は、キーアルゴリズム(cryptokey.algorithm.name
で識別)によって異なります。
キータイプ | 'encrypt' | 'decrypt' | 'sign' | 'verify' | 'deriveKey' | 'deriveBits' | 'wrapKey' | 'unwrapKey' |
---|---|---|---|---|---|---|---|---|
'AES-CBC' | ✔ | ✔ | ✔ | ✔ | ||||
'AES-CTR' | ✔ | ✔ | ✔ | ✔ | ||||
'AES-GCM' | ✔ | ✔ | ✔ | ✔ | ||||
'AES-KW' | ✔ | ✔ | ||||||
'ECDH' | ✔ | ✔ | ||||||
'X25519' | ✔ | ✔ | ||||||
'X448' | ✔ | ✔ | ||||||
'ECDSA' | ✔ | ✔ | ||||||
'Ed25519' | ✔ | ✔ | ||||||
'Ed448' | ✔ | ✔ | ||||||
'HDKF' | ✔ | ✔ | ||||||
'HMAC' | ✔ | ✔ | ||||||
'PBKDF2' | ✔ | ✔ | ||||||
'RSA-OAEP' | ✔ | ✔ | ✔ | ✔ | ||||
'RSA-PSS' | ✔ | ✔ | ||||||
'RSASSA-PKCS1-v1_5' | ✔ | ✔ |
Class: CryptoKeyPair
追加日時: v15.0.0
CryptoKeyPair
は、非対称キーペアを表す、publicKey
プロパティとprivateKey
プロパティを持つシンプルなディクショナリオブジェクトです。
cryptoKeyPair.privateKey
追加日時: v15.0.0
- 型: <CryptoKey>
type
が'private'
である <CryptoKey>
cryptoKeyPair.publicKey
追加日時: v15.0.0
- 型: <CryptoKey>
type
が'public'
である <CryptoKey>
Class: SubtleCrypto
追加日時: v15.0.0
subtle.decrypt(algorithm, key, data)
追加日時: v15.0.0
algorithm
: <RsaOaepParams> | <AesCtrParams> | <AesCbcParams> | <AesGcmParams>key
: <CryptoKey>data
: <ArrayBuffer> | <TypedArray> | <DataView> | <Buffer>- 戻り値: <Promise> <ArrayBuffer>を解決します。
algorithm
で指定されたメソッドとパラメータ、およびkey
で提供されたキーイングマテリアルを使用して、subtle.decrypt()
は提供されたdata
の解読を試みます。成功すると、返された Promise はプレーンテキストの結果を含む <ArrayBuffer>で解決されます。
現在サポートされているアルゴリズムは次のとおりです。
'RSA-OAEP'
'AES-CTR'
'AES-CBC'
'AES-GCM'
subtle.deriveBits(algorithm, baseKey[, length])
[履歴]
バージョン | 変更点 |
---|---|
v22.5.0, v20.17.0 | 'ECDH' , 'X25519' , および 'X448' の length パラメータはオプションになりました。 |
v18.4.0, v16.17.0 | 'X25519' および 'X448' アルゴリズムを追加しました。 |
v15.0.0 | 追加:v15.0.0 |
algorithm
: <AlgorithmIdentifier> | <EcdhKeyDeriveParams> | <HkdfParams> | <Pbkdf2Params>baseKey
: <CryptoKey>length
: <number> | <null> デフォルト:null
- 戻り値: <Promise> <ArrayBuffer> を解決します。
algorithm
で指定されたメソッドとパラメータ、および baseKey
で提供されたキーイングマテリアルを使用して、subtle.deriveBits()
は length
ビットの生成を試みます。
length
が指定されていない場合、または null
の場合、特定のアルゴリズムの最大ビット数が生成されます。これは 'ECDH'
, 'X25519'
, および 'X448'
アルゴリズムで許可されます。他のアルゴリズムでは、length
を数値にする必要があります。
成功すると、返された Promise は生成されたデータを含む <ArrayBuffer> で解決されます。
現在サポートされているアルゴリズムには以下が含まれます。
'ECDH'
'X25519'
'X448'
'HKDF'
'PBKDF2'
subtle.deriveKey(algorithm, baseKey, derivedKeyAlgorithm, extractable, keyUsages)
[履歴]
バージョン | 変更点 |
---|---|
v18.4.0, v16.17.0 | 'X25519' および 'X448' アルゴリズムを追加しました。 |
v15.0.0 | 追加:v15.0.0 |
algorithm
: <AlgorithmIdentifier> | <EcdhKeyDeriveParams> | <HkdfParams> | <Pbkdf2Params>baseKey
: <CryptoKey>derivedKeyAlgorithm
: <HmacKeyGenParams> | <AesKeyGenParams>extractable
: <boolean>keyUsages
: <string[]> キーの使用法 を参照してください。- 戻り値: <Promise> <CryptoKey> を解決します。
algorithm
で指定されたメソッドとパラメータ、および baseKey
で提供されたキーイングマテリアルを使用して、subtle.deriveKey()
は derivedKeyAlgorithm
のメソッドとパラメータに基づいて新しい <CryptoKey> の生成を試みます。
subtle.deriveKey()
を呼び出すことは、subtle.deriveBits()
を呼び出して生のキーイングマテリアルを生成し、その結果を deriveKeyAlgorithm
、extractable
、および keyUsages
パラメータを入力として使用して subtle.importKey()
メソッドに渡すことと同等です。
現在サポートされているアルゴリズムには以下が含まれます。
'ECDH'
'X25519'
'X448'
'HKDF'
'PBKDF2'
subtle.digest(algorithm, data)
追加日時: v15.0.0
algorithm
: <string> | <Object>data
: <ArrayBuffer> | <TypedArray> | <DataView> | <Buffer>- 戻り値: <Promise> <ArrayBuffer>を解決します
algorithm
で指定されたメソッドを使用して、subtle.digest()
はdata
のダイジェストの生成を試みます。成功すると、計算されたダイジェストを含む<ArrayBuffer>で返された Promise が解決されます。
algorithm
が<string>として提供される場合、次のいずれかでなければなりません。
'SHA-1'
'SHA-256'
'SHA-384'
'SHA-512'
algorithm
が<Object>として提供される場合、name
プロパティを持ち、その値が上記のいずれかでなければなりません。
subtle.encrypt(algorithm, key, data)
追加日時: v15.0.0
algorithm
: <RsaOaepParams> | <AesCtrParams> | <AesCbcParams> | <AesGcmParams>key
: <CryptoKey>data
: <ArrayBuffer> | <TypedArray> | <DataView> | <Buffer>- 戻り値: <Promise> <ArrayBuffer>を解決します
algorithm
で指定されたメソッドとパラメータ、およびkey
で提供された鍵素材を使用して、subtle.encrypt()
はdata
の暗号化を試みます。成功すると、暗号化された結果を含む<ArrayBuffer>で返された Promise が解決されます。
現在サポートされているアルゴリズムには以下が含まれます。
'RSA-OAEP'
'AES-CTR'
'AES-CBC'
'AES-GCM'
subtle.exportKey(format, key)
[履歴]
バージョン | 変更内容 |
---|---|
v18.4.0, v16.17.0 | 'Ed25519' , 'Ed448' , 'X25519' , 'X448' アルゴリズムを追加 |
v15.9.0 | 'NODE-DSA' JWK エクスポートを削除 |
v15.0.0 | 追加: v15.0.0 |
format
: <string>'raw'
,'pkcs8'
,'spki'
,'jwk'
のいずれかである必要があります。key
: <CryptoKey>- 戻り値: <Promise> <ArrayBuffer> | <Object> を解決します。
サポートされている場合、指定された形式で指定されたキーをエクスポートします。
<CryptoKey> が抽出不可能な場合、返された Promise は拒否されます。
format
が 'pkcs8'
または 'spki'
でエクスポートが成功した場合、返された Promise は、エクスポートされたキーデータを含む <ArrayBuffer> で解決されます。
format
が 'jwk'
でエクスポートが成功した場合、返された Promise は、JSON Web Key仕様に準拠した JavaScript オブジェクトで解決されます。
キーの種類 | 'spki' | 'pkcs8' | 'jwk' | 'raw' |
---|---|---|---|---|
'AES-CBC' | ✔ | ✔ | ||
'AES-CTR' | ✔ | ✔ | ||
'AES-GCM' | ✔ | ✔ | ||
'AES-KW' | ✔ | ✔ | ||
'ECDH' | ✔ | ✔ | ✔ | ✔ |
'ECDSA' | ✔ | ✔ | ✔ | ✔ |
'Ed25519' | ✔ | ✔ | ✔ | ✔ |
'Ed448' | ✔ | ✔ | ✔ | ✔ |
'HDKF' | ||||
'HMAC' | ✔ | ✔ | ||
'PBKDF2' | ||||
'RSA-OAEP' | ✔ | ✔ | ✔ | |
'RSA-PSS' | ✔ | ✔ | ✔ | |
'RSASSA-PKCS1-v1_5' | ✔ | ✔ | ✔ |
subtle.generateKey(algorithm, extractable, keyUsages)
追加: v15.0.0
algorithm
: <AlgorithmIdentifier> | <RsaHashedKeyGenParams> | <EcKeyGenParams> | <HmacKeyGenParams> | <AesKeyGenParams>extractable
: <boolean>keyUsages
: <string[]> キーの使用法 を参照してください。戻り値: <Promise> <CryptoKey> | <CryptoKeyPair> を解決します。
algorithm
で提供されたメソッドとパラメーターを使用して、subtle.generateKey()
は新しいキーイングマテリアルの生成を試みます。使用されるメソッドに応じて、メソッドは単一の <CryptoKey> または <CryptoKeyPair> を生成する場合があります。
サポートされている <CryptoKeyPair>(公開キーと秘密キー)生成アルゴリズムには以下が含まれます。
'RSASSA-PKCS1-v1_5'
'RSA-PSS'
'RSA-OAEP'
'ECDSA'
'Ed25519'
'Ed448'
'ECDH'
'X25519'
'X448'
サポートされている <CryptoKey>(秘密キー)生成アルゴリズムには以下が含まれます。
'HMAC'
'AES-CTR'
'AES-CBC'
'AES-GCM'
'AES-KW'
subtle.importKey(format, keyData, algorithm, extractable, keyUsages)
[履歴]
バージョン | 変更 |
---|---|
v18.4.0, v16.17.0 | 'Ed25519' , 'Ed448' , 'X25519' , および 'X448' アルゴリズムを追加 |
v15.9.0 | 'NODE-DSA' JWK インポートを削除 |
v15.0.0 | 追加: v15.0.0 |
format
: <string>'raw'
,'pkcs8'
,'spki'
, または'jwk'
のいずれかでなければなりません。keyData
: <ArrayBuffer> | <TypedArray> | <DataView> | <Buffer> | <Object>algorithm
: <AlgorithmIdentifier> | <RsaHashedImportParams> | <EcKeyImportParams> | <HmacImportParams>extractable
: <boolean>keyUsages
: <string[]> キーの使用 を参照してください。戻り値: <Promise> <CryptoKey> を解決して完了します。
subtle.importKey()
メソッドは、指定された keyData
を指定された format
として解釈して、指定された algorithm
、extractable
、および keyUsages
引数を使用して <CryptoKey> インスタンスを作成しようとします。インポートが成功すると、返された Promise は作成された <CryptoKey> で解決されます。
'PBKDF2'
キーをインポートする場合、extractable
は false
でなければなりません。
現在サポートされているアルゴリズムは次のとおりです。
キーの種類 | 'spki' | 'pkcs8' | 'jwk' | 'raw' |
---|---|---|---|---|
'AES-CBC' | ✔ | ✔ | ||
'AES-CTR' | ✔ | ✔ | ||
'AES-GCM' | ✔ | ✔ | ||
'AES-KW' | ✔ | ✔ | ||
'ECDH' | ✔ | ✔ | ✔ | ✔ |
'X25519' | ✔ | ✔ | ✔ | ✔ |
'X448' | ✔ | ✔ | ✔ | ✔ |
'ECDSA' | ✔ | ✔ | ✔ | ✔ |
'Ed25519' | ✔ | ✔ | ✔ | ✔ |
'Ed448' | ✔ | ✔ | ✔ | ✔ |
'HDKF' | ✔ | |||
'HMAC' | ✔ | ✔ | ||
'PBKDF2' | ✔ | |||
'RSA-OAEP' | ✔ | ✔ | ✔ | |
'RSA-PSS' | ✔ | ✔ | ✔ | |
'RSASSA-PKCS1-v1_5' | ✔ | ✔ | ✔ |
subtle.sign(algorithm, key, data)
[履歴]
バージョン | 変更点 |
---|---|
v18.4.0, v16.17.0 | 'Ed25519' と'Ed448' アルゴリズムを追加 |
v15.0.0 | 追加: v15.0.0 |
algorithm
: <AlgorithmIdentifier> | <RsaPssParams> | <EcdsaParams> | <Ed448Params>key
: <CryptoKey>data
: <ArrayBuffer> | <TypedArray> | <DataView> | <Buffer>- 戻り値: <Promise> <ArrayBuffer> を解決します。
algorithm
で指定されたメソッドとパラメータ、key
で指定されたキーイングマテリアルを使用して、subtle.sign()
はdata
の暗号署名を生成しようとします。成功すると、生成された署名を含む <ArrayBuffer> で解決された Promise が返されます。
現在サポートされているアルゴリズムは次のとおりです。
'RSASSA-PKCS1-v1_5'
'RSA-PSS'
'ECDSA'
'Ed25519'
'Ed448'
'HMAC'
subtle.unwrapKey(format, wrappedKey, unwrappingKey, unwrapAlgo, unwrappedKeyAlgo, extractable, keyUsages)
追加: v15.0.0
format
: <string>'raw'
,'pkcs8'
,'spki'
, または'jwk'
のいずれかでなければなりません。wrappedKey
: <ArrayBuffer> | <TypedArray> | <DataView> | <Buffer>unwrappingKey
: <CryptoKey>unwrapAlgo
: <AlgorithmIdentifier> | <RsaOaepParams> | <AesCtrParams> | <AesCbcParams> | <AesGcmParams>unwrappedKeyAlgo
: <AlgorithmIdentifier> | <RsaHashedImportParams> | <EcKeyImportParams> | <HmacImportParams>extractable
: <boolean>keyUsages
: <string[]> キーの使用 を参照してください。戻り値: <Promise> <CryptoKey> を解決します。
暗号において、「キーをラップする」とは、キーイングマテリアルをエクスポートして暗号化することを指します。subtle.unwrapKey()
メソッドは、ラップされたキーを復号化し、 <CryptoKey> インスタンスを作成しようとします。これは、まず暗号化されたキーデータに対してsubtle.decrypt()
を呼び出し(wrappedKey
、unwrapAlgo
、unwrappingKey
引数を用いて)、次にその結果をunwrappedKeyAlgo
、extractable
、keyUsages
引数を用いてsubtle.importKey()
メソッドに渡すことと同等です。成功すると、 <CryptoKey> オブジェクトを解決した Promise が返されます。
現在サポートされているラップアルゴリズムは次のとおりです。
'RSA-OAEP'
'AES-CTR'
'AES-CBC'
'AES-GCM'
'AES-KW'
サポートされているラップ解除キーアルゴリズムは次のとおりです。
'RSASSA-PKCS1-v1_5'
'RSA-PSS'
'RSA-OAEP'
'ECDSA'
'Ed25519'
'Ed448'
'ECDH'
'X25519'
'X448'
'HMAC'
'AES-CTR'
'AES-CBC'
'AES-GCM'
'AES-KW'
subtle.verify(algorithm, key, signature, data)
[履歴]
バージョン | 変更 |
---|---|
v18.4.0, v16.17.0 | 'Ed25519' と'Ed448' アルゴリズムを追加 |
v15.0.0 | 追加: v15.0.0 |
algorithm
: <AlgorithmIdentifier> | <RsaPssParams> | <EcdsaParams> | <Ed448Params>key
: <CryptoKey>signature
: <ArrayBuffer> | <TypedArray> | <DataView> | <Buffer>data
: <ArrayBuffer> | <TypedArray> | <DataView> | <Buffer>- 戻り値: <Promise> <boolean>を解決します
algorithm
で指定されたメソッドとパラメータ、key
で提供されたキーイングマテリアルを使用して、subtle.verify()
はsignature
がdata
の有効な暗号署名であるかどうかを確認しようとします。返された Promise はtrue
またはfalse
で解決されます。
現在サポートされているアルゴリズムは以下のとおりです。
'RSASSA-PKCS1-v1_5'
'RSA-PSS'
'ECDSA'
'Ed25519'
'Ed448'
'HMAC'
subtle.wrapKey(format, key, wrappingKey, wrapAlgo)
追加: v15.0.0
format
: <string>'raw'
,'pkcs8'
,'spki'
, または'jwk'
のいずれかでなければなりません。key
: <CryptoKey>wrappingKey
: <CryptoKey>wrapAlgo
: <AlgorithmIdentifier> | <RsaOaepParams> | <AesCtrParams> | <AesCbcParams> | <AesGcmParams>- 戻り値: <Promise> <ArrayBuffer>を解決します
暗号において、「キーをラップする」とは、キーイングマテリアルをエクスポートしてから暗号化することを指します。subtle.wrapKey()
メソッドは、format
で識別された形式にキーイングマテリアルをエクスポートし、次にwrapAlgo
で指定されたメソッドとパラメータ、およびwrappingKey
で提供されたキーイングマテリアルを使用して暗号化します。これは、format
とkey
を引数としてsubtle.exportKey()
を呼び出し、その結果をwrappingKey
とwrapAlgo
を入力としてsubtle.encrypt()
メソッドに渡すことと同等です。成功すると、返された Promise は暗号化されたキーデータを含む <ArrayBuffer>で解決されます。
現在サポートされているラップアルゴリズムは以下のとおりです。
'RSA-OAEP'
'AES-CTR'
'AES-CBC'
'AES-GCM'
'AES-KW'
アルゴリズムパラメータ
アルゴリズムパラメータオブジェクトは、様々な<SubtleCrypto>
メソッドで使用されるメソッドとパラメータを定義します。「クラス」として記述されていますが、単純な JavaScript 辞書オブジェクトです。
クラス: AlgorithmIdentifier
追加されたバージョン: v18.4.0, v16.17.0
algorithmIdentifier.name
追加されたバージョン: v18.4.0, v16.17.0
- 型: <string>
クラス: AesCbcParams
追加されたバージョン: v15.0.0
aesCbcParams.iv
追加されたバージョン: v15.0.0
- 型: <ArrayBuffer> | <TypedArray> | <DataView> | <Buffer>
初期化ベクトルを提供します。長さは正確に 16 バイトでなければならず、予測不可能で暗号学的にランダムである必要があります。
aesCbcParams.name
追加されたバージョン: v15.0.0
- 型: <string>
'AES-CBC'
でなければなりません。
クラス: AesCtrParams
追加されたバージョン: v15.0.0
aesCtrParams.counter
追加されたバージョン: v15.0.0
- 型: <ArrayBuffer> | <TypedArray> | <DataView> | <Buffer>
カウンタバロックの初期値。これは正確に 16 バイトの長さである必要があります。
AES-CTR
メソッドは、ブロックの最右端のlength
ビットをカウンタとして、残りのビットをノンスとして使用します。
aesCtrParams.length
追加されたバージョン: v15.0.0
- 型: <number> カウンタとして使用される
aesCtrParams.counter
内のビット数。
aesCtrParams.name
追加日時: v15.0.0
- 型: <string>
'AES-CTR'
でなければなりません。
クラス: AesGcmParams
追加日時: v15.0.0
aesGcmParams.additionalData
追加日時: v15.0.0
- 型: <ArrayBuffer> | <TypedArray> | <DataView> | <Buffer> | <undefined>
AES-GCM 方式では、additionalData
は暗号化されないが、データの認証に含まれる追加入力です。additionalData
の使用はオプションです。
aesGcmParams.iv
追加日時: v15.0.0
- 型: <ArrayBuffer> | <TypedArray> | <DataView> | <Buffer>
初期化ベクトルは、特定のキーを使用するすべての暗号化操作に対して一意である必要があります。
理想的には、同じキーを使用するすべての呼び出しで一意であることが保証されるように計算された、決定論的な 12 バイトの値です。あるいは、初期化ベクトルは少なくとも 12 バイトの暗号的にランダムなバイトで構成されていても構いません。AES-GCM の初期化ベクトルの構築の詳細については、NIST SP 800-38Dのセクション 8 を参照してください。
aesGcmParams.name
追加日時: v15.0.0
- 型: <string>
'AES-GCM'
でなければなりません。
aesGcmParams.tagLength
追加されたバージョン: v15.0.0
- 型: <number> 生成された認証タグのビット数。この値は
32
、64
、96
、104
、112
、120
、または128
のいずれかでなければなりません。デフォルト:128
。
クラス: AesKeyGenParams
追加されたバージョン: v15.0.0
aesKeyGenParams.length
追加されたバージョン: v15.0.0
- 型: <number>
生成される AES キーの長さ。これは 128
、192
、または 256
のいずれかでなければなりません。
aesKeyGenParams.name
追加されたバージョン: v15.0.0
- 型: <string>
'AES-CBC'
、'AES-CTR'
、'AES-GCM'
、または'AES-KW'
のいずれかでなければなりません。
クラス: EcdhKeyDeriveParams
追加されたバージョン: v15.0.0
ecdhKeyDeriveParams.name
追加されたバージョン: v15.0.0
- 型: <string>
'ECDH'
、'X25519'
、または'X448'
でなければなりません。
ecdhKeyDeriveParams.public
追加されたバージョン: v15.0.0
- 型: <CryptoKey>
ECDH キー導出は、一方の秘密鍵ともう一方の公開鍵を入力として使用し、両方を使用して共通の共有秘密を生成することによって動作します。ecdhKeyDeriveParams.public
プロパティは、もう一方の当事者の公開鍵に設定されます。
クラス: EcdsaParams
追加されたバージョン: v15.0.0
ecdsaParams.hash
追加されたバージョン: v15.0.0
<string>として表される場合、値は以下のいずれかでなければなりません。
'SHA-1'
'SHA-256'
'SHA-384'
'SHA-512'
<Object>として表される場合、そのオブジェクトは、上記のいずれかの値を値とする name
プロパティを持たなければなりません。
ecdsaParams.name
追加日時: v15.0.0
- 型: <string>
'ECDSA'
でなければなりません。
クラス: EcKeyGenParams
追加日時: v15.0.0
ecKeyGenParams.name
追加日時: v15.0.0
- 型: <string>
'ECDSA'
または'ECDH'
のいずれかでなければなりません。
ecKeyGenParams.namedCurve
追加日時: v15.0.0
- 型: <string>
'P-256'
,'P-384'
,'P-521'
のいずれかでなければなりません。
クラス: EcKeyImportParams
追加日時: v15.0.0
ecKeyImportParams.name
追加日時: v15.0.0
- 型: <string>
'ECDSA'
または'ECDH'
のいずれかでなければなりません。
ecKeyImportParams.namedCurve
追加日時: v15.0.0
- 型: <string>
'P-256'
,'P-384'
,'P-521'
のいずれかでなければなりません。
クラス: Ed448Params
追加日時: v15.0.0
ed448Params.name
追加日時: v18.4.0, v16.17.0
- 型: <string>
'Ed448'
でなければなりません。
ed448Params.context
追加日時: v18.4.0, v16.17.0
- 型: <ArrayBuffer> | <TypedArray> | <DataView> | <Buffer> | <undefined>
context
メンバーは、メッセージに関連付けるオプションのコンテキストデータを表します。Node.js Web Crypto API の実装では、長さ 0 のコンテキストのみサポートされており、これはコンテキストをまったく提供しないことと同等です。
Class: HkdfParams
追加日時: v15.0.0
hkdfParams.hash
追加日時: v15.0.0
<string>で表される場合、値は以下のいずれかでなければなりません。
'SHA-1'
'SHA-256'
'SHA-384'
'SHA-512'
<Object>で表される場合、オブジェクトはname
プロパティを持っていなければならず、その値は上記リストのいずれかでなければなりません。
hkdfParams.info
追加日時: v15.0.0
- 型: <ArrayBuffer> | <TypedArray> | <DataView> | <Buffer>
HKDF アルゴリズムにアプリケーション固有のコンテキスト入力を提供します。これはゼロ長でもかまいませんが、提供する必要があります。
hkdfParams.name
追加日時: v15.0.0
- 型: <string>
'HKDF'
でなければなりません。
hkdfParams.salt
追加日時: v15.0.0
- 型: <ArrayBuffer> | <TypedArray> | <DataView> | <Buffer>
salt 値は、HKDF アルゴリズムの強度を大幅に向上させます。ランダムまたは擬似ランダムである必要があり、ダイジェスト関数の出力と同じ長さである必要があります(たとえば、ダイジェストに'SHA-256'
を使用する場合、salt は 256 ビットのランダムデータである必要があります)。
クラス: HmacImportParams
追加されたバージョン: v15.0.0
hmacImportParams.hash
追加されたバージョン: v15.0.0
<string>として表現される場合、値は以下のいずれかでなければなりません。
'SHA-1'
'SHA-256'
'SHA-384'
'SHA-512'
<Object>として表現される場合、オブジェクトはname
プロパティを持っていなければならず、その値は上記リストのいずれかでなければなりません。
hmacImportParams.length
追加されたバージョン: v15.0.0
- 型: <number>
HMAC キーのビット数のオプション値。これはオプションであり、ほとんどの場合省略する必要があります。
hmacImportParams.name
追加されたバージョン: v15.0.0
- 型: <string>
'HMAC'
でなければなりません。
クラス: HmacKeyGenParams
追加されたバージョン: v15.0.0
hmacKeyGenParams.hash
追加されたバージョン: v15.0.0
<string>として表現される場合、値は以下のいずれかでなければなりません。
'SHA-1'
'SHA-256'
'SHA-384'
'SHA-512'
<Object>として表現される場合、オブジェクトはname
プロパティを持っていなければならず、その値は上記リストのいずれかでなければなりません。
hmacKeyGenParams.length
追加されたバージョン: v15.0.0
- 型: <number>
HMAC キーを生成するためのビット数。省略した場合、使用されるハッシュアルゴリズムによって長さが決定されます。これはオプションであり、ほとんどの場合省略する必要があります。
hmacKeyGenParams.name
追加日時: v15.0.0
- 型: <string>
'HMAC'
でなければなりません。
Class: Pbkdf2Params
追加日時: v15.0.0
pbkdb2Params.hash
追加日時: v15.0.0
<string>として表現される場合、値は以下のいずれかでなければなりません。
'SHA-1'
'SHA-256'
'SHA-384'
'SHA-512'
<Object>として表現される場合、オブジェクトはname
プロパティを持たなければならず、その値は上記にリストされた値のいずれかでなければなりません。
pbkdf2Params.iterations
追加日時: v15.0.0
- 型: <number>
PBKDF2 アルゴリズムがビットを導出する際に実行するべき反復回数。
pbkdf2Params.name
追加日時: v15.0.0
- 型: <string>
'PBKDF2'
でなければなりません。
pbkdf2Params.salt
追加日時: v15.0.0
- 型: <ArrayBuffer> | <TypedArray> | <DataView> | <Buffer>
少なくとも 16 バイトのランダムまたは疑似ランダムバイトでなければなりません。
Class: RsaHashedImportParams
追加日時: v15.0.0
rsaHashedImportParams.hash
追加日時: v15.0.0
<string>として表現される場合、値は以下のいずれかでなければなりません。
'SHA-1'
'SHA-256'
'SHA-384'
'SHA-512'
<Object>として表現される場合、オブジェクトはname
プロパティを持たなければならず、その値は上記にリストされた値のいずれかでなければなりません。
rsaHashedImportParams.name
追加日時: v15.0.0
- 型: <string>
'RSASSA-PKCS1-v1_5'
,'RSA-PSS'
, または'RSA-OAEP'
のいずれかでなければなりません。
クラス: RsaHashedKeyGenParams
追加日時: v15.0.0
rsaHashedKeyGenParams.hash
追加日時: v15.0.0
<string>として表現される場合、値は以下のいずれかでなければなりません。
'SHA-1'
'SHA-256'
'SHA-384'
'SHA-512'
<Object>として表現される場合、そのオブジェクトは、値が上記にリストされている値のいずれかであるname
プロパティを持たなければなりません。
rsaHashedKeyGenParams.modulusLength
追加日時: v15.0.0
- 型: <number>
RSA モジュラスの長さ(ビット単位)。ベストプラクティスとして、少なくとも 2048
とする必要があります。
rsaHashedKeyGenParams.name
追加日時: v15.0.0
- 型: <string>
'RSASSA-PKCS1-v1_5'
,'RSA-PSS'
, または'RSA-OAEP'
のいずれかでなければなりません。
rsaHashedKeyGenParams.publicExponent
追加日時: v15.0.0
- 型: <Uint8Array>
RSA 公開指数。これは、32 ビット内に収まるビッグエンディアンの符号なし整数を含む <Uint8Array>でなければなりません。 <Uint8Array>には、任意の数の先頭のゼロビットを含めることができます。値は素数でなければなりません。別の値を使用する理由がない限り、公開指数として new Uint8Array([1, 0, 1])
(65537) を使用してください。
クラス: RsaOaepParams
追加バージョン: v15.0.0
rsaOaepParams.label
追加バージョン: v15.0.0
- 型: <ArrayBuffer> | <TypedArray> | <DataView> | <Buffer>
暗号化されないが、生成された暗号文にバインドされる追加のバイトコレクション。
rsaOaepParams.label
パラメータはオプションです。
rsaOaepParams.name
追加バージョン: v15.0.0
- 型: <string>
'RSA-OAEP'
でなければなりません。
クラス: RsaPssParams
追加バージョン: v15.0.0
rsaPssParams.name
追加バージョン: v15.0.0
- 型: <string>
'RSA-PSS'
でなければなりません。
rsaPssParams.saltLength
追加バージョン: v15.0.0
- 型: <number>
使用するランダムソルトの長さ(バイト単位)。