NaCl (software)

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/

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

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).

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. 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

Crittografia a chiave pubblica

Crittografia a chiave segreta

Funzioni di basso livello

Implementazioni

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. Una libreria Python che fornisce binding per la libreria libsodium, 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) e Salt (un'altra libreria PHP per NaCl, disponibile su GitHub).

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

Libsodium

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à. Include funzioni per la gestione della memoria protetta, che aiutano a prevenire attacchi di memoria.

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

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

TweetNaCl

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)!

TweetNaCl è stato utilizzato come base per TweetNaCl.js e TweetNaCl-Java.

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.

Altre implementazioni

Note

  1. ↑ Introduction, su nacl.cr.yp.to. URL consultato il 16 aprile 2026 (archiviato dall'url originale il 31 marzo 2026).
  2. ↑ Tanja Lange's homepage, su www.hyperelliptic.org. URL consultato il 16 aprile 2026.
  3. ↑ Michael Naehrig and Peter Schwabe, Peter Schwabe, su cryptojedi.org. URL consultato il 16 aprile 2026.
  4. ↑ (EN) Daniel J. Bernstein, Tanja Lange e Peter Schwabe, The security impact of a new cryptographic library (PDF), su cr.yp.to.
  5. ↑ Daniel J. Bernstein, Cryptography in NaCl (PDF), 10 marzo 2009.
  6. ↑ Hashing: crypto_hash, su nacl.cr.yp.to. URL consultato il 16 aprile 2026 (archiviato dall'url originale l'8 dicembre 2025).
  7. ↑ String comparison: crypto_verify, su nacl.cr.yp.to. 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. ↑ Frank Denis, libsodium, 16 aprile 2026. URL consultato il 16 aprile 2026.
  14. ↑ (EN) Libsodium Documentation, su doc.libsodium.org.
  15. ↑ tonyg / Crypto-Nacl - SmalltalkHub, su smalltalkhub.com. URL consultato il 16 aprile 2026.
  16. ↑ (EN) Crypt::NaCl::Sodium, in MetaCPAN. URL consultato il 16 aprile 2026.
  17. ↑ ((Python Cryptographic Authority)), pyca / pynacl, su GitHub.
    «PyNaCl is a Python binding to libsodium, which is a fork of the Networking and Cryptography library.»
  18. ↑ (EN) Bindings for other languages | Libsodium documentation, su libsodium.gitbook.io, 8 aprile 2026. URL consultato il 16 aprile 2026.
  19. ↑ (EN) Frank Denis, Generic hashing | libsodium, su download.libsodium.org. URL consultato il 16 aprile 2026 (archiviato dall'url originale il 26 marzo 2016).
  20. ↑ (EN) AEAD constructions | Libsodium documentation, su libsodium.gitbook.io, 8 aprile 2026. URL consultato il 16 aprile 2026.
  21. ↑ Short-input hashing, su libsodium.
  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 - JavaScript crypto library, su tweetnacl.js.org. URL consultato il 16 aprile 2026.
  24. ↑ InstantWebP2P / tweetnacl-java, Application Network Link, 5 aprile 2026. URL consultato il 16 aprile 2026.
  25. ↑ Roderick Chapman, rod-chapman/SPARKNaCl, 15 aprile 2026. URL consultato il 16 aprile 2026.
  26. ↑ Brenden Matthews, brndnmtthws/dryoc, 13 aprile 2026. URL consultato il 16 aprile 2026.
  27. ↑ (EN) Monocypher - An easy to use, easy to deploy crypto library, su github.com.
  28. ↑ Loup Vaillant, LoupVaillant/Monocypher, 15 aprile 2026. URL consultato il 16 aprile 2026.

Voci correlate

Collegamenti esterni