какой ключ пользователя необходимо использовать при расшифровке

Электронная цифровая подпись для чайников: с чем ее есть, и как не подавиться. Часть 1

Итак, все чаще в кругах, работающих с документами все чаще звучат слова «электронный документ» и, связанное с ним почти неразрывно «электронная цифровая подпись», иначе — ЭЦП.

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

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

Зачем нам вообще что-то подписывать? Естественно, чтобы удостоверить, что мы ознакомились с содержимым, согласны (а иногда наоборот, не согласны) с ним. А электронная подпись еще и защищает наше содержимое от подмены.

Итак, начать, естественно, стоит с того, что такое электронная цифровая подпись.
В самом примитивном случае это — результат хэш-функции. Что это такое лучше меня разъяснит википедиа, в нашем же случае главное, что с высокой степенью вероятности ее результат не повторяется для разных исходных данных, а также что результат этой функции мало того, что короче исходных данных, так еще по нему исходную информацию восстановить нельзя. Результат функции называют хэшем, а применение этой функции к данным называют хешированием. Грубо, можно назвать хэш функцию архивированием, в результате чего мы получаем очень маленькую последовательность байт, но восстановить исходные данные из такого «архива» нельзя.

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

1. Мы не знаем, кто сделал данную подпись

2. Мы не знаем, когда была сделана подпись

3. Сама подпись не защищена от подмены никак.

4. Ну и да, хэш функций много, какая из них использовалась для создания этого конкретного хэша?

Поэтому применять к хэшу слово «подпись» еще нехорошо, будем называть его дальше просто хэш.

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

Но, пойдем дальше. Нам хочется защитить наш результат хеширования от подмены, чтобы каждый встречный не мог утверждать, что это у него правильный результат. Для этого самое очевидное что (помимо мер административного характера)? Правильно, зашифровать. А ведь с помощью шифрования же можно и удостоверить личность того, кто хэшировал данные! И сделать это сравнительно просто, ведь есть ассиметричное шифрование. Да, оно медленное и тяжелое, но ведь нам всего-то и надо — зашифровать маленькую последовательность байт. Плюсы такого действия очевидны — для того, чтобы проверить нашу подпись, надо будет иметь наш открытый ключ, по которому личность зашифровавшего (а значит, и создавшего хэш) можно легко установить.
Суть этого шифрования в следующем: у вас есть закрытый ключ, который вы храните у себя. И есть открытый ключ. Открытый ключ вы можете всем показывать и раздавать, а закрытый — нет. Шифрование происходит с помощью закрытого ключа, а расшифровывание — с помощью открытого.
Приводя аналогию, у вас есть отличный замок и два ключа к нему. Один ключ замок открывает (открытый), второй — закрывает (закрытый). Вы берете коробочку, кладете в нее какую-то вещь и закрываете ее своим замком. Так, как вы хотите, чтобы закрытую вашим замком коробочку открыл ее получатель, то вы открытый, открывающий замок, ключик спокойно отдаете ему. Но вы не хотите, чтобы вашим замком кто-то закрывал коробочку заново, ведь это ваш личный замок, и все знают, что он именно ваш. Поэтому закрывающий ключик вы всегда держите при себе, чтобы кто-нибудь не положил в вашу коробочку мерзкую гадость и не говорил потом, что это вы ее положили и закрыли своим замком.

И все бы хорошо, но тут сразу же возникает проблема, а, на самом деле, даже не одна.

1. Надо как-то передать наш открытый ключ, при этом его должна понять принимающая сторона.

2. Надо как-то связать этот открытый ключ с нами, чтобы нельзя было его присвоить.

3. Мало того, что ключ надо связать с нами, надо еще и понять, какой зашифрованный хэш каким ключом расшифровывать. А если хэш не один, а их, скажем, сто? Хранить отдельный реестр — очень тяжелая задача.

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

Как водится у людей, к чему-то единому прийти так и не смогли, и образовалось два больших лагеря — формат OpenPGP и формат S/MIME + X.509. Но об этом уже в следующей статье.

Источник

Создание ключей для шифрования и расшифровки

Создание ключей и управление ими — это важная часть процесса шифрования. Симметричные алгоритмы требуют создания ключа и вектора инициализации (IV). Ключ следует хранить в тайне от любого, кто не должен расшифровывать ваши данные. Вектор инициализации может не быть секретным, но должен изменяться для каждого сеанса. Асимметричные алгоритмы требуют создания открытого ключа и закрытого ключа. Открытый ключ может быть известен всем, но этот закрытый ключ должен быть известен только для расшифровки. В этом разделе описывается создание ключей и управление ими для симметричных и асимметричных алгоритмов.

симметричные ключи;

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

В следующем примере показано создание нового экземпляра класса реализации по умолчанию для Aes алгоритма.

При выполнении предыдущего кода осуществляется создание нового ключа и вектора инициализации и их помещение в свойства Key и IV соответственно.

Асимметричные ключи

.NET предоставляет RSA класс для асимметричного шифрования. Этот класс создает пару открытого и закрытого ключей при использовании метода без параметров Create() для создания нового экземпляра. Асимметричные ключи можно сохранять для использования в нескольких сеансах или создавать только для отдельного сеанса. В то время как открытый ключ можно сделать общедоступным, закрытый ключ должен быть надежно защищен.

Пара из открытого и закрытого ключей создается каждый раз, когда создается новый экземпляр класса асимметричного алгоритма. После создания нового экземпляра класса сведения о ключе можно извлечь с помощью ExportParameters метода, который возвращает RSAParameters структуру, содержащую сведения о ключе. Метод принимает логическое значение, указывающее, следует ли возвращать только сведения об открытом ключе или как сведения об открытом ключе, так и о закрытом ключе.

Существуют также и другие методы, позволяющие извлекать ключевые сведения, например:

Экземпляр RSA можно инициализировать со значением структуры RSAParameters с помощью ImportParameters метода. Или создайте новый экземпляр с помощью RSA.Create(RSAParameters) метода.

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

Источник

Шифрование документа

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

Процесс шифрования документа

Перейдите в раздел
Шифрование документа

Зашифруйте документ
и укажите место для сохранения

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

Результат

В результате вы получаете зашифрованный файл документа. Так же сервис позволяет скачать или отправить по электронной почте пакет документов одним архивом, который содержит: зашифрованный документ и инструкцию по расшифрованию документа.

Передайте зашифрованный документ и инструкцию по его расшифровке получателю.

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

Расшифрование

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

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

Вопросы и ответы

Почему не удается зашифровать документ?

Ошибки при шифровании могут возникать по одной из следующих причин:

Если необходимо зашифровать несколько документов, нужно ли их шифровать по отдельности или можно зашифровать архив?

В сервисе можно зашифровать документ любого формата, в том числе архивы rar и zip и другие.

Могу ли я послать зашифрованный документ нескольким получателям?

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

Источник

HackWare.ru

Этичный хакинг и тестирование на проникновение, информационная безопасность

Как пользоваться gpg: шифрование, расшифровка файлов и сообщений, подпись файлов и проверка подписи, управление ключами

Оглавление

Что такое GPG

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

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

Если обменяться публичными ключами, то вы с этим лицом можете вести зашифрованную беседу:

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

Итак, gpg — это OpenPGP часть GNU Privacy Guard (GnuPG). Этот инструмент обеспечивает цифровое шифрование и службы подписи используя стандарт OpenPGP. gpg имеет функции полного управления ключами, а также все приблуды, которые вы можете ожидать от реализации OpenPGP.

Предупреждение по использованию GPG

Используйте хороший пароль для вашего пользовательского аккаунта и хорошую парольную фразу для защиты вашего секретного ключа. Эта парольная фраза является самой слабой частью всей системы. Касательно GPG, вам нужно защитить от постороннего доступа папку «

Для использования в скриптах, у gpg есть хорошо документированная реализация API, чтобы активировать этот интерфейс используйте опции —with-colons и —status-fd. Также для определённых операций может пригодиться опция —command-fd.

Каким публичным GPG ключам можно доверять?

Создать пару публичный-приватный ключ можно у себя на компьютере для любого имени. Это примерно как SSL сертификаты: можно создать для любого сайта, но такой самоподписанный сертификат не будет вызывать доверие у браузеров. Поэтому привлекается третья сторона — корневой центр сертификации (root certification authority, CA) (там чуть сложнее, также имеются промежуточные доверенные центры авторизации (trusted certificate authority)). Собственно, эта услуга и является платной при покупке SSL сертификата для сайта — сгенерировать сертификат можно самому за секунду на любом Linux.

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

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

Как сгенерировать пару публичный-приватный ключ в GPG

