0Pricing
Cryptology Academy · Lezione

libsodium: libreria crittografica resistente agli usi impropri

Scopra l'API opinionated di libsodium, progettata per rendere difficile la scelta di parametri non sicuri.

libsodium: libreria crittografica resistente agli usi impropri è una lezione Cryptology Academy gratuita su CoddyKit. Questa è la lezione 1 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.

Filosofia e origine di libsodium

libsodium è stato creato da Frank Denis come build portabile e multipiattaforma della libreria NaCl (Networking and Cryptography library), sviluppata da Daniel Bernstein, Tanja Lange e Peter Schwabe. La filosofia di base consiste nel rendere l'uso corretto della crittografia il più semplice possibile e quello scorretto il più difficile possibile. Impostazioni predefinite sicure, API semplici e scelte di algoritmi deliberate prevengono gli errori comuni che affliggono le librerie di livello inferiore.

Cifratura autenticata con chiave segreta

crypto_secretbox fornisce una cifratura autenticata con chiave segreta utilizzando XSalsa20-Poly1305. L'API accetta un messaggio, un nonce di 24 byte generato casualmente e una chiave di 32 byte. Il risultato è un testo cifrato che è sia cifrato sia autenticato. crypto_secretbox_open decifra il testo e verifica atomicamente il tag di autenticazione, restituendo un errore se rileva una manomissione. In questo modo si impedisce di decifrare testi cifrati corrotti o modificati in modo malevolo.

Cifratura autenticata a chiave pubblica

crypto_box fornisce una cifratura autenticata a chiave pubblica tra due parti utilizzando X25519-XSalsa20-Poly1305. Data la chiave privata del mittente e la chiave pubblica del destinatario, cifra e autentica il messaggio in modo che solo il destinatario previsto possa decifrarlo e che il destinatario possa verificare l'identità del mittente. crypto_box_seal è la variante anonima: il mittente rimane nascosto e viene fornita solo la cifratura, non l'autenticazione del mittente.

Firme digitali con Ed25519

crypto_sign implementa le firme digitali utilizzando Ed25519. La generazione delle chiavi produce una chiave privata di 64 byte, che in realtà è costituita da un seed concatenato con la chiave pubblica, e una chiave pubblica di 32 byte. La firma produce una firma di 64 byte. La verifica è rapida e a tempo costante. Le firme Ed25519 sono deterministiche: lo stesso messaggio e la stessa chiave producono sempre la stessa firma. Questo elimina le vulnerabilità dovute a errori nella generazione della casualità che hanno interessato ECDSA in alcune implementazioni.

Hashing con BLAKE2b

crypto_generichash fornisce hashing di uso generale utilizzando BLAKE2b. A differenza di SHA-256, BLAKE2b non richiede una costruzione HMAC separata per l'hashing con chiave, perché accetta direttamente una chiave opzionale. La lunghezza dell'output è configurabile da 16 a 64 byte. Sui moderni processori a 64 bit, BLAKE2b è più veloce di SHA-256 e SHA-512 e offre proprietà di sicurezza equivalenti o migliori.

Derivazione delle chiavi con BLAKE2b

crypto_kdf fornisce la derivazione delle chiavi da una chiave master utilizzando BLAKE2b. Data una chiave master di 32 byte, una stringa di contesto di 8 byte che identifica lo scopo e un ID della sottochiave, ovvero un numero a 64 bit, deriva una sottochiave crittograficamente indipendente di lunghezza configurabile. Ciò consente di derivare più chiavi indipendenti da un'unica chiave master per scopi diversi, senza alcuna correlazione tra le chiavi derivate.

Hashing delle password con Argon2id

crypto_pwhash fornisce l'hashing delle password utilizzando Argon2id, il vincitore della Password Hashing Competition. Argon2id combina un calcolo oneroso in termini di memoria, che contrasta gli attacchi condotti con GPU, con un calcolo oneroso in termini di tempo, che contrasta gli attacchi condotti con ASIC. I parametri includono il limite di operazioni, ovvero il costo temporale, e il limite di memoria, che possono essere adattati ai requisiti di sicurezza. crypto_pwhash_str produce una stringa standard adatta alla memorizzazione, che include l'algoritmo e i relativi parametri.

