Обычным пользователям компьютеров простительно то, что они не имеют представления о том, что такое PGP. Под поверхностью современных вычислений происходит так много всего, что даже критически важные инструменты безопасности, такие как PGP, спрятаны.
Безусловно, есть специализированные круги, которые регулярно и открыто используют PGP. Прилежные пользователи Linux должны хотя бы мельком познакомиться с PGP, поскольку тот факт, что производители не установили нашу ОС, означает, что мы должны сами проверить ее целостность.
В противном случае, если ваша работа не затрагивает вопросы информационной безопасности, PGP по понятным причинам останется для вас загадкой. Но, как я уже сказал, для этой реальности это не менее важно. Фактически, PGP сыграла значительную роль в обеспечении безопасного общения в Интернете. На самом деле это не потому, что он широко используется, хотя он определенно используется в утилитах для установки программного обеспечения по всему миру. Скорее, его значение проистекает из его вызывающего вызова чрезмерно усердному правительству, которое стремилось взломать шифрование задолго до того, как большинство американцев стали регулярно пользоваться Интернетом.
Моя цель лечения PGP здесь двоякая. Первый — пролить свет на это для непосвященных. Второй и более важный — научить смелых из вас владеть этим мощным инструментом. Надеюсь, вы нашли здесь свой путь после прочтения моего руководства по безопасности. Если нет, ознакомьтесь с последним выпуском, и вы увидите, что PGP может быть полезен в определенных сценариях угроз с высокими ставками.
Прежде чем мы продолжим, имейте в виду, что, как и в случае с любым другим инструментом, полезность PGP зависит от сетевого эффекта. Его практическая возможность чрезвычайно ограничена из-за ограниченности кругов разработчиков программного обеспечения. Если вы хотите применить PGP для межличностного общения, те, с кем вы общаетесь, должны делать то же самое.
Содержание статьи
У каждого героя есть своя история
Крипто-войны были темным временем … и все еще остаются, в зависимости от вашей точки зрения. Как и в случае с большинством попыток правительства коренным образом изменить технологические реализации, первая криптовалютная война произошла в результате моральной паники, охватившей Вашингтон. Избранные официальные лица были напуганы тем, что Интернет станет царством беззакония, где злодеи охотятся на невиновных. Чтобы исправить это, они отчаянно искали способ сделать так, чтобы правоохранительные органы могли вглядываться в деятельность оскорбительных пользователей сети. Шифрование сделало это невозможным.
Эта склонность понятна, потому что Интернет был настолько новым и опасным для их избирателей. Также не следует забывать, что люди действительно пострадали от взаимодействий, которые полностью или частично происходили в сети.
Их ответом была попытка ослабить шифрование, чтобы правоохранительные органы могли быть уверены в соблюдении правил при вручении ордера. Шифрование по определению эффективно только в том случае, если содержимое сообщения не поддается расшифровке для всех, кроме предполагаемых отправителя и получателя. Предложение, хотя оно и было благожелательным, полностью нарушало этот принцип.
Именно тогда Фил Циммерман предложил миру PGP. Он написал PGP, что означает «Довольно хорошая конфиденциальность», еще до криптовалютных войн, еще в 1991 году. Но когда вспыхнули военные действия, под его знаменем сплотились сторонники нерушимого шифрования. В глазах Циммермана, если бы правительство было склонно скомпрометировать все шифры, которыми оно владело, он сделал бы свой собственный и откажется играть в мяч.
Правительство быстро открыло ответный огонь, начав в 1993 году уголовное дело против него за нарушение постановления, которое помогло продвинуть их кампанию по ослаблению шифрования: экспортных ограничений. В соответствии с этими ограничениями правительство США сделало незаконным экспорт программного обеспечения для шифрования в другие страны, которое было столь же мощным, как программное обеспечение для шифрования США, без лицензии на торговлю оружием. У Фила Циммермана не было ни одного из них.
Именно тогда Циммерман проявил творческий подход: он опубликовал свою программу в виде книги, которую мог бесплатно купить любой человек в любой точке мира. По желанию этих покупателей книги они могли бы транскрибировать ее содержимое в редактор кода и сохранить в виде файла. Фактически, это именно то, что некоторые люди сделали. Когда правительство сказало Циммерману прекратить забавный бизнес, он указал на свои права Первой поправки и постановления суда, устанавливающие, что компьютерный код является речью.
Из-за PGP и других давлений правительство в конечном итоге оставило криптовалюту для всех в покое. К счастью, правительство в основном воздерживалось от попыток узаконить разбавление шифрования, по крайней мере, до недавнего времени.
PGP (теоретически) не является реликтом раннего Интернета, но остается жизнеспособным и сегодня. Несмотря на достижения в области суперкомпьютеров и криптоанализа, основной шифр, который PGP использует по умолчанию, остается надежным. Каждый раз, когда создается суперкомпьютер, который может сломать ключ, пользователям нужно делать только более длинные ключи.
Итак, как работает PGP?
Как и в большинстве случаев шифрования, технические детали сложно осмыслить, но основы довольно просты. PGP — это программа шифрования, которая использует шифры RSA или DSA. В любом случае PGP генерирует так называемые «асимметричные» ключи, то есть пару ключей.
«Главный» ключ — это закрытый ключ. Закрытый ключ (или, как его называют в некоторых реализациях, «секретный ключ»), как следует из названия, остается закрытым. После создания пары ключей пользователь должен охранять свой закрытый ключ как самый глубокий и темный секрет.
Другой ключ в паре — открытый ключ. В отличие от закрытого ключа, этот по замыслу обходится. Пользователь передает этот ключ всем, кто хочет безопасно отправить им вещи. Нет никакого реального риска для безопасности, если позволить другим иметь его.
Каждый ключ в ключевой паре может отменить криптографическую операцию, выполняемую с использованием другого ключа. Когда ключ применяется к открытому тексту (нормальному, читаемому содержимому файла), он становится зашифрованным текстом (фактически тарабарщиной). Применение дополнения к ключу, создавшему зашифрованный текст, восстановит открытый текст. Таким образом, на практике, если пользователь взаимодействует с PGP, у него будет один закрытый ключ и много открытых ключей: их собственный закрытый ключ, их собственный открытый ключ и по одному открытому ключу для каждого человека, с которым они общаются.
Поскольку он не связан ни с одним клиентом обмена сообщениями, вы можете делать много интересных вещей с помощью PGP. Для начала вы можете зашифровать любой «необработанный» открытый текст. Поскольку ваш компьютер представляет все в виде битов, и все, что делает PGP, это шифрует и расшифровывает их, PGP может шифровать содержимое электронной почты или чата, аудио- и видеофайлы и даже сообщения, размещенные в Интернете.
Обычно вы шифруете открытый текст открытым ключом, чтобы владелец закрытого ключа мог его расшифровать, но есть трюк, который вы можете сделать, если инвертируете процесс. Если вы «зашифруете» свой закрытый ключ, чтобы люди, использующие его открытый ключ, «расшифруют» его, вы можете создать так называемую криптографическую подпись. Эти подписи позволяют доказать, что все, что вы подписали, однозначно принадлежит вам.
Именно так PGP используется для проверки программного обеспечения. Разработчики подписывают свое программное обеспечение своим закрытым ключом, а затем передают открытый ключ всем, кто хочет проверить подлинность программного обеспечения. Если кто-то подделает ключ или подпись (но не обе сразу), уловка будет обнаружена. Атака может сработать, если подпись и открытый ключ были изменены правильным образом, но это достаточно сложно с точки зрения логистики, что маловероятно.
Надев маску на себя
На этом этапе вы, вероятно, готовы испытать этого плохого парня, так что давайте приступим.
Для всех следующих примеров я буду использовать инструмент под названием GPG (Gnu Privacy Guard), бесплатную реализацию PGP из командной строки с открытым исходным кодом. Обоснование этого состоит в том, что, поскольку безопасность — это главная цель PGP, более простой, открытый и зрелый инструмент работает лучше всего.
В этом руководстве также предполагается, что вы используете какой-либо компьютер со вкусом Unix, то есть Linux, BSD или macOS. GPG должен работать точно так же в Windows, но, не тестировав его, я не буду клясться, что это правда.
В качестве последнего предостережения, все эти команды основаны на моем тестировании с GPG 2.2.19 в пакете Linux Mint 20. Я постараюсь отметить, где вы можете столкнуться с расхождением в поведении, но, тем не менее, оставьте это в конце ваш разум.
Вы начнете с создания пары ключей, которая включает простую однострочную команду:
gpg —gen-key
В версии GPG, которую я тестировал, это оптимизированная опция генерации ключей, в отличие от настраиваемой опции «—full-gen-key». Если вы любитель приключений, обязательно исследуйте последнее, но я не буду здесь вдаваться в подробности.
Перед запуском команды вам необходимо выяснить некоторые детали для экранных подсказок, которые появляются при ее выполнении.
Во-первых, убедитесь, что у вас есть адрес электронной почты, который нужно связать с вашим ключом. Во-вторых, выберите имя, которое хотите ввести. Введите свое настоящее имя только в том случае, если вы уверены, что хотите, чтобы ваш открытый ключ идентифицировал вас. В-третьих, выберите пароль для вашего ключа. Я уверен, что вы не упускаете из виду важность этого шага.
Следующее, что нам нужно сделать, это создать сертификат отзыва. Это делается с помощью следующей команды:
gpg —gen-revoke —armor имя_ключа > privkey_rev.asc
Параметр «—gen-revoke» не требует пояснений, но вы можете задаться вопросом, что делает параметр «—armor». Это выводит ключ с битами, представленными как символы ASCII, а не в исходном формате, который выглядит так, как будто ваш терминал повторяет заклинание вызова старейшины.
Сертификаты отзыва позволяют людям узнать, что ваш закрытый ключ взломан, и больше не доверять ему. Они вступают в силу только тогда, когда вы их публикуете, но неплохо было бы подготовить их до того, как они вам понадобятся.
После этого немедленно создайте резервную копию вашей пары ключей и сертификата отзыва на зашифрованном внешнем носителе. Ничто не мешает вам иметь дубликаты файлов с одним и тем же ключом или сертификатом для дополнительной безопасности, но просто убедитесь, что вы можете учитывать все копии этих файлов.
Чтобы выполнить это резервное копирование, вам нужно будет экспортировать ключи в виде файлов. По умолчанию это просто байты в базе данных ключей, которые может анализировать только GPG.
Экспортируйте свои ключи, выполнив следующие команды:
gpg —export —armor key_name > pubkey. asc
gpg —export-secret-keys —armor key_name > privkey.asc
Скопируйте свой закрытый ключ, открытый ключ и сертификат отзыва на ваше зашифрованное хранилище.
Теперь все, что вам нужно, это открытые ключи для людей, с которыми вы хотите поговорить и у вас есть бизнес. По сути, есть два способа получить эти
Первый — импортировать открытые ключи из файла, переданного непосредственно на вашу машину локально. В большинстве случаев это означает, что ваш друг передает вам флэш-накопитель, чтобы вы могли скопировать открытый ключ прямо на свой компьютер. Такой подход имеет существенные преимущества.
Самым большим плюсом является высокий уровень безопасности: поскольку вы не отправляете ключ через Интернет, вероятность того, что ключ был взломан, значительно снижается. Ваш друг также под рукой, чтобы подтвердить, что ключ является действительным, поскольку он может взглянуть на ваш экран и сказать: «Ага, вот он».
Шаги для этого довольно просты :
2. Загрузите файл с носителя на свой компьютер. Ваше устройство, ОС и носитель информации будут определять, как это будет происходить.
3. На своем терминале импортируйте открытый ключ в свою связку ключей GPG, выполнив следующую команду.
gpg —import pub_key.asc
4. Затем запустите эту команду, чтобы отобразить отпечаток ключа, строку текста, однозначно определяющую ключ, но не ставящую под угрозу его безопасность.
gpg —fingerprint pub_key_name
5. Попросите человека, которого вы идентифицируете, проверить, что отпечаток его открытого ключа, показанный в вашей системе, такой же, как и тот, который фактически создает его открытый ключ.
Плюсы безопасности на этом не заканчиваются. Пока вы переносите только открытые ключи через USB-накопитель, в сети нет записи об обмене ключами. Это может быть огромным операционным преимуществом.
Еще одна приятная особенность метода обмена локальными ключами — это то, что вам не нужно возиться с серверами ключей. Серверы ключей не так уж и сложны в использовании в великой схеме GPG, но взаимодействие с ними все еще немного неудобно.
Это, однако, другой важный метод передачи: загрузка открытых ключей с сервера ключей в Интернете. Серверы ключей, которые, как следует из названия, поддерживают ключи, существуют уже компьютерную эру. Эти серверы, обслуживаемые такими организациями, как Массачусетский технологический институт, синхронизируются друг с другом, что позволяет пользователям широко распространять свои открытые ключи.
Серверы ключей обладают явным преимуществом, так как позволяют получать открытые ключи от людей, которых вы не можете встретить лично. В конце концов, Интернет полезен именно потому, что обеспечивает мгновенную удаленную связь. Однако, поскольку владелец открытого ключа не может лично заверить вас в целостности ключа, есть вероятность, что ключ был скомпрометирован при передаче.
Обычно владельцы открытых ключей публикуют отпечаток своего ключа в другом месте в общедоступной сети. Однако, в зависимости от возможностей вашего противника, вы не можете быть уверены, что опубликованный в Интернете отпечаток пальца не был изменен в соответствии с фальшивым отпечатком пальца, который вы получаете от взломанного ключа на сервере ключей. Вероятно, не стоит беспокоиться об этом по ночам, но это риск.
Вы можете импортировать ключ с сервера ключей, выполнив следующие действия:
gpg —search-keys ключевое слово
2. Теперь вам будут представлены результаты поиска на страницах из 10. Просмотрите результаты, выберите желаемый ключ, соответствующий номер и нажмите Enter. Ваше устройство загрузит ключ.
3. Выполните следующую команду, чтобы вывести отпечаток ключа.
gpg —fingerprint pub_key_name
4. Наконец, найдите опубликованный отпечаток пальца владельца открытого ключа и сравните его с отпечатком, выданным предыдущей командой.
Теперь вы готовы все зашифровать! Начните с поиска файла, который вы хотите зашифровать (здесь «файл» означает файл).
Затем выполните команду шифрования GPG, которая выглядит следующим образом:
gpg -e файл
операция спросит, какой открытый ключ использовать при шифровании файла, который вы указываете с помощью последовательности цифр и букв во второй строке записи ключа — чтобы увидеть эту запись, вы должны запустить 'gpg —list-keys'. Когда команда encrypt завершается, она создает зашифрованный файл с именем, идентичным имени входного файла, с добавлением ".gpg". Отправьте его создателю открытого ключа, и они будут знать, что делать.
Расшифровать отправленные вам файлы так же просто. Найдите зашифрованный файл и выполните следующую команду: gpg -d file> outfile
Введите пароль вашего закрытого ключа, и вы у меня есть расшифрованный файл.
По умолчанию флаг дешифрования просто выводит на консоль расшифрованное содержимое файла. Так как вы, вероятно, захотите сохранить расшифрованный открытый текст для последующего использования, часть команды '> outfile ' включена для вывода операции в файл.
Два закрытых ключа лучше одного
Что может быть безопаснее одного закрытого ключа? Как насчет двух?
Требуются некоторые пояснения. Я не имею в виду создание двух полноценных приватных ключей. Скорее, этот подход использует две части вашего закрытого ключа: одна может расшифровывать только сообщения, зашифрованные с помощью открытого ключа, другая может подписывать файлы.
Так что это вам даст? Разделение ключа позволяет хранить главный ключ исключительно на зашифрованном внешнем хранилище до тех пор, пока он вам не понадобится.
Поскольку подключ может расшифровывать отправленные вам сообщения, вы можете поддерживать обычную переписку, сохраняя на устройстве только подключ. Если ваш компьютер когда-либо заразится (что вы, возможно, никогда не обнаружите), злоумышленники не смогут подделать ваши подписи, что упростит вам отозвать украденный ключ и начать все заново.
Без сомнения, отдельные закрытые ключи с отдельными мерами безопасности вызывают гораздо большую головную боль. Для начала вы должны уметь отличать их друг от друга, потому что, если вы позволите своему главному ключу находиться на вашем компьютере, когда он подключен к сети, с точки зрения оперативной безопасности, ваш главный ключ будет отравлен, подвергнут опасности непроверяемая степень опасности, которая определяет ее целостность.
Но даже при условии, что вы храните их в нужном месте, у вас должна быть операционно безопасная процедура для подписи PGP — как минимум, отключение вашей сети на уровне ОС (желательно на уровне оборудования), подключение зашифрованных хранилище, импорт копии главного ключа, выполнение операции подписи, удаление копии главного ключа на вашем устройстве и его данных в связке ключей GPG, извлечение зашифрованного хранилища и повторное включение вашей сети.
Моя версия GPG фактически разделяет ключ на эти две части по умолчанию, но связывает их вместе, как в вашем связке ключей, так и в экспорте закрытого ключа.
Однако, если вы хотите разделить ключи, выполните следующие действия:
2. Выполните такой же экспорт закрытого ключа, как и раньше.
3. С помощью этой команды экспортируйте личный подключ в соответствующий файл.
gpg —export-secret-subkeys —armor key_name > sub_key.asc
4. Переместите файлы личного ключа и подключей на безопасное внешнее хранилище.
5. Выполните эту команду, следуя подсказкам, чтобы удалить главный секретный ключ из вашей связки ключей, но не подключ.
gpg —delete-secret-keys
6. Убедитесь, что все копии файлов вашего основного закрытого ключа удалены с вашего устройства.
На вашем компьютере теперь нет следов вашего «главного» закрытого ключа, но ваш подключ надежно хранится в связке ключей для дешифрования.
А вот и криптонит
При использовании PGP следует иметь в виду некоторые серьезные ограничения. В конце концов, если бы он был идеальным, все бы его использовали.
Одна из проблем заключается в том, что на серверах ключей есть очевидный недостаток, который, кажется, не поддается устранению, поскольку злоумышленники могут сделать сертификат слишком массивным, чтобы его можно было функционально обработать должным образом. Если ваш открытый ключ не станет горячим билетом, вы, вероятно, не попадете под удар. Однако это способствует всеобщему пренебрежению к PGP.
Однако на самом деле это еще одна проблема: громоздкий пользовательский интерфейс, возлагающий на пользователя значительную нагрузку на ручную проверку, близок к смертному приговору для программного обеспечения безопасности. Если инструмент безопасен только для тех, кто кропотливо выполняет легко испорченную процедуру, высока вероятность того, что кто-то, вы или ваш получатель, ошибетесь.
Все это означает, что я не стал бы полагаться на PGP, если бы у вас не было большой практики, а более совершенных альтернатив не существует. Тем не менее, я бы сказал, что PGP достаточно ценен, чтобы оценить шифрование и поддержание ключей, лежащих в его основе. Так что, если вы реалистично сформулируете свои ожидания, вы сможете получить полезные впечатления от PGP.