[解決済み] IvParameterSpec の有無にかかわらず、AES 暗号を開始した場合、何か違いがありますか?
質問
IvParameterSpecの有無に関わらず、AES暗号を開始した場合、何か違いがあるのでしょうか?
IvParameterSpecを使用する場合
SecretKeySpec skeySpec = new SecretKeySpec(key, "AES");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, skeySpec, new IvParameterSpec(new byte[16]));
IvParameterSpec を使用しない場合
SecretKeySpec skeySpec = new SecretKeySpec(key, "AES");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
いくつかのテストデータでテストしてみましたが、暗号化と復号化の結果は同じでした。
しかし、私はセキュリティの専門家ではないので、何かを見逃して、潜在的なセキュリティのループホールを作りたくはないのです。どちらが正しい方法なのでしょうか?
解決方法は?
背景を少し説明します(すでにご存じでしたらすみません、同じ用語を使っていることを確認するためです)。
- AESは ブロック暗号 128ビットブロック上で動作する暗号化アルゴリズム。
- CBCは ブロック暗号モード 大量のデータを暗号化するためにブロック暗号を使用する方法です。
- ブロック暗号モードには 初期化ベクトル (IV)は、初期化データのブロックであり、通常は基礎となる暗号のブロックサイズと同じ大きさです。
(ブロック暗号のモードに関するウィキペディアは-。 http://en.wikipedia.org/wiki/Block_cipher_mode - が実によくできていて、なぜIVが必要なのかがよくわかる)
ブロックモードによって、点滴の選択プロセスに課される要件は異なりますが、共通していることがあります。
同じIVと鍵で2つの異なるメッセージを暗号化してはならない。 そうすると、通常、攻撃者はあなたの平文と、時にはあなたの鍵(または同等の有用なデータ)を入手することができます。
CBCは、IVが攻撃者にとって予測不可能でなければならないという追加の制約を課しているのです - ですから、artjom-bの提案する
SecureRandom
を生成するのは良い方法だと思います。
さらに、artjob-bが指摘するように、CBCは機密性を与えるだけです。つまり、データは秘密にされるけれども、それがきちんと届くという保証はないということです。理想的には 認証済み モード、例えばGCM、CCM、EAXなどです。
これらのモードのいずれかを使用することは 本当に、本当に良いアイデアです . Encrypt-then-MACは専門家でも扱いにくいので、できる限り避けてください。(どうしてもやらなければならない場合は しなければならない 暗号化キーとMACキーは別のものを使用します)。
関連
-
[解決済み】Hibernateエラー:同じ識別子値を持つ別のオブジェクトがすでにセッションに関連付けられました。
-
[解決済み】Doubleはdereferencedできない?
-
[解決済み】Java JDK - doubleからintへの非可逆変換の可能性
-
[解決済み】-XX:MaxPermSizeは何をするのですか?
-
[解決済み】JLabelのテキストを中央に配置するには?
-
[解決済み】Gradleがtools.jarを見つけ出さない
-
[解決済み】Eclipseで「JUnitテストが見つかりませんでした。
-
[解決済み] Javaにおけるpublic、protected、package-private、privateの違いは何ですか?
-
[解決済み] wait()とsleep()の違いについて
-
[解決済み】「px」、「dip」、「dp」、「sp」の違いは?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】HTTPステータス 405 - リクエストメソッド「POST」はサポートされていません (Spring MVC)
-
[解決済み】javaで指定されたファイルが見つからない
-
[解決済み] java のクラス内のコンストラクタは、指定された型に適用できない
-
[解決済み】ResultSetの例外 - 結果セットの開始前
-
[解決済み】HTTPステータス500 サーブレットクラスのインスタンス化エラー [重複]。
-
[解決済み】メソッド本体がない、またはJavaで抽象的な宣言をする
-
[解決済み】java 'jar'が内部コマンドまたは外部コマンドとして認識されない。
-
[解決済み】Javaで文字列をコピーするにはどうしたらいいですか?
-
[解決済み】ソースルート外のJavaファイル intelliJ
-
[解決済み】 executeQuery()でデータ操作文が発行できない。)