Copyright © 2026 the Contributors to the Modern Algorithms in the Web Cryptography API Specification, published by the Web Platform Incubator Community Group under the W3C Community Contributor License Agreement (CLA). A human-readable summary is available.
この仕様は、Web Cryptography API 向けの、 耐量子安全性を備えた最新の暗号アルゴリズム、すなわち ML-KEM、ML-DSA、SLH-DSA、AES-OCB、ChaCha20-Poly1305、 SHA-3、cSHAKE、TurboSHAKE、KangarooTwelve、KMAC、および Argon2 を定義します。
この仕様は、 Web Platform Incubator Community Group によって公開されました。これは W3C 標準ではなく、 W3C 標準化過程にも含まれていません。 以下の W3C コミュニティ貢献者ライセンス契約 (CLA) では、限定的なオプトアウトが認められており、その他の条件も適用されることに注意してください。 W3C コミュニティグループおよびビジネスグループの詳細をご覧ください。
これは非公式な提案です。
この仕様に関する議論には、 GitHub の課題を使用することが推奨されます。
このセクションは非規範的です。
この提案は、Web Cryptography API で利用できる 暗号アルゴリズムの集合を最新化し、Web アプリケーションが耐量子安全性と 高い性能を備えた暗号アルゴリズムを利用できるようにすることを目的としています。 この目的のため、次の暗号アルゴリズムを追加します:
ML-KEM、および将来追加される可能性のあるその他の KEM の使用に対応するため、
この提案では鍵のカプセル化およびカプセル化解除のための関数、
SubtleCrypto.encapsulateKey、
SubtleCrypto.encapsulateBits、
SubtleCrypto.decapsulateKey および
SubtleCrypto.decapsulateBits
を導入します。
さらに、この提案では SubtleCrypto.getPublicKey 関数を導入します。
この関数は、非対称秘密鍵から公開鍵を導出する便利な方法を提供し、秘密鍵のみが
必要な場合に公開鍵と秘密鍵の両方を個別に保存する必要をなくします。
最後に、この提案では、SubtleCrypto.supports 関数を追加することで、
機能検出を容易にすることを目的としています。この関数を使用すると、指定されたアルゴリズム識別子
(すべてのパラメーターを含む)が指定された操作でサポートされているかどうかを検出できます。
この仕様は、[webcrypto] のセクション 18.3 で定められた 表記規則 に従います。ここで定義されるアルゴリズムはいずれも実装を必須とはしませんが、適合するユーザーエージェントが あるアルゴリズムを実装する場合、この文書で指定されているサポート対象の操作をすべて実装 しなければならず、さらにサポート対象の各操作について、 [webcrypto] のセクション 18.4.3 で指定される アルゴリズムを定義する 手順を実行しなければなりません。
[webcrypto] で定義されているサポートされる操作に加えて、 この仕様では、以下の操作を使用する:
このセクションは、[webcrypto] の SubtleCrypto インターフェイスを
拡張します。
WebIDL[SecureContext,Exposed=(Window,Worker)]
partial interface SubtleCrypto {
Promise<EncapsulatedBits> encapsulateBits(
AlgorithmIdentifier encapsulationAlgorithm,
CryptoKey encapsulationKey
);
Promise<ArrayBuffer> decapsulateBits(
AlgorithmIdentifier decapsulationAlgorithm,
CryptoKey decapsulationKey,
BufferSource ciphertext
);
Promise<CryptoKey> getPublicKey(
CryptoKey key,
sequence<KeyUsage> keyUsages
);
static boolean supports(DOMString operation,
AlgorithmIdentifier algorithm,
optional [EnforceRange] unsigned long? length = null);
static boolean supports(DOMString operation,
AlgorithmIdentifier algorithm,
AlgorithmIdentifier additionalAlgorithm);
};
この仕様は、[webcrypto] における KeyFormat
の定義を次のものに置き換えます:
WebIDLenum KeyFormat { "raw-public", "raw-private", "raw-seed", "raw-secret", "raw", "spki", "pkcs8", "jwk" };
この仕様は、いくつかの新しい認識される鍵形式の 値を指定します:
raw-publicraw-privateraw-seedraw-secret
[webcrypto] に存在する
すべての対称アルゴリズムについて、
"raw-secret" は "raw" の別名として機能します。
[webcrypto] に存在する
すべての非対称アルゴリズムについて、
"raw-public" は "raw" の別名として機能します。
deriveKey()
メソッドでは、鍵をインポートする手順において、
"raw-secret" を "raw" の代わりに形式として使用しなければなりません。
この仕様は、[webcrypto] における KeyUsage
の定義を次のものに置き換えます:
WebIDLenum KeyUsage { "encrypt", "decrypt", "sign", "verify", "deriveKey", "deriveBits", "wrapKey", "unwrapKey", "encapsulateKey", "encapsulateBits", "decapsulateKey", "decapsulateBits" };
この仕様は、いくつかの新しい認識される鍵用途の 値を指定します:
encapsulateKeySubtleCrypto.encapsulateKey
で使用できるようにします。encapsulateBitsSubtleCrypto.encapsulateBits
で使用できるようにします。
decapsulateKeySubtleCrypto.decapsulateKey
で使用できるようにします。decapsulateBitsSubtleCrypto.decapsulateBits
で使用できるようにします。
encapsulateKey(encapsulationAlgorithm, encapsulationKey, sharedKeyAlgorithm, extractable, usages)
メソッドは鍵をカプセル化し、EncapsulatedKey
オブジェクトを返します。
このメソッドは次のように動作します:
encapsulationAlgorithm、encapsulationKey、
sharedKeyAlgorithm、
extractable、および usages を、それぞれ
encapsulateKey()
メソッドに渡された encapsulationAlgorithm、
encapsulationKey、
sharedKeyAlgorithm、extractable、および keyUsages
パラメーターとします。
normalizedEncapsulationAlgorithm を、
alg を encapsulationAlgorithm に、op を
"encapsulate" に設定して
アルゴリズムを
正規化した結果とします。
エラーが発生した場合、normalizedEncapsulationAlgorithm で 拒否された Promise を返します。
normalizedSharedKeyAlgorithm を、
alg を sharedKeyAlgorithm に、op を
"importKey" に設定して
アルゴリズムを
正規化した結果とします。
エラーが発生した場合、normalizedSharedKeyAlgorithm で 拒否された Promise を返します。
promise を新しい Promise とします。
promise を返し、残りの手順を並行して 実行します。
以下の手順または参照先の手続きがエラーを スローするよう指示した場合、 realm のグローバルオブジェクトを指定して、 暗号タスクソース上に グローバルタスクを キューに入れ、返されたエラーで promise を拒否します。 その後、アルゴリズムを 終了します。
normalizedEncapsulationAlgorithm の
name
メンバーが、
encapsulationKey の
[[algorithm]]
内部スロットの
name
属性と等しくない場合、InvalidAccessError
を
スローします。
encapsulationKey の
[[usages]]
内部スロットに "encapsulateKey" であるエントリーが含まれていない場合、
InvalidAccessError
を
スローします。
encapsulatedBits を、encapsulationKey を使用して、
encapsulationKey の
[[algorithm]]
内部スロットで指定されるカプセル化操作を実行した結果とします。
sharedKey を、normalizedSharedKeyAlgorithm で指定される
鍵のインポート操作を、format として "raw-secret"、
keyData として encapsulatedBits の
sharedKey フィールド、
algorithm として sharedKeyAlgorithm を使用し、
extractable および usages を使用して実行した結果とします。
sharedKey の
[[extractable]]
内部スロットを extractable に設定します。
sharedKey の
[[usages]]
内部スロットを、usages の
正規化された値
に設定します。
encapsulatedKey を、
sharedKey を
sharedKey に設定し、
ciphertext を
encapsulatedBits の
ciphertext フィールドに設定した、
新しい EncapsulatedKey
辞書とします。
realm のグローバルオブジェクトを指定して、 暗号タスクソース上に グローバルタスクを キューに入れ、残りの手順を実行します。
result を、[WebIDL] で定義されるとおり、 encapsulatedKey を realm 内の ECMAScript オブジェクトに 変換した結果とします。
promise を result で解決します。
encapsulateBits(encapsulationAlgorithm, encapsulationKey)
メソッドは鍵をカプセル化し、EncapsulatedBits
オブジェクトを返します。
このメソッドは次のように動作します:
encapsulationAlgorithm および encapsulationKey を、それぞれ
encapsulateBits()
メソッドに渡された encapsulationAlgorithm
および encapsulationKey パラメーターとします。
normalizedEncapsulationAlgorithm を、
alg を encapsulationAlgorithm に、op を
"encapsulate" に設定して
アルゴリズムを
正規化した結果とします。
エラーが発生した場合、normalizedEncapsulationAlgorithm で 拒否された Promise を返します。
promise を新しい Promise とします。
promise を返し、残りの手順を並行して 実行します。
以下の手順または参照先の手続きがエラーを スローするよう指示した場合、 realm のグローバルオブジェクトを指定して、 暗号タスクソース上に グローバルタスクを キューに入れ、返されたエラーで promise を拒否します。 その後、アルゴリズムを 終了します。
normalizedEncapsulationAlgorithm の
name
メンバーが、
encapsulationKey の
[[algorithm]]
内部スロットの
name
属性と等しくない場合、InvalidAccessError
を
スローします。
encapsulationKey の
[[usages]]
内部スロットに "encapsulateBits" であるエントリーが含まれていない場合、
InvalidAccessError
を
スローします。
encapsulatedBits を、encapsulationKey を使用して、
encapsulationKey の
[[algorithm]]
内部スロットで指定されるカプセル化操作を実行した結果とします。
realm のグローバルオブジェクトを指定して、 暗号タスクソース上に グローバルタスクを キューに入れ、残りの手順を実行します。
result を、[WebIDL] で定義されるとおり、 encapsulatedBits を realm 内の ECMAScript オブジェクトに 変換した結果とします。
promise を result で解決します。
decapsulateKey(decapsulationAlgorithm, decapsulationKey, ciphertext, sharedKeyAlgorithm, extractable, usages)
メソッドは鍵のカプセル化を解除し、CryptoKey オブジェクトを返します。
このメソッドは次のように動作します:
decapsulationAlgorithm、decapsulationKey、
sharedKeyAlgorithm、
extractable、および usages を、それぞれ
decapsulateKey()
メソッドに渡された decapsulationAlgorithm、
decapsulationKey、sharedKeyAlgorithm、extractable、および
keyUsages パラメーターとします。
normalizedDecapsulationAlgorithm を、
alg を decapsulationAlgorithm に、op を
"decapsulate" に設定して
アルゴリズムを
正規化した結果とします。
エラーが発生した場合、normalizedDecapsulationAlgorithm で 拒否された Promise を返します。
normalizedSharedKeyAlgorithm を、
alg を sharedKeyAlgorithm に、op を
"importKey" に設定して
アルゴリズムを
正規化した結果とします。
エラーが発生した場合、normalizedSharedKeyAlgorithm で 拒否された Promise を返します。
ciphertext を、
decapsulateKey()
メソッドに渡された ciphertext パラメーターが保持する
バイトのコピーを取得した
結果とします。
promise を新しい Promise とします。
promise を返し、残りの手順を並行して 実行します。
以下の手順または参照先の手続きがエラーを スローするよう指示した場合、 realm のグローバルオブジェクトを指定して、 暗号タスクソース上に グローバルタスクを キューに入れ、返されたエラーで promise を拒否します。 その後、アルゴリズムを 終了します。
normalizedDecapsulationAlgorithm の
name
メンバーが、
decapsulationKey の
[[algorithm]]
内部スロットの
name
属性と等しくない場合、InvalidAccessError
を
スローします。
decapsulationKey の
[[usages]]
内部スロットに "decapsulateKey" であるエントリーが含まれていない場合、
InvalidAccessError
を
スローします。
decapsulatedBits を、decapsulationKey および
ciphertext を使用して、decapsulationKey の
[[algorithm]]
内部スロットで指定されるカプセル化解除操作を実行した結果とします。
sharedKey を、normalizedSharedKeyAlgorithm で指定される
鍵のインポート操作を、format として "raw-secret"、
keyData として decapsulatedBits、
algorithm として sharedKeyAlgorithm を使用し、
extractable および usages を使用して実行した結果とします。
sharedKey の
[[extractable]]
内部スロットを extractable に設定します。
sharedKey の
[[usages]]
内部スロットを、usages の
正規化された値
に設定します。
realm のグローバルオブジェクトを指定して、 暗号タスクソース上に グローバルタスクを キューに入れ、残りの手順を実行します。
result を、[WebIDL] で定義されるとおり、 sharedKey を realm 内の ECMAScript オブジェクトに変換した結果とします。
promise を result で解決します。
decapsulateBits(decapsulationAlgorithm, decapsulationKey, ciphertext)
メソッドは鍵のカプセル化を解除し、ArrayBuffer オブジェクトを返します。
このメソッドは次のように動作します:
decapsulationAlgorithm および decapsulationKey を、それぞれ
decapsulateBits()
メソッドに渡された decapsulationAlgorithm および
decapsulationKey パラメーターとします。
normalizedDecapsulationAlgorithm を、
alg を decapsulationAlgorithm に、op を
"decapsulate" に設定して
アルゴリズムを
正規化した結果とします。
エラーが発生した場合、normalizedDecapsulationAlgorithm で 拒否された Promise を返します。
ciphertext を、
decapsulateBits()
メソッドに渡された ciphertext パラメーターが保持する
バイトのコピーを取得した
結果とします。
promise を新しい Promise とします。
promise を返し、残りの手順を並行して 実行します。
以下の手順または参照先の手続きがエラーを スローするよう指示した場合、 realm のグローバルオブジェクトを指定して、 暗号タスクソース上に グローバルタスクを キューに入れ、返されたエラーで promise を拒否します。 その後、アルゴリズムを 終了します。
normalizedDecapsulationAlgorithm の
name
メンバーが、
decapsulationKey の
[[algorithm]]
内部スロットの
name
属性と等しくない場合、InvalidAccessError
を
スローします。
decapsulationKey の
[[usages]]
内部スロットに "decapsulateBits" であるエントリーが含まれていない場合、
InvalidAccessError
を
スローします。
decapsulatedBits を、decapsulationKey および
ciphertext を使用して、decapsulationKey の
[[algorithm]]
内部スロットで指定されるカプセル化解除操作を実行した結果とします。
realm のグローバルオブジェクトを指定して、 暗号タスクソース上に グローバルタスクを キューに入れ、残りの手順を実行します。
result を、decapsulatedBits を含む
ArrayBuffer を
realm 内に作成した結果とします。
promise を result で解決します。
getPublicKey(key, usages)
メソッドは、指定された秘密鍵に対応する公開鍵を返します。
このメソッドは次のように動作します:
key および usages を、それぞれ
getPublicKey()
メソッドに渡された key および keyUsages
パラメーターとします。
algorithm を、key の
[[algorithm]]
内部スロットとします。
algorithm で識別される暗号アルゴリズムが
秘密鍵から公開鍵を導出することをサポートしていない場合、
NotSupportedError
で
拒否された Promise を返します。
promise を新しい Promise とします。
promise を返し、残りの手順を並行して 実行します。
以下の手順または参照先の手続きがエラーを スローするよう指示した場合、 realm のグローバルオブジェクトを指定して、 暗号タスクソース上に グローバルタスクを キューに入れ、返されたエラーで promise を拒否します。 その後、アルゴリズムを 終了します。
key の
[[type]]
内部スロットが "private"
でない場合、InvalidAccessError
を
スローします。
usages に、algorithm で識別されるアルゴリズムによって
公開鍵でサポートされていないエントリーが含まれる場合、
SyntaxError を
スローします。
publicKey を、key の
[[handle]]
内部スロットによって表される秘密鍵に対応する公開鍵を表す、新しい
CryptoKey
とします。
エラーが発生した場合、OperationError を
スローします。
publicKey の
[[algorithm]]
内部スロットを algorithm に設定します。
publicKey の
[[extractable]]
内部スロットを true に設定します。
publicKey の
[[usages]]
内部スロットを usages に設定します。
realm のグローバルオブジェクトを指定して、 暗号タスクソース上に グローバルタスクを キューに入れ、残りの手順を実行します。
result を、[WebIDL] で定義されるとおり、 publicKey を realm 内の ECMAScript オブジェクトに変換した結果とします。
promise を result で解決します。
supports(operation, algorithm, length)
メソッドは、指定されたAlgorithmIdentifierを使用して、指定された操作を実装が
サポートしているかどうかを示す真偽値を返す。
operation が "deriveBits" の場合に導出するビット数を示すための、
オプションの length パラメーターを持つ。
このメソッドは次のように動作する:
operation が
"encrypt", "decrypt", "sign", "verify",
"digest", "generateKey", "deriveKey",
"deriveBits",
"importKey", "exportKey", "wrapKey",
"unwrapKey",
"encapsulateKey", "encapsulateBits",
"decapsulateKey", "decapsulateBits" または
"getPublicKey"
のいずれでもない場合、false を返す。
アルゴリズムのサポートを
確認した結果を返す。
このとき、op を operation に、alg を
algorithm に、
length を length に設定する。
supports(operation, algorithm, additionalAlgorithm)
メソッドは、指定されたAlgorithmIdentifierを使用して、指定された操作を実装が
サポートしているかどうかを示す真偽値を返す。
追加のアルゴリズムは、operation が
"deriveKey" の場合に導出する鍵の種類、
operation が
"wrapKey" の場合にラップ前にエクスポートする鍵の種類、
および operation が
"unwrapKey" の場合にアンラップ後にインポートする鍵の種類を示す。
このメソッドは次のように動作する:
operation が
"encrypt", "decrypt", "sign", "verify",
"digest", "generateKey", "deriveKey",
"deriveBits",
"importKey", "exportKey", "wrapKey",
"unwrapKey",
"encapsulateKey", "encapsulateBits",
"decapsulateKey", "decapsulateBits" または
"getPublicKey"
のいずれでもない場合、false を返す。
deriveKey" または "unwrapKey" の場合:
op を "importKey" に設定し、
alg を additionalAlgorithm に設定して
アルゴリズムの
サポートを確認した結果
が false の場合、
false を返す。
wrapKey" の場合:
op を "exportKey" に設定し、
alg を additionalAlgorithm に設定して
アルゴリズムの
サポートを確認した結果
が false の場合、
false を返す。
encapsulateKey" または
"decapsulateKey" の場合:
normalizedAlgorithm を、
alg を algorithm に、op を
"get shared key length" に設定して
アルゴリズムを
正規化した結果とする。
エラーが発生した場合、false を返す。
sharedKeyLength を、algorithm を使用して normalizedAlgorithm によって指定された共有鍵の長さを取得する アルゴリズムを実行した結果とする。
normalizedAdditionalAlgorithm を、
alg を additionalAlgorithm に、op
を
"importKey" に設定して
アルゴリズムを
正規化した結果とする。
エラーが発生した場合、false を返す。
op を "importKey" に、
normalizedAlgorithm を
normalizedAdditionalAlgorithm に、length を
null に設定して
操作手順から
サポートを判定した結果
が false の場合、
false を返す。
normalizedAdditionalAlgorithm によって指定された鍵をインポートする操作が、
format が "raw-secret"
の場合に、
ビット単位の長さが sharedKeyLength である
バイト列
であるすべての keyData の値に対してエラーを
スローするなら、
false を返す。
length を null とする。
deriveKey" の場合:
op を "get key length" に設定し、
alg を additionalAlgorithm に設定して
アルゴリズムの
サポートを確認した結果
が false の場合、
false を返す。
normalizedAdditionalAlgorithm を、
alg を additionalAlgorithm に、op
を
"get key length" に設定して
アルゴリズムを
正規化した結果とする。
length を、normalizedAdditionalAlgorithm を使用して additionalAlgorithm によって指定された鍵の長さを取得する アルゴリズムを実行した結果とする。
operation を "deriveBits" に設定する。
アルゴリズムのサポートを
確認した結果を返す。
このとき、op を operation に、alg を
algorithm に、
length を length に設定する。
アルゴリズムのサポートを確認するアルゴリズムは、
指定された操作について、指定されたアルゴリズムがサポートされているかどうかを確認するプロセスを定義する。
その入力は、操作名 op、AlgorithmIdentifier
alg、
および length パラメーターである。その出力は真偽値である。
これは次のように動作する:
op が "encapsulateKey" または "encapsulateBits" の場合、
op を "encapsulate" に設定する。
op が "decapsulateKey" または "decapsulateBits" の場合、
op を "decapsulate" に設定する。
getPublicKey" の場合:
normalizedAlgorithm を、
alg を alg に、op を
"exportKey" に設定して
アルゴリズムを
正規化した結果とする。
エラーが発生した場合、false を返す。
normalizedAlgorithm によって識別される暗号アルゴリズムが、 秘密鍵から公開鍵を導出することをサポートしていない場合、 false を返す。
それ以外の場合、true を返す。
normalizedAlgorithm を、
alg を alg に、op を op に設定して
アルゴリズムを
正規化した結果とする。
op が "wrapKey" の場合、
op を "encrypt" に、
alg を alg に設定して
アルゴリズムのサポートを
確認した結果を返す。
op が "unwrapKey" の場合、
op を "decrypt" に、
alg を alg に設定して
アルゴリズムのサポートを
確認した結果を返す。
それ以外の場合、false を返す。
操作手順からサポートを
判定した結果を返す。
このとき、op を op に、normalizedAlgorithm を
normalizedAlgorithm に、
length を length に設定する。
操作手順からサポートを判定するアルゴリズムは、
正規化されたアルゴリズムの操作手順がサポートを示しているかどうかを判定する。
その入力は、操作名 op、Algorithm
normalizedAlgorithm、
および length パラメーターである。その出力は真偽値である。
これは次のように動作する:
指定された操作または正規化されたアルゴリズム(またはそのパラメーター値のいずれか)が、 実装固有の理由(例: 仕様に適合しないことが既知である場合)により、 (任意の鍵および/またはデータについて)失敗すると予想される場合、false を返す。
op が "generateKey" または "importKey" の場合、
usages を空のリストとする。
normalizedAlgorithm によって指定されたアルゴリズムの、 op によって指定された操作の各手順について:
key、
plaintext または ciphertext などの利用できないパラメーターに依存している場合:
参照されるアルゴリズム内の手順は、このコンテキストの normalizedAlgorithm、 length、および usages 変数にアクセスできる。
表明: この手順には 決して到達しない。 操作のいずれかの手順が値を返すかエラーをスローするよう指示しており、 それによってそれぞれ true または false を返すことになるためである。
WebIDLdictionary EncapsulatedKey {
ArrayBuffer ciphertext;
};
dictionary EncapsulatedBits {
ArrayBuffer ciphertext;
};
EncapsulatedKey 辞書は、sharedKey と ciphertext から構成されるカプセル化された鍵を表します。
EncapsulatedBits 辞書は、sharedKey と ciphertext から構成されるカプセル化された鍵ビットを表します。
WebIDLpartial dictionary JsonWebKey {
// 次のフィールドは RFC 9964 で定義されています
DOMString pub;
DOMString priv;
};
[webcrypto] で定義される JsonWebKey 辞書のこの拡張は、
[RFC9964]
で定義される「AKP」鍵型の鍵を表現する方法を提供します。
このセクションは非規範的です。
これは、[FIPS-203] で指定される、 鍵のカプセル化およびカプセル化解除に ML-KEM を使用する方法を説明します。
このアルゴリズムの認識されるアルゴリズム
名は、
"ML-KEM-512"、"ML-KEM-768"、および "ML-KEM-1024" です。
| 操作 | パラメーター | 結果 |
|---|---|---|
| カプセル化 | なし | EncapsulatedBits |
| デカプセル化 | なし | バイト 列 |
| 共有鍵の長さを取得 | なし | 整数 |
| generateKey | なし | CryptoKeyPair
|
| importKey | なし | CryptoKey
|
| exportKey | なし | object |
key の [[type]]
内部スロットが
"public"
でない場合、スローする
InvalidAccessError。
[FIPS-203]
のセクション 7.2 で説明されているカプセル化鍵チェックを、
algorithm の name
メンバーによって示されるパラメーターセットを使用し、
key の [[handle]]
内部スロットによって表される鍵を ek 入力パラメーターとして使用して実行する。
パフォーマンス上望ましい場合、このチェックの結果を
CryptoKey
オブジェクトについてキャッシュまたは事前計算してもよい。
カプセル化鍵チェックが失敗した場合、OperationError
を返す。
sharedKey および ciphertext を、
[FIPS-203]
のセクション 7.2 で説明されている ML-KEM.Encaps 関数を、
algorithm の name
メンバーによって示されるパラメーターセットを使用し、
key の [[handle]]
内部スロットによって表される鍵を ek 入力パラメーターとして使用して実行した結果の出力とする。
ML-KEM.Encaps 関数がエラーを返した場合、OperationError
を返す。
result を新しい EncapsulatedBits
辞書とする。
result の sharedKey 属性を、
sharedKey を含む ArrayBuffer
を作成した結果に設定する。
result の ciphertext 属性を、
ciphertext を含む ArrayBuffer
を作成した結果に設定する。
result を返す。
key の [[type]]
内部スロットが
"private"
でない場合、スローする
InvalidAccessError。
[FIPS-203]
のセクション 7.3 で説明されているデカプセル化入力チェックを、
algorithm の name
メンバーによって示されるパラメーターセットを使用し、
key の [[handle]]
内部スロットによって表される鍵を dk 入力パラメーターとして、
ciphertext を c 入力パラメーターとして使用して実行する。
パフォーマンス上望ましい場合、デカプセル化鍵型チェックおよびハッシュチェックの結果を
CryptoKey
オブジェクトについてキャッシュまたは事前計算してもよい。
デカプセル化鍵チェックが失敗した場合、OperationError
を返す。
sharedKey を、
[FIPS-203]
のセクション 7.3 で説明されている ML-KEM.Decaps 関数を、
algorithm の name
メンバーによって示されるパラメーターセットを使用し、
key の [[handle]]
内部スロットによって表される鍵を dk 入力パラメーターとして、
ciphertext を c 入力パラメーターとして使用して実行した結果の出力とする。
sharedKey を返す。
usages に
"encapsulateKey", "encapsulateBits",
"decapsulateKey" または "decapsulateBits"
のいずれでもないエントリが含まれている場合、スローする
SyntaxError。
[FIPS-203]
のセクション 7.1 で説明されているように、
normalizedAlgorithm の name
メンバーによって示されるパラメーターセットを使用して、ML-KEM 鍵ペアを生成する。
シード (d, z) をエクスポートできるようにするため、
d および z は生成された
鍵素材の一部として保存する必要がある。
鍵生成手順が失敗した場合、
スローする
OperationError。
algorithm を新しい KeyAlgorithm
オブジェクトとする。
publicKey を、生成された鍵ペアのカプセル化鍵を表す新しい
CryptoKey
とする。
publicKey の [[algorithm]]
内部スロットを algorithm に設定する。
publicKey の [[extractable]]
内部スロットを true に設定する。
publicKey の [[usages]]
内部スロットを、
usages と [ "encapsulateKey", "encapsulateBits" ] の
用途の共通部分
とする。
privateKey を、生成された鍵ペアのデカプセル化鍵を表す新しい
CryptoKey
とする。
privateKey の [[algorithm]]
内部スロットを algorithm に設定する。
privateKey の [[extractable]]
内部スロットを extractable に設定する。
privateKey の [[usages]]
内部スロットを、
usages と [ "decapsulateKey", "decapsulateBits" ] の
用途の共通部分
とする。
result を新しい CryptoKeyPair
辞書とする。
result の publicKey
属性を
publicKey に設定する。
result の privateKey
属性を
privateKey に設定する。
result を返す。
keyData をインポートする鍵データとする。
spki" の場合:
usages に
"encapsulateKey" または "encapsulateBits"
ではないエントリが含まれている場合、スローする
SyntaxError。
spki を、keyData に対して subjectPublicKeyInfo を 解析する アルゴリズムを実行した結果とする。
name
メンバーが "ML-KEM-512" の場合:
expectedOid を id-alg-ml-kem-512
(2.16.840.1.101.3.4.4.1) とする。
name
メンバーが "ML-KEM-768" の場合:
expectedOid を id-alg-ml-kem-768
(2.16.840.1.101.3.4.4.2) とする。
name
メンバーが "ML-KEM-1024" の場合:
expectedOid を id-alg-ml-kem-1024
(2.16.840.1.101.3.4.4.3) とする。
spki の algorithm AlgorithmIdentifier フィールドの
algorithm オブジェクト識別子フィールドが
expectedOid と等しくない場合、
スローする
DataError。
spki の algorithm
AlgorithmIdentifier フィールドに parameters フィールドが存在する場合、
スローする
DataError。
publicKey を、spki の
subjectPublicKey フィールドによって識別される ML-KEM 公開鍵とする。
key を、publicKey を表す新しい
CryptoKey
とする。
algorithm を新しい KeyAlgorithm
とする。
key の [[algorithm]]
内部スロットを algorithm に設定する。
pkcs8" の場合:
usages に
"decapsulateKey" または "decapsulateBits"
ではないエントリが含まれている場合、スローする
SyntaxError。
privateKeyInfo を、keyData に対して privateKeyInfo を 解析する アルゴリズムを実行した結果とする。
name
メンバーが "ML-KEM-512" の場合:
expectedOid を id-alg-ml-kem-512
(2.16.840.1.101.3.4.4.1) とする。
asn1Structure を ASN.1
ML-KEM-512-PrivateKey 構造とする。
name
メンバーが "ML-KEM-768" の場合:
expectedOid を id-alg-ml-kem-768
(2.16.840.1.101.3.4.4.2) とする。
asn1Structure を ASN.1
ML-KEM-768-PrivateKey 構造とする。
name
メンバーが "ML-KEM-1024" の場合:
expectedOid を id-alg-ml-kem-1024
(2.16.840.1.101.3.4.4.3) とする。
asn1Structure を ASN.1
ML-KEM-1024-PrivateKey 構造とする。
privateKeyInfo の
privateKeyAlgorithm PrivateKeyAlgorithm フィールドの
algorithm オブジェクト識別子フィールドが
expectedOid と等しくない場合、
スローする
DataError。
privateKeyInfo の
privateKeyAlgorithm PrivateKeyAlgorithmIdentifier フィールドに
parameters フィールドが存在する場合、
スローする
DataError。
mlKemPrivateKey を、
data を privateKeyInfo の privateKey フィールド、
structure を asn1Structure、
exactData を true に設定して
ASN.1
構造を
解析する
アルゴリズムを実行した結果とする。
mlKemPrivateKey が expandedKey 形式の
ML-KEM 鍵を表している場合、
または mlKemPrivateKey が both 形式の
ML-KEM 鍵を表しており、
both 形式がサポートされていない場合、NotSupportedError
をスローする。
mlKemPrivateKey が both 形式の
ML-KEM 鍵を表しており、
seed フィールドが
expandedKey フィールドに対応していない場合、
DataError
をスローする。
key を、mlKemPrivateKey によって識別される
ML-KEM 秘密鍵を表す新しい CryptoKey
とする。
algorithm を新しい KeyAlgorithm
とする。
key の [[algorithm]]
内部スロットを algorithm に設定する。
raw-public" の場合:
usages に
"encapsulateKey" または "encapsulateBits"
ではないエントリが含まれている場合、スローする
SyntaxError。
data を keyData とする。
key を、data 内の ML-KEM 公開鍵データを表す新しい
CryptoKey
とする。
algorithm を新しい KeyAlgorithm
とする。
key の [[algorithm]]
内部スロットを algorithm に設定する。
raw-seed"
の場合:
usages に
"decapsulateKey" または "decapsulateBits"
ではないエントリが含まれている場合、スローする
SyntaxError。
data を keyData とする。
privateKey を、
[FIPS-203]
のセクション 6.1 で説明されている
ML-KEM.KeyGen_internal 関数を、
normalizedAlgorithm の name
メンバーによって示されるパラメーターセットを使用し、
data の最初の 256 ビットを d、
最後の 256 ビットを z として使用して実行した結果とする。
key を、privateKey によって識別される ML-KEM 秘密鍵を表す新しい
CryptoKey
とする。
algorithm を新しい KeyAlgorithm
とする。
key の [[algorithm]]
内部スロットを algorithm に設定する。
jwk" の場合:ML-KEM の JWK 形式はまだ標準化されていないため、変更される可能性がある。
JsonWebKey
辞書である場合:jwk を keyData と等しくする。
jwk の priv フィールドが存在し、
かつ usages に
"decapsulateKey" または "decapsulateBits"
ではないエントリが含まれている場合、スローする
SyntaxError。
jwk の priv フィールドが存在せず、
かつ usages に
"encapsulateKey" または "encapsulateBits"
ではないエントリが含まれている場合、スローする
SyntaxError。
jwk の alg
フィールドが、
[draft-ietf-jose-pqc-kem-05]
のセクション 8(図 1 または 2)に示されている、
normalizedAlgorithm の name
メンバーに対応する alg 値のいずれでもない場合、
スローする
DataError。
たとえば、ML-KEM-512 および ML-KEM-512+A128KW
は ML-KEM-512 に対する有効な "alg" 値である。
usages が空でなく、jwk の use
フィールドが存在し、
"enc" と等しくない場合、スローする
DataError。
jwk の key_ops
フィールドが存在し、
JSON Web Key [JWK]
の要件に従って無効であるか、
または指定された usages
のすべての値を含んでいない場合、
スローする
DataError。
jwk の ext
フィールドが存在して値が false であり、extractable が true の場合、
スローする
DataError。
algorithm を KeyAlgorithm
オブジェクトの新しいインスタンスとする。
key の [[algorithm]]
内部スロットを algorithm に設定する。
NotSupportedError。
key を返す。
key を、エクスポートする CryptoKey
とする。
key の [[handle]]
内部スロットによって表される基礎となる暗号鍵素材に
アクセスできない場合、スローする
OperationError。
spki" の場合:
key の [[type]]
内部スロットが
"public"
でない場合、スローする
InvalidAccessError。
keyAlgorithm を、key の [[algorithm]]
内部スロットとする。
data を、
[RFC5280]
で定義される SubjectPublicKeyInfo
ASN.1 構造の、以下のプロパティを持つインスタンスとする:
algorithm フィールドを、以下の
プロパティを持つ AlgorithmIdentifier ASN.1 型に設定する:
name
メンバーが
"ML-KEM-512" の場合:
algorithm オブジェクト識別子を
id-alg-ml-kem-512
(2.16.840.1.101.3.4.4.1) OID に設定する。
name
メンバーが
"ML-KEM-768" の場合:
algorithm オブジェクト識別子を
id-alg-ml-kem-768
(2.16.840.1.101.3.4.4.2) OID に設定する。
name
メンバーが
"ML-KEM-1024" の場合:
algorithm オブジェクト識別子を
id-alg-ml-kem-1024
(2.16.840.1.101.3.4.4.3) OID に設定する。
subjectPublicKey フィールドを keyData に設定する。
result を data を DER エンコードした結果とする。
pkcs8" の場合:
key の [[type]]
内部スロットが
"private"
でない場合、スローする
InvalidAccessError。
keyAlgorithm を、key の [[algorithm]]
内部スロットとする。
data を、
[RFC5208]
で定義される PrivateKeyInfo
ASN.1 構造の、以下のプロパティを持つインスタンスとする:
version フィールドを 0 に設定する。
privateKeyAlgorithm フィールドを、
以下のプロパティを持つ
PrivateKeyAlgorithmIdentifier ASN.1 型に設定する:
name
メンバーが
"ML-KEM-512" の場合:
algorithm オブジェクト識別子を
id-alg-ml-kem-512
(2.16.840.1.101.3.4.4.1) OID に設定する。
name
メンバーが
"ML-KEM-768" の場合:
algorithm オブジェクト識別子を
id-alg-ml-kem-768
(2.16.840.1.101.3.4.4.2) OID に設定する。
name
メンバーが
"ML-KEM-1024" の場合:
algorithm オブジェクト識別子を
id-alg-ml-kem-1024
(2.16.840.1.101.3.4.4.3) OID に設定する。
privateKey フィールドを次のように設定する:
name
メンバーが
"ML-KEM-512" の場合:
privateKey フィールドを、
key の [[handle]]
内部スロットによって表される ML-KEM
秘密鍵シードを seed-only
形式(OCTET STRING の暗黙エンコーディングを持つコンテキスト固有の [0]
プリミティブタグを使用)で表す
ML-KEM-512-PrivateKey ASN.1 型を
DER エンコードした結果に設定する。
name
メンバーが
"ML-KEM-768" の場合:
privateKey フィールドを、
key の [[handle]]
内部スロットによって表される ML-KEM
秘密鍵シードを seed-only
形式(OCTET STRING の暗黙エンコーディングを持つコンテキスト固有の [0]
プリミティブタグを使用)で表す
ML-KEM-768-PrivateKey ASN.1 型を
DER エンコードした結果に設定する。
name
メンバーが
"ML-KEM-1024" の場合:
privateKey フィールドを、
key の [[handle]]
内部スロットによって表される ML-KEM
秘密鍵シードを seed-only
形式(OCTET STRING の暗黙エンコーディングを持つコンテキスト固有の [0]
プリミティブタグを使用)で表す
ML-KEM-1024-PrivateKey ASN.1 型を
DER エンコードした結果に設定する。
result を data を DER エンコードした結果とする。
raw-public" の場合:
key の [[type]]
内部スロットが
"public"
でない場合、スローする
InvalidAccessError。
data を、
key の [[handle]]
内部スロットによって表される鍵の生のオクテットを含む
バイト列
とする。
result を data とする。
raw-seed"
の場合:
key の [[type]]
内部スロットが
"private"
でない場合、スローする
InvalidAccessError。
data を、
key の [[handle]]
内部スロットによって表される鍵の d および z
シード変数を連結したものを含む
バイト列
とする。
d および z シード変数は、 [FIPS-203] のセクション 7.1 で説明されているように、 ML-KEM.KeyGen 関数でサンプリングされた。
result を data とする。
jwk" の場合:ML-KEM の JWK 形式はまだ標準化されていないため、変更される可能性がある。
jwk を新しい JsonWebKey
辞書とする。
keyAlgorithm を、key の [[algorithm]]
内部スロットとする。
jwk の kty 属性を
"AKP" に設定する。
jwk の alg 属性を、
[draft-ietf-jose-pqc-kem-05]
のセクション 8(図 1)に示されている、
keyAlgorithm の name
メンバーに対応する alg 値に設定する。
たとえば、ML-KEM-512 は
ML-KEM-512 に使用される "alg" 値である。
jwk の pub 属性を、
key の [[handle]]
内部スロットに対応する base64url エンコード済み公開鍵に設定する。
[[type]]
内部スロットが
"private"
の場合:
priv 属性を、
key の [[handle]]
内部スロットによって表される base64url エンコード済みシードに設定する。
jwk の key_ops 属性を、key の usages
属性に設定する。
jwk の ext 属性を、key の [[extractable]]
内部スロットに設定する。
result を jwk とする。
result を返す。
このセクションは非規範的です。
これは、[FIPS-204] で指定される、 署名および検証に ML-DSA を使用する方法を説明します。
このアルゴリズムの認識されるアルゴリズム
名は、
"ML-DSA-44"、"ML-DSA-65"、および "ML-DSA-87" です。
| 操作 | パラメーター | 結果 |
|---|---|---|
| sign | ContextParams |
バイト シーケンス |
| verify | ContextParams |
真偽値 |
| generateKey | なし | CryptoKeyPair
|
| importKey | なし | CryptoKey |
| exportKey | なし | オブジェクト |
WebIDLdictionary ContextParams : Algorithm {
BufferSource context;
};
context メンバーは、メッセージに関連付ける任意のコンテキストデータを
表します。
ContextParams
辞書は、[webcrypto-secure-curves] の
Ed448Params
辞書と同一であり、この提案を統合する際には後者を前者で置き換えられます。
normalizedAlgorithm の context
メンバーが
存在し、その長さが
255
バイトを超える場合、スローする
OperationError。
key の [[type]]
内部スロットが
"private"
でない場合、スローする
InvalidAccessError。
context を、normalizedAlgorithm の context
メンバーとする。normalizedAlgorithm の context
メンバーが
存在しない場合は、空のオクテット文字列とする。
result を、[FIPS-204] のセクション 5.2 で指定されている
ML-DSA.Sign
署名アルゴリズムを、
normalizedAlgorithm の name
メンバーによって示されるパラメーターセットを使用し、
key に関連付けられた ML-DSA 秘密鍵を sk、
message を M、context を ctx として使用して実行した結果とする。
ML-DSA.Sign アルゴリズムがエラーを返した場合、OperationError
を返す。
result を返す。
normalizedAlgorithm の context
メンバーが
存在し、その 長さが
255
バイトを超える場合、スローする
OperationError。
key の [[type]]
内部スロットが
"public"
でない場合、
スローする
InvalidAccessError。
context を、normalizedAlgorithm の context
メンバーとし、normalizedAlgorithm の context
メンバーが
存在しない場合は空のオクテット文字列とする。
result を、[FIPS-204] のセクション 5.3 で指定されている ML-DSA.Verify
検証アルゴリズムを、
normalizedAlgorithm の name
メンバーによって示されるパラメーターセットを使用し、
key に関連付けられた ML-DSA 公開鍵を pk、
message を M、signature を σ、
context を ctx として使用して実行した結果とする。
ML-DSA.Verify アルゴリズムがエラーを返した場合、OperationError
を返す。
result を返す。
usages に、"sign" または "verify"
のいずれでもないエントリーが含まれる場合、SyntaxError を
スローします。
[FIPS-204] のセクション 5.1
で説明されるとおり、normalizedAlgorithm の
name
メンバーによって示されるパラメーターセットを用いて、
ML-DSA 鍵ペアを生成します。
シード ξ をエクスポートできるようにするには、
生成された鍵素材の一部として保存する必要があります。
鍵生成手順が失敗した場合、OperationError を
スローします。
algorithm を新しい KeyAlgorithm
オブジェクトとします。
publicKey を、生成された鍵ペアの公開鍵を表す新しい
CryptoKey
とします。
publicKey の
[[algorithm]]
内部スロットを algorithm に設定します。
publicKey の
[[extractable]]
内部スロットを true に設定します。
publicKey の
[[usages]]
内部スロットを、usages と [ "verify" ] の
用途の
共通部分に設定します。
privateKey を、生成された鍵ペアの秘密鍵を表す新しい
CryptoKey
とします。
privateKey の
[[algorithm]]
内部スロットを algorithm に設定します。
privateKey の
[[extractable]]
内部スロットを extractable に設定します。
privateKey の
[[usages]]
内部スロットを、usages と [ "sign" ] の
用途の
共通部分に設定します。
result を新しい CryptoKeyPair
辞書とします。
result の publicKey
属性を publicKey に設定します。
result の privateKey
属性を privateKey に設定します。
result を返します。
keyData をインポートする鍵データとします。
spki" の場合:
usages に "verify" でないエントリーが含まれる場合、
SyntaxError
を
スローします。
spki を、keyData に対して subjectPublicKeyInfo を 構文解析する アルゴリズムを実行した結果とします。
name
メンバーが "ML-DSA-44" の場合:
expectedOid を id-ml-dsa-44
(2.16.840.1.101.3.4.3.17) とします。
name
メンバーが "ML-DSA-65" の場合:
expectedOid を id-ml-dsa-65
(2.16.840.1.101.3.4.3.18) とします。
name
メンバーが "ML-DSA-87" の場合:
expectedOid を id-ml-dsa-87
(2.16.840.1.101.3.4.3.19) とします。
NotSupportedError
を
スローします。
spki の algorithm AlgorithmIdentifier フィールドの
algorithm オブジェクト識別子フィールドが
expectedOid と等しくない場合、
DataError
を
スローします。
spki の algorithm
AlgorithmIdentifier フィールドに parameters フィールドが存在する場合、
DataError
を
スローします。
publicKey を、spki の
subjectPublicKey フィールドによって識別される ML-DSA 公開鍵とします。
key を、publicKey を表す新しい
CryptoKey
とします。
algorithm を新しい KeyAlgorithm
とします。
key の
[[algorithm]]
内部スロットを algorithm に設定します。
pkcs8" の場合:
usages に "sign" でないエントリーが含まれる場合、
SyntaxError
を
スローします。
privateKeyInfo を、keyData に対して privateKeyInfo を 構文解析する アルゴリズムを実行した結果とします。
name
メンバーが "ML-DSA-44" の場合:
expectedOid を id-ml-dsa-44
(2.16.840.1.101.3.4.3.17) とします。
asn1Structure を ASN.1
ML-DSA-44-PrivateKey 構造とします。
name
メンバーが "ML-DSA-65" の場合:
expectedOid を id-ml-dsa-65
(2.16.840.1.101.3.4.3.18) とします。
asn1Structure を ASN.1
ML-DSA-65-PrivateKey 構造とします。
name
メンバーが "ML-DSA-87" の場合:
expectedOid を id-ml-dsa-87
(2.16.840.1.101.3.4.3.19) とします。
asn1Structure を ASN.1
ML-DSA-87-PrivateKey 構造とします。
NotSupportedError
を
スローします。
privateKeyInfo の
privateKeyAlgorithm PrivateKeyAlgorithm フィールドの
algorithm オブジェクト識別子フィールドが
expectedOid と等しくない場合、
DataError
を
スローします。
privateKeyInfo の
privateKeyAlgorithm PrivateKeyAlgorithmIdentifier フィールドに
parameters フィールドが存在する場合、
DataError
を
スローします。
mlDsaPrivateKey を、
data として privateKeyInfo の
privateKey フィールドを、structure として
asn1Structure を使用し、exactData を true に設定して、
ASN.1
構造を
構文解析する
アルゴリズムを実行した結果とします。
mlDsaPrivateKey が expandedKey 形式の
ML-DSA 鍵を表す場合、または mlDsaPrivateKey が
both 形式の ML-DSA 鍵を表し、
both 形式がサポートされていない場合、
NotSupportedError
をスローします。
mlDsaPrivateKey が both 形式の
ML-DSA 鍵を表し、seed フィールドが
expandedKey フィールドに対応しない場合、
DataError
をスローします。
key を、mlDsaPrivateKey によって識別される
ML-DSA 秘密鍵を表す新しい CryptoKey
とします。
algorithm を新しい KeyAlgorithm
とします。
key の
[[algorithm]]
内部スロットを algorithm に設定します。
raw-public" の場合:
usages に "verify" でないエントリーが含まれる場合、
SyntaxError
を
スローします。
algorithm を新しい KeyAlgorithm
オブジェクトとします。
key を、keyData で与えられた鍵データを表す新しい
CryptoKey
とします。
key の
[[algorithm]]
内部スロットを algorithm に設定します。
raw-seed"
の場合:
usages に "sign" でないエントリーが含まれる場合、
SyntaxError
を
スローします。
data を keyData とします。
privateKey を、
[FIPS-204]
のセクション 6.1 で説明される ML-DSA.KeyGen_internal 関数を、
normalizedAlgorithm の name
メンバーによって示されるパラメーターセットを用い、
data を ξ として使用して実行した結果とします。
key を、privateKey によって識別される
ML-DSA 秘密鍵を表す新しい CryptoKey
とします。
algorithm を新しい KeyAlgorithm
とします。
key の
[[algorithm]]
内部スロットを algorithm に設定します。
jwk" の場合:JsonWebKey
辞書である場合:jwk を keyData と等しくします。
priv フィールドが存在し、
usages に "sign" でないエントリーが含まれる場合、または、
priv フィールドが存在せず、
usages に "verify" でないエントリーが含まれる場合、
SyntaxError
を
スローします。
jwk の alg
フィールドが、normalizedAlgorithm の
name
メンバーと等しくない場合、
DataError
を
スローします。
usages が空でなく、jwk の
use
フィールドが存在し、"sig" と等しくない場合、
DataError
を
スローします。
jwk の key_ops
フィールドが存在し、JSON Web Key [JWK]
の要件に従って無効である場合、
または指定された usages のすべての値を含んでいない場合、
DataError
を
スローします。
jwk の ext
フィールドが存在して値が false であり、extractable が true の場合、
DataError
を
スローします。
priv
フィールドが存在する場合:
algorithm を新しい KeyAlgorithm
オブジェクトのインスタンスとします。
key の
[[algorithm]]
内部スロットを algorithm に設定します。
NotSupportedError
を
スローします。
key を返します。
key を、エクスポートする CryptoKey とします。
key の [[handle]]
内部スロットによって表される基礎となる暗号鍵素材にアクセスできない場合、
OperationError を
スローします。
spki" の場合:
key の
[[type]]
内部スロットが "public"
でない場合、InvalidAccessError
を
スローします。
keyAlgorithm を、key の
[[algorithm]]
内部スロットとします。
data を、[RFC5280]
で定義される SubjectPublicKeyInfo ASN.1 構造の、
次のプロパティを持つインスタンスとします:
algorithm フィールドを、次のプロパティを持つ
AlgorithmIdentifier ASN.1 型に設定します:
name
メンバーが "ML-DSA-44" の場合:
algorithm オブジェクト識別子を
id-ml-dsa-44
(2.16.840.1.101.3.4.3.17) OID に設定します。
name
メンバーが "ML-DSA-65" の場合:
algorithm オブジェクト識別子を
id-ml-dsa-65
(2.16.840.1.101.3.4.3.18) OID に設定します。
name
メンバーが "ML-DSA-87" の場合:
algorithm オブジェクト識別子を
id-ml-dsa-87
(2.16.840.1.101.3.4.3.19) OID に設定します。
NotSupportedError
を
スローします。
subjectPublicKey フィールドを keyData に設定します。
result を、data を DER エンコードした結果とします。
pkcs8" の場合:
key の
[[type]]
内部スロットが "private"
でない場合、InvalidAccessError
を
スローします。
keyAlgorithm を、key の
[[algorithm]]
内部スロットとします。
data を、[RFC5208]
で定義される PrivateKeyInfo ASN.1 構造の、
次のプロパティを持つインスタンスとします:
version フィールドを 0 に設定します。
privateKeyAlgorithm フィールドを、
次のプロパティを持つ PrivateKeyAlgorithmIdentifier
ASN.1 型に設定します:
name
メンバーが "ML-DSA-44" の場合:
algorithm オブジェクト識別子を
id-ml-dsa-44
(2.16.840.1.101.3.4.3.17) OID に設定します。
name
メンバーが "ML-DSA-65" の場合:
algorithm オブジェクト識別子を
id-ml-dsa-65
(2.16.840.1.101.3.4.3.18) OID に設定します。
name
メンバーが "ML-DSA-87" の場合:
algorithm オブジェクト識別子を
id-ml-dsa-87
(2.16.840.1.101.3.4.3.19) OID に設定します。
NotSupportedError
を
スローします。
privateKey フィールドを次のように設定します:
name
メンバーが "ML-DSA-44" の場合:
privateKey フィールドを、
key の [[handle]]
内部スロットによって表される ML-DSA 秘密鍵シードを、
シードのみの形式(OCTET STRING の暗黙的エンコードを持つ
コンテキスト固有の [0] プリミティブタグを使用)で表す
ML-DSA-44-PrivateKey ASN.1 型を
DER エンコードした結果に設定します。
name
メンバーが "ML-DSA-65" の場合:
privateKey フィールドを、
key の [[handle]]
内部スロットによって表される ML-DSA 秘密鍵シードを、
シードのみの形式(OCTET STRING の暗黙的エンコードを持つ
コンテキスト固有の [0] プリミティブタグを使用)で表す
ML-DSA-65-PrivateKey ASN.1 型を
DER エンコードした結果に設定します。
name
メンバーが "ML-DSA-87" の場合:
privateKey フィールドを、
key の [[handle]]
内部スロットによって表される ML-DSA 秘密鍵シードを、
シードのみの形式(OCTET STRING の暗黙的エンコードを持つ
コンテキスト固有の [0] プリミティブタグを使用)で表す
ML-DSA-87-PrivateKey ASN.1 型を
DER エンコードした結果に設定します。
NotSupportedError
を
スローします。
result を、data を DER エンコードした結果とします。
raw-public" の場合:
key の
[[type]]
内部スロットが "public"
でない場合、InvalidAccessError
を
スローします。
data を、key の [[handle]]
内部スロットによって表される ML-DSA 公開鍵を含む
バイトシーケンス
とします。
result を data とします。
raw-seed"
の場合:
key の
[[type]]
内部スロットが "private"
でない場合、InvalidAccessError
を
スローします。
data を、key の [[handle]]
内部スロットによって表される鍵の ξ シード変数を含む
バイトシーケンス
とします。
ξ シード変数は、 [FIPS-204] のセクション 5.1 で説明されるように、 ML-DSA.KeyGen 関数でサンプリングされました。
result を data とします。
jwk" の場合:
jwk を新しい JsonWebKey
辞書とします。
keyAlgorithm を、key の
[[algorithm]]
内部スロットとします。
jwk の kty 属性を
"AKP" に設定します。
jwk の alg 属性を、
keyAlgorithm の name
メンバーに設定します。
jwk の pub 属性を、
key の [[handle]]
内部スロットに対応する base64url エンコードされた公開鍵に設定します。
[[type]]
内部スロットが "private"
の場合:
priv 属性を、
key の [[handle]]
内部スロットによって表される base64url エンコードされたシードに設定します。
jwk の key_ops 属性を、
key の usages
属性に設定します。
jwk の ext 属性を、
key の [[extractable]]
内部スロットに設定します。
result を jwk とします。
NotSupportedError
を
スローします。
result を返します。
このセクションは非規範的です。
これは、[FIPS-205] で指定される、 署名および検証に SLH-DSA を使用する方法を説明します。
このアルゴリズムの認識されるアルゴリズム
名は、
"SLH-DSA-SHA2-128s"、"SLH-DSA-SHAKE-128s"、
"SLH-DSA-SHA2-128f"、"SLH-DSA-SHAKE-128f"、
"SLH-DSA-SHA2-192s"、"SLH-DSA-SHAKE-192s"、
"SLH-DSA-SHA2-192f"、"SLH-DSA-SHAKE-192f"、
"SLH-DSA-SHA2-256s"、"SLH-DSA-SHAKE-256s"、
"SLH-DSA-SHA2-256f"、および "SLH-DSA-SHAKE-256f" です。
| 操作 | パラメーター | 結果 |
|---|---|---|
| sign | ContextParams |
バイト シーケンス |
| verify | ContextParams |
真偽値 |
| generateKey | なし | CryptoKeyPair
|
| importKey | なし | CryptoKey |
| exportKey | なし | オブジェクト |
SLH-DSA 鍵は、JWK 表現に [RFC9964] で定義される「AKP」(Algorithm Key Pair)鍵型を使用します。「alg」(アルゴリズム)パラメーターは、 特定の SLH-DSA パラメーターセットを識別します。公開鍵は「pub」パラメーターに格納されます。 秘密鍵が含まれる場合は、「priv」パラメーターを使用して表現されます。JWK で表現される場合、 すべての鍵パラメーターは base64url エンコードされます。
normalizedAlgorithm の context
メンバーが
存在し、その 長さが 255
バイトを超える場合、スローする
OperationError。
key の [[type]]
内部スロットが
"private"
でない場合、スローする
InvalidAccessError。
context を、normalizedAlgorithm の context
メンバーとし、normalizedAlgorithm の context
メンバーが
存在しない場合は空のオクテット文字列とする。
result を、[FIPS-205] のセクション 10.2.1 で指定されている
slh\_sign
署名アルゴリズムを、
normalizedAlgorithm の name
メンバーによって示されるパラメーターセットを使用し、
key に関連付けられた SLH-DSA 秘密鍵を SK、
message を M、context を ctx として使用して実行した結果とする。
slh\_sign アルゴリズムがエラーを返した場合、OperationError
を返す。
result を返す。
key の [[type]]
内部スロットが "public"
でない場合、スローする
InvalidAccessError。
context を、normalizedAlgorithm の context
メンバーとし、normalizedAlgorithm の context
メンバーが
存在しない場合は空のオクテット文字列とする。
result を、[FIPS-205] のセクション 10.3 で指定されている
slh\_verify
検証アルゴリズムを、
normalizedAlgorithm の name
メンバーによって示されるパラメーターセットを使用し、
key に関連付けられた SLH-DSA 公開鍵を PK、
message を M、signature を SIG、
context を ctx として使用して実行した結果とする。
slh\_verify アルゴリズムがエラーを返した場合、OperationError
を返す。
result を返す。
usages に、"sign" または "verify"
のいずれでもないエントリーが含まれる場合、SyntaxError を
スローします。
[FIPS-205] のセクション 10.1
で説明されるとおり、normalizedAlgorithm の
name
メンバーによって示されるパラメーターセットを用いて、
SLH-DSA 鍵ペアを生成します。
鍵生成手順が失敗した場合、OperationError を
スローします。
algorithm を新しい KeyAlgorithm
オブジェクトとします。
publicKey を、生成された鍵ペアの公開鍵を表す新しい
CryptoKey
とします。
publicKey の
[[algorithm]]
内部スロットを algorithm に設定します。
publicKey の
[[extractable]]
内部スロットを true に設定します。
publicKey の
[[usages]]
内部スロットを、usages と [ "verify" ] の
用途の
共通部分に設定します。
privateKey を、生成された鍵ペアの秘密鍵を表す新しい
CryptoKey
とします。
privateKey の
[[algorithm]]
内部スロットを algorithm に設定します。
privateKey の
[[extractable]]
内部スロットを extractable に設定します。
privateKey の
[[usages]]
内部スロットを、usages と [ "sign" ] の
用途の
共通部分に設定します。
result を新しい CryptoKeyPair
辞書とします。
result の publicKey
属性を publicKey に設定します。
result の privateKey
属性を privateKey に設定します。
result を返します。
keyData をインポートする鍵データとします。
spki" の場合:
usages に "verify" でないエントリーが含まれる場合、
SyntaxError
を
スローします。
spki を、keyData に対して subjectPublicKeyInfo を 構文解析する アルゴリズムを実行した結果とします。
name
メンバーが
"SLH-DSA-SHA2-128s" の場合:
expectedOid を id-slh-dsa-sha2-128s
(2.16.840.1.101.3.4.3.20) とします。
name
メンバーが
"SLH-DSA-SHA2-128f" の場合:
expectedOid を id-slh-dsa-sha2-128f
(2.16.840.1.101.3.4.3.21) とします。
name
メンバーが
"SLH-DSA-SHA2-192s" の場合:
expectedOid を id-slh-dsa-sha2-192s
(2.16.840.1.101.3.4.3.22) とします。
name
メンバーが
"SLH-DSA-SHA2-192f" の場合:
expectedOid を id-slh-dsa-sha2-192f
(2.16.840.1.101.3.4.3.23) とします。
name
メンバーが
"SLH-DSA-SHA2-256s" の場合:
expectedOid を id-slh-dsa-sha2-256s
(2.16.840.1.101.3.4.3.24) とします。
name
メンバーが
"SLH-DSA-SHA2-256f" の場合:
expectedOid を id-slh-dsa-sha2-256f
(2.16.840.1.101.3.4.3.25) とします。
name
メンバーが
"SLH-DSA-SHAKE-128s" の場合:
expectedOid を id-slh-dsa-shake-128s
(2.16.840.1.101.3.4.3.26) とします。
name
メンバーが
"SLH-DSA-SHAKE-128f" の場合:
expectedOid を id-slh-dsa-shake-128f
(2.16.840.1.101.3.4.3.27) とします。
name
メンバーが
"SLH-DSA-SHAKE-192s" の場合:
expectedOid を id-slh-dsa-shake-192s
(2.16.840.1.101.3.4.3.28) とします。
name
メンバーが
"SLH-DSA-SHAKE-192f" の場合:
expectedOid を id-slh-dsa-shake-192f
(2.16.840.1.101.3.4.3.29) とします。
name
メンバーが
"SLH-DSA-SHAKE-256s" の場合:
expectedOid を id-slh-dsa-shake-256s
(2.16.840.1.101.3.4.3.30) とします。
name
メンバーが
"SLH-DSA-SHAKE-256f" の場合:
expectedOid を id-slh-dsa-shake-256f
(2.16.840.1.101.3.4.3.31) とします。
NotSupportedError
を
スローします。
spki の algorithm AlgorithmIdentifier フィールドの
algorithm オブジェクト識別子フィールドが
expectedOid と等しくない場合、
DataError
を
スローします。
spki の algorithm
AlgorithmIdentifier フィールドに parameters フィールドが存在する場合、
DataError
を
スローします。
publicKey を、spki の
subjectPublicKey フィールドによって識別される SLH-DSA 公開鍵とします。
key を、publicKey を表す新しい
CryptoKey
とします。
algorithm を新しい KeyAlgorithm
とします。
key の
[[algorithm]]
内部スロットを algorithm に設定します。
pkcs8" の場合:
usages に "sign" でないエントリーが含まれる場合、
SyntaxError
を
スローします。
privateKeyInfo を、keyData に対して privateKeyInfo を 構文解析する アルゴリズムを実行した結果とします。
name
メンバーが
"SLH-DSA-SHA2-128s" の場合:
expectedOid を id-slh-dsa-sha2-128s
(2.16.840.1.101.3.4.3.20) とします。
name
メンバーが
"SLH-DSA-SHA2-128f" の場合:
expectedOid を id-slh-dsa-sha2-128f
(2.16.840.1.101.3.4.3.21) とします。
name
メンバーが
"SLH-DSA-SHA2-192s" の場合:
expectedOid を id-slh-dsa-sha2-192s
(2.16.840.1.101.3.4.3.22) とします。
name
メンバーが
"SLH-DSA-SHA2-192f" の場合:
expectedOid を id-slh-dsa-sha2-192f
(2.16.840.1.101.3.4.3.23) とします。
name
メンバーが
"SLH-DSA-SHA2-256s" の場合:
expectedOid を id-slh-dsa-sha2-256s
(2.16.840.1.101.3.4.3.24) とします。
name
メンバーが
"SLH-DSA-SHA2-256f" の場合:
expectedOid を id-slh-dsa-sha2-256f
(2.16.840.1.101.3.4.3.25) とします。
name
メンバーが
"SLH-DSA-SHAKE-128s" の場合:
expectedOid を id-slh-dsa-shake-128s
(2.16.840.1.101.3.4.3.26) とします。
name
メンバーが
"SLH-DSA-SHAKE-128f" の場合:
expectedOid を id-slh-dsa-shake-128f
(2.16.840.1.101.3.4.3.27) とします。
name
メンバーが
"SLH-DSA-SHAKE-192s" の場合:
expectedOid を id-slh-dsa-shake-192s
(2.16.840.1.101.3.4.3.28) とします。
name
メンバーが
"SLH-DSA-SHAKE-192f" の場合:
expectedOid を id-slh-dsa-shake-192f
(2.16.840.1.101.3.4.3.29) とします。
name
メンバーが
"SLH-DSA-SHAKE-256s" の場合:
expectedOid を id-slh-dsa-shake-256s
(2.16.840.1.101.3.4.3.30) とします。
name
メンバーが
"SLH-DSA-SHAKE-256f" の場合:
expectedOid を id-slh-dsa-shake-256f
(2.16.840.1.101.3.4.3.31) とします。
NotSupportedError
を
スローします。
privateKeyInfo の
privateKeyAlgorithm PrivateKeyAlgorithm フィールドの
algorithm オブジェクト識別子フィールドが
expectedOid と等しくない場合、
DataError
を
スローします。
privateKeyInfo の
privateKeyAlgorithm PrivateKeyAlgorithmIdentifier フィールドに
parameters フィールドが存在する場合、
DataError
を
スローします。
slhDsaPrivateKey を、
data として privateKeyInfo の
privateKey フィールドを、structure として OCTET STRING を使用し、
exactData を true に設定して、
ASN.1
構造を
構文解析する
アルゴリズムを実行した結果とします。
key を、slhDsaPrivateKey によって識別される
SLH-DSA 秘密鍵を表す新しい CryptoKey
とします。
algorithm を新しい KeyAlgorithm
とします。
key の
[[algorithm]]
内部スロットを algorithm に設定します。
raw-public" の場合:
usages に "verify" でないエントリーが含まれる場合、
SyntaxError
を
スローします。
algorithm を新しい KeyAlgorithm
オブジェクトとします。
keyData の
長さが、
normalizedAlgorithm の name
メンバーによって示されるパラメーターセットについて、
[FIPS-205]
の表 2 で指定される pk length でない場合、
DataError
を
スローします。
key を、keyData で与えられた鍵データを表す新しい
CryptoKey
とします。
key の
[[algorithm]]
内部スロットを algorithm に設定します。
raw-private" の場合:
usages に "sign" でないエントリーが含まれる場合、
SyntaxError
を
スローします。
keyData の
長さが、
normalizedAlgorithm の name
メンバーによって示されるパラメーターセットについて、
[FIPS-205]
の表 2 で指定される pk length の 2 倍でない場合、
DataError
を
スローします。
key を、keyData で与えられた鍵データを表す新しい
CryptoKey
とします。
algorithm を新しい KeyAlgorithm
とします。
key の
[[algorithm]]
内部スロットを algorithm に設定します。
jwk" の場合:JsonWebKey
辞書である場合:jwk を keyData と等しくします。
priv フィールドが存在し、
usages に "sign" でないエントリーが含まれる場合、または、
priv フィールドが存在せず、
usages に "verify" でないエントリーが含まれる場合、
SyntaxError
を
スローします。
jwk の alg
フィールドが、normalizedAlgorithm の
name
メンバーと等しくない場合、
DataError
を
スローします。
usages が空でなく、jwk の
use
フィールドが存在し、"sig" と等しくない場合、
DataError
を
スローします。
jwk の key_ops
フィールドが存在し、JSON Web Key [JWK]
の要件に従って無効である場合、
または指定された usages のすべての値を含んでいない場合、
DataError
を
スローします。
jwk の ext
フィールドが存在して値が false であり、extractable が true の場合、
DataError
を
スローします。
priv
フィールドが存在する場合:
algorithm を新しい KeyAlgorithm
オブジェクトのインスタンスとします。
key の
[[algorithm]]
内部スロットを algorithm に設定します。
NotSupportedError
を
スローします。
key を返します。
key を、エクスポートする CryptoKey とします。
key の [[handle]]
内部スロットによって表される基礎となる暗号鍵素材にアクセスできない場合、
OperationError を
スローします。
spki" の場合:
key の
[[type]]
内部スロットが "public"
でない場合、InvalidAccessError
を
スローします。
keyAlgorithm を、key の
[[algorithm]]
内部スロットとします。
data を、[RFC5280]
で定義される SubjectPublicKeyInfo ASN.1 構造の、
次のプロパティを持つインスタンスとします:
algorithm フィールドを、次のプロパティを持つ
AlgorithmIdentifier ASN.1 型に設定します:
name
メンバーが
"SLH-DSA-SHA2-128s" の場合:
algorithm オブジェクト識別子を
id-slh-dsa-sha2-128s
(2.16.840.1.101.3.4.3.20) OID に設定します。
name
メンバーが
"SLH-DSA-SHA2-128f" の場合:
algorithm オブジェクト識別子を
id-slh-dsa-sha2-128f
(2.16.840.1.101.3.4.3.21) OID に設定します。
name
メンバーが
"SLH-DSA-SHA2-192s" の場合:
algorithm オブジェクト識別子を
id-slh-dsa-sha2-192s
(2.16.840.1.101.3.4.3.22) OID に設定します。
name
メンバーが
"SLH-DSA-SHA2-192f" の場合:
algorithm オブジェクト識別子を
id-slh-dsa-sha2-192f
(2.16.840.1.101.3.4.3.23) OID に設定します。
name
メンバーが
"SLH-DSA-SHA2-256s" の場合:
algorithm オブジェクト識別子を
id-slh-dsa-sha2-256s
(2.16.840.1.101.3.4.3.24) OID に設定します。
name
メンバーが
"SLH-DSA-SHA2-256f" の場合:
algorithm オブジェクト識別子を
id-slh-dsa-sha2-256f
(2.16.840.1.101.3.4.3.25) OID に設定します。
name
メンバーが
"SLH-DSA-SHAKE-128s" の場合:
algorithm オブジェクト識別子を
id-slh-dsa-shake-128s
(2.16.840.1.101.3.4.3.26) OID に設定します。
name
メンバーが
"SLH-DSA-SHAKE-128f" の場合:
algorithm オブジェクト識別子を
id-slh-dsa-shake-128f
(2.16.840.1.101.3.4.3.27) OID に設定します。
name
メンバーが
"SLH-DSA-SHAKE-192s" の場合:
algorithm オブジェクト識別子を
id-slh-dsa-shake-192s
(2.16.840.1.101.3.4.3.28) OID に設定します。
name
メンバーが
"SLH-DSA-SHAKE-192f" の場合:
algorithm オブジェクト識別子を
id-slh-dsa-shake-192f
(2.16.840.1.101.3.4.3.29) OID に設定します。
name
メンバーが
"SLH-DSA-SHAKE-256s" の場合:
algorithm オブジェクト識別子を
id-slh-dsa-shake-256s
(2.16.840.1.101.3.4.3.30) OID に設定します。
name
メンバーが
"SLH-DSA-SHAKE-256f" の場合:
algorithm オブジェクト識別子を
id-slh-dsa-shake-256f
(2.16.840.1.101.3.4.3.31) OID に設定します。
NotSupportedError
を
スローします。
subjectPublicKey フィールドを keyData に設定します。
result を、data を DER エンコードした結果とします。
pkcs8" の場合:
key の
[[type]]
内部スロットが "private"
でない場合、InvalidAccessError
を
スローします。
keyAlgorithm を、key の
[[algorithm]]
内部スロットとします。
data を、[RFC5208]
で定義される PrivateKeyInfo ASN.1 構造の、
次のプロパティを持つインスタンスとします:
version フィールドを 0 に設定します。
privateKeyAlgorithm フィールドを、
次のプロパティを持つ PrivateKeyAlgorithmIdentifier
ASN.1 型に設定します:
name
メンバーが
"SLH-DSA-SHA2-128s" の場合:
algorithm オブジェクト識別子を
id-slh-dsa-sha2-128s
(2.16.840.1.101.3.4.3.20) OID に設定します。
name
メンバーが
"SLH-DSA-SHA2-128f" の場合:
algorithm オブジェクト識別子を
id-slh-dsa-sha2-128f
(2.16.840.1.101.3.4.3.21) OID に設定します。
name
メンバーが
"SLH-DSA-SHA2-192s" の場合:
algorithm オブジェクト識別子を
id-slh-dsa-sha2-192s
(2.16.840.1.101.3.4.3.22) OID に設定します。
name
メンバーが
"SLH-DSA-SHA2-192f" の場合:
algorithm オブジェクト識別子を
id-slh-dsa-sha2-192f
(2.16.840.1.101.3.4.3.23) OID に設定します。
name
メンバーが
"SLH-DSA-SHA2-256s" の場合:
algorithm オブジェクト識別子を
id-slh-dsa-sha2-256s
(2.16.840.1.101.3.4.3.24) OID に設定します。
name
メンバーが
"SLH-DSA-SHA2-256f" の場合:
algorithm オブジェクト識別子を
id-slh-dsa-sha2-256f
(2.16.840.1.101.3.4.3.25) OID に設定します。
name
メンバーが
"SLH-DSA-SHAKE-128s" の場合:
algorithm オブジェクト識別子を
id-slh-dsa-shake-128s
(2.16.840.1.101.3.4.3.26) OID に設定します。
name
メンバーが
"SLH-DSA-SHAKE-128f" の場合:
algorithm オブジェクト識別子を
id-slh-dsa-shake-128f
(2.16.840.1.101.3.4.3.27) OID に設定します。
name
メンバーが
"SLH-DSA-SHAKE-192s" の場合:
algorithm オブジェクト識別子を
id-slh-dsa-shake-192s
(2.16.840.1.101.3.4.3.28) OID に設定します。
name
メンバーが
"SLH-DSA-SHAKE-192f" の場合:
algorithm オブジェクト識別子を
id-slh-dsa-shake-192f
(2.16.840.1.101.3.4.3.29) OID に設定します。
name
メンバーが
"SLH-DSA-SHAKE-256s" の場合:
algorithm オブジェクト識別子を
id-slh-dsa-shake-256s
(2.16.840.1.101.3.4.3.30) OID に設定します。
name
メンバーが
"SLH-DSA-SHAKE-256f" の場合:
algorithm オブジェクト識別子を
id-slh-dsa-shake-256f
(2.16.840.1.101.3.4.3.31) OID に設定します。
NotSupportedError
を
スローします。
privateKey フィールドを、
key の [[handle]]
内部スロットによって表される SLH-DSA 秘密鍵を表す
OCTET STRING ASN.1 型を DER エンコードした結果に設定します。
result を、data を DER エンコードした結果とします。
raw-public" の場合:
key の
[[type]]
内部スロットが "public"
でない場合、InvalidAccessError
を
スローします。
data を、key の [[handle]]
内部スロットによって表される SLH-DSA 公開鍵を含む
バイトシーケンス
とします。
result を data とします。
raw-private" の場合:
key の
[[type]]
内部スロットが "private"
でない場合、InvalidAccessError
を
スローします。
data を、key の [[handle]]
内部スロットによって表される SLH-DSA 秘密鍵を含む
バイトシーケンス
とします。
result を data とします。
jwk" の場合:
jwk を新しい JsonWebKey
辞書とします。
keyAlgorithm を、key の
[[algorithm]]
内部スロットとします。
jwk の kty 属性を
"AKP" に設定します。
jwk の alg 属性を、
keyAlgorithm の name
メンバーに設定します。
jwk の pub 属性を、
key の [[handle]]
内部スロットに対応する base64url エンコードされた公開鍵に設定します。
[[type]]
内部スロットが "private"
の場合:
priv 属性を、
key の [[handle]]
内部スロットによって表される base64url エンコードされた秘密鍵に設定します。
jwk の key_ops 属性を、
key の usages
属性に設定します。
jwk の ext 属性を、
key の [[extractable]]
内部スロットに設定します。
result を jwk とします。
NotSupportedError
を
スローします。
result を返します。
このセクションは非規範的です。
"AES-OCB" アルゴリズム識別子は、
[RFC7253] で説明されるように、
OCB モードの AES を使用して認証付き暗号化および復号を実行するために使用されます。
このアルゴリズムの認識されるアルゴリズム名
は
"AES-OCB" です。
| 操作 | パラメーター | 結果 |
|---|---|---|
| encrypt | AeadParams |
バイト シーケンス |
| decrypt | AeadParams |
バイト シーケンス |
| generateKey | AesKeyGenParams
|
CryptoKey |
| importKey | なし | CryptoKey |
| exportKey | なし | オブジェクト |
| get key length | AesDerivedKeyParams
|
整数 |
WebIDLdictionary AeadParams : Algorithm {
required BufferSource iv;
BufferSource additionalData;
[EnforceRange] octet tagLength;
};
iv メンバーは、使用する初期化ベクトルを表します。
additionalData メンバーは、含める
追加認証データを表します。
tagLength メンバーは、認証タグの望ましい長さを
表します。
AeadParams 辞書は、
[webcrypto] の AesGcmParams
辞書と同一であり、この提案を統合する際には後者を前者で置き換えられます。
normalizedAlgorithm の iv メンバーの長さが 15
バイトを超える場合、
OperationError を
スローします。
tagLength メンバーが存在しない場合:
tagLength メンバーが
64、96、または 128 のいずれかである場合:
tagLength メンバーと等しくします
OperationError
を
スローします。
additionalData を、存在する場合は normalizedAlgorithm の
additionalData メンバーとし、
それ以外の場合は空のオクテット
文字列とします。
C を、[RFC7253] のセクション 4.2
で説明される OCB-ENCRYPT 関数を、ブロック暗号として AES を使用し、
key の [[handle]]
内部スロットによって表される鍵を K 入力パラメーターとして、
normalizedAlgorithm の iv メンバーを
N 入力パラメーターとして、
additionalData を A 入力パラメーターとして、
plaintext を P 入力パラメーターとして、
tagLength を TAGLEN グローバルパラメーターとして
実行した結果の出力とします。
C を返します。
normalizedAlgorithm の iv メンバーの長さが 15
バイトを超える場合、
OperationError を
スローします。
tagLength メンバーが存在しない場合:
tagLength メンバーが
64、96、または 128 のいずれかである場合:
tagLength メンバーと等しくします
OperationError
を
スローします。
ciphertext の長さが tagLength ビット未満である場合、
OperationError を
スローします。
additionalData を、存在する場合は normalizedAlgorithm の
additionalData メンバーとし、
それ以外の場合は空のオクテット
文字列とします。
[RFC7253] のセクション 4.3
で説明される OCB-DECRYPT 関数を、ブロック暗号として AES を使用し、
key の [[handle]]
内部スロットによって表される鍵を K 入力パラメーターとして、
normalizedAlgorithm の iv メンバーを
N 入力パラメーターとして、
additionalData を A 入力パラメーターとして、
ciphertext を C 入力パラメーターとして、
tagLength を TAGLEN グローバルパラメーターとして実行します。
OperationError
を
スローします
plaintext を返します。
usages に、"encrypt"、"decrypt"、
"wrapKey"、または "unwrapKey"
のいずれでもないエントリーが含まれる場合、
SyntaxError を
スローします。
normalizedAlgorithm の length
メンバーが
128、192、または 256 のいずれとも等しくない場合、
OperationError を
スローします。
normalizedAlgorithm の length
メンバーと等しい長さの
AES 鍵を生成します。
鍵生成手順が失敗した場合、
OperationError を
スローします。
key を、生成された AES 鍵を表す新しい
CryptoKey
オブジェクトとします。
algorithm を新しい
AesKeyAlgorithm
とします。
algorithm の name
属性を
"AES-OCB" に設定します。
algorithm の length
属性を、
normalizedAlgorithm の length
メンバーと等しくなるように設定します。
key の
[[algorithm]]
内部スロットを algorithm に設定します。
key の
[[extractable]]
内部スロットを extractable に設定します。
key の [[usages]]
内部スロットを、
正規化された値
である usages に設定する。
key を返します。
keyData をインポートする鍵データとします。
usages に、"encrypt"、"decrypt"、
"wrapKey"、または "unwrapKey"
のいずれでもないエントリーが含まれる場合、
SyntaxError を
スローします。
raw-secret" の場合:jwk" の場合:JsonWebKey
辞書である場合:jwk を keyData と等しくします。
jwk が JSON Web Algorithms [JWA]
のセクション 6.4 の要件を満たさない場合、
DataError
を
スローします。
usages が空でなく、jwk の use
フィールドが存在し、かつ
"enc" でない場合、
DataError
を
スローします。
jwk の key_ops
フィールドが存在し、JSON Web Key [JWK]
の要件に従って無効である場合、または
指定された usages の値をすべて含んでいない場合、
DataError
を
スローします。
jwk の ext
フィールドが存在して値が false であり、extractable が true の場合、
DataError
を
スローします。
NotSupportedError
を
スローします。
key を、値が data である AES 鍵を表す新しい
CryptoKey
オブジェクトとします。
algorithm を新しい
AesKeyAlgorithm
とします。
algorithm の name
属性を
"AES-OCB" に設定します。
algorithm の length
属性を、data のビット単位の長さに設定します。
key の
[[algorithm]]
内部スロットを algorithm に設定します。
key を返します。
key の [[handle]]
内部スロットによって表される基礎となる暗号鍵素材にアクセスできない場合、
OperationError を
スローします。
raw-secret" の場合:
data を、key の [[handle]]
内部スロットによって表される鍵の生のオクテットを含む
バイトシーケンス
とします。
result を data とします。
jwk" の場合:
jwk を新しい JsonWebKey
辞書とします。
jwk の kty 属性を
文字列 "oct" に設定します。
jwk の k
属性を、key の [[handle]]
内部スロットによって表される鍵の生のオクテットを含み、
JSON Web Algorithms [JWA]
のセクション 6.4 に従ってエンコードされた文字列に設定します。
jwk の key_ops 属性を、
key の usages
属性と等しくなるように設定します。
jwk の ext 属性を、key の [[extractable]]
内部スロットと等しくなるように設定します。
result を jwk とします。
NotSupportedError
を
スローします。
result を返します。
normalizedDerivedKeyAlgorithm の length
メンバーが 128、192、または 256 でない場合、
OperationError を
スローします。
normalizedDerivedKeyAlgorithm の length
メンバーを返します。
このセクションは非規範的です。
"ChaCha20-Poly1305" アルゴリズム識別子は、
[RFC8439] で説明されるように、
AEAD_CHACHA20_POLY1305 を使用して認証付き暗号化および復号を実行するために使用されます。
このアルゴリズムの認識されるアルゴリズム名
は
"ChaCha20-Poly1305" です。
| 操作 | パラメーター | 結果 |
|---|---|---|
| encrypt | AeadParams |
バイト シーケンス |
| decrypt | AeadParams |
バイト シーケンス |
| generateKey | なし | CryptoKey |
| importKey | なし | CryptoKey |
| exportKey | なし | オブジェクト |
| get key length | なし | 整数 |
normalizedAlgorithm の iv メンバーの長さが 12
バイトでない場合、
OperationError を
スローします。
normalizedAlgorithm に tagLength
メンバーが
存在し、かつ 128 でない場合、
OperationError を
スローします。
additionalData を、存在する場合は normalizedAlgorithm の
additionalData メンバーとし、
それ以外の場合は空のオクテット
文字列とします。
ciphertext を、[RFC8439]
のセクション 2.8 で説明される AEAD_CHACHA20_POLY1305 暗号化アルゴリズムを、
key の [[handle]]
内部スロットによって表される鍵を鍵入力パラメーターとして、
normalizedAlgorithm の iv メンバーを
nonce 入力パラメーターとして、
plaintext を平文入力パラメーターとして、
additionalData を追加認証データ(AAD)入力パラメーターとして
実行した結果の出力とします。
ciphertext を返します。
normalizedAlgorithm の iv メンバーの長さが 12
バイトでない場合、
OperationError を
スローします。
normalizedAlgorithm に tagLength
メンバーが
存在し、かつ 128 でない場合、
OperationError を
スローします。
ciphertext の長さが 128 ビット未満である場合、
OperationError を
スローします。
additionalData を、存在する場合は normalizedAlgorithm の
additionalData メンバーとし、
それ以外の場合は空のオクテット
文字列とします。
[RFC8439]
のセクション 2.8 で説明される AEAD_CHACHA20_POLY1305 復号アルゴリズムを、
key の [[handle]]
内部スロットによって表される鍵を鍵入力パラメーターとして、
normalizedAlgorithm の iv メンバーを
nonce 入力パラメーターとして、
ciphertext を暗号文入力パラメーターとして、
additionalData を追加認証データ(AAD)入力パラメーターとして実行します。
OperationError
を
スローします
plaintext を返します。
usages に、"encrypt"、"decrypt"、
"wrapKey"、または "unwrapKey"
のいずれでもないエントリーが含まれる場合、
SyntaxError を
スローします。
256 ビットの鍵を生成します。
鍵生成手順が失敗した場合、
OperationError を
スローします。
key を、生成された鍵を表す新しい
CryptoKey
オブジェクトとします。
algorithm を新しい
KeyAlgorithm
とします。
algorithm の name
属性を
"ChaCha20-Poly1305" に設定します。
key の
[[algorithm]]
内部スロットを algorithm に設定します。
key の
[[extractable]]
内部スロットを extractable に設定します。
[[usages]]
内部スロット(
key のもの)を、正規化された値
(usages のもの)に設定する。
key を返します。
keyData をインポートする鍵データとします。
usages に、"encrypt"、"decrypt"、
"wrapKey"、または "unwrapKey"
のいずれでもないエントリーが含まれる場合、
SyntaxError を
スローします。
raw-secret" の場合:jwk" の場合:JsonWebKey
辞書である場合:jwk を keyData と等しくします。
jwk が JSON Web Algorithms [JWA]
のセクション 6.4 の要件を満たさない場合、
DataError
を
スローします。
usages が空でなく、jwk の use
フィールドが存在し、かつ
"enc" でない場合、
DataError
を
スローします。
jwk の key_ops
フィールドが存在し、JSON Web Key [JWK]
の要件に従って無効である場合、または
指定された usages の値をすべて含んでいない場合、
DataError
を
スローします。
jwk の ext
フィールドが存在して値が false であり、extractable が true の場合、
DataError
を
スローします。
NotSupportedError
を
スローします。
key を、値が data である鍵を表す新しい
CryptoKey
オブジェクトとします。
algorithm を新しい
KeyAlgorithm
とします。
algorithm の name
属性を
"ChaCha20-Poly1305" に設定します。
key の
[[algorithm]]
内部スロットを algorithm に設定します。
key を返します。
key の [[handle]]
内部スロットによって表される基礎となる暗号鍵素材にアクセスできない場合、
OperationError を
スローします。
raw-secret" の場合:
data を、key の [[handle]]
内部スロットによって表される鍵の生のオクテットを含む
バイトシーケンス
とします。
result を data とします。
jwk" の場合:
jwk を新しい JsonWebKey
辞書とします。
jwk の kty 属性を
文字列 "oct" に設定します。
jwk の k
属性を、key の [[handle]]
内部スロットによって表される鍵の生のオクテットを含み、
JSON Web Algorithms [JWA]
のセクション 6.4 に従ってエンコードされた文字列に設定します。
jwk の alg 属性を
文字列 "C20P" に設定します。
jwk の key_ops 属性を、
key の usages
属性と等しくなるように設定します。
jwk の ext 属性を、key の [[extractable]]
内部スロットと等しくなるように設定します。
result を jwk とします。
NotSupportedError
を
スローします。
result を返します。
256 を返します。
このセクションは非規範的です。
これは、[FIPS-202] で指定される SHA-3 ハッシュ関数ファミリーを説明します。
各 SHA-3 アルゴリズムの認識されるアルゴリズム名は、
それぞれ
"SHA3-256"、
"SHA3-384"、および
"SHA3-512" です。
| 操作 | パラメーター | 結果 |
|---|---|---|
| digest | なし | バイト シーケンス |
name
メンバーが
"SHA3-256" と大文字小文字を区別して文字列一致する場合:
name
メンバーが
"SHA3-384" と大文字小文字を区別して文字列一致する場合:
name
メンバーが
"SHA3-512" と大文字小文字を区別して文字列一致する場合:
操作の実行によってエラーが発生した場合、
OperationError を
スローします。
result を返します。
このセクションは非規範的です。
これは、[NIST-SP800-185] で指定される cSHAKE128 および cSHAKE256 を説明します。
functionName と customization
の両方のパラメーターが空である(または指定されていない)場合、cSHAKE は、
[FIPS-202]
のセクション 6.2 で定義される SHAKE と機能的に同等です。
認識されるアルゴリズム名は、
"cSHAKE128" および
"cSHAKE256" です。
| 操作 | パラメーター | 結果 |
|---|---|---|
| digest | CShakeParams |
バイト シーケンス |
WebIDLdictionary CShakeParams : Algorithm {
required [EnforceRange] unsigned long outputLength;
BufferSource functionName;
BufferSource customization;
};
outputLength メンバーは、要求される
ビット単位の出力長を表します。
functionName メンバーは、NIST が
cSHAKE に基づく関数を定義するために使用する関数名を表します。使用する場合、NIST
によって定義された値にのみ設定するべきです。
customization メンバーは、
カスタマイズ文字列を表します。アプリケーションは、関数の変種を定義するためにこの文字列を選択します。
outputLength を、normalizedAlgorithm の
outputLength メンバーとします。
functionName を、存在する場合は normalizedAlgorithm の
functionName メンバーとし、
それ以外の場合は空のオクテット
文字列とします。
customization を、存在する場合は normalizedAlgorithm の
customization メンバーとし、
それ以外の場合は空のオクテット
文字列とします。
name
メンバーが
"cSHAKE128" と大文字小文字を区別して文字列一致する場合:
name
メンバーが
"cSHAKE256" と大文字小文字を区別して文字列一致する場合:
操作の実行によってエラーが発生した場合、
OperationError を
スローします。
result を含むバイト シーケンスを返します。
このセクションは非規範的です。
これは、[RFC9861] で指定される TurboSHAKE128 および TurboSHAKE256 を説明します。
TurboSHAKE は、SHA-3 で使用される Keccak 置換のラウンド数を削減した版に基づく 拡張可能出力関数(XOF)のファミリーであり、同じ セキュリティ強度を維持しながら、SHAKE 関数のおよそ 2 倍の速度を実現します。
128 ビットの衝突安全性を得るには、TurboSHAKE128 の出力は少なくとも 256 ビットであるべきである。 256 ビットの衝突安全性を得るには、TurboSHAKE256 の出力は少なくとも 512 ビットであるべきである。 これらの出力長は、対応する原像および第二原像の安全性要件 (対象とするセキュリティレベルと等しい出力長のみを必要とする)も上回る。 出力長がこれらのしきい値を満たす場合、TurboSHAKE128 は NIST の耐量子 セキュリティレベル 2 を達成し、TurboSHAKE256 はレベル 5 を達成する。 [RFC9861] のセクション 7 を参照。
認識されるアルゴリズム名は、
"TurboSHAKE128" および
"TurboSHAKE256" です。
| 操作 | パラメーター | 結果 |
|---|---|---|
| digest | TurboShakeParams |
バイト シーケンス |
WebIDLdictionary TurboShakeParams : Algorithm {
required [EnforceRange] unsigned long outputLength;
[EnforceRange] octet domainSeparation;
};
outputLength メンバーは、要求される
ビット単位の出力長を表します。
domainSeparation メンバーは、ドメイン
分離バイトを表します。指定されない場合、既定値は 0x1F です。有効な値は
0x01 から 0x7F の範囲です。
KangarooTwelve と TurboSHAKE の両方を使用するプロトコルでは、ドメイン分離に
0x06、0x07、および 0x0B の値を使用することを避けるべきです。
これらは KangarooTwelve によって内部的に使用されるためです。
outputLength を、normalizedAlgorithm の
outputLength メンバーとします。
outputLength が 0 であるか、8 の倍数でない場合、
OperationError を
スローします。
domainSeparation を、存在する場合は
normalizedAlgorithm の domainSeparation
メンバーとし、
それ以外の場合は 0x1F とします。
domainSeparation が 0x01 未満または
0x7F より大きい場合、
OperationError を
スローします。
name
メンバーが
"TurboSHAKE128" と大文字小文字を区別して文字列一致する場合:
name
メンバーが
"TurboSHAKE256" と大文字小文字を区別して文字列一致する場合:
操作の実行によってエラーが発生した場合、
OperationError を
スローします。
result を返します。
このセクションは非規範的です。
これは、[RFC9861] で指定される KT128 および KT256 を説明します。
KangarooTwelve は、TurboSHAKE 上にツリーハッシュを適用し、 入力データの並列処理を可能にする拡張可能出力関数(XOF)のファミリーです。 KT128 は内部的に TurboSHAKE128 を使用し、KT256 は TurboSHAKE256 を使用します。
128 ビットの衝突安全性を得るには、KT128 の出力は少なくとも 256 ビットであるべきである。 256 ビットの衝突安全性を得るには、KT256 の出力は少なくとも 512 ビットであるべきである。 これらの出力長は、対応する原像および第二原像の安全性 要件(対象とするセキュリティレベルと等しい出力長のみを必要とする)も上回る。 出力長がこれらのしきい値を満たす場合、KT128 は NIST の耐量子 セキュリティレベル 2 を達成し、KT256 はレベル 5 を達成する。 [RFC9861] のセクション 7 を参照。
認識されるアルゴリズム名は、
"KT128" および
"KT256" です。
| 操作 | パラメーター | 結果 |
|---|---|---|
| digest | KangarooTwelveParams |
バイト シーケンス |
WebIDLdictionary KangarooTwelveParams : Algorithm {
required [EnforceRange] unsigned long outputLength;
BufferSource customization;
};
outputLength メンバーは、要求される
ビット単位の出力長を表します。
customization メンバーは、
カスタマイズ文字列を表します。アプリケーションは、関数の変種を定義するためにこの文字列を選択します。指定されない
場合、既定値は空文字列です。
outputLength を、normalizedAlgorithm の
outputLength
メンバーとします。
outputLength が 0 であるか、8 の倍数でない場合、
OperationError を
スローします。
customization を、存在する場合は
normalizedAlgorithm の customization
メンバーとし、
それ以外の場合は空のオクテット
文字列とします。
name
メンバーが
"KT128" と大文字小文字を区別して文字列一致する場合:
name
メンバーが
"KT256" と大文字小文字を区別して文字列一致する場合:
操作の実行によってエラーが発生した場合、
OperationError を
スローします。
result を返します。
このセクションは非規範的です。
これは、[NIST-SP800-185] で指定される KMAC128 および KMAC256 を説明します。
認識されるアルゴリズム名は、
"KMAC128" および
"KMAC256" です。
| 操作 | パラメーター | 結果 |
|---|---|---|
| sign | KmacParams |
バイト シーケンス |
| verify | KmacParams |
真偽値 |
| generateKey | KmacKeyGenParams |
CryptoKey |
| importKey | KmacImportParams |
CryptoKey |
| exportKey | なし | オブジェクト |
| get key length | KmacImportParams |
整数 |
WebIDLdictionary KmacKeyGenParams : Algorithm {
[EnforceRange] unsigned long length;
};
length メンバーは、生成する鍵の長さ
(ビット単位)を表します。指定されない場合、推奨される長さが使用されます。KMAC128 では 128、
KMAC256 では 256 です。
WebIDLdictionary KmacImportParams : Algorithm {
[EnforceRange] unsigned long length;
};
length メンバーは、鍵の長さ
(ビット単位)を表します。
WebIDLdictionary KmacKeyAlgorithm : KeyAlgorithm {
required [EnforceRange] unsigned long length;
};
length メンバーは、鍵の長さ
(ビット単位)を表します。
WebIDLdictionary KmacParams : Algorithm {
required [EnforceRange] unsigned long outputLength;
BufferSource customization;
};
outputLength メンバーは、要求される
ビット単位の出力長を表します。
customization メンバーは、
カスタマイズ文字列を表します。アプリケーションは、関数の変種を定義するためにこの文字列を選択します。
customization を、存在する場合は normalizedAlgorithm の
customization メンバーとし、
それ以外の場合は空のオクテット
文字列とします。
name
メンバーが
"KMAC128" と大文字小文字を区別して文字列一致する場合:
[[handle]]
内部スロットによって表される鍵を K 入力パラメーターとして、
message を X 入力パラメーターとして、
normalizedAlgorithm の
outputLength メンバーを
L 入力パラメーターとして、
customization を
S 入力パラメーターとして実行した結果とします。
name
メンバーが
"KMAC256" と大文字小文字を区別して文字列一致する場合:
[[handle]]
内部スロットによって表される鍵を K 入力パラメーターとして、
message を X 入力パラメーターとして、
normalizedAlgorithm の
outputLength メンバーを
L 入力パラメーターとして、
customization を
S 入力パラメーターとして実行した結果とします。
mac を含むバイト シーケンスを返します。
customization を、存在する場合は normalizedAlgorithm の
customization メンバーとし、
それ以外の場合は空のオクテット
文字列とします。
name
メンバーが
"KMAC128" と大文字小文字を区別して文字列一致する場合:
[[handle]]
内部スロットによって表される鍵を K 入力パラメーターとして、
message を X 入力パラメーターとして、
normalizedAlgorithm の
outputLength メンバーを
L 入力パラメーターとして、
customization を
S 入力パラメーターとして実行した結果とします。
name
メンバーが
"KMAC256" と大文字小文字を区別して文字列一致する場合:
[[handle]]
内部スロットによって表される鍵を K 入力パラメーターとして、
message を X 入力パラメーターとして、
normalizedAlgorithm の
outputLength メンバーを
L 入力パラメーターとして、
customization を
S 入力パラメーターとして実行した結果とします。
computedMac を、mac を含むバイト シーケンスとします。
computedMac が signature と等しい場合は true を返し、 それ以外の場合は false を返します。 この比較は定数時間で実行しなければなりません。
usages に "sign" または
"verify" でないエントリーが含まれる場合、
SyntaxError を
スローします。
長さが length ビットの鍵を生成します。
鍵生成手順が失敗した場合、
OperationError を
スローします。
key を、生成された鍵を表す新しい
CryptoKey
オブジェクトとします。
algorithm を新しい
KmacKeyAlgorithm
とします。
algorithm の length
属性を
length に設定します。
key の
[[algorithm]]
内部スロットを algorithm に設定します。
key の
[[extractable]]
内部スロットを extractable に設定します。
[[usages]]
内部スロット(
key のもの)を、正規化された値
(usages のもの)に設定する。
key を返します。
keyData をインポートする鍵データとします。
usages に
"sign" または "verify" でないエントリーが含まれる場合、
SyntaxError を
スローします。
raw-secret" の場合:data を keyData とします。
jwk" の場合:
JsonWebKey
辞書である場合:jwk を keyData と等しくします。
jwk が JSON Web Algorithms [JWA]
のセクション 6.4 の要件を満たさない場合、
DataError
を
スローします。
usages が空でなく、jwk の use
フィールドが存在し、かつ
"sig" でない場合、
DataError
を
スローします。
jwk の key_ops
フィールドが存在し、JSON Web Key [JWK]
の要件に従って無効である場合、または
指定された usages の値をすべて含んでいない場合、
DataError
を
スローします。
jwk の ext
フィールドが存在して値が false であり、extractable が true の場合、
DataError
を
スローします。
NotSupportedError
を
スローします。
length を data のビット単位の長さとします。
key を、data の先頭 length
ビットを持つ KMAC 鍵を表す新しい CryptoKey
オブジェクトとします。
algorithm を新しい
KmacKeyAlgorithm
とします。
algorithm の length
属性を
length に設定します。
key の
[[algorithm]]
内部スロットを algorithm に設定します。
key を返します。
key の [[handle]]
内部スロットによって表される基礎となる暗号鍵素材にアクセスできない場合、
OperationError を
スローします。
bits を、key の [[handle]]
内部スロットによって表される鍵の生のビットとします。
data を、bits を含むバイトシーケンス とします。
raw-secret" の場合:result を data とします。
jwk" の場合:
jwk を新しい JsonWebKey
辞書とします。
jwk の kty 属性を
文字列 "oct" に設定します。
jwk の k
属性を、data を含み、
JSON Web Algorithms [JWA]
のセクション 6.4 に従ってエンコードされた文字列に設定します。
keyAlgorithm を、key の
[[algorithm]]
内部スロットとします。
jwk の key_ops 属性を、
key の usages
属性と等しくなるように設定します。
jwk の ext 属性を、key の [[extractable]]
内部スロットと等しくなるように設定します。
result を jwk とします。
NotSupportedError
を
スローします。
result を返します。
この節は非規範的です。
これは、[RFC9106] で定義されている、パスワードハッシュおよび鍵導出のための Argon2 関数について説明します。
認識されるアルゴリズム名は、
それぞれの Argon2 の型について
"Argon2d"、
"Argon2i"、および
"Argon2id" です。
| 操作 | パラメーター | 結果 |
|---|---|---|
| deriveBits | Argon2Params |
バイト 列 |
| importKey | なし | CryptoKey |
| 鍵長を取得 | なし | null |
WebIDLdictionary Argon2Params : Algorithm {
required BufferSource nonce;
required [EnforceRange] unsigned long parallelism;
required [EnforceRange] unsigned long memory;
required [EnforceRange] unsigned long passes;
[EnforceRange] octet version;
BufferSource secretValue;
BufferSource associatedData;
};
nonce メンバーは、パスワードハッシュアプリケーションにおける
ソルトである nonce を表します。
parallelism メンバーは、
並列度を表します。
memory メンバーは、キビバイト単位のメモリサイズを
表します。これは並列度の少なくとも 8 倍でなければなりません。
passes メンバーは、
パス数を表します。
version メンバーはバージョン番号を表します。既定値であり、
現在定義されている唯一のバージョンは 19 (0x13) です。
secretValue メンバーは任意の
秘密値を表します。
associatedData メンバーは任意の
関連データを表します。
パラメーターの推奨値については、[RFC9106] の第 4 節を参照してください。
length が null であるか、32 (4*8) 未満であるか、8 の倍数でない場合、
OperationError を
スローします。
normalizedAlgorithm の version
メンバーが
存在し、かつ 19 (0x13) でない場合、
OperationError を
スローします。
normalizedAlgorithm の
parallelism メンバーが 0、
または 16777215 (2^24-1) より大きい場合、
OperationError を
スローします。
normalizedAlgorithm の
memory メンバーが、
normalizedAlgorithm の
parallelism メンバーの
8 倍未満である場合、
OperationError を
スローします。
normalizedAlgorithm の
passes メンバーが 0 である場合、
OperationError を
スローします。
存在する場合、secretValue を
normalizedAlgorithm の
secretValue メンバーとします。
存在する場合、associatedData を
normalizedAlgorithm の
associatedData メンバーとします。
result を、[RFC9106]
の第 3 節で定義されている Argon2 関数を、
key の
[[handle]]
内部スロットによって表されるパスワードをメッセージ P として、
normalizedAlgorithm の
nonce 属性を nonce S として、
normalizedAlgorithm の
parallelism 属性の値を
並列度 p として、
normalizedAlgorithm の
memory 属性の値を
メモリサイズ m として、
normalizedAlgorithm の
passes 属性の値を
パス数 t として、
0x13 をバージョン番号 v として、
secretValue(存在する場合)を秘密値 K として、
associatedData(存在する場合)を関連データ X として、
type を型 y として、および
length を 8 で割った値をタグ長 T として使用して
実行した結果とします。
鍵導出操作が失敗した場合、
OperationError を
スローします。
result を返します。
keyData をインポートする鍵データとします。
format が "raw-secret" でない場合、NotSupportedError
をスローします。
usages に
"deriveKey" または "deriveBits" でない値が含まれている場合、
SyntaxError を
スローします。
extractable が false でない場合、
SyntaxError を
スローします。
key を、keyData を表す新しい CryptoKey
とします。
algorithm を新しい KeyAlgorithm
オブジェクトとします。
key の
[[algorithm]]
内部スロットを algorithm に設定します。
key を返します。
null を返します。
この節では、JSON Web Key で使用するために、次のアルゴリズム識別子を IANA JSON Web Signature and Encryption Algorithms Registry に登録します。
この節では、JSON Web Key で使用するために、次の鍵操作を IANA JSON Web Key Operations Registry に登録します。
この節は非規範的です。
この仕様では、多数のアルゴリズムおよび操作を定義しています。実装者に ガイダンスを提供し、ウェブプラットフォームの耐量子移行を 加速するため、この節では、実装において優先すべきアルゴリズムおよび 操作を推奨します。
SubtleCrypto.supports
メソッドは、機能検出、適切なフォールバック、およびプログレッシブ
エンハンスメントを可能にすることで、この仕様の他のすべてのアルゴリズムおよび
操作の迅速な導入を容易にします。
SubtleCrypto.getPublicKey
メソッドは、この仕様および [webcrypto] で定義されている非対称アルゴリズムを
実用的に使用するために重要です。このメソッドにより、アプリケーションは対応する公開鍵を保存せずに
秘密鍵のみを保存でき、秘密鍵と公開鍵が実際に対応していることを
検証する必要もなくなるため、鍵管理が簡単になります。さらに、これによりライブラリ
作者は、出力に公開鍵値をコミットするプロトコルへの入力として
抽出不可能な秘密鍵を受け入れることができます。
アルゴリズムに関しては、次のものが耐量子移行およびウェブ上で 最新の暗号プロトコルを利用可能にするために最も優先度が高いと考えられ、 優先順位順に示します。
customization パラメーターが存在し、
空でないときには必ず
NotSupportedError をスローし
(かつ
SubtleCrypto.supports
から false を返す)ようにする必要があります。
SLH-DSA は、NIST [FIPS-204] によって標準化されたステートレスなハッシュベースのデジタル 署名アルゴリズムです。これまでのところ ML-DSA より導入例は少ないものの、ML-DSA の代替が必要になった場合には 実装する価値が生じる可能性があります。
これら以外にも、AES-OCB、 TurboSHAKE、 KangarooTwelve、および KMAC はいずれも有用な追加機能ですが、 耐量子移行にとって直ちに重要というわけではありません。
この例では、利用可能な場合は Argon2、そうでない場合は PBKDF2 を使用してパスワードから鍵を導出し、 次に、利用可能な場合は AES-OCB、そうでない場合は AES-GCM を使用して、その鍵でテキストを暗号化および復号します。
const password = 'correct horse battery staple';
const derivationAlg =
SubtleCrypto.supports?.('importKey', 'Argon2id') ?
'Argon2id' :
'PBKDF2';
const encryptionAlg =
SubtleCrypto.supports?.('importKey', 'AES-OCB') ?
'AES-OCB' :
'AES-GCM';
const passwordKey = await crypto.subtle.importKey(
derivationAlg === 'Argon2id' ? 'raw-secret' : 'raw',
new TextEncoder().encode(password),
derivationAlg,
/* 抽出可能: */ false,
['deriveKey']
);
const nonce = crypto.getRandomValues(new Uint8Array(16));
const derivationParams =
derivationAlg === 'Argon2id' ?
{
nonce,
parallelism: 4,
memory: 2 ** 21,
passes: 1
} :
{
salt: nonce,
iterations: 100_000,
hash: 'SHA-256'
};
const key = await crypto.subtle.deriveKey(
{
name: derivationAlg,
...derivationParams
},
passwordKey,
{
name: encryptionAlg,
length: 256
},
/* 抽出可能: */ false,
['encrypt', 'decrypt']
);
const plaintext = 'Hello, world!';
const iv = crypto.getRandomValues(new Uint8Array(16));
const encrypted = await crypto.subtle.encrypt(
{ name: encryptionAlg, iv },
key,
new TextEncoder().encode(plaintext)
);
// 導出アルゴリズムと暗号化アルゴリズム、およびそのパラメーターを保存する
// 暗号文も保存し(例: IndexedDB またはデータベース)、
// 後でそれらを取得する。その後、元のパラメーターと
// パスワードを使用して鍵を導出する。ここでは直ちに
// 同じ鍵オブジェクトを使用して再び復号する。
const decrypted = new TextDecoder().decode(await crypto.subtle.decrypt(
{ name: encryptionAlg, iv },
key,
encrypted
));
このセクションは非規範的です。
JWK のインポートおよびエクスポートに関する 規範要件については、各アルゴリズム固有のセクションを参照してください。
| JSON Web Key | AlgorithmIdentifier |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
このセクションは非規範的です。
PKCS#8 PrivateKeyInfo のインポートおよびエクスポートに関する 規範要件については、各アルゴリズム固有のセクションを参照してください。
| privateKeyAlgorithm | privateKey 形式 | AlgorithmIdentifier | 参考文献 |
|---|---|---|---|
| id-ml-dsa-44 (2.16.840.1.101.3.4.3.17) | ML-DSA-44-PrivateKey |
"ML-DSA-44"
|
[CSOR], [RFC9881] |
| id-ml-dsa-65 (2.16.840.1.101.3.4.3.18) | ML-DSA-65-PrivateKey |
"ML-DSA-65"
|
[CSOR], [RFC9881] |
| id-ml-dsa-87 (2.16.840.1.101.3.4.3.19) | ML-DSA-87-PrivateKey |
"ML-DSA-87"
|
[CSOR], [RFC9881] |
| id-alg-ml-kem-512 (2.16.840.1.101.3.4.4.1) | ML-KEM-512-PrivateKey |
"ML-KEM-512"
|
[CSOR], [RFC9935] |
| id-alg-ml-kem-768 (2.16.840.1.101.3.4.4.2) | ML-KEM-768-PrivateKey |
"ML-KEM-768"
|
[CSOR], [RFC9935] |
| id-alg-ml-kem-1024 (2.16.840.1.101.3.4.4.3) | ML-KEM-1024-PrivateKey |
"ML-KEM-1024"
|
[CSOR], [RFC9935] |
| id-slh-dsa-sha2-128s (2.16.840.1.101.3.4.3.20) | OCTET STRING |
"SLH-DSA-SHA2-128s"
|
[CSOR], [RFC9814] |
| id-slh-dsa-sha2-128f (2.16.840.1.101.3.4.3.21) | OCTET STRING |
"SLH-DSA-SHA2-128f"
|
[CSOR], [RFC9814] |
| id-slh-dsa-sha2-192s (2.16.840.1.101.3.4.3.22) | OCTET STRING |
"SLH-DSA-SHA2-192s"
|
[CSOR], [RFC9814] |
| id-slh-dsa-sha2-192f (2.16.840.1.101.3.4.3.23) | OCTET STRING |
"SLH-DSA-SHA2-192f"
|
[CSOR], [RFC9814] |
| id-slh-dsa-sha2-256s (2.16.840.1.101.3.4.3.24) | OCTET STRING |
"SLH-DSA-SHA2-256s"
|
[CSOR], [RFC9814] |
| id-slh-dsa-sha2-256f (2.16.840.1.101.3.4.3.25) | OCTET STRING |
"SLH-DSA-SHA2-256f"
|
[CSOR], [RFC9814] |
| id-slh-dsa-shake-128s (2.16.840.1.101.3.4.3.26) | OCTET STRING |
"SLH-DSA-SHAKE-128s"
|
[CSOR], [RFC9814] |
| id-slh-dsa-shake-128f (2.16.840.1.101.3.4.3.27) | OCTET STRING |
"SLH-DSA-SHAKE-128f"
|
[CSOR], [RFC9814] |
| id-slh-dsa-shake-192s (2.16.840.1.101.3.4.3.28) | OCTET STRING |
"SLH-DSA-SHAKE-192s"
|
[CSOR], [RFC9814] |
| id-slh-dsa-shake-192f (2.16.840.1.101.3.4.3.29) | OCTET STRING |
"SLH-DSA-SHAKE-192f"
|
[CSOR], [RFC9814] |
| id-slh-dsa-shake-256s (2.16.840.1.101.3.4.3.30) | OCTET STRING |
"SLH-DSA-SHAKE-256s"
|
[CSOR], [RFC9814] |
| id-slh-dsa-shake-256f (2.16.840.1.101.3.4.3.31) | OCTET STRING |
"SLH-DSA-SHAKE-256f"
|
[CSOR], [RFC9814] |
このセクションは非規範的です。
SPKI のインポートおよびエクスポートに関する 規範要件については、各アルゴリズム固有のセクションを参照してください。
| アルゴリズム OID | subjectPublicKey ASN.1 構造 | AlgorithmIdentifier | 参考文献 |
|---|---|---|---|
| id-ml-dsa-44 (2.16.840.1.101.3.4.3.17) | BIT STRING |
"ML-DSA-44"
|
[CSOR], [RFC9881] |
| id-ml-dsa-65 (2.16.840.1.101.3.4.3.18) | BIT STRING |
"ML-DSA-65"
|
[CSOR], [RFC9881] |
| id-ml-dsa-87 (2.16.840.1.101.3.4.3.19) | BIT STRING |
"ML-DSA-87"
|
[CSOR], [RFC9881] |
| id-alg-ml-kem-512 (2.16.840.1.101.3.4.4.1) | BIT STRING |
"ML-KEM-512"
|
[CSOR], [RFC9935] |
| id-alg-ml-kem-768 (2.16.840.1.101.3.4.4.2) | BIT STRING |
"ML-KEM-768"
|
[CSOR], [RFC9935] |
| id-alg-ml-kem-1024 (2.16.840.1.101.3.4.4.3) | BIT STRING |
"ML-KEM-1024"
|
[CSOR], [RFC9935] |
| id-slh-dsa-sha2-128s (2.16.840.1.101.3.4.3.20) | BIT STRING |
"SLH-DSA-SHA2-128s"
|
[CSOR], [RFC9814] |
| id-slh-dsa-sha2-128f (2.16.840.1.101.3.4.3.21) | BIT STRING |
"SLH-DSA-SHA2-128f"
|
[CSOR], [RFC9814] |
| id-slh-dsa-sha2-192s (2.16.840.1.101.3.4.3.22) | BIT STRING |
"SLH-DSA-SHA2-192s"
|
[CSOR], [RFC9814] |
| id-slh-dsa-sha2-192f (2.16.840.1.101.3.4.3.23) | BIT STRING |
"SLH-DSA-SHA2-192f"
|
[CSOR], [RFC9814] |
| id-slh-dsa-sha2-256s (2.16.840.1.101.3.4.3.24) | BIT STRING |
"SLH-DSA-SHA2-256s"
|
[CSOR], [RFC9814] |
| id-slh-dsa-sha2-256f (2.16.840.1.101.3.4.3.25) | BIT STRING |
"SLH-DSA-SHA2-256f"
|
[CSOR], [RFC9814] |
| id-slh-dsa-shake-128s (2.16.840.1.101.3.4.3.26) | BIT STRING |
"SLH-DSA-SHAKE-128s"
|
[CSOR], [RFC9814] |
| id-slh-dsa-shake-128f (2.16.840.1.101.3.4.3.27) | BIT STRING |
"SLH-DSA-SHAKE-128f"
|
[CSOR], [RFC9814] |
| id-slh-dsa-shake-192s (2.16.840.1.101.3.4.3.28) | BIT STRING |
"SLH-DSA-SHAKE-192s"
|
[CSOR], [RFC9814] |
| id-slh-dsa-shake-192f (2.16.840.1.101.3.4.3.29) | BIT STRING |
"SLH-DSA-SHAKE-192f"
|
[CSOR], [RFC9814] |
| id-slh-dsa-shake-256s (2.16.840.1.101.3.4.3.30) | BIT STRING |
"SLH-DSA-SHAKE-256s"
|
[CSOR], [RFC9814] |
| id-slh-dsa-shake-256f (2.16.840.1.101.3.4.3.31) | BIT STRING |
"SLH-DSA-SHAKE-256f"
|
[CSOR], [RFC9814] |
非規範的と明記されたセクションに加えて、この仕様のすべての作成者向けガイドライン、図、例、および注記は 非規範的です。この仕様のそれ以外のすべては規範的です。
この文書のキーワード MUST は、 ここに示すようにすべて 大文字で表記されている場合に限り、 BCP 14 [RFC2119] [RFC8174] で説明されるとおりに解釈されます。
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in: