Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!
Вчера был представлен выпуск пакета Sequoia 0.20.0. Он предлагает библиотеку функций и инструментарий командной строки с реализацией стандартов OpenPGP (RFC-4880). Команда проекта состоит из трех человек — участников проекта OpenPGP (RFC-4880). Для повышения безопасности и надежности кодовой базы они решили создать новую свободную реализацию OpenPGP на языке Rust. Код проекта распространяется под лицензией GPLv2+.
Цель разработчиков — не только повышение безопасности продукта, но и избавление от недостатков GnuPG. Без нарушения совместимости или кардинальной переработки кодовой базы их нельзя устранить в основном проекте. Так, связь между отдельными компонентами GnuPG достаточно сильная, так что вносить изменения сложно, не говоря уже о создании системы unit-тестирования. Инструментарий командной строки gpupg не синхронизирован по функциональности и библиотекой функций, так что ряд действий можно выполнить лишь при помощи утилиты.
У Sequoia есть утилита командной строки sq с поддержкой субкоманд в стиле Git, плюс два вариант API — низкоуровневый и высокоуровневый. Есть обвязки для языков C и Python. Поддерживается большая часть возможностей, которые описаны в стандарте OpenPGP, для шифрования, расшифровки, создания и проверки цифровых подписей.
Из дополнительных возможностей — это поддержка верификации по отдельно поставляемым цифровым подписям, адаптация для интеграции с пакетными менеджерами и возможность ограничения подписей по пороговым значениям и времени.
Низкоуровневый API очень близко воспроизводит возможности OpenPGP и некоторые связанные расширения, включая поддержку ECC и элементы из «черновика» будущей редакции стандарта. Что касается исключений, это только устаревшие части спецификации, которые могут негативно повлиять на безопасность — например, поддержка хэшей MD5. Также API поддерживает небуферизированную обработку сообщений. По своим возможностям он приблизился к полному охвату стандарта OpenPGP и полностью готов для работы с данными OpenPGP. В ближайшем времени должен выйти стабильный релиз 1.0.
Что касается высокоуровневого API, то он только начинает развиваться и охватывает пока такие возможности, как хранение открытых ключей и функции доступа по сети. Другие вспомогательные и предметно-ориентированные возможности планируется добавлять по мере развития проекта.
Кроме того, у пакета есть еще и очень мощные средства инспектирования пакетов, которые могут применяться при разработке, отладке и разборе инцидентов. Средства инспектирования совмещены с парсером, так что пользователь может проанализировать структуру зашифрованных сообщений, цифровых подписей и ключей.
sq packet dump --hex message.pgp
New CTB, 13 bytes: One-Pass Signature Packet
Version: 3
Type: Binary
Pk algo: EdDSA Edwards-curve Digital Signature Algorithm
Hash algo: SHA512
Issuer: 83F8 2E4F E9A5 E098
Last: true
00000000 c4 0d frame
00000002 03 version
00000003 00 sigtype
00000004 0a hash_algo
00000005 16 pk_algo
00000006 83 f8 2e 4f e9 a5 e0 98 issuer
0000000e 01 last
Что касается поддержки платформ, то сейчас пакет работает с платформами Linux, FreeBSD, Windows, macOS, Android и iOS. Есть и возможность работы с предоставляемыми этими платформами криптографическими сервисами, включая сопроцессоры для вычисления в изолированных анклавах. Чтобы обеспечить дополнительную изоляцию, практикуется разделение по отдельным процессам сервисов, которые работают с открытыми и закрытыми ключами. Например, в форме отдельного процесса развивается хранилище ключей. Для обеспечения взаимодействия отдельных процессов используется протокол Cap’n Proto.
В представленной новой версии появился низкоуровневый пакет sequoia-openpgp, программа sqv (замена gpgv) для верификации отсоединенных цифровых подписей (detached signature) и утилита sqop с реализацией интерфейса, не учитывающего состояние (Stateless OpenPGP CLI). Требования к Rust подняты до версии 1.46. Еще расширено использование системы непрерывной интеграции для проверки изменений и улучшен набор для тестирования совместимости с OpenPGP.
В ближайшее время разработчики планируют выпустить версию 1.0, в которой появится и высокоуровневый API, а не только низкоуровневый, как сейчас.