このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docs コミュニティーについてもっと知り、仲間になるにはこちらから。

View in English Always switch to English

AesCtrParams

ウェブ暗号化 APIAesCtrParams 辞書は、AES-CTR アルゴリズムを用いる際、SubtleCrypto.encrypt()SubtleCrypto.decrypt()SubtleCrypto.wrapKey()SubtleCrypto.unwrapKey() の引数 algorithm に渡すオブジェクトを表します。

AES はブロック暗号なので、メッセージをブロックに分割し、ブロック単位で暗号化を行います。CTR モードでは、メッセージのブロックを暗号化するたびに、追加のブロックを混ぜます。この追加のブロックは「カウンターブロック」と呼ばれます。

あるカウンターブロックの値は、同じ鍵では決して複数回用いてはいけません。

  • メッセージの長さが n ブロックのとき、それぞれのブロックで異なるカウンターブロックを用いなければいけません。
  • 同じ鍵で複数のメッセージを暗号化する場合、全てのメッセージの全てのブロックで異なるカウンターブロックを用いなければいけません。

通常、これを実現するため、カウンターブロックの初期値を 2 個の連続した部分に分けます。

  • nonce (1 回 (once) しか使用できない番号 (number)): カウンターブロックのうち nonce 部分は、メッセージ内の全ブロックで同じ値を用います。新しいメッセージを暗号化する際、毎回新しい nonce を選択します。nonce は秘密にする必要はありませんが、同じ鍵では決して再使用してはいけません。
  • カウンター: カウンターブロックのこの部分は、ブロックを暗号化するたびにインクリメントされます。

要は、nonce により異なるメッセージで同じカウンターブロックが再使用されることを防ぎ、カウンターにより同じメッセージ内で同じカウンターブロックが再使用されることを防ぎます。

メモ: 詳しくは、NIST SP800-38A standard の Appendix B を参照してください。

インスタンスプロパティ

name

文字列です。AES-CTR に設定してください。

counter

An ArrayBufferTypedArrayDataView のいずれかで、カウンターブロックの初期値を表します。16 バイト (AES のブロックサイズ) でなければいけません。このブロックの右から length ビットがカウンターとして用いられ、残りが nonce として用いられます。たとえば、length を 64 に設定した場合は、counter の前半が nonce となり、後半がカウンターとして用いられます。

length

Number で、カウンターブロックのうち実際にカウンターとして用いるビット数を表します。カウンターは、ラップアラウンドが起きないよう、十分長い必要があります。すなわち、メッセージが n ブロックで、カウンターが m ビットのとき、n <= 2^m が成り立つ必要があります。CTR を定義している NIST SP800-38A 標準では、カウンターブロックの半分をカウンターとして用いることを推奨しています。(Appendix B.2 を参照してください) これは AES では 64 ビットになります。

SubtleCrypto.encrypt() および SubtleCrypto.decrypt() の例を参照してください。

仕様書

Specification
Web Cryptography Level 2
# dfn-AesCtrParams

ブラウザーの互換性

SubtleCrypto.encrypt()SubtleCrypto.decrypt()SubtleCrypto.wrapKey()SubtleCrypto.unwrapKey() メソッドで "AES-CTR" アルゴリズムに対応しているブラウザーは、この型に対応しているはずです。

関連情報