Vad är den största skillnaden mellan en nyckel, en IV och en nonce?
En nyckel, i samband med symmetrisk kryptografi, är något du håller hemligt. Den som känner till din nyckel (eller kan gissa sig till den) kan dekryptera alla data som du har krypterat med den (eller förfalska alla autentiseringskoder som du har beräknat med den etc.).
(Det finns också ”asymmetrisk” eller offentlig nyckelkryptografi, där nyckeln i praktiken består av två delar: den privata nyckeln, som möjliggör dekryptering och/eller signering, och en offentlig nyckel (härledd från den motsvarande privata nyckeln) som möjliggör kryptering och/eller signaturverifiering.)
En IV eller initialiseringsvektor är i vidaste bemärkelse bara det initiala värde som används för att starta någon itererad process. Termen används i ett par olika sammanhang och innebär olika säkerhetskrav i vart och ett av dem. Till exempel har kryptografiska hashfunktioner vanligtvis en fast IV, som bara är en godtycklig konstant som ingår i hashfunktionens specifikation och används som initialt hashvärde innan några data matas in:
Omvänt kräver de flesta blockkrypteringsformer en IV som är slumpmässig och oförutsägbar, eller åtminstone unik för varje meddelande som krypteras med en given nyckel. (Om varje nyckel endast används för att kryptera ett enda meddelande kan man naturligtvis komma undan med att använda en fast IV.) Denna slumpmässiga IV säkerställer att varje meddelande krypteras på olika sätt, så att om angriparen ser flera meddelanden krypterade med samma nyckel får han eller hon inte mer information än om han eller hon bara ser ett enda långt meddelande. I synnerhet säkerställer den att kryptering av samma meddelande två gånger ger två helt olika chiffertexter, vilket är nödvändigt för att krypteringsschemat ska vara semantiskt säkert.
I vilket fall som helst behöver IV:n aldrig hållas hemlig – om den gjorde det skulle den vara en nyckel, inte en IV. I de flesta fall skulle det faktiskt inte vara praktiskt att hålla IV hemligt även om man ville det, eftersom mottagaren måste känna till det för att kunna dekryptera uppgifterna (eller verifiera hashen etc.).
En nonce, i vid bemärkelse, är bara ”ett nummer som bara används en gång”. Det enda som i allmänhet krävs av en nonce är att den aldrig får användas två gånger (inom det relevanta tillämpningsområdet, t.ex. kryptering med en viss nyckel).De unika IV som används för blockchifferkryptering kvalificerar sig som nonces, men olika andra kryptografiska system använder sig också av nonces.
Det finns en viss variation om vilken av termerna ”IV” och ”nonce” som används för olika blockchiffermetoder: vissa författare använder uteslutande det ena eller det andra, medan andra gör en skillnad mellan dem. Särskilt för CTR-läge förbehåller vissa författare termen ”IV” för det fullständiga chifferingångsblocket som bildas av sammanfogningen av nonce och det initiala räknarvärdet (vanligtvis ett block med alla nollbitar), medan andra föredrar att inte använda termen ”IV” för CTR-läge överhuvudtaget. Allt detta kompliceras av att det finns flera varianter på hur den nonce/IV som skickas med meddelandet i CTR-läge faktiskt mappas in i den initiala blockchifferingången.
Tvärtom, för andra lägen än CTR (eller besläktade lägen som EAX eller GCM) föredras termen ”IV” nästan universellt framför ”nonce”. Detta gäller särskilt för CBC-läget eftersom det ställer krav på sin IV (särskilt att de är oförutsägbara) som går utöver det vanliga kravet på unikhet som förväntas av nonces.