機械翻訳について

6 セキュアなコーディング・ガイダンス

プレーンテキストの不要なインメモリー・バッファリングの回避

CipherメソッドupdateおよびdoFinalは、データ・ストリーミングをサポートします。 ただし、AES KeyWrapアルゴリズム(「RFC 3394: Advanced Encryption Standard (AES)キー・ラップ・アルゴリズム」で定義)を使用する暗号変換(AESWrap、AESWrapPad、AES/KW/NoPadding、AES/KWP/NoPaddingなど)は、入力データを完全に処理する前にすべての入力データが使用可能である必要があるため、データ・ストリーミングには依存しません。 その結果、AESWrap変換CipherオブジェクトがENCRYPT_MODE操作で初期化されると、updateメソッドに渡されるプレーン・テキストが内部バッファにコピーされ、後続のdoFinalメソッド・コール中に後で処理されるようになります。 Cipherオブジェクトの内部プレーン・テキスト・バッファは、doFinalの起動時またはCipherオブジェクトのガベージ・コレクション時にゼロになり、解放されます。 プレーン・テキストがAESWrap変換Cipherオブジェクトによってバッファされないようにするアプリケーションでは、updateをコールしないでください。 たとえば、次のコードを考えてみましょう。

Cipher wrapper = Cipher.getInstance("AESWrap");
wrapper.init(Cipher.ENCRYPT_MODE, secretKey);
wrapper.update(plaintext);
byte[] cipherText = wrapper.doFinal();

次の行に置き換えることができます。

Cipher wrapper = Cipher.getInstance("AESWrap");
wrapper.init(Cipher.ENCRYPT_MODE, secretKey);
byte[] cipherText = wrapper.doFinal(plaintext);