回答編集履歴

1

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

2017/07/31 04:02

投稿

tacsheaven
tacsheaven

スコア13703

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