Состоялся релиз Node-to-Node CoPy (NNCP), набора утилит для безопасной передачи файлов, электронной почты и команд для исполнения в режиме store-and-forward. Поддерживается работа на POSIX-совместимых операционных системах. Утилиты написаны на языке Go и распространяются под лицензией GPLv3.
Утилиты ориентированы на помощь в построении небольших одноранговых friend-to-friend сетей (дюжины узлов) со статической маршрутизацией для безопасной передачи файлов в режиме fire-and-forget, запросов на файлы, электронной почты и запросов на выполнение команд. Все передаваемые пакеты зашифрованы (end-to-end) и явно аутентифицируются по известным публичным ключам знакомых. Луковое (как в Tor) шифрование применяется для всех промежуточных пакетов. Каждый узел может выступать как в роли клиента, так и сервера и использовать и push и poll модель поведения.
Отличием NNCP от решений UUCP и FTN (FidoNet Technology Network), кроме вышеупомянутого шифрования и аутентификации, является поддержка из коробки сетей флоппинет и компьютеров, физически изолированных (air-gapped) от небезопасных локальных и публичных сетей. Особенностью NNCP также является лёгкая интеграция (наравне с UUCP) с текущими почтовыми серверами, такими как Postfix и Exim.
Из возможных областей применения NNCP отмечается организация отправки/приёма почты на устройства без постоянного подключения к интернету, передачи файлов в условиях нестабильного сетевого соединения, безопасной передачи очень больших объёмов данных на физических носителях, создание защищённых от MitM-атак изолированных сетей передачи данных, обхода сетевой цензуры и слежки. Так как ключ для дешифровки находится только у получателя, независимо от путей доставки пакета по сети или через физические носители, третье лицо не может прочитать содержимое, даже перехватив отправление. В свою очередь аутентификация по цифровой подписи не позволяет сформировать фиктивное отправление под видом другого отправителя.
Среди новшеств NNCP 8.8.0, по сравнению с предыдущей новостью (версия 5.0.0):
- Вместо хэша BLAKE2b для проверки целостности файлов задействован, так называемый, MTH: Merkle Tree-based Hashing, использующий хэш BLAKE3. Это позволяет вычислять целостность зашифрованной части пакета прямо во время докачивания, не требуя её чтения в дальнейшем. Также это даёт возможность неограниченного распараллеливания проверки целостности.
- Новый формат зашифрованных пакетов полностью дружелюбен к потоковой передаче, когда заранее неизвестен размер данных. Сигнализация о завершении передачи, с аутентифицированным размером, идёт прямо внутри зашифрованного потока. Прежде, чтобы узнать размер передаваемых данных, требовалось их сохранение во временный файл. Так у команды “nncp-exec” исчезла опция “-use-tmp” за полной ненадобностью.
- Функции BLAKE2b KDF и XOF заменены на BLAKE3 для сокращения количества используемых криптографических примитивов и упрощения кода.
- Появилась возможность обнаружения других нод в локальной сети через мультивещательную рассылку по адресу “ff02::4e4e:4350”.
- Появились мультивещательные группы (аналог эхоконференций FidoNet или новостных групп Usenet), позволяющие одним пакетом отправить данные множеству участников группы, где каждый также
ретранслирует пакет остальным подписантам. Чтение мультивещательного пакета требует знания ключевой пары (нужно явно быть участником группы), но ретрансляция может производится любой нодой. - Появилась поддержка явного подтверждения получения пакета. Отправитель может не удалять пакет после отправки, дожидаясь получения особого ACK-пакета от получателя.
- Встроена поддержка overlay-сети Yggdrasil: online демоны могут выступать полноценными самостоятельными участниками сети, без использования сторонних реализаций Yggdrasil и полноценной работы с IP стэком на виртуальном сетевом интерфейсе.
- Вместо структурированных строк (RFC 3339), журнал использует recfile-записи, с которыми можно использовать утилиты GNU Recutils.
- Опционально заголовки зашифрованных пакетов могут хранится в отдельных файлах поддиректории “hdr/”, существенно ускоряя операции получения списка пакетов на файловых системах с большим размером блока, таких как ZFS. Ранее получение заголовка пакета требовало по умолчанию чтения с диска всего 128KiB блока.
- Проверка наличия новых файлов может опционально использовать подсистемы ядра kqueue и inotify, делая меньше системных вызовов.
- Утилиты держат меньше открытых файлов, реже происходит их закрытие и переоткрытие. При большом количестве пакетов ранее можно было упереться в ограничение на максимальное количество открытых файлов.
- Многие команды стали показывать прогресс и скорость выполнения операций, таких как скачивание/выгрузка, копирование и обработка (toss) пакетов.
- Команда “nncp-file” может отправлять не только единичные файлы, но и директории, на лету создавая pax-архив с их содержимым.
- Online утилиты, могут опционально сразу же вызывать процесс обработки пакетов (tossing) после успешного скачивания пакета, без запуска отдельного демона “nncp-toss”.
- Online вызов другого участника может опционально происходить не только по событию срабатывания таймера, но и по факту появления исходящего пакета в spool-директории.
- Обеспечена работоспособность под NetBSD и OpenBSD ОС, помимо ранее поддерживаемых FreeBSD и GNU/Linux.
- “nncp-daemon” полностью совместим с интерфейсом UCSPI-TCP. Вкупе с возможностью журналирования в указанный файловый дескриптор (например выставляя “NNCPLOG=FD:4”), он полностью дружелюбен для запуска под похожими на daemontools утилитами.
- Сборка проекта полностью переведена на систему redo.