Всё начинается с генерации ключей. Вы это можете сделать на своём компьютере.

Для генерирования пары ключей запустите команду:

какой ключ пользователя необходимо использовать при расшифровке. Смотреть фото какой ключ пользователя необходимо использовать при расшифровке. Смотреть картинку какой ключ пользователя необходимо использовать при расшифровке. Картинка про какой ключ пользователя необходимо использовать при расшифровке. Фото какой ключ пользователя необходимо использовать при расшифровке

Вам нужно будет ввести:

Затем программа покажет выбранный вами идентификатор пользователя и спросит, всё ли правильно? Если всё правильно, вам нужно будет ввести O.

Затем программа попросит ввести пароль.

какой ключ пользователя необходимо использовать при расшифровке. Смотреть фото какой ключ пользователя необходимо использовать при расшифровке. Смотреть картинку какой ключ пользователя необходимо использовать при расшифровке. Картинка про какой ключ пользователя необходимо использовать при расшифровке. Фото какой ключ пользователя необходимо использовать при расшифровке

Вы можете задать вопрос: какой ещё пароль, если для зашифровки и расшифровки используется ассиметричный алгоритм с файлами ключей? Да, всё верно, вводимый пароль не будет участвовать в процессе шифрования и расшифровки, он нужен для защиты вашего ключа, поскольку он хранится у вас на компьютере в домашней папке. На тот случай, если злоумышленник получит физический доступ к вашему компьютеру, он не сможет просто воспользоваться вашим приватным ключом — ему сначала нужно будет подобрать пароль. Поэтому пароль придумайте надёжный. Кстати, если вы экспортируете приватный ключ в файл (команды для этого будут показаны ниже) чтобы, например, перенести его на другой компьютер, то при импорте этого ключа на другой компьютер нужно будет ввести пароль от этого приватного ключа.

Затем программа покажет совет:

Необходимо получить много случайных чисел. Желательно, чтобы Вы в процессе генерации выполняли какие-то другие действия (печать на клавиатуре, движения мыши, обращения к дискам); это даст генератору случайных чисел больше возможностей получить достаточное количество энтропии.

какой ключ пользователя необходимо использовать при расшифровке. Смотреть фото какой ключ пользователя необходимо использовать при расшифровке. Смотреть картинку какой ключ пользователя необходимо использовать при расшифровке. Картинка про какой ключ пользователя необходимо использовать при расшифровке. Фото какой ключ пользователя необходимо использовать при расшифровке

Вместо —gen-key можно использовать опцию —full-generate-key, которая также сгенерирует пару ключей, но покажет больше опций. При использовании —gen-key некоторые значений опций используются по умолчанию.

Как посмотреть или сохранить свой публичный (открытый) ключ в GPG

У меня плохо с фантазией, поэтому далее в командах в качестве имени пользователя (точнее, идентификаторая пользователя) я использую Alexey Miloserdov — замените эту строку на ваше значение.

Чтобы посмотреть публичный ключ используйте опцию —export, а также опцию -a, которая означает, что выводимые данные должны быть не в бинарном формате, а в ASCII (то есть текстовом, пригодном для копирования-вставки в сообщение мессенджера или электронной почты), в конце укажите имя пользователя:

Для сохранения публичного ключа в файл используйте перенаправление вывода:

В результате публичный ключ будет сохранён в файл public.key.

Или используйте опцию -o, после которой укажите имя файла:

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

Как посмотреть или сохранить свой приватный (секретный) ключ в GPG

Для просмотра и экспорта приватного ключа используется опция —export-secret-key:

Для сохранения в файл:

Или с опцией -o:

Как импортировать ключи GPG

Для импорта публичного ключа выполните:

Эта команда добавит публичный ключ, который находится в файле «public.key«.

Для добавления приватного ключа из файла private.key выполните команду:

Как просмотреть список ключей GPG

Для просмотра всех публичных ключей в вашей системе выполните:

Для просмотра всех приватных ключей в вашей системе выполните:

Как удалить ключи GPG

Для удаления публичного ключа выполните:

Помните: если на компьютере имеется приватный ключ, ассоциированный с этим публичным ключом, то вы получите ошибку! Вы должны удалить приватный ключ этой пары, а затем можно удалять публичный ключ.

Для удаления приватного ключа:

Для чего нужны fingerprint (отпечатки) в GPG

Fingerprint (отпечатки) ключей в gpg имеют примерно следующий вид:

Отпечаток может выполнять функцию идентификатора ключа — то есть вместо указания имени пользователя (в моём примере это Alexey Miloserdov) можно использовать отпечаток.

Например для удаления секретного ключа, используя в качестве идентификатора отпечаток:

Вторая функция применения отпечатка — это верификация публичного ключа. В качестве примера приводится следующая история: Алиса передала Бобу клочок бумаги, на котором записан отпечаток (ну или позвонила по телефону и продиктовала отпечаток). Затем Алиса переслала Бобу свой публичный ключ. Но так как ключ пришёл из Интернета — то непонятно, от кого он именно? Не был ли этот ключ подменён по пути? После импорта ключа, можно просмотреть его отпечаток. Поскольку у Боба есть отпечаток, который он получил из доверенного источника (Алиса продиктовала его своим голосом или лично передала записку с отпечатком), то Боб теперь может сравнить эти два отпечатка — если отпечатки идентичные, значит публичный ключ действительно отправлен Алисой и значит ему можно доверять.

Посмотреть опечаток для ключа определённого пользователя можно командой:

Это отпечаток на компьютере, где была создана пара ключей:

какой ключ пользователя необходимо использовать при расшифровке. Смотреть фото какой ключ пользователя необходимо использовать при расшифровке. Смотреть картинку какой ключ пользователя необходимо использовать при расшифровке. Картинка про какой ключ пользователя необходимо использовать при расшифровке. Фото какой ключ пользователя необходимо использовать при расшифровке

А это отпечаток на другом компьютере, где был импортирован публичный ключ:

какой ключ пользователя необходимо использовать при расшифровке. Смотреть фото какой ключ пользователя необходимо использовать при расшифровке. Смотреть картинку какой ключ пользователя необходимо использовать при расшифровке. Картинка про какой ключ пользователя необходимо использовать при расшифровке. Фото какой ключ пользователя необходимо использовать при расшифровке

Как можно убедиться, они идентичные. Следовательно, публичный ключ действительно получен от того источника, о котором я думал.

Шифрование файлов и данных с GPG

Про шифрование в gpg нужно знать, что оно может быть:

Второе, что нужно знать: шифрование можно совмещать с подписыванием файла. Подписывание файла и проверку подписи мы рассмотрим далее. Также далее мы рассмотрим одновременное шифрование и подпись файла.

Третье: зашифровать можно одним или более публичными ключами.

Для шифрования файла используя симметричный метод с паролем используйте опцию -c (либо её длинный аналог —symmetric):

Следующая команда для шифрования файла test.php паролем в gpg:

В результате шифрования будет создан файл с расширением .gpg (в данном случае это будет файл test.php.gpg).

Для того, чтобы зашифровать файл симметричным шифрованием с возможностью расшифровки приватным ключом (в этом случае его можно будет расшифровать приватным ключом, либо паролем) нужно использовать сразу несколько опций:

Пример команды симметричного шифрования файла test.php для пользователя Alexey Miloserdov с возможностью его расшифровки приватным ключом ЛИБО для расшифровки паролем:

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

Для шифрования публичным ключом (-e), чтобы файл (test.php) мог расшифровать только владелец соответствующего парного приватного ключа (-r ‘Alexey Miloserdov’):

Вместо опции -r ‘Имя Адресата’ можно использовать опцию -R ‘Имя Адресата‘ или её длинный аналог —hidden-recipient ‘Имя Адресата’. Она также шифрует файл для указанного адресата, но имя этого адресата шифруется. Кстати, следует упомянуть, что даже в зашифрованном файле имя адресата может посмотреть кто угодно — о том, как это сделать, будет сказано ниже.

Пример шифрования файла test.php публичным ключом пользователя Alexey Miloserdov, но с зашифрованным именем адресата.

Обратите внимание, что во всех случаях шифрования оригинальный файл остаётся. Вам самим нужно решать, что с ним делать, например, удалить его.

Чтобы каждый раз не вводить имя получателя, можно установить значение по умолчанию опцией —default-recipient. Также с ней в комплекте идут опции —default-recipient-self и —no-default-recipient.

Как в GPG шифровать файлы, чтобы их можно было отправить в виде сообщения

По умолчанию файлы сохраняются в бинарный формат OpenPGP. Кстати, в этом формате файл может занимать значительно меньше места (в разы!) чем исходный файл до шифрования. Если вы откроете зашифрованный файл, то убедитесь, что это бинарные данные, которые невозможно передать копированием-вставкой без потери их функциональности.

Но иногда может возникнуть необходимость переслать зашифрованный файл или сообщение по почте или в мессенджере в виде обычного текста. Это возможно с помощью опции -a, которая создаёт зашифрованный файл в формате ASCII.

В результате будет создан файл с расширением .asc (в данном случае это файл test.php.asc).

Как в GPG зашифровать сообщение

Для зашифровки сообщения используйте следующую конструкцию:

Обратите внимание, что я добавил опцию -a — для того, чтобы зашифрованное сообщение можно было скопировать и вставить в мессенджер или в email (или распечатать на принтере). Без этой опции будут выведены бинарные данные.

Зашифрованное сообщение будет выведено в стандартный вывод, то есть в терминал. Если вы хотите сохранить зашифрованное сообщение в файл, то используйте конструкцию:

какой ключ пользователя необходимо использовать при расшифровке. Смотреть фото какой ключ пользователя необходимо использовать при расшифровке. Смотреть картинку какой ключ пользователя необходимо использовать при расшифровке. Картинка про какой ключ пользователя необходимо использовать при расшифровке. Фото какой ключ пользователя необходимо использовать при расшифровке

Как расшифровать файлы в GPG. Как расшифровать сообщение в GPG

Для расшифровки используется опция -d:

Причём данные будут выведены прямо в стандартный вывод! То есть в терминал. Чтобы сохранить данные в файл используйте опцию -o, после которой укажите имя нового расшифрованного файла:

Либо используйте конструкцию вида:

Вроде это тоже нормально работает (для текстовых файлов уж точно).

Как расшифровать сообщение в GPG

Также gpg может расшифровывать данные из стандартного ввода. В этом можно убедиться подобной конструкцией:

какой ключ пользователя необходимо использовать при расшифровке. Смотреть фото какой ключ пользователя необходимо использовать при расшифровке. Смотреть картинку какой ключ пользователя необходимо использовать при расшифровке. Картинка про какой ключ пользователя необходимо использовать при расшифровке. Фото какой ключ пользователя необходимо использовать при расшифровке

Более практический пример:

GPG: Невозможно ввести пароль после неправильной попытки

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

Чтобы побороть эту ситуацию, нужно явно указать не использовать кэш, для этого имеется опция —no-symkey-cache, пример использования:

Как посмотреть получателей зашифрованного в GPG файла

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

Вместе с этой опцией нужно использовать опцию -d, а также указать проверяемый файл, пример:

Может быть выведено:

Или без локализации:

Это сообщение означает, что выполнено ассиметричное шифрование для пользователя Alexey Miloserdov

При симметричном шифровании сообщение будет таким:

Или без локализации:

Причём вплоть до 2019 года, почти до самых последних версий gpg, у опции —list-only есть интересный баг: если на компьютере, где выполняется проверка, имеется приватный ключ пользователя, кому предназначен данный файл, то не выводиться ничего. Это может запутать, поскольку также ничего не выводиться в случае, если получатель зашифрован. Я нашёл упоминание об этой ошибке в 2013 году (смотрите список источников), и она до сих присутствует в 2019 в самой последней версии Tails. Чтобы обойти этот баг, используйте опцию -v, получается примерно следующая команда:

Будет выведено что-то вроде:

И уже по идентификатору публичного ключа можно найти пользователя.

В самых последних версиях gpg (например в Arch Linux и BlackArch) эта ошибка уже исправлена. То есть —list-only работает именно так, как это интуитивно ожидается и костыля в виде опции -v больше не требуется.

Выбор приватного ключа для расшифровки

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

А как это происходит в случае, если получатель зашифрован? В этом случае GPG просто перебирает все имеющиеся в системе приватные ключи и смотрит, какой из них подойдёт (такой своеобразный брут-форсинг).

Вы можете помочь программе используя опцию —try-secret-key ИМЯ, вместо ИМЕНИ нужно указать идентификатор пользователя с закрытым ключом, для которого зашифрован файл.

Для расшифровки таких файлов с поддельным ключевым ID, используется опция —try-all-secrets. Как можно понять из названия самой опции, она не будет смотреть на ключевой идентификатор в сообщении, а будет пробовать все секретные ключи, пока не найдёт правильный для расшифровки. То есть поведение будет в точности таким же, как если бы получатель (или получатели) не были указаны вовсе. То есть как если бы данные шифровались с использованием опций —throw-keyids или —hidden-recipient.

