web-dev-qa-db-ja.com

暗号ブロック連鎖で初期化ベクトルを失う

メッセージを作成し、暗号ブロックチェーンを使用して暗号化しました。

レシーバーが初期化ベクトルを失うか、まったく受信しない場合はどうなりますか?

1
Ahmed Iraqi

CBCモードでメッセージを復号化するとき、各暗号文ブロックc 選択された鍵で復号化され、前の暗号文ブロックcとXORされますi-1

以来、c1、cはありません、代わりにIVを使用します。そのため、受信者が暗号化テキストとそれを暗号化するために使用されたキーを知っているがIVを知らない場合、最初のブロックを除いてすべてを復号化できます。

1
TheWolf

暗号化ブロックチェーンでは、各ブロックは、プレーンテキストではなく、前のブロックのciphertextとXORされます。したがって、1つのブロックを解読できない場合でも、完全なブロックをそのまま正しく受信している限り、それを使用して次のブロックを解読できます。

したがって、受信機に初期化ベクトルがない場合、受信機は受信した最初のブロックを解読できません。ただし、最初のブロックを受信する限り、2番目(およびその後の各ブロック)のブロックは正常に解読されます。

3
Johnny

すでに回答したように、より大きな問題は最初のブロックが文字化けしていないことではありません。本当の問題は、Authenticated Encryption(またはAEAD) 必要に応じて を使用する場合、IVなしではメッセージを認証できないことです(IVはMACでカバーされている必要があるため)。メッセージを認証できません。復号化しないでください。 MACの役割は、認証されていないメッセージが実際のキーと一緒にAES(またはその他)に渡されないようにすることです。

IVがないメッセージを復号化しようとしているため、それらも認証されていない(または、IVをカバーしていないMACがあり、壊れている)と想定する必要があります。修正してください。

CBC + HMAC、暗号化してからMAC(つまりMAC-then-decrypt)、およびIVをカバーするMACを行うことができ、安全です。ただし、AES-GCMまたはChacha20-Poly1305を使用する方がはるかに優れています。 libsodiumまたはGoogle Tinkを使用するのがさらに良いでしょう。

2
Z.T.