Sealed box per la cifratura anonima

crypto_box_seal cifra un messaggio per un destinatario senza rivelare il mittente. Genera una coppia di chiavi effimera temporanea, esegue uno scambio di chiavi con la chiave pubblica del destinatario e quindi elimina la chiave privata effimera. Il destinatario può decifrare il messaggio utilizzando la propria chiave privata, ma non può identificare il mittente. Questa soluzione è adatta ai sistemi di invio anonimo e ai canali cifrati unidirezionali.

Binding di libsodium per i linguaggi di programmazione

libsodium dispone di binding per praticamente tutti i principali linguaggi di programmazione. PyNaCl fornisce binding idiomatici per Python, con eccezioni e oggetti bytes propri di Python. libsodium-wrappers fornisce binding per JavaScript/Node.js, utilizzando WASM nei browser. libsodium.js è un porting in puro JavaScript. La qualità dei binding varia: preferisca binding ufficiali o ampiamente mantenuti che utilizzano la libreria C, invece di reimplementare gli algoritmi.

Confronto con l'API di basso livello di OpenSSL

L'API di basso livello di OpenSSL richiede decisioni esplicite riguardo ad algoritmi, dimensioni delle chiavi, modalità, padding e gestione dell'IV. Le combinazioni errate vengono accettate senza segnalazioni. libsodium fornisce un'unica implementazione corretta per ogni caso d'uso, senza richiedere configurazione. Per esempio, per cifrare con OpenSSL è necessario scegliere il cifrario, la modalità, la derivazione della chiave, la generazione dell'IV e il padding; con crypto_secretbox di libsodium si forniscono una chiave, un nonce e un messaggio, mentre tutto il resto viene gestito correttamente.

Scegliere libsodium per i nuovi progetti

libsodium è il punto di partenza consigliato per qualsiasi progetto che richieda operazioni crittografiche nei linguaggi supportati. La sua API ridotta diminuisce il rischio di utilizzo improprio, gli algoritmi sono moderni e ampiamente analizzati e l'implementazione C multipiattaforma è stata sottoposta a test approfonditi. Il passaggio a una libreria di livello inferiore come OpenSSL dovrebbe essere necessario solo quando occorrono algoritmi specifici non disponibili in libsodium o la convalida FIPS 140-2.

Operazioni di libsodium

Quale funzione di libsodium dovrebbe utilizzare per eseguire l'hashing di una password da memorizzare in un database?

Riepilogo di libsodium

Riepilogo di libsodium: impostazioni predefinite sicure e un'API difficile da utilizzare in modo improprio, basata sulle primitive di NaCl sviluppate da Bernstein e altri; crypto_secretbox per la cifratura con chiave segreta (XSalsa20-Poly1305); crypto_box per la cifratura a chiave pubblica (X25519); crypto_sign per le firme Ed25519; crypto_generichash per l'hashing BLAKE2b; crypto_pwhash per l'hashing delle password con Argon2id; sealed box per la cifratura anonima; e binding per la maggior parte delle principali piattaforme.

Domande Frequenti

La lezione «libsodium: libreria crittografica resistente agli usi impropri» è gratuita?

Sì — il testo completo di «libsodium: libreria crittografica resistente agli usi impropri» è 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 «libsodium: libreria crittografica resistente agli usi impropri»?

Scopra l'API opinionated di libsodium, progettata per rendere difficile la scelta di parametri non sicuri. 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 1 di 4.

Quanto tempo richiede la lezione «libsodium: libreria crittografica resistente agli usi impropri»?

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

  1. libsodium: libreria crittografica resistente agli usi impropri
  2. API di OpenSSL: strutture fondamentali e insidie
  3. Google Tink: crittografia sicura ad alto livello
  4. Verifica e selezione delle dipendenze crittografiche
← Torna a Cryptology Academy