сравнение 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-ключ для множества задач (почта, подпись кода, доступ к серверам). Но «из коробки» эти системы не совместимы.