Просмотрщик ключей OpenPGP и разбор пакетов

Вставьте ключ, подпись или сообщение OpenPGP в формате armor — или загрузите двоичный файл .gpg — и посмотрите отпечаток, ID ключа, идентификаторы пользователей, подключи, пакеты подписей и полное дерево пакетов. Всё работает в вашем браузере; ничего не загружается.
Только разбор. Этот инструмент декодирует и показывает данные OpenPGP — он никогда не проверяет подписи криптографически, не расшифровывает и не запрашивает парольные фразы. Чтобы проверить или расшифровать, используйте GnuPG (gpg --verify, gpg -d) со своим связкой ключей. И, как и в случае с любым инструментом: реальные закрытые ключи должны храниться в вашей связке ключей, а не во вкладке браузера.
Принимает все типы armor: PUBLIC KEY BLOCK, PRIVATE KEY BLOCK, MESSAGE, SIGNATURE, ARMORED FILE.
экспорт двоичной связки ключей / .sig / .gpg — читается локально, никуда не загружается
Что проверяет этот инструмент — и чего он намеренно не делает
Он декодирует armor (метку, заголовки, полезную нагрузку base64, контрольную сумму транспорта CRC-24), разбирает каждый пакет в старом и новом формате заголовков, читает ключевые пакеты v4/v5/v6 (алгоритм, размеры MPI, время создания), вычисляет отпечатки v4 (SHA-1) и v6 (SHA-256), выводит ID ключей и перечисляет идентификаторы пользователей, подключи и подпакеты подписей. Он не проверяет подписи (для этого нужна полная процедура хеширования и проверки по RFC 9580 §5.2.4 и доверенная связка ключей), не расшифровывает и не загружает ключи с серверов ключей. Сверяйте результат с GnuPG: gpg --show-keys file.asc выводит отпечаток и идентификаторы пользователей, gpg --list-packets file.asc выводит структуру пакетов.
Примеры ключей на этой странице — четыре кнопки «Пример» вставляют настоящий ключ OpenPGP v4 RSA-2048, созданный исключительно для этой страницы (нигде не использовался). Пример закрытого ключа намеренно хранится незашифрованным (использование S2K 0), чтобы парсер мог показать структуру секретных MPI; реально экспортированный закрытый ключ показал бы свой шифр и получение ключа S2K.
Самопроверка
Повторно запускает парсер на встроенном примере ключа, отсоединённой подписи и подписанном сообщении: метки armor, проверка CRC-24 и намеренное повреждение, последовательности тегов пакетов, отпечаток v4 и ID ключа по независимо вычисленным значениям, идентификаторы пользователей, отпечатки подключей, определение закрытого ключа, а также негативные тесты (мусорный ввод и обрезанные пакеты должны отклоняться). Ничего никуда не отправляется.
OpenPGP с нуля
Вкратце: OpenPGP — открытый стандарт (RFC 4880, обновлён RFC 9580 в 2024 году) для сквозного шифрования и цифровых подписей, самый известный способ защиты электронной почты; всё передаётся в виде небольших помеченных двоичных пакетов, которые обычно упакованы в текстовый слой «armor».
Что такое OpenPGP?

PGP («Pretty Good Privacy») выпустил Фил Циммерман в 1991 году как программу, которой мог пользоваться любой для шифрования и подписи сообщений. Чтобы уйти от зависимости от одного производителя, формат сообщений стандартизировали как OpenPGP (RFC 2440 в 1998 году, RFC 4880 в 2007 году, RFC 9580 в 2024 году). Сегодня самая распространённая реализация — GnuPG, а тот же формат пакетов встречается в подписанных коммитах git, подписи пакетов ПО, серверах ключей и DNS-записи OPENPGPKEY.

Модель — сквозная: вы и ваш корреспондент создаёте личные пары ключей; всё, что зашифровано для вас, расшифровывается только вашим закрытым ключом, который никогда не покидает ваш компьютер. Вместо центрального удостоверяющего центра (как в TLS) доверие к чужим ключам строится на взаимной подписи ключей — «сеть доверия». Пользоваться этой сетью или просто сверять отпечатки по другому каналу (телефонный звонок, визитка) — ваш выбор; сам формат ни то, ни другое не навязывает.

Что такое ключ OpenPGP?

«Ключ» OpenPGP — это небольшой набор пакетов: один основной ключевой пакет (якорь вашей личности, обычно разрешённый для подписи), один или несколько пакетов User ID («Alice <alice@example.com>»), собственные подписи, связывающие эти ID с основным ключом, и необязательно подключи со своими подписями привязки — обычно отдельный подключ для шифрования, чтобы драгоценный основной ключ мог оставаться офлайн. Весь блок armor, который вы вставляете на эту страницу, и есть этот набор.

Отпечаток — это хеш основного ключевого пакета: SHA-1 (20 байт) для ключей v4, SHA-256 (32 байта) для ключей v6 — вычисляется только по открытой части. ID ключа — это просто последние 8 байт отпечатка v4 (первые 8 для v5). Отпечатки сверяют по другому каналу, чтобы убедиться, что ключ не подменили по пути к вам; ID ключей — короткий идентификатор для серверов ключей и не защищены от коллизий против целенаправленного атакующего.

