What is the main difference between a key, an IV and a nonce?
A key, in the context of symmetric cryptography, is something you keep secret. 鍵を知っている(または推測できる)人は、その鍵で暗号化したデータを解読できます(または、その鍵で計算した認証コードを偽造するなど)。
(「非対称」または公開鍵暗号方式もあり、鍵は事実上 2 つの部分、つまり、復号や署名を可能にする秘密鍵と、暗号化や署名の検証を可能にする公開鍵(対応する秘密鍵から派生)を持ちます)
IV または初期化ベクトルは、広義には、ある反復処理を開始するために使用する初期値だけです。 この用語はいくつかの異なる文脈で使用され、それぞれで異なるセキュリティ要件を意味します。 これは、ハッシュ関数の仕様に含まれる任意の定数であり、データが入力される前に初期ハッシュ値として使用されます:
より
逆に、ほとんどのブロック暗号方式ではランダムで予測不可能、または少なくとも与えられたキーで暗号化されるメッセージごとに固有の IV が必要とされます。 (もちろん、各鍵が単一のメッセージの暗号化にのみ使用される場合は、固定 IV を使用してもかまいません)。 このランダムなIVは、各メッセージが異なる方法で暗号化されることを保証し、同じ鍵で暗号化された複数のメッセージを見たとしても、攻撃者が単一の長いメッセージを見るよりも多くの情報を得ることができないようにするものです。 特に、同じメッセージを2回暗号化すると、2つのまったく異なる暗号文が生成されることを保証します。これは、暗号化スキームが意味的に安全であるために必要なことです。 実際、ほとんどの場合、受信者がデータを復号する (またはハッシュを検証する、など) ためにそれを知る必要があるため、IV を秘密にすることは望んでも現実的ではありません。
広義の nonce は、単に「一度だけ使用する数字」です。 ブロック暗号に使用されるユニークな IV は nonce として適格ですが、他のさまざまな暗号方式でも nonce を使用します。
異なるブロック暗号の動作モードで「IV」と「nonce」のどちらの用語を使用するかについては、いくつかの違いがあります。 特にCTRモードでは、nonceとカウンタ初期値(通常はすべてゼロビットのブロック)を連結した完全な暗号入力ブロックに対して「IV」という用語を使う人もいれば、CTRモードでは「IV」という用語を全く使わないことを好む人もいます。 これは、CTR モードでメッセージとともに送信される nonce/IV が、実際にどのように初期ブロック暗号入力にマッピングされるかにいくつかのバリエーションがあるため、すべて複雑になっています。
逆に、CTR 以外のモード(または EAX や GCM など関連モード)では、「IV」という用語が「nonce」よりほぼ普遍的に優先されます。 これは、CBC モードに特に当てはまります。CBC モードには、nonce に期待される通常の一意性の要件を超える要件 (特に、予測不可能であること) がその IV にあるためです。