モジュール java.base
パッケージ javax.crypto

クラスCipher

java.lang.Object
javax.crypto.Cipher
直系の既知のサブクラス:
NullCipher

public class Cipher extends Object
このクラスは、暗号化および復号化の暗号機能を提供します。 これは、JCE (Java Cryptographic Extension)フレームワークのコア部分を構成します。

Cipherオブジェクトを作成するために、アプリケーションは暗号のgetInstanceメソッドをコールし、リクエストされたtransformationの名前をそれに渡します。 必要に応じて、プロバイダの名前を指定できます。

変換は、指定された入力に対して実行し、何らかの出力を生成する操作(または操作のセット)を説明する文字列です。 変換には、常に暗号アルゴリズム(例、AES)の名前が含まれ、フィードバック・モードとパディング・スキームが続きます。

変換は、次の書式で記述されます。

  • "algorithm/mode/padding"または
  • "algorithm"

(後者の場合、モードおよびパディング方式には、プロバイダ固有のデフォルト値が使用されます。) たとえば、次は有効な変換です。

     Cipher c = Cipher.getInstance("AES/CBC/PKCS5Padding");
 
CFBOFBなどのモードを使用すると、ブロック暗号は、暗号の実際のブロック・サイズよりも小さい単位でデータを暗号化できます。 このようなモードを要求する場合、AES/CFB8/NoPaddingおよびAES/OFB32/PKCS5Padding変換で示されるように、一度に処理するビット数を、モード名に追加することで指定することもできます。 数値を指定しない場合、プロバイダ固有のデフォルトが使用されます。 (JDKプロバイダのデフォルト値については、「JDKプロバイダのドキュメント」を参照してください。) したがって、CFB8やOFB8などの8ビット・モードを使用することで、ブロック暗号をバイト指向のストリーム暗号に変換できます。

関連データ付き認証付暗号化方式(AEAD)などのモードは、機密データと暗号化されていないAdditional Associated Data (AAD)の両方に信頼性の証明を提供します。 (GCM/CCMなどのAEADおよびAADアルゴリズムの詳細は、RFC 5116を参照してください。) 機密データとAADデータは、どちらも認証タグを計算するときに使用できます(Macに似ています)。 このタグは暗号化の際に暗号テキストに追加され、復号化の際に検証されます。

GCMやCCMなどのAEADモードは、暗号テキストの信頼性計算を開始する前にAADの信頼性計算をすべて実行します。 実装の際に暗号テキストを内部にバッファしなくてすむようにするには、暗号テキストの処理(updateおよびdoFinalメソッドを使用) よりも前にGCMまたはCCMの実装にすべてのAADデータを供給(updateAADメソッドを使用)する必要があります。

GCMモードでは、ある特定のキーによる暗号化に使用されるIVは一意でなければならないという要件があります。 GCM暗号化にIVを繰り返し使用すると、偽造攻撃の対象になります。 したがって、GCMモードを使用する各暗号化演算の後に、コール元は、IV値が異なるGCMパラメータを使用してCipherオブジェクトを再初期化する必要があります。

     GCMParameterSpec s = ...;
     cipher.init(..., s);

     // If the GCM parameters were generated by the provider, it can
     // be retrieved by:
     // cipher.getParameters().getParameterSpec(GCMParameterSpec.class);

     cipher.updateAAD(...);  // AAD
     cipher.update(...);     // Multi-part update
     cipher.doFinal(...);    // conclusion of operation

     // Use a different IV value for every encryption
     byte[] newIv = ...;
     s = new GCMParameterSpec(s.getTLen(), newIv);
     cipher.init(..., s);
     ...

 
ChaCha20およびChaCha20-Poly1305アルゴリズムでは、特定のキーを使用する一意のnoncesにも同様の要件があります。 暗号化または復号化操作のたびに、呼出し元は異なるnonce値を指定するパラメータを使用してChaCha20またはChaCha20-Poly1305暗号を再初期化する必要があります。 ChaCha20およびChaCha20-Poly1305アルゴリズムの詳細は、RFC 7539を参照してください。

Javaプラットフォームのすべての実装は、カッコ内のキー・サイズを使用した次の標準のCipherオブジェクト変換をサポートするために必要です:

  • AES/CBC/NoPadding (128)
  • AES/CBC/PKCS5Padding (128)
  • AES/ECB/NoPadding (128)
  • AES/ECB/PKCS5Padding (128)
  • AES/GCM/NoPadding (128)
  • DESede/CBC/NoPadding (168)
  • DESede/CBC/PKCS5Padding (168)
  • DESede/ECB/NoPadding (168)
  • DESede/ECB/PKCS5Padding (168)
  • RSA/ECB/PKCS1Padding (1024、2048)
  • RSA/ECB/OAEPWithSHA-1AndMGF1Padding (1024、2048)
  • RSA/ECB/OAEPWithSHA-256AndMGF1Padding (1024、2048)
これらの変換については、Javaセキュリティ標準アルゴリズム名仕様の「暗号セクション」を参照してください。 サポートされているその他の変換については、実装のリリース・ドキュメントを参照してください。

導入されたバージョン:
1.4
関連項目: