NaCl (software)

libreria crittografica

NaCl (Networking and Cryptography Library, pronunciato in inglese come "salt") è una libreria software ad alta velocità di pubblico dominio per la crittografia.[1]

NaCl
software
Genere
SviluppatoreDaniel J. Bernstein, Tanja Lange, Peter Schwabe
Data prima versione2008
Ultima versione20110221 (21 febbraio 2011)
Sistema operativoLinux
Unix-like
LinguaggioC
C++
LicenzaPubblico dominio
Sito webnacl.cr.yp.to/

Questa libreria crittografica è stata creata dal matematico e programmatore Daniel J. Bernstein, noto per aver creato Qmail e Curve25519 . Del team principale fanno parte anche Tanja Lange (crittografa e teorica dei numeri tedesca) e Peter Schwabe (crittografo e ricercatore tedesco).[2][3]

NaCl è stata progettata per migliorare la sicurezza evitando problemi come le perdite di casualità e le fughe laterali e incoraggiare l'uso della crittografia autenticata.[4] Utilizza primitive crittografiche moderne e robuste, come Curve25519 e Salsa20, per garantire la sicurezza delle comunicazioni digitali.

È stata utilizzata come base per librerie come libsodium, che estende l'API di NaCl con nuovi algoritmi e funzioni.

Funzioni

modifica

Crittografia a chiave pubblica

modifica
  • crypto_box, fornisce un'autenticazione cifrata, combinando sia la cifratura che l'autenticazione in un singolo passaggio. Cifratura autenticata a chiave pubblica. Lo scambio delle chiavi avviene tramite X25519. La crittografia attraverso Salsa20-Poly1305.[5]
  • crypto_scalarmult,viene utilizzata per generare chiavi pubbliche e private e per eseguire lo scambio di chiavi Diffie-Hellman
  • crypto_sign, fornisce una firma digitale, che permette di verificare l'autenticità e l'integrità di un messaggio. Utilizza Ed25519 and SHA-512

Crittografia a chiave segreta

modifica
  • crypto_secretbox, Cifra e autentica un messaggio in un'unica operazione, garantendo sia la riservatezza che l'integrità dei dati. Utilizza Salsa20-
  • crypto_stream, Genera un flusso di cifratura utilizzando Salsa20, XSalsa20 o AES
  • crypto_auth, Calcola un codice di autenticazione del messaggio (MAC), che permette di verificare l'integrità di un messaggio ma non la sua riservatezza. Utilizza HMAC-SHA-512-256.
  • crypto_onetimeauth,Calcola un MAC per messaggi di lunghezza variabile, garantendo l'integrità ma non la riservatezza. Utilizza Poly1305.

Funzioni di basso livello

modifica
  • crypto_hash, Calcola un'impronta digitale (hash) di un messaggio utilizzando SHA-512 o SHA-256.[6]
  • crypto_verify, Confronta due hash per verificare l'integrità.[7]

Implementazioni

modifica

NaCl è scritta principalmente in linguaggio C per garantire alte prestazioni e portabilità. Utilizza però anche l'assembly in linea per ottimizzare le prestazioni su specifiche architetture hardware, massimizzando così l'efficienza e la velocità.

NaCl include un wrapper per C++, che offre un'interfaccia più adatta agli sviluppatori che utilizzano questo linguaggio. Il wrapper semplifica l'integrazione delle funzionalità di NaCl in applicazioni C++.

Esiste anche un wrapper Python chiamato PyNaCl.[8] Una libreria Python che fornisce binding per la libreria libsodium,[9] che è un fork di NaCl. Questa libreria rende le funzionalità di NaCl disponibili in Python, permettendo agli sviluppatori di utilizzare le funzioni di crittografia,

autenticazione e hashing in modo semplice e sicuro.

Esistono implementazioni anche per PHP che sono libsodium-php (una libreria che fornisce binding per libsodium)[10] e Salt (un'altra libreria PHP per NaCl, disponibile su GitHub)[11].

Tcl implementa NaCl attraverso i wrapper TclPro Wrapper e aschoepe/nacl.[12]

Libsodium

modifica

Libsodium è un fork di NaCl creato nel 2013. È stato sviluppato per essere portabile (funziona su molte piattaforme e compilatori, inclusi Windows, macOS, Linux, iOS e Android) e facilmente installabile mantenendo un'API compatibile con NaCl ma estendendola per migliorarne l'usabilità.[13] Include funzioni per la gestione della memoria protetta, che aiutano a prevenire attacchi di memoria.[14]

Può essere utilizzata come una libreria dinamica (shared library) rendendola una scelta eccellente per i binding a linguaggi di programmazione come come Pharo,[15] Perl 5,[16] e Python.[17][18]

libsodium estende le API di NaCl con nuovi algoritmi (ad esempio BLAKE2,[19] ChaCha20-Poly1305, AEGIS)[20] e nuove classi di funzioni (generazione di numeri casuali, hashing di input breve,[21] hashing della password e derivazione della chiave ).

TweetNaCl

modifica

TweetNaCl è una libreria di crittografia estremamente compatta e facile da usare creata nel 2013 dagli autori di NaCl e progettata per fornire un alto livello di sicurezza in modo efficiente. Il nome stesso suggerisce la sua caratteristica principale: l'intera libreria può essere descritta in soli 100 tweet (ognuno dei quali composto da 140 simboli)![22]

TweetNaCl è stato utilizzato come base per TweetNaCl.js[23] e TweetNaCl-Java.[24]

TweetNaCl è stato riscritto in SPARK Ada, un sottolinguaggio di Ada progettato per la programmazione ad alta integrità. Questa riscrittura è conosciuta come SPARKNaCl. La caratteristica distintiva di SPARKNaCl è che, a differenza di TweetNaCl, è reso più leggibile grazie all'inclusione di numerosi commenti esplicativi e contratti nel codice.[25]

Altre implementazioni

modifica
  • dryoc — una libreria di crittografia Rust pura che implementa l'API libsodium/NaCl con supporto per la memoria protetta .[26]
  • Monocypher — è una libreria di crittografia leggera e facile da usare, scritta in C.[27] È progettata per essere piccola e portatile, ideale per sistemi embedded. Mira ad avere la velocità di NaCl con la dimensione di TweetNaCl.[28]

Voci correlate

modifica
  1. ^ nacl.cr.yp.to, https://nacl.cr.yp.to/.
  2. ^ hyperelliptic.org, https://www.hyperelliptic.org/tanja/.
  3. ^ cryptojedi.org, https://cryptojedi.org/.
  4. ^ Daniel J. Bernstein, cr.yp.to, https://cr.yp.to/highspeed/coolnacl-20120725.pdf.
  5. ^ Daniel J. Bernstein, Cryptography in NaCl (PDF), 10 marzo 2009.
  6. ^ nacl.cr.yp.to, https://nacl.cr.yp.to/hash.html. URL consultato il 14 novembre 2015.
  7. ^ nacl.cr.yp.to, https://nacl.cr.yp.to/verify.html. URL consultato il 19 gennaio 2024.
  8. ^ (EN) Python binding to the Networking and Cryptography (NaCl) library, su pypi.org.
  9. ^ (EN) Introduction to libsodium, su doc.libsodium.org.
  10. ^ (EN) libsodium-php - A simple, low-level PHP extension for libsodium, su github.com.
  11. ^ (EN) Salt su GitHub, su github.com.
  12. ^ (EN) NaCl - Networking and Cryptography library (pronounced "salt"), su github.com.
  13. ^ github.com, https://github.com/jedisct1/libsodium.
  14. ^ (EN) Libsodium Documentation, su doc.libsodium.org.
  15. ^ smalltalkhub.com, http://smalltalkhub.com/tonyg/Crypto-Nacl/.
  16. ^ metacpan.org, https://metacpan.org/pod/Crypt::NaCl::Sodium.
  17. ^ ((Python Cryptographic Authority)), GitHub, https://github.com/pyca/pynacl.
    «PyNaCl is a Python binding to libsodium, which is a fork of the Networking and Cryptography library.»
  18. ^ libsodium, https://doc.libsodium.org/bindings_for_other_languages.
  19. ^ download.libsodium.org, https://download.libsodium.org/doc/hashing/generic_hashing.html#algorithm-details. URL consultato il 19 maggio 2018.
  20. ^ libsodium, https://doc.libsodium.org/secret-key_cryptography/aead.
  21. ^ libsodium, https://doc.libsodium.org/hashing/short-input_hashing.
  22. ^ Daniel J. Bernstein, Bernard van Gastel, Wesley Janssen, Tanja Lange, Peter Schwabe e Sjaak Smetsers, TweetNaCl, su tweetnacl.cr.yp.to, 2013.
  23. ^ tweetnacl.js.org, https://tweetnacl.js.org/.
  24. ^ github.com, https://github.com/InstantWebP2P/tweetnacl-java/.
  25. ^ github.com, https://www.github.com/rod-chapman/SPARKNaCl/.
  26. ^ github.com, https://github.com/brndnmtthws/dryoc.
  27. ^ (EN) Monocypher - An easy to use, easy to deploy crypto library, su github.com.
  28. ^ github.com, https://github.com/LoupVaillant/Monocypher.

Collegamenti esterni

modifica