NaCl (программное обеспечение)
Оригинальный автор(ы) | Дэниэл Дж. Бернштейн , Таня Ланге , Питер Швабе |
---|---|
Первоначальный выпуск | 2008 год |
Стабильная версия | 20110221 / 21 февраля 2011 г |
Операционная система | UNIX-подобный |
Лицензия | общественное достояние [1] |
Веб-сайт | накл |
NaCl ( Библиотека сетей и криптографии , произносится как «соль») — общедоступная высокоскоростная программная библиотека для криптографии . [2]
NaCl был создан математиком и программистом Дэниелом Дж. Бернштейном , который наиболее известен созданием qmail и Curve25519 . В основную команду также входят Таня Ланге и Питер Швабе. [3] [4] Согласно документу команды от 2011 года, основной целью создания NaCl было «избежать различных типов криптографических катастроф, от которых пострадали предыдущие криптографические библиотеки». Команда делает это за счет более безопасных проектов, которые позволяют избежать таких проблем, как утечка по побочным каналам и потеря случайности, обеспечивая достаточную производительность, чтобы функции безопасности не отключались пользователем, и выбирая лучшие криптографические примитивы. Высокоуровневый «коробочный» 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] и Ткл. [10] [ нужен сторонний источник ]
Либнатрий
[ редактировать ]Libsodium — это API-совместимая версия эталонного NaCl, созданная в 2013 году. Его можно «устанавливать и упаковывать», то есть, другими словами, его можно скомпилировать в динамическую библиотеку и установить в виде пакета программного обеспечения благодаря добавлению файлов сборки (у NaCl их не было). ). Он также «переносим и кросс-компилируем». [11]
Поскольку libsodium может быть динамически скомпонован, он служит основой для ряда привязок в таких языках, как Pharo , [12] Перл 5, [13] и Питон. [14] [15]
libsodium также расширяет API NaCl новыми алгоритмами (например, BLAKE2 , [16] ЧаЧа20-Поли1305 , AEGIS) [17] и новые классы функций (например, защищенная память, генерация случайных чисел , хеширование с коротким вводом, [18] хеширование паролей и получение ключей ).
ТвитнутьNaCl
[ редактировать ]В 2013 году команда NaCl и еще три человека выпустили TweetNaCl — сокращенную реализацию 25 функций NaCl, которая умещается в размере 100 твитов (по 140 символов каждый). [19]
TweetNaCl использовался в качестве основы для портов, включая TweetNaCl.js. [20] и TweetNaCl-Java. [21] Он также был переписан в подмножестве SPARK Ada как SPARKNaCl, который авторы описывают как «(в отличие от TweetNaCl) читаемый благодаря большому количеству пояснительных комментариев и контрактов в коде». [22]
Другие реализации
[ редактировать ]- Dryoc — библиотека шифрования на чистом Rust , реализующая API libsodium/NaCl с поддержкой защищенной памяти . [23]
- Monocypher — переписанный вариант NaCl на C. Цель — обеспечить скорость обращения к NaCl и размер TweetNaCl. [24]
См. также
[ редактировать ]- Использование термина соль в криптографии
- Сравнение криптографических библиотек
- Список бесплатных пакетов программного обеспечения с открытым исходным кодом
Ссылки
[ редактировать ]- ^ Jump up to: а б Дэниел Дж. Бернштейн; Таня Ланге; Питер Швабе. «Влияние новой криптографической библиотеки на безопасность» (PDF) . Архивировано (PDF) из оригинала 9 августа 2017 г.
- ^ Jump up to: а б «NaCl: библиотека сетей и криптографии» .
- ^ «Домашняя страница Тани Ланге» .
- ^ «Домашняя страница Питера Швабе» .
- ^ Бернштейн, Дэниел Дж. (10 марта 2009 г.). Криптография в NaCl (PDF) . Архивировано (PDF) из оригинала 25 марта 2017 г. Проверено 8 февраля 2016 г.
- ^ «Хеширование: crypto_hash» . 30 августа 2010 г. Проверено 14 ноября 2015 г.
- ^ «Сравнение строк: crypto_verify» . nacl.cr.yp.to . Проверено 19 января 2024 г.
- ^ «Внутреннее содержание NaCl» .
- ^ «Расширение NaCl PHP» . Гитхаб. 14.06.2019.
- ^ «Tclers Wiki — NaCl для Tcl» .
- ^ Денис, Фрэнк (18 января 2024 г.). «libsodium: современная, портативная и простая в использовании криптобиблиотека» .
- ^ «Репозиторий SmalltalkHub» .
- ^ «Склеп::NaCl::Натрий» .
- ^ Криптографический орган Python (18 января 2024 г.). "pyca/pynacl" . Гитхаб .
PyNaCl — это привязка Python к libsodium, который является ответвлением библиотеки Networking and Cryptography.
- ^ «Привязки для других языков» . либнатрий .
- ^ «Общее хеширование» . 13 декабря 2017 г. Проверено 19 мая 2018 г.
- ^ «АЕАД конструкции» . либнатрий .
- ^ «Хеширование с коротким вводом» . либнатрий .
- ^ Дэниел Дж. Бернштейн; Бернар ван Гастель; Уэсли Янссен; Таня Ланге; Питер Швабе; Шахматные Смитерс (2013). «ТвитНаКл» .
- ^ "TweetNaCl.js" .
- ^ «ТвитнутьNaCl-Java» .
- ^ «СПАРКNaCl» .
- ^ «Не используйте свою собственную криптографию (dryoc): чистая библиотека шифрования Rust, которую трудно использовать неправильно» .
- ^ Вайлант, Лу (17 января 2024 г.). «ЛупВайлант/Моношифр» .