Derivazione di una chiave crittografica: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Revisiono voce - numerose modifiche
varie sintattiche
Riga 2:
Derivare una chiave crittografica significa ricavare una o più [[chiave crittografica|chiavi crittografiche]] da una chiave principale (in inglese detta solitamente ''master key'') o da altra informazione disponibile, ad esempio una [[password]] o una [[passphrase]]. <ref>{{cite book|author=Bezzi, Michele|chapter=Data privacy|editors=Camenisch, Jan|title=Privacy and Identity Management for Life|publisher=Springer|year=2011|isbn=9783642203176|pages=185–186|url=https://books.google.com/books?id=vYxzh3C6OPUC&pg=PA185|display-authors=etal|display-editors=etal}}</ref><ref>{{cite web|author=Kaliski, Burt|author2=[[RSA Laboratories]] |title=RFC 2898 – PKCS #5: Password-Based Cryptography Specification, Version 2.0|work=IETF|url=https://www.ietf.org/rfc/rfc2898.txt}}</ref> Ciò viene fatto in base ad una opportuna '''funzione di derivazione''' della chiave (in inglese ''Key derivation function'' o KDF) che ricava la chiave derivata a partire da dati noti. Una diffusa applicazione della derivazione di una chiave è in [[HMAC]].
 
Un algoritmo di derivazione della chiave (v. ad esempio PBKDF2), a partire da un valore arbitrario in ingresso (una stringa o un array di larghegrandi dimensioni) calcola in modo ''crittograficamente sicuro'' (ovvero non è possibile abbreviare il calcolo con una qualche scorciatoia) una chiave di dimensioni adatte alla cifratura.
Questo fa sì che sia possibile imporre un dato tempo computazionaledi calcolo per generare una chiave, nota la password (o una qualsivoglia informazione segreta), in modo che un attaccante che provi un [[metodo forza bruta|attacco a forza bruta]] o anche solo un [[attacco a dizionario]] si trovi rallentato (in modo non bypassabile) nelle operazioni.
Unendo alla password un valore pseudocasuale, che non ha bisogno di restare segreto (seed o salt), in ingresso alla funzione di derivazione della password si fa in modo che l'avversario non possa nemmeno precalcolare le chiavi corrispondenti alle password più provabili, perché saranno diverse al cambiare del salt, e quindi diverse per ogni file cifrato.
 
Riga 12:
 
===Funzioni di derivazione di chiave basate su password===
Le funzioni di derivazione di chiave sono usate anche nelle applicazioni per derivare chiavi da password segrete oppure passphrase, chele quali tipicamente non godono della proprietà di poterpossono essere usate direttamente come chiavi crittografiche. In certe applicazioni, è generalmente raccomandato che la funzione di derivazione didella chiave generi lentamente la chiave derivata, in modo da scoraggiare gli attacchi dia brute-forceforza bruta o dia [[Attacco a dizionario|dizionario]] sulla password o sulla passphrase in input.
 
Le funzioni di derivazione di chiave sono usate anche nelle applicazioni per derivare chiavi da password segrete oppure passphrase, che tipicamente non godono della proprietà di poter essere usate direttamente come chiavi crittografiche. In certe applicazioni, è generalmente raccomandato che la funzione di derivazione di chiave generi lentamente la chiave derivata, in modo da scoraggiare gli attacchi di brute-force o di dizionario sulla password o sulla passphrase in input.
 
Un particolare uso di una funzione di derivazione di chiave può essere il seguente:
Riga 27 ⟶ 26:
La chiave derivata è usata al posto della chiave originale o della password, come chiave del sistema. Il valore del ''salt'' e il numero di iterazioni (se non è prefissato) sono memorizzati nel valore hash della password o inviati come testo in piano insieme al messaggio criptato.
 
La difficoltà di forzare la chiave con un attacco dia forza brute-forcebruta aumenta all'aumentare del numero di iterazioni. Un limite pratico sul numero di iterazioni è la riluttanza degli utenti a tollerare un ritardo percepibile nell'effettuare il [[login]] nel sistema o nel vedere il messaggio decriptatodecifrato. L'uso di un [[Sale (crittografia)|salt crittografico]] evitaimpedisce, come detto prima, di precomputareprecalcolare un dizionario di chiavi derivate.
 
La prima funzione di derivazione di chiave basata su password, deliberatamente lenta dal punto di vista computazionale, fu chiamata "crypt" ("crypt(3)" nelle [[man (Unix)|pagine di manuale]] di [[Unix]]) e fu inventatoinventata da [[Robert Morris (hacker)|Robert Morris]] nel 1980 per criptarecifrare le password [[Unix]]. Tuttavia in quel periodo si verificava anche un aumento della velocità dei processori, che rendeva fattibile un [[metodo forza bruta|attacco di brute force]] contro crypt, inoltre l'aumento della capacità delle memorie rendeva inadeguato un salt a 12 bit. La funzione crypt limitava anche la password utente a 8 caratteri, limitando così anche la dimensione dello [[spazio delle chiavi]] e impedendo la definizione di passphrase "forti".
 
Le moderne funzioni di derivazione di chiave basate su password, come [[PBKDF2]] (specificata nel [[Request for Comments|RFC]] 2898) utilizzautilizzano una funzione di hash crittografica, come [[MD5]] o [[SHA1]], salt molto grandi (ad esempio su 64 bit) e un grande valore di iterazione (spesso 1000 o più). Ci sono state proposte per utilizzare algoritmi che richiedessero memorie molto grandi e altre risorse per ladi computazionicalcolo, in modo da ostacolare [[attacco custom hardware|attacchi custom hardware]].
 
==Note==