回答編集履歴
1
初期化ベクトルの意味について解説を追加
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
|
+
※当然ながら、初期化ベクトルを毎回同一にしてしまっては意味がありません
|