сравнение SSH и PGP

Наглядное сравнение SSH и PGP систем и их использование

SSH и PGP ключи — это два столпа современной кибербезопасности, но они решают совершенно разные задачи. Их часто путают, потому что оба используют асимметричную криптографию (пары из открытого и закрытого ключей).

Проще всего запомнить так:

  • SSH-ключи — это пропуск. Их основная задача — аутентификация (доказательство того, что вы имеете право доступа к чему-либо).
  • PGP-ключи — это универсальный инструмент. Их задачи — шифрование (чтобы не могли прочитать), подпись (чтобы могли проверить авторство и целостность) и иногда аутентификация.

Сравнительная таблица: SSH vs PGP ключи

Критерий SSH-ключи (Secure Shell) PGP-ключи (Pretty Good Privacy)
Основное назначение Аутентификация и установка безопасного канала. Предоставление доступа к чему-либо (серверу, Git-репозиторию, etc.) без пароля. Шифрование, подпись, аутентификация. Защита конфиденциальности и целостности данных (почты, файлов, ПО).
Главная задача Доказать серверу, что вы — это вы. 1. Зашифровать данные для конкретного получателя.
2. Подписать данные, чтобы подтвердить авторство.
3. Зашифровать данные (например, файлы).
Типичное применение Вход на удаленные серверы (Linux), безопасная передача файлов (SCP, SFTP), работа с Git (GitHub, GitLab). Шифрование электронной почты, подписание коммитов в Git, проверка целостности скачанного ПО (например, дистрибутивов Linux), шифрование файлов.
Формат и структура Относительно простой. Чаще всего это пары файлов: id_rsa (закрытый) и id_rsa.pub (открытый). Используют алгоритмы вроде RSA, Ed25519. Сложная и богатая структура. Ключ содержит много метаданных: имя, email, даты создания/истечения, возможности ключа (может ли он шифровать, подписывать), отпечаток (fingerprint), а также может состоять из подключей.
Доверие (Trust Model) Простое и централизованное. Вы вручную копируете свой открытый ключ на нужный сервер (в файл ~/.ssh/authorized_keys). Сервер доверяет тому, у кого есть соответствующий закрытый ключ. Децентрализованное (Веб доверия - Web of Trust). Вы можете подписывать ключи других людей, подтверждая, что доверяете их подлинности. Цепочка таких подписей создает сеть доверия.
Идентификация Понимается сервером. Обычно привязана к пользователю на конкретном сервере. Привязана к человеку (через имя и email в ключе).
Отзыв ключа Удаление открытого ключа из файла authorized_keys на сервере. Создание и широкое распространение сертификата отзыва (Revocation Certificate), который объявляет ключ недействительным.

Наглядные схемы работы

1. Схема работы SSH-ключа для доступа к серверу

flowchart TD
    subgraph User [Пользователь на своем компьютере]
        A[Запрос подключения к серверу] --> B[SSH-клиент предъявляет<br>свой Открытый ключ]
        A --> C[Сервер отправляет<br>«Вызов» случайными данными]
        C --> D[SSH-клиент подписывает «Вызов»<br>своим Закрытым ключом]
        D --> E[Отправляет подпись серверу]
    end

    subgraph Server [Удаленный сервер]
        B --> F[Сервер проверяет<br>есть ли присланный Открытый ключ<br>в файле authorized_keys]
        E --> G[Сервер проверяет подпись<br>«Вызова» с помощью<br>найденного Открытого ключа]
        G -- Подпись верна --> H[✅ Аутентификация успешна<br>Доступ разрешен]
        G -- Подпись неверна --> I[❌ Доступ запрещен]
    end

2. Схема работы PGP-ключа для подписи данных

flowchart TD
    subgraph Sender [Отправитель Подписывает данные]
        A[Исходные данные] --> B[Создает их хэш отпечаток]
        B --> C[Подписывает хэш<br>своим Закрытым PGP-ключом]
        C --> D[Цифровая подпись]
        A --> E[Объединяет исходные данные<br>и подпись для отправки]
        D --> E
    end

    subgraph Receiver [Получатель Проверяет подпись]
        E --> F[Разделяет полученное<br>на данные и подпись]
        F --> G[Вычисляет хэш<br>от полученных данных]
        F --> H[Расшифровывает подпись<br>Открытым PGP-ключом отправителя<br>и получает оригинальный хэш]
        G --> I{Сравнивает хэши}
        H --> I
        I -- Совпали --> J[✅ Подпись верна<br>Данные подлинны и не изменены]
        I -- Не совпали --> K[❌ Подпись неверна!<br>Данные отклонены]
    end

Ключевые выводы и аналогия

Представьте себе большую охраняемую территорию:

  • SSH-ключ — это пропускная карта, которую вы прикладываете к турникету. Турникет (сервер) проверяет, есть ли номер вашей карты в базе разрешенных номеров. Если есть — вас пускают. Задача решена.
  • PGP-ключ — это ваша печать и набор секретных кодов.
    • Шифрование: Вы можете положить документ в шкатулку и запереть ее на кодовый замок, который откроется только кодом конкретного получателя.
    • Подпись: Вы можете запечатать документ сургучной печатью. Любой, у кого есть оттиск вашей печати (ваш открытый ключ), может убедиться, что документ распечатали вы и его не вскрывали.

Можно ли использовать PGP-ключ для SSH? Технически да, это возможно через дополнительные надстройки (например, gpg-agent может работать как ssh-agent). Это позволяет использовать один главный PGP-ключ для множества задач (почта, подпись кода, доступ к серверам). Но «из коробки» эти системы не совместимы.