ID алгоритмаНазваниеТипичное использование в ключе
1RSAКлассический универсальный; 2048–4096 бит, подпись и/или шифрование
19ECDSAКривые NIST (P-256 и др.), подпись
18ECDHСогласование ключей на Curve25519/P-256, подключи для шифрования
22EdDSAПодпись Ed25519 (современный выбор по умолчанию в GnuPG 2.4+)
25X25519Подключи для шифрования в паре с основными ключами Ed25519 (ключи v6)

Блок закрытого ключа содержит секретные числа после открытой части: октет использования S2K, указывающий, как они защищены (0 = не защищено, 254/255 = ключ, полученный из парольной фразы, с шифром), затем секретные MPI и контрольная сумма. Эта страница показывает режим защиты, но никогда не запрашивает парольную фразу и не пытается расшифровать секретный материал.

Что такое пакет OpenPGP?

Под слоем armor каждый объект OpenPGP — это последовательность пакетов. Каждый начинается с байта тега: старый формат упаковывает в него 4-битный тип пакета и тип длины, новый формат (CTB, бит 6 установлен) использует 6-битный тип и байты длины, которые могут описывать данные и в частичных фрагментах. Частые теги: 6 = открытый ключ, 5 = секретный ключ, 14 = подключ, 13 = User ID, 2 = подпись, 4 = односходовая подпись, 11 = литеральные данные, 8 = сжатые данные, 18 = зашифрованные данные с защитой MDC. Эта страница выводит тег, формат заголовка, длину и hex-дамп для каждого найденного пакета и сообщает позицию байта, если заголовок пакета некорректен.

Пакеты подписей несут свои метаданные в хешируемой и нехешируемой областях подпакетов. Подпись защищает только хешируемую область; нехешируемую (исторически используемую для ID ключа издателя) любой может переписать в пути, поэтому читатели должны считать её подсказкой, а не фактом. Собственная подпись на User ID — это то, что действительно связывает имя с ключом; сам по себе ключевой пакет, вставленный отдельно, ничего не доказывает о владельце.

ASCII armor — текстовая оболочка: -----BEGIN PGP PUBLIC KEY BLOCK-----, необязательные заголовки вроде Version: или Comment:, base64 от потока пакетов и завершающая строка =xxxx с 24-битной CRC. Эта CRC ловит только повреждения при передаче — заменив один символ base64, вы увидите, что страница это пометит, — но это не подпись и ничего не доказывает об авторстве.

Типичные ошибки
  • Доверие ключу без сверки отпечатков. Любой может создать ключ с любым именем. Сверка отпечатка по каналу, которому вы уже доверяете (лично, по телефону), — это и есть весь шаг аутентификации.
  • Путаница между CRC armor и подписью. Значок «CRC OK» означает только, что base64 пережил передачу, и ничего больше. Проверка — криптографическая операция, которую эта страница намеренно не выполняет.
  • Использование ID ключей как идентичности. 64-битные ID ключей могут быть подделаны атакующим с умеренными вычислительными ресурсами (это «коллизия ID ключа»); всегда указывайте полные отпечатки.
  • Вставка настоящих закрытых ключей в веб-страницы. Даже локальная страница без загрузки, как эта, — привычка, которую не стоит вырабатывать. Примеры здесь — одноразовые ключи, созданные для демонстрации.
  • Предположение, что «PGP MESSAGE» означает зашифровано. Метка armor ничего не говорит о содержимом — пример сообщения на этой странице подписан, но открыт; различает зашифрованные и литеральные данные именно тег пакета 18 или 11.
  • Импорт ключей v3. Ключи версии 3 (конструкция до 1996 года, слабые 16-битные ID ключей) считаются устаревшими с 2014 года; этот просмотрщик намеренно их отклоняет.
Часто задаваемые вопросы

Проверяет ли это подписи? Нет. Инструмент разбирает и показывает. Проверка подписи требует полной конструкции хеш-трейлера по RFC 9580, открытого ключа подписанта и решения, доверяете ли вы этому ключу — задача GnuPG или библиотеки OpenPGP.

Чем это отличается от openpgp.js? openpgp.js — полноценная реализация (шифрование, расшифровка, подпись, проверка), которую встраивают в приложение; эта страница — не имеющий зависимостей просмотрщик для чтения и аудита структур OpenPGP в браузере.

Может ли он прочитать мой экспорт GnuPG? Да — ключи v4, v5 и v6, отсоединённые подписи и сообщения. Ключи версии 3 отклоняются с примечанием (устарели с 2014 года).

Зачем нужен режим ввода hex? Необработанные данные OpenPGP двоичные; если у вас есть hex-дамп связки ключей или файла .gpg, вставьте hex, и парсер обработает его точно так же, как декодированные байты.

Что-нибудь загружается? Нет. Разбор, вычисление отпечатков и создание отчёта выполняются в этой вкладке; страница работает полностью в вашем браузере.