NaCl ( Библиотека сетей и криптографии , произносится как «соль») — общедоступная высокоскоростная программная библиотека для криптографии . [2]
NaCl был создан математиком и программистом Дэниелом Дж. Бернштейном , который наиболее известен созданием qmail и Curve25519 . В основную команду также входят Таня Ланге и Питер Швабе. [3] [4] Основная цель создания NaCl, согласно документу команды 2011 года, заключалась в том, чтобы «избежать различных типов криптографических катастроф, от которых пострадали предыдущие криптографические библиотеки». Команда делает это за счет более безопасных проектов, которые позволяют избежать таких проблем, как утечка по побочным каналам и потеря случайности, обеспечивая достаточную производительность, чтобы функции безопасности не отключались пользователем, и выбирая лучшие криптографические примитивы. Высокоуровневый «коробочный» API предназначен для поощрения использования шифрования с проверкой подлинности . [1]
crypto_box
, шифрование с аутентификацией открытым ключом . Согласование ключей происходит через X25519; шифрование выполняется Salsa20-Poly1305. [5]crypto_scalarmult
, скалярное умножение на X25519 . Эту функцию можно использовать для эллиптической кривой Диффи–Хеллмана .crypto_sign
, подписи с использованием Ed25519 и SHA-512.crypto_secretbox
, шифрование с аутентификацией закрытым ключом с использованием Salsa20-Poly1305 .crypto_stream
, шифрование с использованием Salsa20 , XSalsa20 или AES .crypto_auth
, аутентификация с использованием HMAC-SHA-512-256 .crypto_onetimeauth
, аутентификация по одному сообщению с использованием Poly1305 .crypto_hash
, хеширование с использованием SHA-512 или SHA-256 [6]crypto_verify
, сравнение строк за постоянное время. [7]Эталонная реализация написана на C , часто с использованием нескольких встроенных ассемблеров . C++ обрабатывается как оболочка. Была запланирована оболочка Python [8], но она не является частью последней версии (20110221). На домашней странице, последний раз обновленной в 2016 году, упоминаются оболочки прототипов. [2]
Ссылка NaCl имеет множество привязок к языкам программирования, таким как PHP [9] и Tcl. [10] [ нужен сторонний источник ]
Libsodium — это API-совместимая версия эталонного NaCl, созданная в 2013 году. Его можно «устанавливать и упаковывать», то есть, другими словами, его можно скомпилировать в динамическую библиотеку и установить в виде пакета программного обеспечения благодаря добавлению файлов сборки (у NaCl их не было). ). Он также «переносим и кросс-компилируем». [11]
Поскольку libsodium может быть динамически скомпонован, он служит основой для ряда привязок в таких языках, как Pharo , [12] Perl 5, [13] и Python. [14] [15]
libsodium также расширяет API NaCl новыми алгоритмами (например, BLAKE2 , [16] ChaCha20-Poly1305 , AEGIS) [17] и новыми классами функций (например, защищенная память, генерация случайных чисел , хеширование коротких входных данных, [18] хеширование паролей и вывод ключа ).
В 2013 году команда NaCl и еще три человека выпустили TweetNaCl — сокращенную реализацию 25 функций NaCl, которая умещается в размере 100 твитов (по 140 символов каждый). [19]
TweetNaCl использовался в качестве основы для портов, включая TweetNaCl.js [20] и TweetNaCl-Java. [21] Он также был переписан в подмножестве SPARK Ada как SPARKNaCl, который авторы описывают как «(в отличие от TweetNaCl) читаемый благодаря большому количеству пояснительных комментариев и контрактов в коде». [22]
PyNaCl — это привязка Python к libsodium, который является ответвлением библиотеки Networking and Cryptography.