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、ハイブリッド 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、および将来追加される可能性のあるその他の 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 | なし | オブジェクト |
ML-KEM 鍵は、JWK 表現に [RFC9964] で定義されている "AKP" (Algorithm Key Pair) 鍵タイプを使用します。"alg" (algorithm) パラメーターは、特定の ML-KEM パラメーターセットを識別します。 公開鍵は "pub" パラメーターに格納されます。秘密鍵が含まれる場合、それは "priv" パラメーターを使用して表現されます。JWK で表現される場合、すべての鍵パラメーターは base64url エンコードされます。
key の [[type]]
内部スロットが
"public"
でない場合、
throw して
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"
でない場合、
throw して
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" のいずれでもない
エントリが含まれている場合、throw して
SyntaxError を送出します。
[FIPS-203]
のセクション 7.1 で説明されているように、
normalizedAlgorithm の name
メンバーによって示されるパラメーターセットで
ML-KEM 鍵ペアを生成します。
シード (d, z) をエクスポートできるようにするため、
d および z は生成された
鍵素材の一部として保存する必要があります。
鍵生成ステップが失敗した場合、
throw して
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"
でないエントリが含まれている場合、
throw して
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) とします。
throw して NotSupportedError
を送出します。
spki の algorithm AlgorithmIdentifier フィールドの
algorithm オブジェクト識別子フィールドが
expectedOid と等しくない場合、
throw して DataError
を送出します。
spki の algorithm
AlgorithmIdentifier フィールドの parameters フィールドが存在する場合、
throw して
DataError
を送出します。
publicKey を、
spki の subjectPublicKey フィールドによって識別される ML-KEM
公開鍵とします。
key を、publicKey を表す新しい CryptoKey
とします。
algorithm を新しい KeyAlgorithm
とします。
key の [[algorithm]]
内部スロットを algorithm に設定します。
pkcs8" の場合:
usages に
"decapsulateKey" または "decapsulateBits"
でないエントリが含まれている場合、
throw して
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 構造とします。
throw して NotSupportedError
を送出します。
privateKeyInfo の
privateKeyAlgorithm PrivateKeyAlgorithm フィールドの
algorithm オブジェクト識別子フィールドが
expectedOid と等しくない場合、
throw して DataError
を送出します。
privateKeyInfo の
privateKeyAlgorithm PrivateKeyAlgorithmIdentifier フィールドの
parameters フィールドが存在する場合、
throw して
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"
でないエントリが含まれている場合、
throw して
SyntaxError
を送出します。
data を keyData とします。
key を、data 内の ML-KEM 公開鍵データを表す新しい
CryptoKey
とします。
algorithm を新しい KeyAlgorithm
とします。
key の [[algorithm]]
内部スロットを algorithm に設定します。
raw-seed"
の場合:
usages に
"decapsulateKey" または "decapsulateBits"
でないエントリが含まれている場合、
throw して
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" の場合:JsonWebKey
辞書の場合:jwk を keyData と等しくします。
jwk の priv フィールドが存在し、
かつ usages に
"decapsulateKey" または "decapsulateBits"
でないエントリが含まれている場合、
throw して
SyntaxError
を送出します。
jwk の priv フィールドが存在せず、
かつ usages に
"encapsulateKey" または "encapsulateBits"
でないエントリが含まれている場合、
throw して
SyntaxError
を送出します。
jwk の alg
フィールドが存在しないか、その値が
normalizedAlgorithm の name
メンバーによって示される
ML-KEM パラメーターセットを識別しない場合、
throw して
DataError
を送出します。
この仕様で定義される ML-KEM パラメーターセットについて
IANA
JSON Web Signature and Encryption Algorithms レジストリに
登録されている "alg" 値は、
ML-KEM-512、ML-KEM-768、および
ML-KEM-1024 です。
実装は、同じ ML-KEM パラメーターセットを使用する JWE アルゴリズムを識別する、
このレジストリの他の値も受け入れるべきです。ただし、その JWE アルゴリズムの
JWK 表現が、"alg" 値を除いて、ここで
定義される表現と互換性があることを条件とします。
例として、登録された後の
[draft-ietf-jose-hpke-pq-pqt]
で提案されている値があります。
usages が空でなく、jwk の use
フィールドが存在し、
"enc" と等しくない場合、throw して
DataError
を送出します。
jwk の key_ops
フィールドが存在し、JSON Web
Key [JWK] の要件に従って無効であるか、
指定されたすべての usages
値を含んでいない場合、
throw して
DataError
を送出します。
jwk の ext
フィールドが存在して値が false であり、extractable が true の場合、
throw して
DataError
を送出します。
priv フィールドが
存在する場合:
algorithm を新しい KeyAlgorithm
オブジェクトのインスタンスとします。
algorithm の name
属性を、
normalizedAlgorithm の name
メンバーに設定します。
key の [[algorithm]]
内部スロットを algorithm に設定します。
NotSupportedError
を送出します。
key を返します。
key を、エクスポートされる CryptoKey とします。
key の [[handle]]
内部スロットによって表される基礎となる暗号鍵素材に
アクセスできない場合、throw して OperationError
を送出します。
spki" の場合:
key の [[type]]
内部スロットが
"public"
でない場合、
throw して 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 に設定します。
throw
して NotSupportedError
を送出します。
subjectPublicKey フィールドを keyData に設定します。
result を data を DER エンコードした結果とします。
pkcs8" の場合:
key の [[type]]
内部スロットが
"private"
でない場合、
throw して 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 に設定します。
throw
して NotSupportedError
を送出します。
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 エンコードした結果に設定します。
throw
して NotSupportedError
を送出します。
result を data を DER エンコードした結果とします。
raw-public" の場合:
key の [[type]]
内部スロットが
"public"
でない場合、
throw して InvalidAccessError
を送出します。
data を、
key の [[handle]]
内部スロットによって表される鍵の
生のオクテットを含む バイトシーケンス
とします。
result を data とします。
raw-seed"
の場合:
key の [[type]]
内部スロットが
"private"
でない場合、
throw して InvalidAccessError
を送出します。
data を、key の [[handle]]
内部スロットによって表される鍵の d および z
シード変数を連結したものを含む バイトシーケンス
とします。
d および z シード変数は、 [FIPS-203] のセクション 7.1 で説明されているように ML-KEM.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 とします。
throw
して
NotSupportedError
を送出します。
result を返します。
このセクションは非規範的です。
これは、[draft-irtf-cfrg-concrete-hybrid-kems-04] で規定されているように、 鍵のカプセル化およびカプセル化解除のために、ハイブリッド耐量子/従来型鍵 カプセル化メカニズムを使用する方法について説明します。
このアルゴリズムの 認識されるアルゴリズム
名は
"MLKEM768-P256"、"MLKEM768-X25519"、および
"MLKEM1024-P384" です。
| 操作 | パラメーター | 結果 |
|---|---|---|
| カプセル化 | なし | EncapsulatedBits |
| カプセル化解除 | なし | バイト シーケンス |
| 共有鍵長を取得 | なし | 整数 |
| generateKey | なし | CryptoKeyPair
|
| importKey | なし | CryptoKey |
| exportKey | なし | オブジェクト |
ハイブリッド KEM 鍵は、JWK 表現に [RFC9964] で定義されている "AKP" (Algorithm Key Pair) 鍵タイプを使用します。"alg" (algorithm) パラメーターは、特定のハイブリッド KEM インスタンスを識別します。 公開鍵は "pub" パラメーターに格納されます。秘密鍵が含まれる場合、それは "priv" パラメーターを使用して表現されます。JWK で表現する場合、すべての鍵パラメーターは base64url でエンコードされます。
key の [[type]]
内部スロットが
"public"
でない場合、
例外を投げます。
例外は InvalidAccessError
です。
sharedKey および ciphertext を、
[draft-irtf-cfrg-concrete-hybrid-kems-04]
の
セクション 4 において algorithm の name
メンバーによって示されるハイブリッド
KEM インスタンスについて Encaps 関数を実行し、
key の [[handle]]
内部スロットによって表される鍵を ek 入力パラメーターとして使用した結果の出力とします。
Encaps 関数がエラーを返した場合、OperationError
を返します。
result を新しい EncapsulatedBits
辞書とします。
result の sharedKey 属性を、
sharedKey を含む ArrayBuffer を
作成した結果に設定します。
result の ciphertext 属性を、
ciphertext を含む ArrayBuffer を
作成した結果に設定します。
result を返します。
key の [[type]]
内部スロットが
"private"
でない場合、
例外を投げます。
例外は InvalidAccessError
です。
sharedKey を、[draft-irtf-cfrg-concrete-hybrid-kems-04]
の
セクション 4 において algorithm の name
メンバーによって示されるハイブリッド KEM インスタンスについて
Decaps 関数を実行し、
key の [[handle]]
内部スロットによって表される鍵を dk 入力パラメーターとして、
ciphertext を ct 入力パラメーターとして使用した結果の出力とします。
Decaps 関数がエラーを返した場合、OperationError
を返します。
sharedKey を返します。
usages に
"encapsulateKey"、"encapsulateBits"、
"decapsulateKey"、または "decapsulateBits" の
いずれでもないエントリが含まれている場合、
例外を投げます。
例外は SyntaxError です。
[draft-irtf-cfrg-hybrid-kems-12] の
セクション 5.2 で説明されている
GenerateKeyPair 関数を、
normalizedAlgorithm の name
メンバーによって示されるハイブリッド
KEM インスタンスで実行することにより、ハイブリッド KEM 鍵ペアを生成します。
鍵生成ステップが失敗した場合、
例外を投げます。
例外は 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 をインポートする鍵データとします。
raw-public" の場合:
usages に
"encapsulateKey" または "encapsulateBits" の
いずれでもないエントリが含まれている場合、
例外を投げます。
例外は SyntaxError
です。
data を keyData とします。
data のバイト単位の長さが、[draft-irtf-cfrg-concrete-hybrid-kems-04]
の
セクション 4 において normalizedAlgorithm の name
メンバーによって示されるハイブリッド KEM インスタンスの生の公開鍵の
長さ Nek でない場合、
例外を投げます。
例外は DataError
です。
key を、data 内のハイブリッド KEM 公開鍵データを表す
新しい CryptoKey
とします。
algorithm を新しい KeyAlgorithm
とします。
key の [[algorithm]]
内部スロットを algorithm に設定します。
raw-seed"
の場合:
usages に
"decapsulateKey" または "decapsulateBits" の
いずれでもないエントリが含まれている場合、
例外を投げます。
例外は SyntaxError
です。
data を keyData とします。
keyPair を、[draft-irtf-cfrg-hybrid-kems-12]
の
セクション 5.5 で説明されている
DeriveKeyPair 関数を、
normalizedAlgorithm の name
メンバーによって示されるハイブリッド KEM インスタンスで、data を
seed 入力パラメーターとして使用して実行した結果とします。
DeriveKeyPair 関数がエラーを返した場合、
例外を投げます。
例外は OperationError
です。
key を、keyPair のカプセル化解除鍵によって識別される
ハイブリッド KEM 秘密鍵を表す新しい CryptoKey
とします。
algorithm を新しい KeyAlgorithm
とします。
key の [[algorithm]]
内部スロットを algorithm に設定します。
jwk" の場合:JsonWebKey
辞書である場合:jwk を keyData と等しくします。
jwk の priv フィールドが存在し、
かつ usages に
"decapsulateKey" または "decapsulateBits" の
いずれでもないエントリが含まれている場合、
例外を投げます。
例外は SyntaxError
です。
jwk の priv フィールドが存在せず、
かつ usages に
"encapsulateKey" または "encapsulateBits" の
いずれでもないエントリが含まれている場合、
例外を投げます。
例外は SyntaxError
です。
jwk の alg
フィールドが存在しないか、
その値が normalizedAlgorithm の name
メンバーによって示されるハイブリッド KEM インスタンスを
識別しない場合、
例外を投げます。
例外は DataError
です。
この仕様で定義されているハイブリッド KEM インスタンスについて、
IANA
JSON Web 署名および暗号化アルゴリズムレジストリに
登録されている "alg" 値は、
MLKEM768-P256、MLKEM768-X25519、および
MLKEM1024-P384 です。実装は、同じハイブリッド KEM
インスタンスを使用する JWE アルゴリズムを識別する、このレジストリの
その他の値も受け入れるべきです。ただし、その JWE
アルゴリズムの JWK 表現が、"alg" 値を除いて、ここで定義されている
表現と互換性があることを条件とします。
例として、登録された後の
[draft-ietf-jose-hpke-pq-pqt]
で提案されている値があります。
usages が空でなく、jwk の use
フィールドが存在し、
"enc" と等しくない場合、
例外を投げます。
例外は DataError
です。
jwk の key_ops
フィールドが存在し、JSON Web
Key [JWK] の要件に従って無効であるか、
指定されたすべての usages
値を含まない場合、
例外を投げます。
例外は DataError
です。
jwk の ext
フィールドが存在し、その値が false で、extractable が true の場合、
例外を投げます。
例外は DataError
です。
priv フィールドが
存在する場合:
jwk の priv
属性に、ハイブリッド KEM 秘密鍵を表す有効な base64url エンコード済み
32 バイトのシードが含まれていない場合、
例外を投げます。
例外は DataError
です。
key を、
jwk の priv
属性を base64url エンコード済みシードとして解釈することで識別される
ハイブリッド KEM 秘密鍵を表す
新しい CryptoKey
オブジェクトとします。
jwk の pub
属性に、key に対応するハイブリッド KEM 公開鍵を
表す base64url エンコード済み公開鍵が
含まれていない場合、
例外を投げます。
例外は DataError
です。
jwk の pub
属性に、[draft-irtf-cfrg-concrete-hybrid-kems-04]
の
セクション 4 において normalizedAlgorithm の
name
メンバーによって示されるハイブリッド KEM インスタンスについて、
長さが Nek である有効な base64url エンコード済みの生の
公開鍵が含まれていない場合、
例外を投げます。
例外は DataError
です。
key を、
jwk の pub
属性を base64url エンコード済み公開鍵として解釈することで識別される
ハイブリッド KEM 公開鍵を表す
新しい CryptoKey
オブジェクトとします。
algorithm を KeyAlgorithm
オブジェクトの新しいインスタンスとします。
algorithm の name
属性を、
normalizedAlgorithm の name
メンバーに設定します。
key の [[algorithm]]
内部スロットを algorithm に設定します。
NotSupportedError
です。
key を返します。
key をエクスポートする CryptoKey と
します。
key の [[handle]]
内部スロットによって表される基礎となる暗号鍵素材に
アクセスできない場合、例外を投げます。
例外は OperationError
です。
raw-public" の場合:
key の [[type]]
内部スロット
が "public"
でない場合、
例外を投げます。
例外は InvalidAccessError
です。
data を、key の [[handle]]
内部スロットによって表される鍵の生のオクテットを
含む バイトシーケンス
とします。
result を data とします。
raw-seed"
の場合:
key の [[type]]
内部スロット
が "private"
でない場合、
例外を投げます。
例外は InvalidAccessError
です。
data を、key の
[[handle]]
内部スロットによって表される 32 バイトのシードを含む
バイトシーケンス
とします。
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 エンコード済み 32 バイトのシードに
設定します。
jwk の key_ops 属性を、key の usages
属性に設定します。
jwk の ext 属性を、key の [[extractable]]
内部スロット
に設定します。
result を jwk とします。
例外を投げます。
例外は NotSupportedError
です。
result を返します。
このセクションは非規範的です。
これは、[FIPS-204] で規定されているように、 署名および検証に ML-DSA を使用する方法について説明します。
このアルゴリズムの 認識されるアルゴリズム
名は
"ML-DSA-44"、"ML-DSA-65"、および "ML-DSA-87" です。
| 操作 | パラメーター | 結果 |
|---|---|---|
| 署名 | ContextParams |
バイト シーケンス |
| 検証 | 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 を、
ASN.1
構造を
解析する
アルゴリズムを、data に privateKeyInfo の
privateKey フィールドを、
structure に
asn1Structure を指定し、exactData を true に設定して実行した結果とします。
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
オブジェクトのインスタンスとします。
algorithm の name
属性を、
normalizedAlgorithm の name
メンバーに設定します。
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
秘密鍵シードを seed-only
形式(OCTET STRING の暗黙的エンコーディングを持つ
コンテキスト固有の [0] プリミティブタグを使用)で表す
ML-DSA-44-PrivateKey ASN.1 型を DER
エンコードした結果に設定します。
name
メンバーが
"ML-DSA-65" の場合:
privateKey フィールドを、
key の [[handle]]
内部スロットによって表される ML-DSA
秘密鍵シードを seed-only
形式(OCTET STRING の暗黙的エンコーディングを持つ
コンテキスト固有の [0] プリミティブタグを使用)で表す
ML-DSA-65-PrivateKey ASN.1 型を DER
エンコードした結果に設定します。
name
メンバーが
"ML-DSA-87" の場合:
privateKey フィールドを、
key の [[handle]]
内部スロットによって表される ML-DSA
秘密鍵シードを seed-only
形式(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" です。
| 操作 | パラメーター | 結果 |
|---|---|---|
| 署名 | ContextParams |
バイト シーケンス |
| 検証 | ContextParams |
真偽値 |
| generateKey | なし | CryptoKeyPair
|
| importKey | なし | CryptoKey |
| exportKey | なし | オブジェクト |
SLH-DSA 鍵は、JWK 表現に [RFC9964] で定義されている "AKP" (Algorithm Key Pair) 鍵タイプを使用します。"alg" (algorithm) パラメーターは、特定の 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 を、
ASN.1
構造を
解析する
アルゴリズムを、data に privateKeyInfo の
privateKey フィールドを、
structure に OCTET STRING を指定し、
exactData を true に設定して実行した結果とします。
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
オブジェクトのインスタンスとします。
algorithm の name
属性を、
normalizedAlgorithm の name
メンバーに設定します。
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" です。
| 操作 | パラメーター | 結果 |
|---|---|---|
| 暗号化 | AeadParams |
バイト シーケンス |
| 復号 | AeadParams |
バイト シーケンス |
| generateKey | AesKeyGenParams
|
CryptoKey |
| importKey | なし | CryptoKey |
| exportKey | なし | オブジェクト |
| 鍵の長さを取得 | 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
です。
alg
フィールドが存在し、その値が
"A128OCB" でない場合、
例外を投げます。例外は
DataError
です。
alg
フィールドが存在し、その値が
"A192OCB" でない場合、
例外を投げます。例外は
DataError
です。
alg
フィールドが存在し、その値が
"A256OCB" でない場合、
例外を投げます。例外は
DataError
です。
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" です。
| 操作 | パラメーター | 結果 |
|---|---|---|
| 暗号化 | AeadParams |
バイト シーケンス |
| 復号 | AeadParams |
バイト シーケンス |
| generateKey | なし | CryptoKey |
| importKey | なし | CryptoKey |
| exportKey | なし | オブジェクト |
| 鍵の長さを取得 | なし | 整数 |
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 に設定します。
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
です。
jwk の alg
フィールドが存在し、その値が
"C20P" でない場合、
例外を投げます。例外は
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" です。
| 操作 | パラメーター | 結果 |
|---|---|---|
| ダイジェスト | なし | バイト シーケンス |
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" です。
| 操作 | パラメーター | 結果 |
|---|---|---|
| ダイジェスト | 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" です。
| 操作 | パラメーター | 結果 |
|---|---|---|
| ダイジェスト | 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" です。
| 操作 | パラメーター | 結果 |
|---|---|---|
| ダイジェスト | 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" です。
| 操作 | パラメーター | 結果 |
|---|---|---|
| 署名 | KmacParams |
バイト シーケンス |
| 検証 | KmacParams |
真偽値 |
| generateKey | KmacKeyGenParams |
CryptoKey |
| importKey | KmacImportParams |
CryptoKey |
| exportKey | なし | オブジェクト |
| 鍵の長さを取得 | 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 の name
属性を、
normalizedAlgorithm の name
メンバーに設定します。
algorithm の length
属性を
length に設定します。
key の [[algorithm]]
内部
スロットを algorithm に設定します。
key の [[extractable]]
内部
スロットを extractable に設定します。
key の [[usages]]
内部スロットを、
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 の name
属性を、
normalizedAlgorithm の name
メンバーに設定します。
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
オブジェクトとします。
algorithm の name
属性を、
normalizedAlgorithm の name
メンバーに設定します。
key の [[algorithm]]
内部
スロットを algorithm に設定します。
key を返します。
null を返します。
このセクションでは、JSON Web Key で使用するため、以下のアルゴリズム識別子を IANA JSON Web 署名および暗号化アルゴリズム レジストリに登録します。
これらの登録では、唯一のアルゴリズム使用場所として "JWK" を使用します。
これらは、この仕様で定義される JSON Web Key 表現に対して安定した alg 値を提供し、
Web Cryptography API
実装がこれらの鍵を
exportKey()
および importKey()
で
"jwk" を使用してシリアル化および解析できるようにします。この仕様では、
これらの
識別子を JSON Web Signature または JSON Web Encryption アルゴリズムとして使用することは定義しません。
このセクションでは、JSON Web Key で使用するため、次の鍵操作を IANA JSON Web Key Operations レジストリに登録します。
このセクションは非規範的です。
この仕様は多くのアルゴリズムおよび操作を定義します。実装者に ガイダンスを提供し、Web プラットフォームの耐量子移行を 加速するため、このセクションでは実装時に優先するべきアルゴリズムおよび 操作を推奨します。
SubtleCrypto.supports
メソッドは、機能検出、適切な
フォールバック、およびプログレッシブエンハンスメントを可能にすることで、この仕様に含まれる他のすべてのアルゴリズムおよび
操作の迅速な採用を容易にします。
SubtleCrypto.getPublicKey
メソッドは、この仕様および [webcrypto] で定義される非対称アルゴリズムを実用的に使用するために重要です。このメソッドは、
対応する公開鍵を保存せずに秘密鍵のみをアプリケーションが保存できるようにし、さらに秘密鍵
と公開鍵が実際に対応していることを検証する必要もなくすことで、鍵管理を簡素化します。さらに、これはライブラリ
作者が、公開鍵の値を出力にコミットするプロトコルへの入力として
抽出不可能な秘密鍵を受け入れられるようにします。
アルゴリズムに関しては、次のものが耐量子移行および Web 上で最新の暗号プロトコルを可能にするうえで最優先と 見なされ、優先順位順に示します:
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 = '正しい 馬 バッテリー ホチキス';
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 = 'こんにちは、世界!';
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: