回答編集履歴
1
初期化ベクトルの意味について解説を追加
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
|
+
|