GPG. Шифрование в линуксе. Лучшее из Open Source.
Вообще у нас есть совсем небольшое количество программ, которым можно доверять шифровать свои данные.
Так, например, раньше была очень популярна программа для шифрования, которая называлась TrueCrypt. Она имела очень большое количество пользователей и этой программе доверяли.
Но в один момент с ней произошла очень интересная вещь. Эта вещь называется “Свидетельство канарейки”
Свидетельство канарейки
Этот термин произошел совсем недавно, когда шахтеры начали брать с собой канарейку при добыче угля. В шахтах большой риск отравиться угарным газом, а канарейка испытывала действие газа намного раньше человека и умолкала.
Фактически этот термин означает передачу информации через молчание или отрицание.
Согласно “Патриотическому акту”, правительство США может направить секретный ордер интернет-компании на слежку за пользователем. Закон запрещает компании разглашать факт слежки. Но некоторые компании могут отправить вам имейл: “Уважаемый юзер, уведомляем вас о том, что в период с 2008 года по 5 октября 2017 года за вами не велось скрытое наблюдение. С уважением”.
TrueCrypt до 2014 года был очень надежной программой для шифрования, а в 2014 году проект был закрыт из-за давления на разработчиков. Все старые версии удалены, репозиторий очищен. А разработчики настоятельно рекомендовали переходить на программу BitLocker. Все сообщество сразу поняло сообщение разработчиков без лишних слов, так как ранее они высмеивали безопасность BitL ocker, то есть намёк на неискренность собственных слов и попытку сказать нечто важное.
Как и всегда я рекомендую использовать для шифрования только ПО с открытым исходным кодом.
Один из самых классных проектов для шифрования данных это GPG. Про который я и буду рассказывать.
И ролик я думаю будет большим. И сначала я расскажу базовые вещи, чтобы каждый смог понимать о чем речь. А дальше буду уже показывать на практике как вообще все настраивать и шифровать данные.
Будет так же круто, если кто-то сделает комментарий с таймингами, я его закреплю первым.
Симметричное и асимметричное шифрование
Для начала нужно понимать, что бывает два вида шифрования — Симметричное и асимметричное.
- Симметричное шифрование использует один и тот же ключ и для зашифровывания, и для расшифровывания.
- Асимметричное шифрование использует два разных ключа: один для зашифровывания (который также называется открытым), другой для расшифровывания (называется закрытым).
Эти методы решают определённые задачи и обладают как достоинствами, так и недостатками. Конкретный выбор применяемого метода зависит от целей, с которыми информация подвергается шифрованию.
Симметричное шифрование
В симметричных криптосистемах Алгоритм и ключ выбирается заранее и известен обеим сторонам. Сохранение ключа в секретности является важной задачей для установления и поддержки защищённого канала связи. В связи с этим, возникает проблема начальной передачи ключа (синхронизации ключей).
Симметричные, а конкретнее, алфавитные алгоритмы шифрования были одними из первых алгоритмов. Позднее было изобретено асимметричное шифрование, в котором ключи у собеседников разные.
Самые популярные алгоритмы: AES, Blowfish, Twofish.
Недостатки
Недостатками симметричного шифрования является проблема передачи ключа собеседнику и невозможность установить подлинность или авторство текста. Поэтому, например, в основе технологии цифровой подписи лежат асимметричные схемы. В остальном же алгоритм симметричного шифрования можно считать достаточно проработанным и эффективным, с минимальным количеством недостатков, особенно на фоне асимметричного шифрования
Достоинства:
- скорость
- простота реализации (за счёт более простых операций)
- меньшая требуемая длина ключа для сопоставимой стойкости
- изученность (за счёт большего возраста)
Асимметричное шифрование
Как уже было сказано, достоинство в том, что вы можете свой публичный ключ отдать через незащищенный канал. Так как этим ключом человек сможет только шифровать что-то. Но не сможет расшифровывать.
Криптографические системы с открытым ключом в настоящее время широко применяются в различных сетевых протоколах: TLS, SSL, HTTPS, SSH, PGP.
Первый недостаток асимметричного шифрования заключается в низкой скорости выполнения операций зашифровки и расшифровки, что обусловлено необходимостью обработки ресурсоемких операций. Как следствие, требования к аппаратной составляющей такой системы часто бывают неприемлемы.
Вообще принцип асимметричного шифрования можно очень просто выразить одной фразой: “Можно сгенерировать пару очень больших чисел так, чтобы, зная одно, нельзя было вычислить другое за разумный срок. При этом механизм генерации является общеизвестным.”
Все асимметричные алгоритмы можно описать очень кратко. Должно быть всего одно свойство. Если известно x то f(x) вычислить довольно просто. Если известно y=f(x) , то для вычисления x нет простого пути.
Один из самых популярных алгоритмов является алгоритм RSA
RSA (Алгоритм работы)
Алгоритм работает довольно просто. Мы просто берем два простых числа P и Q .
Умножим их друг на друга и в результате получим N .
Потом выберем случайное число D . Оно должно быть взаимно простым с (P-1)*(Q-1) .
И определим число E , для которого будет истиной (E*D) mod ((P-1)*(Q-1))=1
И у нас открытый ключ это числа E и N , а приватный — числа D и N
Теперь, чтоб нам зашифровать что-нибудь нашим открытым ключом нам надо разбить наш шифруемый текст на блоки, каждый из которых можно представить в виде числа M(I)=0,1,2. N-1
И зашифровать, как последовательность M(I) по формуле C(I)=(M(I)^e)mod N .
А чтобы потом расшифровать это, просто используем секретный ключ , по формуле M(I) = (C(I)^D) mod N
В результате получим исходный текст.
О длине ключа RSA
Алгоритм RSA он один, но мы можем использовать ключ разной длины. Когда ты создаешь RSA пару, то ты указываешь длину ключа в битах. Эта длина определяет количество бит в модуле.
Короче, для того чтобы хранить ваши данные в безопасности в течение двух десятилетий рекомендуется использовать RSA2048.
Два десятилетия это потому, что у нас до сих пор существует закон Мура. Некоторые говорят, что он уже не работает, вроде это говорил директор NVidia. Но не знаю откуда у него такая информация. По информации всех остальных людей в этом мире закон Мура работает и будет работать дальше.
И фактически сейчас взломать RSA2048 невозможно. Но через 20 лет это будет возможно.
Вы можете спросить, а почему не взять просто самый большой из возможных.
И с точки зрения безопасности естественно лучше выбирать тот, который больше. Так как он будет наиболее безопасным. И причем тут зависимость не линейная.
То есть 2048 не в 2 раза безопаснее чем 1024. А во много раз. И так же 4096 во много раз безопаснее чем 2048.
Но при этом сам процесс шифрования и процесс расшифровки он у нас естественно требует нашего с вами процессорного времени. И тут тоже большая разница. Каждое увеличение ключа в два раза увеличивает процессорное время примерно в 6-7 раз. Ну вот условно если ваш процессор будет расшифровывать rsa1024 одну минуту. То rsa2048 он будет расшифровывать 7 минут. А RSA4096 он уже будет расшифровывать 49 минут.
Насколько безопасен каждый из вариантов?
RSA-числа — это множество больших полупростых чисел (чисел, представимых в виде произведения двух простых чисел), используемых в конкурсе RSA Factoring Challenge. Конкурс заключался в нахождении простых множителей предложенных чисел
RSA Laboratories опубликовала 54 полупростых числа длиной от 100 до 617 десятичных знаков. За факторизацию некоторых из них были предложены денежные призы. Наименьшее RSA-число было разложено за несколько дней. Большинство чисел до сих пор не разложены и предполагается, что многие из них останутся неразложенными ещё довольно долгое время.
RSA Challenge официально закончился в 2007 году, но люди до сих пор пытаются раскладывать числа, к марту 2017 года было разложено 19 из 54 чисел. Первые RSA-числа, от RSA-100 до RSA-500, были пронумерованы в соответствии с числом десятичных знаков. Более поздняя нумерация отражает число битов
RSA-230 имеет 230 десятичных знаков (762 бита). Факторизовано 15 августа 2018 в Noblis
RSA-232 имеет 232 десятичных знака (768 бит), и пока что не факторизовано
RSA-768 имеет 768 бит (232 десятичных знака) и было разложено 12 декабря 2009 года Торстеном Клейнжунгом, Казумаро Аоки, Йенсом Франке, Арьеном Ленстрой, Эммануилом Томе, П. Годри, Александром Круппа, Питером Монтгомери, Д. В. Босом, Д. А. Освиком, Г. Рилем, Андреем Тимофеевым и Полем Циммерманном.
RSA-1024 имеет 1024 бита (309 десятичных знаков), и пока что не факторизовано. За факторизацию был объявлен денежный приз в 100000 долларов США.
Успешная факторизация RSA-1024 имеет важное значение для многих пользователей алгоритма RSA аутентификации с открытым ключом, т.к. наиболее часто используемая длина ключа — 1024 бита.
RSA-2048 имеет 2048 битов (617 десятичных знаков). Это наибольшее из RSA-чисел и за него положен приз в 200000 долларов США.
Наибольшее факторизованное RSA-число имеет длину 768 бит (232 десятичных знака) и RSA-2048 может не быть разложено в течение долгих лет, до значительного улучшения вычислительных мощностей и продвижений в факторизации целых чисел.
AHTUNG! Биты!
Важно понимать одну вещь!
RSA Security рекомендует использовать ключи 2048 бит, когда большинство алгоритмов симметричного шифрования используют 112 или 256 бит.
Тут прям принципиальная разница. Для того чтобы взломать RSA нужно найти сомножитель определенной длины. И это такая задача, которую нельзя усложнить очень сильно, иначе для зашифровки и расшифровки у нас будет требоваться очень много времени.
А чтобы взломать симметричный ключ нам надо перебрать 2 в степени N комбинаций, где N — длина ключа. И имея симметричный ключ у нас как шифрование так и расшифровка делается прям мгновенно.
Так что симметричный ключ в 256 бит примерно равен ассиметричному ключу в 15360 бит.
ПРАКТИКА
Ладно, давайте уже перейдем к практике.
Для шифрования мы будем использовать пакет gpg это программа для асимметричного шифрования с открытым кодом, которая очень популярна. С помощью нее вы можете шифровать данные, подписывать свои файлы.
Подпись нужна для того чтобы в сети знали, что это вы. Программисты, например, часто используют gpg для того чтобы подписывать им свои программы. Просто чтобы вы были уверены, что программа именно от программиста, а не кто-то внедрил в программу вирус и подменил файл.
Или, например, создатель биткоина писал сообщения сообществу и подписывал их своим ключом.
Мы все знаем что его ключ
pub 1024D/5EC948A1 2008-10-30
И если мы видим такую подпись, то мы скорее будем доверять ей. Чем какому-то сообщению без подписи.
Так же с помощью gpg мы можем авторизоваться на SSH серверах.
Короче говоря, очень крутая программа, которой пользуются просто все. Вы если про нее не знаете, то рекомендую узнать о ней побольше.
Как я уже сказал, она может шифровать, подписывать и авторизовывать.
Давайте же начнем ее использовать.
Для начала установим пакет gpg
Проверим, что версия актуальная.
gpg --version
У меня, например версия 2.2.13.
Давайте проверим так же, что у нас нет ключей. Я свои удалил, чтобы показать вам весь процесс создания ключей с самого начала.
Для того чтобы посмотреть наши публичные ключи есть команда
gpg -k
gpg —list-keys —keyid-format LONG (Мы так же можем использовать эту команду если нам нужно видеть ключи)
А для того чтобы увидеть приватные ключи есть команда:
gpg -K
gpg —list-secret-keys —keyid-format LONG (Мы так же можем использовать эту команду если нам нужно видеть ключи)
Мы убедились, что у нас нет ключей. Теперь давайте мы их создадим. Делается это командой:
gpg --full-generate-key
Как я уже говорил, мы можем выбрать любой из вариантов. RSA Lab нам рекомендует 2048 . Лично я выберу 4096 , если ваш компьютер мощный, то я и вам его рекомендую.
Так, теперь мы можем опять выполнить команды gpg -k и gpg -K
И теперь мы видим, что у нас есть наш ключ.
Давайте теперь я кратко расскажу о том, как это читается.
sec 2048R/920B1221 2013-12-01 [expires: 2014-12-01]
- sec – это primary private часть нашего ключа
- 4096R – это собственно алгоритм и количество бит
- 920B1221 – это айди ключа, ну вернее последняя его часть, на самом деле он немного длиннее.
- 2013-12-01 – дата создания ключа
- [expires: 2014-12-01] – когда истекает ключ
- uid – это что-то вроде идентификатора
- Dmitriy Kovalev – Это имя, которое мы задавали
- 123 – Это наш комментарий
- « – имейл
ssb 2048R/2AB141A0 2013-12-01
- ssb – Это наш сабкей в приватной части нашего ключа
- 2048R – его алгоритм
- 2AB141A0 – его айди
- 2013-12-01 – его дата создания
Когда мы создаем наш ключ, то это вообще все сохраняется в директории ~/.gnupg
- ~/.gnupg/gpg.conf — файл конфиругации
- ~/.gnupg/secring.gpg — тут секретная часть ключей
- ~/.gnupg/pubring.gpg — тут приватная часть ключей
Sign
Теперь смотрите, мы можем взять какой-нибудь файл и подписать его с помощью команды
gpg --clearsign 1.txt
Давайте теперь откроем файл и посмотрим на него.
Encrypt
Теперь давайте попробуем зашифровать какой-нибудь файл.
gpg -r johenews --armor --encrypt 1.txt
Теперь откроем его.
Видим, что файл зашифрован.
А теперь расшифруем его.
gpg -d 1.txt.asc
Ну, вот как-то так.
Just a test
Давайте теперь попробуем зашифровать какой-нибудь прям огромный файл.
Давайте, например, возьмем 100 гигабайт.
dd of=file.txt bs=1 count=0 seek=100G
Теперь зашифруем его
gpg -r johenews --armor --encrypt file.txt
А теперь расшифруем
gpg -d file.txt.asc
Результат теста с ключом в 4096 бит следующий
Этот пример я показал вам для того, чтобы вы понимали, что асимметричное шифрование не очень хорошо подходит для того, чтобы шифровать очень большие файлы. Тест мой сделан на ноутбуке Lenovo x1c6. На вашем компьютере время будет другим.
Так же надо понимать, что это время для 4096 . На 2048 все будет в 6-7 раз быстрее. А на 1024 все будет в 40-50 раз быстрее.
Это я вам показал самые основы.
Теперь давайте поговорим подробнее про ключи. Так как это крайне важно.
Keys
Ваш ключ может использоваться для защиты ваших важных данных. Я вот рассказывал уже про менеджер паролей pass. Он как раз использует ключ gpg . Так же как я уже сказал вы можете привязать ключи к вашему SSH серверу и заходить на него с их помощью. И если злоумышленник получит ваши ключи, то будет совсем печально, поэтому надо со всей ответственностью подойти к безопасности и о правильном их хранении.
Хорошей практикой считается отдельное хранение основного приватного ключа.
Для этого мы сейчас создадим саб-ключи. А основной ключ сначала забэкапим, потом закачаем его в самое безопасное место и потом удалим из pgp .
А делается это потому, что наш главный ключ умеет создавать саб ключи. И саб ключа нам достаточно для всего.
Главным ключом мы можем создать саб-ключ на небольшой промежуток времени. И чисто теоретически, даже если у вас украдут ноутбук, то ваш ключ не будет скомпрометирован. С помощью основного ключа вы сможете отозвать тот ключ и создать новый.
Добавим subkeys
Делается это командой
gpg --expert --edit-key johenews
После нее мы входим в консоль gpg и далее мы можем там вводить команды. Для того чтобы посмотреть список всех команд мы можем ввести ?
Чтобы добавить новые subkey мы должны ввести
addkey
Создать ключ и потом не забываем написать
save
Бэкапим секретный ключ
gpg -a --export-secret-key johenews > secret_key
Создаем Revocation Certificate
gpg -a --gen-revoke johenews > revocation_cert.gpg
Экспортируем публичный ключ
gpg -a --export johenews > public_key.gpg
Очень важно хранить секретный ключ в супернадежном месте.
revocation certificate тоже важно хранить где-либо куда никто кроме вас не имеет доступ.
Удаляем Primary Key
Для начала мы должны экспортировать secret subkeys:
gpg -a --export-secret-subkeys johenews > secret_subs.gpg
Теперь удалим всю секретную часть нашего ключа:
gpg --delete-secret-keys johenews
При этом надо понимать, что у нас останется публичная часть нашего ключа в ~/.gnupg/pubring.gpg :
gpg -k
Но не будет ничего в ~/.gnupg/secring.gpg :
gpg -K
Теперь мы должны будем сделать импорт наших приватных саб-ключей, но без главного ключа:
gpg --import secret_subs.gpg
And we’re left with our “laptop keys”:
gpg -k gpg -K
Надо понимать, что знак # рядом с sec означает что primary часть секретного ключа отсутствует в нашей связке ключей.
Теперь мы можем записать primary часть секретного ключа, например на Yubikey или другой ключ. Если у нас его нет, то просто копируем на флэшку и прячем ее в самое секретное место в мире.
gpg -a --export-secret-keys johenews > laptop_keys_secret.gpg gpg -a --export johenews > laptop_keys_public.gpg
И теперь мы можем импортировать их на наш другой наш компьютер:
gpg --import laptop_keys_public.gpg
The end
Если эта тема будет интересна, то в следующий раз расскажу о том как авторизовываться на SSH с помощью gpg , как закачать ключ на Yubikey, как шифровать email переписку.
PGP / GPG шифрование
Защита своих данных от чужих глаз — в некоторых случаях может быть вопросом жизни и смерти, а полагаться в этом вопросе на других означает доверять им свои данные. Защитить от любопытных носов свою переписку своими же силами поможет GPG шифрование.
Я также могу вам посоветовать статью «Зашифрованная почта», в которой мы рассказывали как с помощью GPG шифрования зашифровать конфиденциальную переписку.
- GPG шифрование
- История PGP / GPG шифрования
- Термины GPG шифрования
- Установка GPG шифрования
- Шифрование сообщений и файлов
- Подписи в GPG шифровании
- Функция Web of Trust
- Зачем нужно шифрование
GPG шифрование
GPG (Gnu Privacy Guard) — это инструмент асимметричного шифрования. Если проще, он создает такое сообщение, которое может прочитать только тот, кому ты его написал. Он незаменим при передаче любой важной текстовой информации. Это могут быть письма электронной почты, личные сообщения на форумах, или даже на публичных открытых сервисах. Помимо шифрования он также предоставляет несколько других функций для обеспечения безопасности.
Всегда самым очевидным способом защитить свои коммуникации было шифрование. Раньше для этого применялось симметричное шифрование, требовавшее передачи ключей по надежному каналу. С развитием электронных коммуникаций, увеличением объема данных и возможностей прослушки надежная передача ключей стала трудной задачей.
История PGP / GPG шифрования
В 1970-ых были разработаны асимметричные алгоритмы, позволяющие безопасно, открыто и автоматизировано обмениваться ключами. Схемы таких алгоритмов позволяют двум сторонам обменяться открытыми ключами, используемыми для обозначения получателя сообщения, и при зашифровке использовать открытый ключ получателя одновременно с секретным ключом отправителя. Расшифровать сообщение можно только секретным ключом получателя, и при этом будет видно, что шифрование выполнял именно владелец открытого ключа, то есть отправитель. В такой схеме секретные ключи, используемые для расшифровки, не нужно передавать, поэтому они остаются в безопасности, а отправитель сообщения выявляется при расшифровке, что исключает подмену информации. Но подобное изобретение было доступно только военным и спец. службам.
В 1991 появился общедоступный инструмент асимметричного шифрования для личного использования — PGP, задавший стандарт, однако он был платным и являлся зарегистрированной товарной маркой.
В 1999 был создан GPG — свободный, бесплатный, открытый и полностью совместимый со стандартом аналог PGP. Именно GPG стал самым популярным и зрелым инструментом асимметричного шифрования.
Термины GPG шифрования
Прежде чем приступить к использованию GPG, нужно понять несколько главных особенностей этого инструмента. Первая и основная особенность — это понятие «ключи». Каждый пользователь создает себе свой личный ключ. Ключ пользователя состоит из двух частей
- Публичный ключ (из публичной части)
- Секретный ключ (из секретной части)
Публичный ключ (далее просто «ключ») представляет собой своего рода визитную карточку, которую пользователь раздает всем своим контактам, желающим переписываться с шифрованием.
Секретный ключ отвечает за процессы шифрования исходящих сообщений и расшифровки полученных. Его следует хранить в безопасном месте. Принято считать, что если кто-либо завладеет секретным ключом, то ключ можно считать скомпрометированным, а значит небезопасным. Этого следует избегать.
Вторая особенность — ключи, основанные на разных алгоритмах совместимы между собой. Неважно, использует ли пользователь RSA или ELGamal, для шифрования не нужно забивать голову такими деталями. Это достигается за счет работы по упомянутому выше стандарту и через некоторые криптографические приемы. Это одно из главных преимуществ GPG. Достаточно знать нужные команды, и программа сделает все сама. В библиотеку входит большое количество асимметричных алгоритмов, симметричным шифров и односторонних хэш-функций. Разнообразие также является преимуществом, потому что позволяет создать одновременно и общие рекомендованные конфигурации, подходящие для большинства, и возможность тонкой настройки для более опытных пользователей.
Как установить GPG шифрование
Для начала работы нужно установить сам GPG. Пользователи Linux могут поставить его из любого пакетного менеджера, поискав там «gnupg», или собрать вручную. Пользователи Windows могут воспользоваться сильно устаревшим клиентом GPG4Win, который имеет несколько неприятных багов и больше функций, или портативным и более свежим клиентом GPG4USB, который имеет меньше функций, но намного проще и стабильнее. Кстати, мы уже писали о том как с помощью клиента GPG4USB зашифровать свою переписку.
Независимо от операционной системы и клиента, после установки нужно будет создать свой ключ, введя в терминале или кликнув в клиенте соответствующую команду. Программа попросит определиться с алгоритмом шифрования. Обычно их два — это RSA и ELGamal (на самом деле три, если на Linux Вы отважились поставить экспериментальную ветку «modern» с криптографией на эллиптических кривых). Конкретных рекомендаций по алгоритмам нет, они разные и каждый выбирает себе схему по нраву.
Затем необходимо определиться с размером ключа в битах. Здесь тоже нет короткого и однозначного ответа. У слишком длинных ключей есть и недостатки. Одно можно сказать с уверенностью: при выборе RSA и ELGamal не используйте ключи меньше 2048 бит, они крайне не безопасны. Далее программа попросит заполнить несколько форм: E-mail, Имя и комментарий. E-mail и Имя — это публичная информация, которую сможет увидеть каждый, с кем вы будете переписываться.
• В качестве почты можно указать другие виды связи, например ID какого-либо сервиса или мессенджера (Tox, Jabber, BitMessage и т. д.), разделив знаком «@» сам идентификатор/адрес и название сервиса. Чаще всего содержание именно этого поля используется для идентификации владельца ключа.
• Имя выбирать по своему усмотрению. Например, часто используемый ник или вообще «Anonymous».
• Поле комментария заполнять не обязательно. Можно ввести дополнительный. адрес или свою должность. Комментарий будет виден другим пользователям.
После заполнения всех форм нужно ввести пароль. Его можно и пропустить, что не рекомендуется, так как это единственная мера безопасности, которая защитит секретную часть ключа в случае захвата файла с данным ключом злоумышленником. Также важно не забыть пароль, иначе работа с ключом будет более невозможна. При создании ключа нужно внимательно проверять корректность ввода всех полей — ошибки потом не исправить. Публичный ключ распространяется среди большого количества людей, поэтому среди пользователей не принято их часто менять — не у всех контактов может быть свежий ключ.
Сгенерировав свой GPG-ключ, можно начать его распространять. Для этого надо ввести команду отображения публичной части. Исторически сложилось так, что программа изначально применялась для шифрования почты и подписи публичных сообщений в почтовых рассылках, поэтому ключи отображаются по принципу формата РЕМ (англ. «PrivacyEnhanced Mail»). Формат представляет собой единый стандартный блок ключа, начинающийся заголовком — BEGIN PGP PUBLIC KEY BLOCK —, за ним следует достаточно длинное тело самого ключа, кодированное цифрами и латинским алфавитом, и завершающий заголовок — END PGP PUBLIC KEY BLOCK —. Весь блок с заголовками представляет собой ключ GPG, его и нужно распространять целиком. Помимо ручного распространения ключей, возможно использовать специализированные сервера. Пользователь загружает свой публичный ключ на сервер, и при необходимости любой может запросить его. Во многих программах в качестве сервера по умолчанию часто указывают сервер MIT.
Каждый GPG-ключ уникален. Запоминать и сравнивать такие большие блоки ключей вручную невозможно, поэтому для этого существуют отпечатки ключей. Каждый отпечаток ключа тоже уникален, формируется из публичной части, предоставляя короткую уникальную строку для идентификации. В строке отпечатка содержится 40 символов с разделением на 4 символа пробелами. Важно знать, что последние 8 или 16 символов являются еще и ID ключа. При использовании команд из терминала надо будет указывать ID для работы. Отпечатки удобны для быстрого сравнения двух ключей, или короткого указателя нужного ключа при нехватке места.
Шифрование сообщений и файлов
Шифрованные с помощью GPG сообщения состоят из похожих на публичный ключ блоков, только с заголовком — BEGIN PGP MESSAGE —, а длина кодированной символами части зависит от длины сообщения. Подобные сообщения могут быть прочитаны только обладателем ключа, которому адресовано сообщение. Также можно зашифровать свое послание для нескольких ключей, что очень удобно при общении небольшой группы людей. Шифровать можно и файлы, тогда результат шифрования будет записан в файл, а не кодирован текстовыми символами.
Подписи в GPG
Подпись сообщений является удобным средством открытого публичного подтверждения авторства, потому что, как и в случае с шифрованием, только истинный обладатель ключа может подписать свое послание таким ключом и подделать подобную подпись невозможно. Отличается от шифрованных сообщений тем, что текст остается открытым, заключенным с двух сторон соответствующим заголовком, а снизу добавляется небольшой блок самой подписи, также кодированный символами. При попытке изменить хотя бы один символ открытого текста, подпись станет не действительной. Проверка подписей также выполняется при помощи GPG.
Подписи тоже можно применять на файлах. Особенно часто эта функция применяется разработчиками ПО, связанного с безопасностью. Делается это для того, чтобы предотвратить подмену файлов злоумышленниками, которые могут встроить в программы вредоносный код. Подписываются обычно архивы или сборки, сама подпись сохраняется в отдельный файл с расширением .asc или .sig. Ключ публикуется в нескольких местах и/или загружается на сервер, где его очень трудно подменить. Сам процесс проверки называется «верификация подписи».
Функция Web of Trust
Еще одна функция GPG, которую стоит упомянуть — это Web of Trust. Она используется для подтверждения принадлежности публичного ключа конкретному человеку. Для этого знакомые друг с другом пользователи GPG обмениваются ключами при личной встрече.
Каждый из них сверяет отпечаток ключей и создает для каждого полученного ключа электронный сертификат, доказывающий достоверное соответствие между определенной персоной и публичным ключом.
Создание сертификата называется «подписывание ключей». Сам сертификат потом загружается на сервер ключей, и любой может его запросить. Подразумевается, что чем больше пользователей подписали ключ, тем выше к владельцу доверие.
Модель использования WoT предполагает, что пользователи всегда указывают в ключах свои реальные имена и все желающие установить сеть доверия могут физически встретиться для личного обмена ключами. Это делает подобную схему трудно выполнимой при анонимном общении.
При псевдонимном общении для обмена можно использовать каналы связи или сервисы с аутентификацией, которая будет подтверждать достоверность. В любом случае, сети доверия при анонимном или псевдонимном общении не такие стойкие, частично из-за отсутствия «крепкого набора», формирующего основную группу доверенных пользователей, частично из-за человеческого фактора. Решение о целесообразности подобной сети доверия лежит целиком на группе пользователей, желающих ее построить.
Зачем нужно шифрование
Зачем вообще нужно все это шифрование, если человек ничего не скрывает и не нарушает? Это один из самых часто задаваемых вопросов. На него есть несколько ответов. За последние годы возможность тотальной слежки за сетевой деятельностью миллионов пользователей стала уже вопросом не технической сложности, а ресурсов. Обладатели таких ресурсов — все спецслужбы мира и десятки крупных корпораций, с помощью таких программ как PRISM и XKeyscore могут собирать и хранить годами все письма электронной почты, SMS-сообщения и историю звонков.
Это нарушает конституционные права граждан на тайну переписки, однако влияние этих организаций такое сильное, что остановить неправомерный сбор информации невозможно. Использование GPG не снимет слежку с миллионов людей и не исправит магическим образом весь мир. Это всего лишь инструмент в руках человека. Инструмент, позволяющий сохранить письма и слова только для тех, кому они предназначены, и ни для кого больше. Это немного, но по крайне мере это возвращает право каждого человека на тайну переписки.
Вас может заинтересовать обзор расширения браузера для передачи зашифрованных файлов MiniLock
Если сбор данных и слежка кажутся слишком отдаленными, можно рассмотреть шифрование с еще более практичной стороны. Та же электронная почта в открытом виде проходит десятки промежуточных узлов. На каждом может быть сколько угодно уязвимостей и дыр безопасности, которые могут быть использованы кем угодно.
В мире, где цифровые коммуникации играют ключевую роль, шифрование — это элементарное правило безопасности, предотвращающее огромное количество проблем. Глупо не воспользоваться возможностью повысить безопасность, учитывая что программа распространяется бесплатно, и освоить ее можно достаточно быстро. А подробнее ознакомиться с командами можно в официальном руководстве.
Что такое gpg ключ
PGP (Pretty Good Privacy / «Достаточно надежная конфиденциальность») — это программа шифрования с публичным ключом, которая стала самым популярным стандартом для шифрования электронных писем . Фраза «Достаточно надежная» – это ироничное преуменьшение.
Помимо шифрования и дешифрования электронной почты, PGP используется для подписи сообщений, чтобы получатель мог верифицировать как личность отправителя, так и целостность содержимого.
PGP использует приватный ключ, который должен храниться в секрете, и публичный ключ, который известен отправителю и получателю.
GPG (GNU Privacy Guard) является независимой реализацией стандартов OpenPGP.
Настройка PGP/GPG позволит вам:
Верифицировать автоматические сообщения от Кракен, чтобы вы могли быть уверены, что они пришли от нас и не были изменены во время транзита.
Получать от нас зашифрованные автоматические электронные письма . Некоторые из этих писем будут содержать конфиденциальную информацию, такую как инструкции по восстановлению вашего аккаунта, поэтому шифрование добавляет дополнительный уровень безопасности.
Защитить ваш аккаунт Кракен , если ваш адрес электронной почты будет взломан.
Для получения дополнительной информации о PGP/GPG, перейдите по ссылкам ниже.
Шифрование и подпись сообщений с помощью GPG
GPG (GNU Privacy Guard) – это свободное средство для шифрования данных. GPG обеспечивает безопасную передачу информации и может подтвердить подлинность источника сообщения.
Это руководство расскажет, как работает и как реализовывается GPG.
Примечание: Хотя руководство предназначено для сервера Ubuntu 16.04, с небольшими поправками оно подойдет и для других дистрибутивов.
Как работает шифрование на открытых ключах
Проблема, с которой сталкиваются многие пользователи, – это настройка безопасного взаимодействия и подтверждение личности собеседника. Многие средства, которые пытаются решить эту проблему, рано или поздно требуют передачи пароля или других идентифицирующих учетных данных по незашифрованному соединению.
Ограничение доступа к сообщению
В некоторых случаях право на чтение сообщения должно быть только у получателя (особенно если сообщения содержат конфиденциальные данные).
GPG использует механизм безопасности, известный как шифрование на открытых ключах. Этот механизм позволяет разделить шифрование и дешифровку данных на две отдельные части.
Если обе стороны создают ключи и меняются открытыми ключами, они смогут шифровать сообщения. Для этого нужно иметь открытый ключ получателя (чтобы он расшифровал сообщение с помощью своего закрытого ключа) и свой закрытый ключ (чтобы расшифровать ответ, зашифрованный с помощью вашего открытого ключа). Таким образом, вы можете передавать зашифрованные данные с уверенностью в том, что расшифровать их сможет только пользователь, у которого есть закрытый ключ.
Подтверждение подлинности отправителя
Другим преимуществом GPG является возможность подписывать сообщения с помощью закрытого ключа. Открытый ключ, который есть у получателя, может подтвердить, что сообщение было отправлено указанным пользователем.
Настройка GPG-ключей
В большинстве дистрибутивов GPG устанавливается по умолчанию.
Если это не так, установите GPG самостоятельно. В Ubuntu и Debian введите:
sudo apt-get update
sudo apt-get install gnupg
В CentOS нужно ввести:
sudo yum install gnupg2
Чтобы шифровать данные с помощью GPG, создайте пару ключей. Для этого введите команду:
Команда задаст ряд вопросов.
Please select what kind of key you want: (1) RSA and RSA (по умолчанию)
What keysize do you want? 4096
Key is valid for? 1y (Срок действия истекает через 1 год. Для тестирования достаточно создать ключ с коротким сроком действия; для этого просто укажите число.)
Is this correct? y
Real name: имя
Email address: your_email@address.com
Comment: Дополнительный комментарий, который будет отображаться в подписи
Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O
Enter passphrase: Введите надежную парольную фразу (верхний и нижний регистр, цифры, символы).
После этого gpg сгенерирует ключи с помощью энтропии. Энтропия – это уровень непредсказуемости и неопределенности, которая существует в системе. GPG использует энтропию для создания безопасного набора ключей.
Этот процесс может занять много времени в зависимости от размера ключа и того, насколько активна система. Чтобы создать дополнительную энтропию, можно использовать инструмент под названием haveged. Откройте еще один терминал и подключитесь к серверу по SSH, чтобы настроить haveged.
Создание сертификата отзыва
Также нужно предусмотреть способ отзыва пары ключей (он пригодится в случае потери закрытого ключа). GPG позволяет быстро создать такой сертификат.
Это нужно сделать сразу после генерирования пары ключей. Сгенерируйте сертификат отзыва заранее и храните его в надежном месте (учтите, что компьютер может подвергнуться атаке или просто сломаться).
Чтобы сгенерировать сертификат отзыва, введите:
gpg —output ~/revocation.crt —gen-revoke your_email@address.com
Программа предложит подтвердить создание сертификата отзыва, а затем спросит, по какой причине нужно отозвать ключи. Эта информация будет видна другим пользователям. Вы можете выбрать любой из доступных вариантов (но он не будет точным, поскольку это делается заранее).
Примечание: Многие рекомендуют создать сертификат отзыва для каждого из вероятных сценариев.
После этого будет предложено добавить комментарий и подтвердить действия. Чтобы создать сертификат отзыва, нужно ввести свою парольную фразу GPG. Сертификат отзыва будет записан в файл, указанный с помощью флага –output (в данном случае в revocation.crt).
Revocation certificate created.
Please move it to a medium which you can hide away; if Mallory gets
access to this certificate he can use it to make your key unusable.
It is smart to print this certificate and store it away, just in case
your media become unreadable. But have some caution: The print system of
your machine might store the data and make it available to others!
Сразу ограничьте доступ к файлу сертификата:
chmod 600 ~/revocation.crt
Сертификат отзыва должен храниться в надежном месте, чтобы другие пользователи не могли отозвать ваш ключ. Создайте резервную копию сертификата и переместите ее на другую машину.
Импорт открытых ключей других пользователей
Теперь вы можете принимать открытые ключи от других пользователей, с которыми вы хотели бы общаться.
Импортировать открытый ключ пользователя можно несколькими способами. Если вы получили открытый ключ в текстовом файле, GPG может импортировать его с помощью следующей команды:
gpg —import name_of_pub_key_file
Также существует вероятность того, что пользователь, с которым вы хотите общаться, загрузил свой открытый ключ на специальный сервер. Такие серверы используются для размещения открытых ключей людей со всего мира.
Популярным сервером ключей является MIT. В браузере вы можете искать людей по их имени или адресу электронной почты:
Также поиск можно выполнять с помощью GPG.
gpg —keyserver pgp.mit.edu —search-keys search_parameters
Проверка и подпись ключа
Вы можете свободно распространять свой файл открытого ключа, и люди могут использовать его для безопасного общения с вами. Однако также важно иметь возможность при первой передаче открытого ключа убедиться в том, что ключ принадлежит именно тому пользователю, который вам нужен.
Подтверждение личности пользователей
Как понять, что человек, дающий вам открытый ключ, действительно является тем, за кого себя выдает? Если вы знакомы с человеком лично, это вообще не проблема: вы можете обменяться файлами при встрече.
Но есть много других обстоятельств и ситуаций, когда личный контакт невозможен. Вы можете не знать другого пользователя лично или жить на разных континентах. Если вы не хотите пользоваться незашифрованными каналами, проверка открытого ключа может вызвать ряд сложностей.
К счастью, GPG позволяет создать отпечаток ключа, с помощью которого обе стороны могут подтвердить подлинность ключей собеседника. Это дает уверенность в том, что оба открытых ключа верны.
Чтобы получить отпечаток ключа, введите:
gpg —fingerprint your_email@address.com
pub 4096R/311B1F84 2013-10-04
Key fingerprint = CB9E C70F 2421 AF06 7D72 F980 8287 6A15 311B 1F84
uid Test User
sub 4096R/8822A56A 2013-10-04
Полученное значение можно сравнить с самим пользователем или же с кем-то, кто имеет доступ к его серверу.
Подпись ключа
Подпись ключа говорит программному обеспечению, что такому ключу можно доверять, и что он действительно принадлежит указанному пользователю.
Чтобы подписать импортированный ключ, наберите:
gpg —sign-key email@example.com
Подпись ключа подтверждает, что владелец полученного открытого ключа действительно тот, за кого себя выдает. Это также помогает другим пользователям решить, следует ли доверять ему: например, пользователь, который доверяет вам, увидев, что вы подписали ключ этого человека, сможет также доверять ему.
Чтобы позволить владельцу подписанного ключа пользоваться доверительным к нему отношением, отправьте ему назад подписанный ключ. Это можно сделать, набрав:
gpg —output ~/signed.key —export —armor email@example.com
Теперь нужно снова ввести парольную фразу. После этого подписанный открытый ключ будет выведен на экране. Отправьте его владельцу, чтобы он мог использовать эту «печать одобрения» при общении с другими пользователями.
Получив новый подписанный ключ, пользователь может импортировать его в GPG и внести информацию о подписи. Это делается таким образом:
gpg —import ~/signed.key
Доступность открытого ключа
Имея доступ к к открытому ключу, другие пользователи не могут навредить вашей системе.
Потому полезно сделать открытый ключ легко доступным. Тогда пользователи могут быстро найти необходимую информацию, чтобы сразу же отправить вам зашифрованное сообщение.
Чтобы отправить кому-либо открытый ключ, запросите его в GPG:
gpg —output ~/mygpg.key —armor —export your_email@address.com
——BEGIN PGP PUBLIC KEY BLOCK——
Version: GnuPG v1.4.11 (GNU/Linux)
mQINBFJPCuABEACiog/sInjg0O2SqgmG1T8n9FroSTdN74uGsRMHHAOuAmGLsTse
9oxeLQpN+r75Ko39RVE88dRcW710fPY0+fjSXBKhpN+raRMUKJp4AX9BJd00YA/4
EpD+8cDK4DuLlLdn1x0q41VUsznXrnMpQedRmAL9f9bL6pbLTJhaKeorTokTvdn6
5VT3pb2o+jr6NETaUxd99ZG/osPar9tNThVLIIzG1nDabcTFbMB+w7wOJuhXyTLQ
JBU9xmavTM71PfV6Pkh4j1pfWImXc1D8dS+jcvKeXInBfm2XZsfOCesk12YnK3Nc
u1Xe1lxzSt7Cegum4S/YuxmYoh462oGZ7FA4Cr2lvAPVpO9zmgQ8JITXiqYg2wB3
. . .
Затем можно скопировать и вставить его в текстовый файл или отправить его любым другим удобным способом.
Чтобы опубликовать ключ на сервере ключей, можно вручную заполнить формы, доступные на большинстве сайтов.
Также это можно сделать через интерфейс GPG. Чтобы узнать ID своего ключа, введите:
gpg —list-keys your_email@address.com
Выделенная часть в выводе – это ID ключа. Это короткий путь сослать ключ на внутреннее программное обеспечение.
pub 4096R/311B1F84 2013-10-04
uid Test User
sub 4096R/8822A56A 2013-10-04
Чтобы загрузить открытый ключ на сервер ключей, используйте следующий синтаксис:
gpg —send-keys —keyserver pgp.mit.edu key_id
Шифрование и дешифровка сообщений при помощи GPG
Обменявшись ключами с другим пользователем, можно легко шифровать и расшифровывать сообщения.
Шифрование сообщений
Для шифрования сообщений используется флаг –encrypt. Базовый синтаксис выглядит так:
gpg —encrypt —sign —armor -r person@email.com name_of_file
Данные параметры шифруют сообщение, подписывают его вашим закрытым ключом (что подтверждает то, что сообщение написано вами), а также позволяют создать сообщение в текстовом формате.
Сообщение шифруется для открытого ключа любого пользователя, но может быть открыто только при помощи определенного закрытого ключа. Потому нужно добавить флаг второго получателя -r, чтобы иметь возможность позже прочесть данное сообщение.
То есть, если сообщение было зашифровано с помощью открытого ключа другого пользователя, у вас не будет возможности снова просмотреть сообщение, если только вы не получили его закрытый ключ. При указании отправителя вторым получателем программа шифрует сообщение дважды, отдельно для каждого получателя.
Дешифровка сообщений
Получив сообщение, просто вызовите GPG на файл сообщения:
В случае необходимости программа запросит пароль.
Если сообщение имеет вид чистого текста, то его можно скопировать и вставить, перед этим набрав gpg безо всяких аргументов. Можно нажать «CTRL-D», чтобы обозначить конец сообщения, и GPG расшифрует его.
Поддержка ключей
Существует ряд процедур, которые нужно выполнять для поддержки базы ключей.
Чтобы просмотреть список доступных GPG-ключей других пользователей, используйте команду:
Не стоит полностью полагаться на серверы открытых ключей, так как они могут содержать устаревшую информацию. Доверять отозванным (а значит — потенциально взломанным) ключам опасно.
Обновить информацию о ключах можно с помощью команды:
Эта команда извлекает новую информацию о ключах с серверов ключей.
Чтобы получить информацию с определенного сервера ключей, используйте команду:
Команда загрузит информацию о ключах с указанного сервера. Если команде не удалось обнаружить или извлечь какой-то ключ, она выведет сообщение об ошибке.
Заключение
Правильное использование GPG обезопасит переписку. Это очень полезно как при работе с конфиденциальной информацией, так и в обыденной переписке.
Поскольку определенные зашифрованные сообщения могут быть помечены программами мониторинга, рекомендуется использовать шифрование сообщений для любой, не только конфиденциальной, переписки.