Інспектор ключів OpenPGP і парсер пакетів

Вставте броньований блок OpenPGP — ключ, підпис або повідомлення — або завантажте бінарний файл .gpg, і побачте відбиток, ID ключа, ідентифікатори користувачів, підключі, пакети підписів і сире дерево пакетів. Повністю у вашому браузері; нічого не вивантажується.
Лише парсер. Цей інструмент декодує і показує дані OpenPGP — він ніколи не перевіряє підписи криптографічно, ніколи не розшифровує і не запитує паролів. Щоб справді перевірити або розшифрувати, скористайтеся GnuPG (gpg --verify, gpg -d) з власною зв'язкою ключів. І як з будь-яким інструментом: справжні приватні ключі належать до вашої зв'язки ключів, а не до вкладки браузера.
Приймає всі типи броні: PUBLIC KEY BLOCK, PRIVATE KEY BLOCK, MESSAGE, SIGNATURE, ARMORED FILE.
бінарний експорт зв'язки ключів / .sig / .gpg — читається локально, ніколи не вивантажується
Що перевіряє цей інструмент — і чого він навмисно не робить
Він декодує броню (мітку, заголовки, 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.
Самоперевірка
Повторно запускає парсер на вбудованому зразку ключа, відокремленому підписі та підписаному повідомленні: мітки броні, перевірка CRC-24 і навмисне пошкодження, послідовності тегів пакетів, відбиток v4 та ID ключа порівняно з незалежно обчисленими значеннями, ідентифікатори користувачів, відбитки підключів, виявлення секретного ключа, а також негативні тести (сміття і усічені пакети мають бути відхилені). Нічого нікуди не надсилається.
OpenPGP пояснено з нуля
Одним реченням: OpenPGP — відкритий стандарт (RFC 4880, оновлений RFC 9580 у 2024) для наскрізного шифрування і цифрових підписів, найвідоміший як захист електронної пошти — і все передається невеликими маркованими бінарними пакетами, які зазвичай загорнуті в текстово-дружній шар «броні».
Що таке OpenPGP?

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

Модель — наскрізна: ви і ваш кореспондент кожен генеруєте особисту пару ключів; усе, що зашифровано для вас, можна розшифрувати лише вашим приватним ключем, який ніколи не залишає ваш комп'ютер. Замість центрального центру сертифікації (як у TLS) довіра до чужих ключів виникає через взаємне підписування ключів — «павутина довіри». Чи використовувати цю павутину, чи просто порівнювати відбитки поза каналом (телефонний дзвінок, візитівка), вирішуєте ви; сам формат нічого з цього не нав'язує.

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

«Ключ» OpenPGP — це насправді невеликий пакет пакетів: один пакет первинного ключа (якір вашої особи, зазвичай дозволений для підпису), один або кілька пакетів ідентифікаторів користувача («Alice <alice@example.com>»), самопідписи, що прив'язують ці ID до первинного ключа, і за бажанням підключі з власними підписами прив'язки — зазвичай окремий підключ шифрування, щоб цінний первинний ключ міг лишатися офлайн. Увесь броньований блок, який ви вставляєте на цю сторінку, — це і є цей пакет.

Відбиток — це хеш пакета первинного ключа: 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?

Під бронею кожен об'єкт OpenPGP — це послідовність пакетів. Кожен починається з байта тегу: старий формат пакує в нього 4-бітний тип пакета і тип довжини, новий формат (CTB, біт 6 встановлено) використовує 6-бітний тип і байти довжини, які навіть можуть описувати дані частинами. Поширені теги: 6 = публічний ключ, 5 = секретний ключ, 14 = підключ, 13 = ідентифікатор користувача, 2 = підпис, 4 = одноразовий підпис, 11 = буквальні дані, 8 = стиснені дані, 18 = зашифровані дані з захистом MDC. Ця сторінка виводить тег, формат заголовка, довжину і шістнадцятковий дамп для кожного знайденого пакета та видає помилку з позицією байта, коли заголовок пакета некоректний.

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

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

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

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

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

Чи може він прочитати мій експорт GnuPG? Так — ключі v4, v5 і v6, відокремлені підписи та повідомлення. Ключі версії 3 відхиляються з приміткою (застарілі з 2014).

Навіщо режим введення шістнадцяткових даних? Сирі дані OpenPGP — бінарні; якщо у вас є шістнадцятковий дамп зв'язки ключів або файлу .gpg, вставте шістнадцятковий текст, і парсер обробить його точно як декодовані байти.

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