Generazione sicura di chiavi, nonce e IV
Utilizzi secrets, os.urandom e wrapper sicuri in Python e Node.
Generazione sicura di chiavi, nonce e IV è una lezione Cryptology Academy gratuita su CoddyKit. Questa è la lezione 4 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Cryptology Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Cryptology Academy include 4 lezioni in totale.
Le tre categorie
Tre valori crittografici distinti richiedono una generazione sicura: (1) Chiavi: hanno lunga durata e devono essere imprevedibili e segrete. (2) IV: sono specifici per messaggio, possono essere pubblici ma devono essere imprevedibili (CBC) o univoci (GCM). (3) Nonce: devono essere univoci per ogni utilizzo e possono essere casuali oppure no.
Chiavi simmetriche
AES-128: secrets.token_bytes(16). AES-256: secrets.token_bytes(32). ChaCha20: secrets.token_bytes(32). Non derivi mai chiavi dalle password senza una KDF (PBKDF2/Argon2). Non riutilizzi mai le chiavi tra algoritmi o scopi diversi.
Generazione di chiavi asimmetriche
from cryptography.hazmat.primitives.asymmetric import ec, rsa rsa_key = rsa.generate_private_key(public_exponent=65537, key_size=2048) ec_key = ec.generate_private_key(ec.SECP256R1()) # The library handles entropy sourcing internally
IV per AES-CBC
AES-CBC richiede un IV da 16 byte uniformemente casuale per ogni messaggio. Non riutilizzi mai un IV con la stessa chiave. Non utilizzi mai un contatore come IV in modalità CBC. Generi l'IV con: iv = os.urandom(16). Preannetta l'IV al ciphertext: non deve essere segreto, ma solo imprevedibile.
Nonce per AES-GCM
AES-GCM richiede un nonce univoco da 96 bit per ogni coppia (chiave, messaggio). Il riutilizzo del nonce compromette catastroficamente GCM: l'attaccante recupera la chiave di autenticazione e può falsificare i messaggi. Utilizzi un nonce casuale da 12 byte (limite del compleanno a 2^32 messaggi) oppure un contatore.
Nonce basati su contatore
Per la cifratura ad alto volume con una singola chiave: mantenga un contatore persistente per ogni chiave. nonce = counter.to_bytes(12, "big"). Incrementi il contatore dopo ogni cifratura. Salvi il contatore in una memoria persistente: un ripristino al riavvio causa il riutilizzo.
AEAD resistenti all'uso scorretto dei nonce
AES-GCM-SIV e Deoxys-II sono resistenti all'uso scorretto dei nonce: il riutilizzo del nonce riduce la sicurezza a quella della cifratura deterministica (senza perdita della chiave di autenticazione). Sono consigliati quando è difficile garantire l'univocità dei nonce (sistemi distribuiti, scenari di arresto e riavvio).
HKDF per la derivazione delle chiavi
Non utilizzi direttamente il materiale grezzo delle chiavi per scopi diversi. Derivi chiavi specifiche per ogni scopo: from cryptography.hazmat.primitives.kdf.hkdf import HKDF. hkdf = HKDF(SHA256(), 32, salt, info=b"enc_key"). key = hkdf.derive(master_key). Utilizzi un valore info diverso per ogni scopo.
Chiavi di sessione
Derivi chiavi specifiche per la sessione a partire da un segreto condiviso (ad esempio l'output di ECDH) utilizzando HKDF. TLS 1.3 deriva chiavi separate client/server per l'handshake e i dati dell'applicazione. Le chiavi di sessione isolano le compromissioni: conoscere una chiave di sessione non rivela nulla sulle altre.
Key wrapping
Per archiviare una chiave in modo sicuro, la protegga con una Key Encryption Key (KEK) utilizzando AES-KW (RFC 3394) o AES-GCM. La chiave protetta può essere archiviata in un database o trasmessa. La KEK viene conservata in un HSM o in un keystore con supporto hardware (Android Keystore, Apple Secure Enclave).
Checklist di audit
Prima della distribuzione verifichi: (1) tutte le chiavi provengono da os.urandom/secrets. (2) Nessuna chiave o IV hardcoded. (3) Gli IV non vengono mai riutilizzati con la stessa chiave. (4) I nonce GCM sono univoci per ogni messaggio. (5) È definito un piano di rotazione delle chiavi. (6) La derivazione delle chiavi utilizza HKDF con stringhe info distinte.
Verifica rapida
Qual è la conseguenza del riutilizzo di un nonce in AES-GCM?
Riepilogo
Le chiavi richiedono una generazione realmente casuale; gli IV CBC richiedono casualità; i nonce GCM richiedono univocità. Utilizzi os.urandom/secrets, derivi le chiavi con HKDF e le protegga con KEK. Le AEAD resistenti all'uso scorretto dei nonce proteggono dal riutilizzo accidentale. Prossimo argomento: le prove a conoscenza zero.
Impara Cryptology Academy con un tutor IA — gratis
Scrivi ed esegui vero codice nel tuo browser, ricevi aiuto istantaneo da un tutor IA disponibile 24/7, e riprendi da dove hai lasciato sul web o nell'app.
- Corsi
- 67
- Lezioni
- 261
Domande Frequenti
La lezione «Generazione sicura di chiavi, nonce e IV» è gratuita?
Sì — il testo completo di «Generazione sicura di chiavi, nonce e IV» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Cryptology Academy, passa a CoddyKit PRO. Il corso Cryptology Academy include 4 lezioni in totale.
Cosa imparerò in «Generazione sicura di chiavi, nonce e IV»?
Utilizzi secrets, os.urandom e wrapper sicuri in Python e Node. Eserciti Cryptology Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Cryptology Academy?
Non è richiesta alcuna esperienza precedente. Cryptology Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 4 di 4.
Quanto tempo richiede la lezione «Generazione sicura di chiavi, nonce e IV»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Cryptology Academy?
Sì. Ogni lezione Cryptology Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Casualità vera e pseudocasualità
- PRNG crittograficamente sicuri
- Esaurimento dell'entropia e bug delle chiavi deboli
- Generazione sicura di chiavi, nonce e IV