AesCtrParams
ウェブ暗号化 API の AesCtrParams 辞書は、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
ArrayBuffer・TypedArray・DataViewのいずれかで、カウンターブロックの初期値を表します。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" アルゴリズムに対応しているブラウザーは、この型に対応しているはずです。
関連情報
- CTR モードは NIST SP800-38A standard の section 6.5 で定義されています。
SubtleCrypto.encrypt()SubtleCrypto.decrypt()SubtleCrypto.wrapKey()SubtleCrypto.unwrapKey()