Hvad er den vigtigste forskel mellem en nøgle, en IV og en nonce?
En nøgle, i forbindelse med symmetrisk kryptografi, er noget, du holder hemmeligt. Enhver, der kender din nøgle (eller kan gætte den), kan dekryptere alle data, som du har krypteret med den (eller forfalske alle autentificeringskoder, som du har beregnet med den osv.).
(Der findes også “asymmetrisk” eller offentlig nøglekryptografi, hvor nøglen faktisk består af to dele: den private nøgle, som muliggør dekryptering og/eller signering, og en offentlig nøgle (afledt af den tilsvarende private nøgle), som muliggør kryptering og/eller signaturverifikation.)
En IV eller initialiseringsvektor er i bredeste forstand blot den indledende værdi, der bruges til at starte en eller anden itereret proces. Udtrykket bruges i et par forskellige sammenhænge og indebærer forskellige sikkerhedskrav i hver af dem. For eksempel har kryptografiske hash-funktioner typisk en fast IV, som blot er en vilkårlig konstant, der indgår i hash-funktionens specifikation og bruges som den indledende hash-værdi, før der tilføres data:
Omvendt kræver de fleste block cipher funktionsmåder en IV, der er tilfældig og uforudsigelig, eller i det mindste unik for hver meddelelse, der krypteres med en given nøgle. (Hvis hver nøgle kun bruges til at kryptere en enkelt meddelelse, kan man naturligvis slippe af sted med at bruge en fast IV). Denne tilfældige IV sikrer, at hver meddelelse krypteres forskelligt, således at det at se flere meddelelser krypteret med den samme nøgle ikke giver angriberen flere oplysninger end blot at se en enkelt lang meddelelse. Især sikrer den, at kryptering af den samme besked to gange giver to helt forskellige ciphertexter, hvilket er nødvendigt for at krypteringsordningen er semantisk sikker.
Under alle omstændigheder behøver IV’en aldrig at blive holdt hemmelig – hvis den gjorde det, ville det være en nøgle og ikke en IV. Faktisk ville det i de fleste tilfælde ikke være praktisk at holde IV’en hemmelig, selv om man ønskede det, da modtageren skal kende den for at dekryptere dataene (eller verificere hash’en osv.).
En nonce er i bred forstand blot “et tal, der kun bruges én gang”. Det eneste, der generelt kræves af en nonce, er, at den aldrig må bruges to gange (inden for det relevante anvendelsesområde, f.eks. kryptering med en bestemt nøgle). de unikke IV’er, der anvendes til block cipher-kryptering, kvalificerer sig som nonces, men forskellige andre kryptografiske ordninger gør også brug af nonces.
Der er en vis variation om, hvilken af udtrykkene “IV” og “nonce” der anvendes for forskellige block cipher-metoder: nogle forfattere bruger udelukkende den ene eller den anden, mens andre skelner mellem dem. Især for CTR-tilstand forbeholder nogle forfattere udtrykket “IV” for den fulde cifferindgangsblok, der dannes af sammenkædningen af nonce og den oprindelige tællerværdi (normalt en blok med alle nulbits), mens andre foretrækker slet ikke at bruge udtrykket “IV” for CTR-tilstand. Alt dette kompliceres af, at der er flere variationer af, hvordan den nonce/IV, der sendes sammen med meddelelsen i CTR-tilstand, rent faktisk afbildes i den oprindelige blokchifferindgang.
Omvendt foretrækker man for andre tilstande end CTR (eller beslægtede tilstande som EAX eller GCM) næsten universelt udtrykket “IV” frem for “nonce”. Dette gælder især for CBC-tilstand, da den stiller krav til sin IV (specielt at de er uforudsigelige), som går ud over det sædvanlige krav om entydighed, der forventes af nonces.