Mi a fő különbség egy kulcs, egy IV és egy nonce között?
A kulcs a szimmetrikus kriptográfiában az, amit titokban tartunk. Bárki, aki ismeri a kulcsodat (vagy ki tudja találni), visszafejtheti a vele titkosított adatokat (vagy meghamisíthatja a vele kiszámított hitelesítési kódokat stb.).
(Létezik “aszimmetrikus” vagy nyilvános kulcsú kriptográfia is, ahol a kulcsnak gyakorlatilag két része van: a magánkulcs, amely lehetővé teszi a visszafejtést és/vagy aláírást, és egy nyilvános kulcs (amely a megfelelő magánkulcsból származik), amely lehetővé teszi a titkosítást és/vagy az aláírás ellenőrzését.)
Az IV vagy inicializációs vektor a legtágabb értelemben csak a kezdőérték, amelyet valamilyen iterált folyamat elindításához használnak. A kifejezést több különböző kontextusban használják, és mindegyikben más-más biztonsági követelményeket feltételez. Például a kriptográfiai hash-függvények általában fix IV-vel rendelkeznek, ami nem más, mint egy tetszőleges konstans, amely szerepel a hash-függvény specifikációjában, és amelyet kezdeti hash-értékként használnak, mielőtt bármilyen adatot betáplálnának:
Ezzel szemben a legtöbb blokkos titkosítási üzemmód olyan IV-et igényel, amely véletlen és kiszámíthatatlan, vagy legalábbis egyedi az adott kulccsal titkosított minden egyes üzenethez. (Természetesen, ha minden kulcsot mindig csak egyetlen üzenet titkosítására használunk, megúszhatjuk fix IV használatával). Ez a véletlenszerű IV biztosítja, hogy minden üzenet másképp titkosítódik, így több, ugyanazzal a kulccsal titkosított üzenetet látva a támadó nem kap több információt, mintha csak egyetlen hosszú üzenetet látna. Különösen azt biztosítja, hogy ugyanazt az üzenetet kétszer titkosítva két teljesen különböző rejtjelezett szöveg keletkezzen, ami szükséges ahhoz, hogy a titkosítási séma szemantikailag biztonságos legyen.
Az IV-t semmiképpen sem kell titokban tartani – ha ez így lenne, akkor az egy kulcs lenne, nem pedig egy IV. Sőt, a legtöbb esetben az IV titokban tartása még akkor sem lenne praktikus, ha akarnánk, mivel a címzettnek tudnia kell azt az adatok visszafejtéséhez (vagy a hash ellenőrzéséhez stb.).
A nonce tágabb értelemben csak “egy csak egyszer használt szám”. Az egyetlen dolog, amit általában megkövetelnek egy nonce-től, hogy soha nem használható kétszer (a vonatkozó hatókörön belül, például egy adott kulccsal történő titkosításhoz).A blokkos titkosításhoz használt egyedi IV-ek nonce-nek minősülnek, de számos más titkosítási séma is használ nonce-eket.
Azzal kapcsolatban, hogy az “IV” és a “nonce” kifejezések közül melyiket használják a különböző blokkos titkosítási működési módokra, van némi eltérés: egyes szerzők kizárólag az egyiket vagy a másikat használják, míg mások különbséget tesznek közöttük. Különösen a CTR üzemmód esetében egyes szerzők az “IV” kifejezést a nonce és a kezdeti számláló értékének (általában egy csupa nulla bitből álló blokk) összekapcsolásából képzett teljes rejtjelezési bemeneti blokkra tartják fenn, míg mások a CTR üzemmód esetében egyáltalán nem használják az “IV” kifejezést. Mindezt bonyolítja az a tény, hogy számos variáció létezik arra vonatkozóan, hogy a CTR üzemmódban az üzenettel együtt elküldött nonce/IV valójában hogyan illeszkedik a kezdeti blokkos rejtjelező bemenethez.
Ezzel szemben a CTR-től eltérő üzemmódok (vagy a kapcsolódó üzemmódok, mint az EAX vagy GCM) esetében az “IV” kifejezést szinte mindenhol előnyben részesítik a “nonce” kifejezéssel szemben. Ez különösen igaz a CBC módra, mivel ez olyan követelményeket támaszt az IV-vel szemben (különösen, hogy kiszámíthatatlan legyen), amelyek túlmutatnak a nonce-októl elvárt egyediség szokásos követelményén.