Как в GPG подписать файл

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

Для проверки подписи определённого лица у вас должен быть публичный ключ этого лица.

Для подписи файла используется опция -s или её более длинный вариант —sign. Если у вас на компьютере только один приватный ключ, то он будет выбран автоматически.

Если у вас на компьютере несколько приватных ключей, то нужно использовать также опцию -u ИМЯ или её более длинный вариант —local-user ИМЯ. Эта опция перезаписывает значение —default-key.

Кстати про —default-key. Она устанавливает ключ, который будет использоваться по умолчанию, чтобы его не нужно было вводить каждый раз.

Итак, я хочу подписать файл test.php, приватным ключом пользователя Alexey Miloserdov, тогда моя команда следующая:

Будет создан файл с расширением .gpg, в моём случае это файл test.php.gpg. Этот файл включает И исходный файл, И его цифровую подпись. Новый файл в бинарном формате — то есть даже если ранее это было сообщение или текстовый файл, то он становится нечитаемым.

С помощью опции —clear-sign (другое её написание —clearsign) можно создать файл в виде обычного текста.

Будет создан файл test.php.asc, который будет содержать исходный текст после ——BEGIN PGP SIGNED MESSAGE——, а также блок с подписью:

Текстовое содержимое можно извлечь без сторонних инструментов, а для проверки подписи всё равно нужна программа PGP.

В реальной жизни публичные программы и другие файлы намного чаще распространяются в виде пары: исходный файл программы + отдельно подпись. Можно догадаться почему: большинству пользователей до фонаря эта электронная подпись и они не смогли бы извлечь файлы из .gpg формата. В принципе, их позиция понятна: какой смысл проверять подпись, если мы всё равно лично не знаем тех, кто именно подписал файл, да и тех, кто удостоверяет подлинность публичного ключа мы тоже не знаем. Разве что, можно быть уверенным, что файл действительно подписан автором программы, а не хакером, который взломал сервер, где хранятся файлы для скачивания, и что хакер не подменил файл в процессе его «путешествия» к нам на компьютер.

Так вот, чтобы делать такую пару (точнее говоря, нам нужно сделать только отдельный файл подписи — с исходным файлом вообще ничего не происходит) в PGP есть опция -b (или более длинное написание —detach-sign), которая применяется следующим образом:

Как в GPG проверить подпись файла

Для проверки подписи используется опция —verify.

Как мы только что узнали, цифровая подпись может быть интегрирована в файл, а может содержаться в отдельном файле. От этого зависит запуск команды gpg, если цифровая подпись интегрирована в файл, то достаточно указать опцию —verify, а затем проверяемый файл:

Если цифровая подпись отделена от файла, то после опции —verify нужно указать два аргумента: вначале идёт файл с подписью, а затем подписанные данные:

Пример вывода при проверке подписи (проверка выполнялась на компьютере, где была создана соответствующая пара ключей, поэтому к подписи полное доверие):

Без локализации (на этом компьютере публичный ключ был импортирован, поэтому, с одной стороны, подтверждено, что подпись хорошая и принадлежит Alexey Miloserdov

, но, с другой стороны, выведено предупреждение, что сам открытый ключ, которым проверялась подпись, не сертифицирован доверенной подписью — то есть программа хочет нам сказать, что таких ключей от имени Alexey Miloserdov

может наделать кто угодно в любом количестве):

Как извлечь файл из подписанного файла GPG

После проверки подписи может возникнуть интересный вопрос — а как, собственно, использовать этот файл в .gpg формате? Чтобы получить подписанные данные нужно использовать опцию -d, которую мы уже рассматривали — она используется для расшифровки данных. Но в дополнении к данной опции нужно ещё использовать опцию -o, после которой нужно указать имя файла, куда будут извлечены подписанные данные — обычный редирект вывода, как это было рассмотрено выше, может не подойти, поскольку для подписанного файла опцией -d не только извлекаются исходные данные, но и происходит проверка подписи и результаты проверки тоже выводятся на экран, то есть если вы будете использовать редирект вывода, то в создаваемый файл попадут и подписанные данные, и информация о проверке подписи.

Как в GPG одновременно подписать и зашифровать файл

Для этого достаточно совмещать уже известные нам опции.

