質問するログイン新規登録

回答編集履歴

1

初期化ベクトルの意味について解説を追加

2017/07/31 04:02

投稿

tacsheaven
tacsheaven

スコア13707

answer CHANGED
@@ -3,4 +3,15 @@
3
3
  0. 暗号化時に与えた鍵
4
4
  0. 同じく、暗号化時に与えた**初期化ベクトル(iv)**
5
5
 
6
- 挙げられたコードだと、暗号化したときと iv が異なるでしょうから、復号に失敗するのは当然です。
6
+ 挙げられたコードだと、暗号化したときと iv が異なるでしょうから、復号に失敗するのは当然です。
7
+
8
+ ---
9
+ なぜ初期化ベクトルがあるのか:
10
+ AESはブロック暗号です。ブロック単位で暗号化を行い、ひとつ前のブロックの(暗号化後の)情報をもとに次のブロックの暗号化を行います。
11
+ ということは、もし平文の「先頭のブロック」が同一の情報であった場合、暗号化した後の先頭のブロックもまた同一になってしまいます。
12
+ ※例えばビジネスメールの先頭によくある、「拝啓 貴社ますますご清栄のことと…」のような定型文があれば、その部分は同じになってしまいます。
13
+ これでは、平文「そのもの」はわからないにしても、「似たような文書である」ということが分かってしまい、暗号としては強度が落ちます。
14
+
15
+ これを回避するために、先頭のブロックのさらに前に、「毎回ランダムな」ブロックを一つ用意して、暗号化後の先頭ブロックが同一になるのを避けています。これが初期化ベクトルです。(なので初期化ベクトルはブロック長と同一サイズになる)
16
+ 当然、復号する際にこの初期化ベクトルが分からなければ、まともに復号できません。
17
+ ※当然ながら、初期化ベクトルを毎回同一にしてしまっては意味がありません