Увидел свет (https://github.com/jedisct1/libsodium/releases/tag/1.0.0) выпуск свободной криптографической библиотеки Sodium 1.0.0 (http://doc.libsodium.org/), совместимую на уровне API с библиотекой NaCl (http://nacl.cr.yp.to/) (Networking and Cryptography library) и предоставляющую функции для организации защищённого сетевого взаимодействия, шифрования и работы с цифровыми подписями. Выпуск 1.0 примечателен стабилизацией API и ABI, и обеспечением в дальнейшем обратной совместимости. Код библиотеки распространяется (https://github.com/jedisct1/libsodium) под свободной лицензией ISC.В отличие от NaCl в Sodium решены проблемы с переносимостью кода на разные программные и аппаратные платформы, обеспечена сборка в виде разделяемой библиотеки, поставляется стандартный набор заголовочных файлов, добавлены средства для установки и интеграции со сторонними проектами. Среди поддерживаемых в Sodium платформ отмечаются Bitrig, OpenBSD, Dragonfly BSD, NetBSD, FreeBSD, SmartOS, Mac OS X, Linux, Windows, iOS и Android. Базовый API сформирован для языка Си, но дополнительно поставляются биндинги для языков Ruby (https://github.com/cryptosphere/rbnacl) и Python (https://github.com/dstufft/pynacl).
По сравнению с OpenSSL, Sodium и NaCl предоставляют существенно более простой API, а также применяет по умолчанию безопасные опции и методы шифрования и хэширования. API OpenSSL слишком усложнён и предоставляет обилие криптографических примитивов, режимов и обработчиков, из которых трудно выбрать действительно безопасный набор. Sodium и NaCl решают проблему выбора и предоставляют из коробки готовый к использованию небольшой и понятный набор функций, содержащий только безопасные методы.
API Sodium включает следующие возможности:
- Операции шифрования с использованием аутентифицированных открытых и симметричных (shared-key) ключей, позволяющие гарантировать, что зашифрованное сообщение останется в тайне и не сможет быть изменено атакующим;
- Создание и проверка цифровых подписей по открытым и симметричным ключам. Позволяет получателю проверить, что сообщения отправлено именно тем, от кого его ожидали получить и не было изменено третьим лицом;- Операции хэширования, позволяющие сформировать слепок от сообщения, имеющий фиксированную длину, дающий возможность проверить соответствие хэшу начального сообщения, но не позволяющий восстановить элементы сообщений из хэша;
- Средства для формирования для хэш таблиц непредсказуемых ключей из коротких сообщений, позволяющие исключить проведение DoS-атак (http://www.opennet.me/opennews/art.shtml?num=35593) через манипуляции с коллизиями хэшей. В качестве функции хэширования используется метод SipHash-2-4 (https://131002.net/siphash/), отличающийся высокой производительностью и непредсказуемым результатом операции;
- Безопасный генератор псевдослучайных чисел, пригодный для использования в криптографических операциях.
URL: https://github.com/jedisct1/libsodium/releases/tag/1.0.0
Новость: http://www.opennet.me/opennews/art.shtml?num=40674
Bitrig еще жив?
> Bitrig еще жив?Пока да. Иногда там пилят интересные вещи, но с портабельностью всё грустно. О реальном использовании за пределами конторы Marco Peerboom ничего не знаю.
> Пока да. Иногда там пилят интересные вещинапример?
кстати, они реально всё, что у них в портах лежит (а отличий от OpenBSD я пока не заметил) пересобирают clang, или всё же там в основном всё с gcc собрано?
> Bitrig еще жив?Что это за НЕХ и как она относится к сабжу?
список алгоритмов на оф. сайте отсутствует
сводный - может быть. В документации на каждую функциональность указан используемый алгоритм. Например, http://doc.libsodium.org/hashing/generic_hashing.html Algorithm details
Сильно урезанный набор алгоритмов - OpenSSL для хомячков.
Это просто nacl, допиленная для использования с dnscrypt-proxy.
Я так понимаю, что принцип был "не все алгоритмы одинаково полезны, как и не все их возможные параметры". Сам, выросший на принципах SHA-RSA-AES, с удивлением обнаружил кучу всего непонятного.
> и не все их возможные параметры". Сам, выросший на принципах SHA-RSA-AES,
> с удивлением обнаружил кучу всего непонятного.Например, что
1) SHA-1 вообще прекращают использовать.
2) RSA - тормозной, с огромными ключами, с плохим соотношением размера ключа к стойкости.Вообще, берштейновская криптография - выглядит очень интересно. Облажаться в crypto_box() довольно сложно, даже если вы и не знаете как он работает. Потому что нормальная подборка алгоритмов и дефолты. У 25519 - короткие (по сравнению RSA) ключи не в ущерб стойкости. Можно использовать вместо хэша/фингерпринта напрямую публичный ключ. Забавно, правда? А скорость работы - ну я вот тут поскрипел процессором и за 10 секунд сгенерил 200 000 пар ключей. Пусть RSA так попробует, да? :). Это означает что можно лепить временный ключ чуть ли не на каждый пакет. И да, если кто не заметил, API либы позволяет зная 32 байта пубкея получателя скроить ему (сетевой) пакет, который только он может расшифровать, будучи уверенным что это пришло от вас (вашего приватного ключа, парного заявленному вами вашему публичному). В отличие от SSL оно прекрасно относится к единичным пакетам в таком виде. Дяденька Берштейн показывает как делать криптографию для сетей правильно. Еще б этого академика немного слушали насчет IPv6... :)
слушай, огромное спасибо. теперь начинаю понимать
> слушай, огромное спасибо. теперь начинаю пониматьБерштейн с его эллиптикой отбабахал очень красивый вариант Диффи-Хеллмана. D-H key exchange ... почти без key exchange? А что, круто придумано :).
Была задача,сложный роутер-сетевой экран с десятком подключённых сете, надо зашифровать каналы.Использование OpenVPN или IPsec добавляло ещё интерфейсов и приходилось нщё больше усложнять правила сетевого экрана...
sodium сможет прозрачно для сетевого экрана, без добавления новых интерфейсов, шифровать соединения между двумя узлами сети?
> Еще б этого академика немного слушали
> насчет IPv6... :)Уточните, пожалуйста, как конкретно можно организовать криптографию на сетевом уровне, не согласовав предварительно ряд параметров. Т.е. не проделав ряд действий вручную. Имхо это корневая причина, почему ipsec в ipv6 не взлетел "правильно".
> OpenSSL для хомячков.Скорее, криптографическая либа с публичной криптографией сделанная не через ж...у, в отличие от OpenSSL.
а документация, кстати, аккуратненько так оформлена, приятно пользоваться.жаль, что в многих проектах уделяют этому недостаточное внимание
> и непредсказуемым результатом операцииМмм... Выхлоп /dev/random в качестве хеш-функции для словарей...
(На самом деле, я знаю, что имелось ввиду. Но как написано! :)
> SmartOSАсь?
Монструозный больно. Tweetnacl лучше и от системы тоже мало зависит.
NaCl хлорид натрия ака соль поваренная
:)
Ещё одна криптолиба на C. Доколе?!
АНБ одобряет ;)