Чтобы зашифровать файл публичным ключом другого лица, и подписать его своим приватным ключом, нужно выполнить команду вида:

Чтобы использовалось симметричное шифрование, то к предыдущей конструкции достаточно добавить соответствующую опцию -c:

Редактирования ключей GPG

Для редактирования ключа определённого пользователя выполните команду (замените ‘Alexey Miloserdov’ на желаемый идентификатор пользователя):

Вы попадёте в интерактивный интерфейс командной строки, там будут работать следующие команды:

Чтобы окончательно отозвать свой собственный ключ, выдав сертификат о компрометации ключей (вместо USERID введите идентификатор пользователя):

Ключ —gen-revoke создаёт сертификат отзыва (кстати, сертификат отзыва генерируется с самого начала, при создании пары ключей), который при распространении среди людей и серверов ключей говорит им, что ваш ключ больше не является валидным.

Для отключения или включения публичного ключа в своём собственном public key ring:

Для смены пароля приватного ключа (замените ‘Alexey Miloserdov’ на ваш идентификатор пользователя):

Изменить уровень доверия владельцу:

Будет выведено сообщение:

И вам нужно будет сделать выбор, введя одну из следующих цифр:

Как указать идентификатор пользователя в GPG

Идентификатор пользователя можно указать различными способами:

Файлы GPG

Имеется несколько конфигурационных файлов для контроля определённых аспектов операций gpg. Если не сказано другое, ожидается что они размещены в домашней директории текущего пользователя.

gpg.conf

Стандартный конфигурационный файл, который gpg считывает при запуске. Он может содержать любое количество валидных длинных опций; можно не вводить начальные две чёрточки, нельзя использовать короткую запись опции. В командной строке можно изменить значение по умолчанию. Следует делать резервную копию этого файла.

Это домашняя папка по умолчанию, которая используется если не установлено другое в переменной окружения GNUPGHOME или опцией —homedir.

Публичный киринг (public keyring). Следует иметь резервную копию этого файла

Файл блокировки для публичного киринга.

Публичный киринг использует различные форматы. Этот файл поделён с gpgsm. Следует иметь резервную копию этого файла. Фактически, это база данных, где хранятся все ключи. Структуру этого файла можно посмотреть командой:

Файл блокировки для ‘pubring.kbx’.

Секретный киринг используемой GnuPG версией до 2.1. Он не используется GnuPG 2.1 и более поздними.

Файл блокировки для секретного киринга.

Файл, показывающий, что сделан переход на GnuPG 2.1.

Доверенная база данных. Нет нужды делать резервную копию этого файла; лучше делать резервную копию значений ownertrust, смотрите опцию —export-ownertrust.

Файл блокировки для доверенной базы данных.

Файл, используемый для сохранения состояния внутреннего пула случайных чисел.

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

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

какой ключ пользователя необходимо использовать при расшифровке. Смотреть фото какой ключ пользователя необходимо использовать при расшифровке. Смотреть картинку какой ключ пользователя необходимо использовать при расшифровке. Картинка про какой ключ пользователя необходимо использовать при расшифровке. Фото какой ключ пользователя необходимо использовать при расшифровке
какой ключ пользователя необходимо использовать при расшифровке. Смотреть фото какой ключ пользователя необходимо использовать при расшифровке. Смотреть картинку какой ключ пользователя необходимо использовать при расшифровке. Картинка про какой ключ пользователя необходимо использовать при расшифровке. Фото какой ключ пользователя необходимо использовать при расшифровке

Выберите документ,
который необходимо зашифровать

какой ключ пользователя необходимо использовать при расшифровке. Смотреть фото какой ключ пользователя необходимо использовать при расшифровке. Смотреть картинку какой ключ пользователя необходимо использовать при расшифровке. Картинка про какой ключ пользователя необходимо использовать при расшифровке. Фото какой ключ пользователя необходимо использовать при расшифровке

Выберите сертификат получателя

Сертификат должен быть заранее предоставлен получателем и сохранён на вашем компьютере.

какой ключ пользователя необходимо использовать при расшифровке. Смотреть фото какой ключ пользователя необходимо использовать при расшифровке. Смотреть картинку какой ключ пользователя необходимо использовать при расшифровке. Картинка про какой ключ пользователя необходимо использовать при расшифровке. Фото какой ключ пользователя необходимо использовать при расшифровке