Спустя три года после начала разработки опубликован релиз Sequoia 1.0. Это реализация OpenPGP на языке Rust, содержащая обширную библиотеку функций и инструментарий командной строки. Релиз опубликован после того, как разработчики закончили работу над низкоуровневым API — в нем как раз и реализован в полной мере стандарт OpenPGP.
Написано все это на Rust, а распространяется пакет под лицензией GPLv2+. Есть версии для всех основных платформ — Linux, FreeBSD, Windows, macOS, Android и iOS. Команда разработчиков небольшая, ее основа — три участника разработки GnuPG из компании g10code. Эта же команда создала и сервис ключей Hagrid, который применяется в сервисе keys.openpgp.org. О том, что представляет из себя пакет — под катом.
Основная цель, которую ставили перед собой разработчики — полная переработка архитектуры и применение новых техник повышения безопасности и надежности кодовой базы.
Для того, чтобы повысить уровень защиты в Sequoia, помимо средств безопасного программирования с использованием языка Rust, применяется защита от ошибок на уровне API. Пример — невозможность случайно экспортировать содержимое секретного ключа, поскольку операции экспорта по умолчанию требуют явного выбора. Кроме того, API подстраховывает от пропуска важных действий в ходе обновления цифровой подписи. При выполнении этой операции должно обновиться время создания, алгоритм хэширования и эмитент подписи.
Кроме того, разработчики хорошо знакомы с недостатками gnuPGP, поскольку являются авторами этого проекта. В новом релизе от них постарались избавиться. Например, приняты меры для устранения рассинхронизации функциональности инструментов командной строки с библиотекой функций. Некоторые действия можно выполнить лишь в интерфейсе самой утилиты. Кроме того, исчезла проблема слишком тесной связи между компонентами — именно она затрудняла внесение изменений в кодовую базу. Как следствие — путаница и сложность в организации unit-тестирования.
Разработчики создали инструменты инспектирования пакетов, интегрировав их с парсером. Они позволяют упростить разработку, отладку и разбор инцидентов. Более того, пользователь получает возможность проведения наглядного анализа структуры зашифрованных сообщений, включая цифровые подписи и ключи.
Sequoia также развивает утилиту командной строки sq с поддержкой субкоманд в стиле Git, программу sqv (замена gpgv) для верификации отсоединённых цифровых подписей (detached signature), утилиту sqop (Stateless OpenPGP CLI) и библиотеку sequoia-openpgp. Разработчики предусмотрели обвязки для языков C и Python.
В новом релизе поддерживается подавляющее большинство возможностей, характерных для стандарта OpenPGP, включая шифрование, расшифровку, создание и проверку цифровых подписей. Что касается расширенных возможностей, то добавлена поддержка верификации по отдельно поставляемым цифровым подписям (detached signature), адаптация для интеграции с пакетными менеджерами (APT, RPM, cargo и т.п.) и возможность ограничения подписей по пороговым значениям и времени.
Предусмотрено также два варианта API — низкоуровневый, и, соответственно, высокоуровневый. Что касается первого, то он максимально точно воспроизводит возможности OpenPGP и связанные с ним расширения. Плюс ко всему, он предоставляет вызовы для небуферизованной обработки сообщений, разбора и сериализации полей в сертификатах и ключах. Второй API, высокоуровневый, охватывает как вспомогательные, так и предметно-ориентированные возможности. Это хранение открытых ключей и функции доступа по сети. К сожалению, высокоуровневый API еще будет дорабатываться — он находится только на раннем этапе развития.
Интересно, что разработчики не спешили с релизом, хотя большинство текущих функций и возможностей были готовы еще год назад. Они предпочли проверить и перепроверить кодовую базу на наличие багов. Кроме того, команда написала исчерпывающую документацию с отсылками к OpenPGP. Не забыли разработчики и о примерах использования.
Релиз 1.0 теперь охватывает crate-пакет sequoia-openpgp и утилиту для проверки цифровых подписей sqv. А вот CLI-интерфейс sq и высокоуровневые API пока не стабилизированы и дорабатываются. В ближайшем будущем команда разработчиков планирует интегрировать сервисы для хранения закрытых и открытых ключей, добавить поддержку незашифрованных цифровых подписей и возможность использования регулярных выражений для определения заслуживающих доверия подписей.