SubtleCrypto: encrypt() メソッド

安全なコンテキスト用: この機能は一部またはすべての 対応しているブラウザー において、 安全なコンテキスト (HTTPS) でのみ利用できます。

encrypt() SubtleCrypto インターフェイスのメソッドで、データを暗号化します。

引数として、暗号化する key 、アルゴリズム固有の引数、暗号化するデータ(「平文」とも呼ばれます)を取ります。 暗号化されたデータ(「暗号文」とも呼ばれます)で履行される Promise を返します。

構文

js
encrypt(algorithm, key, data)
  
algorithm

使用するアルゴリズムと、必要に応じて追加の引数を指定するオブジェクトです。

  • RSA-OAEP を使用するには、 RsaOaepParams を渡してください。
  • AES-CTR を使用するには、 AesCtrParams を渡してください。
  • AES-CBC を使用するには、 AesCbcParams を渡してください。
  • AES-GCM を使用するには、 AesGcmParams を渡してください。
  • 暗号化に使用するキーを格納した CryptoKey です。

    ArrayBufferTypedArrayDataView のいずれかで、暗号化するデータ(平文 とも呼ばれます)を格納します。

    返値

    「暗号文」を格納した ArrayBuffer で履行される Promise です。

    例外

    以下の例外が発生した場合、プロミスは拒否されます。

    InvalidAccessError DOMException

    リクエストされた処理が指定された鍵に対して有効でない場合に発生します(無効な暗号化アルゴリズム、または指定した暗号化アルゴリズムに対して無効な鍵など)。

    OperationError DOMException

    処理固有の理由で処理に失敗した場合に発生します(アルゴリズム引数が不正なサイズであったり、 AES-GCM の平文が 2 39 −256 バイトよりも長いなど)。

    対応しているアルゴリズム

    ウェブ暗号 API は encrypt() decrypt() の処理に対応する 4 つのアルゴリズムを提供します。

    これらのアルゴリズムの 1 つである RSA-OAEP は 公開鍵暗号システム です。

    ここにある他の3つの暗号化アルゴリズムはすべて 対象か偽アルゴリズム で、すべて同じ基盤である AES (Advanced Encryption Standard) をベースにしています。 これらの違いは モード です。 ウェブ暗号 API は 3 つの異なる AES モードに対応しています。
  • CTR (カウンターモード)
  • CBC (暗号化ブロックチェーン)
  • GCM (ガロア/カウンターモード)
  • 暗号文が攻撃者によって変更されていないことを調べるために、「認証された暗号化」を使用することを強く推奨します。 認証は、攻撃者がシステムに任意のメッセージの復号を依頼し、その結果を使用して秘密鍵に関する情報を推測することができる、 chosen-ciphertext 攻撃からの防御を支援します。 CTR モードと CBC モードに認証を追加することは可能ですが、既定値では提供されておらず、手動で実装するために些細な、しかし重大な間違いを犯す可能性があります。 GCM は組み込みの認証を提供し、そのため他の 2 種類の AES モードよりも推奨されることが多いです。

    RSA-OAEP

    RSA-OAEP 公開鍵暗号システムは、 RFC 3447 で定義されています。

    AES-CTR

    これは AES のカウンターモードの表現であり、 NIST SP800-38A で定義されています。

    AES はブロック暗号であり、メッセージをブロックに分割し、一度に 1 ブロックずつ暗号化することを意味しています。 CTR モードでは、メッセージのブロックが暗号化されるたびに、データの余分なブロックが混合されます。この余分なブロックは「カウンターブロック」と呼ばれます。

    指定されたカウンターブロックの値は、同じ鍵で複数回使用してはいけません。

  • n ブロックの長さのメッセージが指定された場合、ブロックごとに異なるカウンターブロックを使用しなければなりません。
  • 複数のメッセージの暗号化に同じ鍵を用いる場合、すべてのメッセージのすべてのブロックに異なるカウンターブロックを使用しなければなりません。
  • 通常これは、カウンターブロックの初期値を 2 つの連結部分に分割することで実現されます。

  • ノンス (つまり、一度しか使用しない番号)。ブロックのノンスの部分はメッセージのどのブロックでも同じです。新しいメッセージが暗号化される時刻になると、新しいノンスが選べます。ノンスは秘密である必要はありませんが、同じ鍵で再利用してはいけません。
  • カウンター。この部分はブロックが暗号化されるたびに増加します。
  • 基本的には、ノンスはカウンターブロックが一つのメッセージから次のメッセージに再利用されないことを保証し、カウンターはカウンターブロックが単一のメッセージ内で再利用されないことを保証します。

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