Как стать автором
Обновить

Шифрование с использованием PGP

Время на прочтение 4 мин
Количество просмотров 10K

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

Сейчас в несколько этапов проходит обучение коллектива азам работы с программой gpg. Решение использовать для шифрования почтовой переписки, файлов утилиту GnuPG принято из-за ее доступности в различных дистрибутивах Linux. Вы спросите — чего Linux делает в предприятии. Я отвечу так — в следствии упорной 3-х месячной работы сеть из порядка 200 пк была с 90%-ым успехом переведена на linux, о чем я возможно расскажу немного позже.


Разберемся для начала с азами и принципами шифрования. Разбирать будем систему, известную под названием шифрование открытым ключом(public key encryption), которая стала фактическим стандартом шифрования разного рода информации.

Эта схема использует два ключа: один — личный ключ, который хранится только у пользователя, и второй — открытый ключ, который находится в публичном доступе и передается другим пользователям. Открытый ключ, принадлежащий самому пользователю или тому, кому он хочет послать зашифрованную информацию, используется для шифрования. И только владелец соответствующего личного ключа сможет расшифровать данные. Есть также и третий ключ, называемый ключом сеанса. Он генерируется автоматически и используется для шифрования и расшифровки. А поскольку все это выполняется автоматически, он редко упоминается в описании процесса.

Широкое распространение получили два пакета шифрования по схеме открытого ключа. Первый — коммерческий PGP(Pretty Cood Privacy), GPG (GNU Privacy Guard), который является свободной реализацией PGP. Второй — OpenSSH. Далее мы будем рассматривать только GPG, ввиду его открытости и распространенности.

Основной задачей GPG является выполнение процедуры шифрования файлов. Он не устанавливает защищенные каналы передачи данных, как это делает OpenSSH. Он просто шифрует данные и проверяет их целостность.

Первое что нужно сделать перед началом работы с GPG — это создать пару ключей: открытый и личный. Лучше всего это сделать под той учетной записью, под которой постоянно работаете. Команда для создания ключей такая:

gpg --gen-key

В процессе генерации необходимо выбрать тип ключа (по умолчанию годится первый вариант), его размер, срок действительности, имя пользователя, e-mail, пароль. Все эти пункты интуитивно понятны и останавливаться на них я не буду.

Генерация закончена, пара ключей готова к использованию. Оба файла — pubring.gpg (связка открытых ключей) и secring.gpg (связка личных ключей) — будут сохранены в двоичном коде в каталоге $HOME/.gnupg. Открытый ключ может быть представлен в двух видах: в виде двоичного кода и в текстовом формате. По умолчанию используется двоичный формат. Чтобы сконвертировать ключ в текстовый формат, необходимо выполнить:

gpg -a --export user > user.pub.key.asc

часть команды “> user.pub.key.asc” служит для перенаправления вывода не на экран, а в файл.

Для того чтобы увидеть идентификатор ключа, можно запустить проверку ключа, в результате чего будет выведен список ключей в файле pubring.gpg:

gpg --list-key

До этого момента мы проводили операции со своими ключами. А что же делать с ключами других пользователей? Для этого необходимо вставить полученный со стороны открытый ключ в свою связку открытых ключей:

gpg --import otherkey.pub.key.gpg.asc (где otherkey.pub.key.gpg.asc — это полученный файл ключа)

Шифрование является только одним из способов проверки целостности и достоверности информации. Другой способ — это подписывание файлов. В этом методе на основе характеристик файла создается своего рода подпись, в создании которой участвуют данные личного ключа. Если файл между моментом, когда он был подписан, и моментом получения не изменялся, то при его расшифровке или проверке с помощью GPG появится такое сообщение:

[user@host]$ gpg --verify foo.txt.asc foo.txt
gpg: Signature made Thu March 18 14:10:50 2009 EST using DSA key ID 12EA888D
gpg: Good signature from "******"


Чтобы подписать файл с именем “file”, нужно выполнить:

gpg -b file

В результате выполнения этой команды создастся файл в двоичном виде. Для того чтоб перевести его в ASCII представление, нужно сделать так:

gpg -ba file

Опция “-b” применяется для создания отдельного файла подписи. Файл подписи имеет то же название, что и подписываемый файл, но только с расширением .gpg или .asc, в зависимости от того в каком виде — двоичном или в ASCII — этот файл подписан.

И напоследок я расскажу как собственно шифровать файлы. Предположим что пользователь имеет вам открытый ключ и хочет отправить вам зашифрованный файл. Ему для этого необходимо выполнить такую команду:

gpg -r user -e file (где «user» — это идентификатор ключа в связке, владельцу которого отправляется зашифрованный файл, «file» — имя шифруемого файла)

В результате создается файл file.gpg, который можно отправлять. Можно также на выходе получить сразу файл в текстовом представлении:

gpg -r user -ea file (где «user» — это идентификатор ключа в связке, владельцу которого отправляется зашифрованный файл, «file» — имя шифруемого файла)

Получив такой файл, вам нужно всего лишь выполнить:

gpg -d file.gpg (или .asc)

Объединить шифрование и подписью можно одной командой:

gpg -r user -bea file

В результате получим зашифрованный файл, при дешифровке которого будут выполнены действия по созданию для него подписи.

Оригинал в блоге.
Теги:
Хабы:
+12
Комментарии 16
Комментарии Комментарии 16

Публикации

Истории

Ближайшие события

Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн
Геймтон «DatsEdenSpace» от DatsTeam
Дата 5 – 6 апреля
Время 17:00 – 20:00
Место
Онлайн