NaCl (software)

(Redirected fromLibsodium)

NaCl(Networking and Cryptography Library,pronounced "salt" ) is apublic domain,high-speed software library forcryptography.[2]

NaCl
Original author(s)Daniel J. Bernstein,Tanja Lange,Peter Schwabe
Initial release2008;16 years ago(2008)
Stable release
20110221 / February 21, 2011;13 years ago(2011-02-21)
Operating systemUNIX-like
Licensepublic domain[1]
Websitenacl.cr.yp.to

NaCl was created by the mathematician and programmerDaniel J. Bernstein,who is best known for the creation ofqmailandCurve25519.The core team also includesTanja Langeand Peter Schwabe.[3][4]The main goal while creating NaCl, according to the team's 2011 paper, was to "avoid various types of cryptographic disasters suffered by previous cryptographic libraries". The team does so by safer designs that avoid issues such as side-channel leakage and loss of randomness, by being performant enough that safety features do not get disabled by the user, and by picking better cryptographic primitives. The high-level "box" API is designed to encourage the use ofauthenticated encryption.[1]

Functions

edit

Public-key cryptography

edit

Secret-key cryptography

edit

Low-level functions

edit

Implementations

edit

The reference implementation is written inC,often with severalinline assembler.C++is handled as a wrapper. APythonwrapper was planned,[8]but is not part of the latest (20110221) release. The home page, last updated 2016, mentions prototype wrappers.[2]

Reference NaCl has a variety of programming language bindings such as PHP[9]and Tcl.[10][third-party source needed]

Libsodium

edit

Libsodium is a API-compatibleforkof reference NaCl created in 2013. It is "installable and packageable", or in other words can be compiled into adynamic libraryand installed as asoftware packagethanks to the addition ofbuild files(NaCl had none). It is also "portable and cross-compilable".[11]

As libsodium can be dynamically linked, it serves as the basis for a number ofbindingsin languages such asPharo,[12]Perl 5,[13]and Python.[14][15]

libsodium also extends the NaCl API with new algorithms (e.g.BLAKE2,[16]ChaCha20-Poly1305,AEGIS)[17]and new classes of functions (e.g. secure memory,random number generation,short-input hashing,[18]password hashing and key derivation).

TweetNaCl

edit

In 2013, the NaCl team and three others released TweetNaCl, a condensed implementation of NaCl's 25 functions that fits in the size of 100tweets(140 symbols each).[19]

TweetNaCl has been used as the basis ofportsincluding TweetNaCl.js[20]and TweetNaCl-Java.[21]It has also been rewritten in theSPARK Ada subsetas SPARKNaCl, which the authors describe as "(unlike TweetNaCl) readable owing to the large number of explanatory comments and contracts in the code."[22]

Other implementations

edit
  • dryoc — a pure-Rustcryptography library implementing the libsodium/NaCl API with support forprotected memory.[23]
  • Monocypher — a rewrite of NaCl in C. Aims to have the speed of reference NaCl and the size of TweetNaCl.[24]

See also

edit

References

edit
  1. ^abDaniel J. Bernstein; Tanja Lange; Peter Schwabe."The security impact of a new cryptographic library"(PDF).Archived(PDF)from the original on 2017-08-09.
  2. ^ab"NaCl: Networking and Cryptography library".
  3. ^"Tanja Lange's Homepage".
  4. ^"Peter Schwabe's Homepage".
  5. ^Bernstein, Daniel J. (10 March 2009).Cryptography in NaCl(PDF).Archived(PDF)from the original on 25 March 2017.Retrieved8 February2016.
  6. ^"Hashing: crypto_hash".2010-08-30.Retrieved2015-11-14.
  7. ^"String comparison: crypto_verify".nacl.cr.yp.to.Retrieved19 January2024.
  8. ^"NaCl Internals".
  9. ^"NaCl PHP Extension".Github. 2019-06-14.
  10. ^"Tclers Wiki - NaCl for Tcl".
  11. ^Denis, Frank (18 January 2024)."libsodium: A modern, portable, easy to use crypto library".
  12. ^"SmalltalkHub repository".
  13. ^"Crypt::NaCl::Sodium".
  14. ^Python Cryptographic Authority (18 January 2024)."pyca/pynacl".GitHub.PyNaCl is a Python binding to libsodium, which is a fork of the Networking and Cryptography library.
  15. ^"Bindings for other languages".libsodium.
  16. ^"Generic hashing".2017-12-13.Retrieved2018-05-19.
  17. ^"AEAD constructions".libsodium.
  18. ^"Short-input hashing".libsodium.
  19. ^Daniel J. Bernstein; Bernard van Gastel; Wesley Janssen; Tanja Lange; Peter Schwabe; Sjaak Smetsers (2013)."TweetNaCl".
  20. ^"TweetNaCl.js".
  21. ^"TweetNaCl-Java".
  22. ^"SPARKNaCl".
  23. ^"Don't Roll Your Own Crypto (dryoc): pure-Rust, hard to misuse cryptography library".
  24. ^Vaillant, Loup (17 January 2024)."LoupVaillant/Monocypher".
edit