GnuPG (GPG) - Цифровая подпись, шифрование

Discussion in 'Безопасность и Анонимность' started by elimS2, 10 Apr 2008.

  1. elimS2

    elimS2 Elder - Старейшина

    Joined:
    21 Mar 2008
    Messages:
    195
    Likes Received:
    159
    Reputations:
    11
    GnuPG

    GnuPG (GNU Privacy Guard, «Страж безопасности GNU», или просто GPG) – это открытый эквивалент PGP (Pretty Good Privacy), известной и широкоиспользуемой программы для Windows, DOS и других операционных систем. Он распространяется в открытых исходниках и имеет те же самые функции, что и PGP, основанные на стандарте OpenPGP. У GnuPG есть несколько применений – он может использоваться либо для шифрования писем и файлов, либо для их цифровой подписи. Первый вариант применения GnuPG – шифрование писем и файлов на вашем жестком диске – очевиден, и он обычно применяется для защиты секретных сообщений или документов. Цифровая подпись информации необходима для сохранения целостности сообщений и файлов, особенно при передаче их через незащищенный канал. Она гарантирует, что:
    1) Письмо было отправлено именно этим человеком, и
    2) Что информация по пути не была изменена.

    Скачать можно отсюда: http://www.gnupg.org/download/index.en.html

    Использовать GnuPG очень просто. Сама программа – консольная, но существуют frontend'ы к GPG, делающие его использование еще проще. GPG основан на принципе открытых ключей (Public Key Infrastructure) – то есть, существуют 2 ключа: закрытый ключ используется для подписи и шифрования, а открытый ключ – для расшифровки и проверки правильности подписи.

    Генерация ключа:

    Чтобы начать работу с GPG, вам нужно создать пару ключей. Сделать это очень легко – просто наберите в командной строке:

    gpg --gen-key

    Если вы еще не работали с GPG, то эта команда сначала создаст директорию ~/.gnupg с файлом настроек ~/.gnupg/options. После этого вам придется запустить команду --gen-key еще раз для создания двух наборов ключей: ~/.gnupg/secring.gpg and ~/.gnupg/pubring.gpg. Затем вам будет задан вопрос: какой тип ключей вам нужен - «DSA and ElGamal», «DSA», или «ElGamal». Первый тип используется по умолчанию, и именно он позволяет использовать все возможности GPG. Ключ DSA используется только для цифровой подписи. ElGamal может быть использован для подписи и шифрования. Почти всегда следует выбирать «DSA and ElGamal».

    После этого вам нужно выбрать размер ключа. Рекомендуемый размер ключа – 1024 бита. Этот размер довольно неплохо подходит для надежного шифрования, и он является самым распространенным. Вы можете выбрать и другой размер: 2048 – для улучшенной безопасности (практически невозможно сломать или подделать), или даже 4096 (хотя его и нет в списке). При увеличении размера ключа все операции производятся медленнее, и ваш открытый ключ становится намного больше. Рекомендуемые варианты – 1024 или 2048; выбор полностью за вами.

    Следующий шаг – выбрать срок действия ключа. Некоторые предпочитают сделать срок действия своего ключа бесконечным, и выбирают 0. Другие создают новый ключ каждый год, и для этого они выбирают значение «1y». Здесь все так же зависит от ваших персональных предпочтений. Одни не обращают внимания на срок действия, а другие считают, что более безопасно для них – создавать новые ключи каждый год или каждые 2 года. Тогда, если кто-нибудь и украдет ваш секретный ключ, он сможет пользоваться им только ограниченное количество времени до истечения срока действия ключа. Так же установка срока действия позволяет вам работать с ключами более гибко – если через некоторое время вам захочется иметь ключ большего или меньшего размера, то вам нужно просто дождаться истечения срока действия текущего ключа. (А если вы уже сделали срок действия вашего ключа бесконечным, то вам придется уничтожать ваш ключ, что может вызвать трудности для людей, работающих с ним). Здесь снова выбор полностью за вами.

    После этого вам будет предложено ввести вашу личную информацию для нового ключа. Идентификатор пользователя составляется из трех полей: Имя, Комментарий и Email-адрес. После того, как вы введете информацию для каждого поля, идентификатор пользователя будет выглядеть так: «Имя (Комментарий) <Email-адрес>». (Пример: Joe User (My First GPG Key!) <[email protected]>). Желательно использовать свое реальное имя и свой главный Email-адрес. Комментарий может быть абсолютно любым.

    После создания идентификатора пользователя вам нужно будет ввести ключевую фразу. Она будет использоваться каждый раз, когда вы захотите что-нибудь зашифровать или подписать. Так же вам нужно будет вводить ключевую фразу для расшифровки данных, зашифрованных с использованием вашего открытого ключа. Ключевая фраза – очень важная деталь для обеспечения вашей секретности, потому что ее подбор часто бывает намного проще, чем подбор всего ключа. Поэтому она должна быть длинной, сложной и практически не подбираемой. В ней должны присутствовать как буквы (верхнего и нижнего регистров) и цифры, так и специальные символы (например, «}» или «|»).

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

    После того, как создание ключа закончится, вы можете использовать GPG для просмотра его характеристик. Это выглядит примерно так:

    [user@mdk]$ gpg --list-keys
    /home/user/.gnupg/pubring.gpg
    -------------------------------
    pub 1024D/9B1386E2 2002-04-07 Joe User (My First GPG Key!) <[email protected]>
    sub 1024g/7F72A50F 2002-04-07

    Эта команда дает вам как открытую, так и закрытую информацию о вашем ключе. Сразу же после создания нового ключа вам обязательно нужно записать его идентификатор. Когда вы передаете кому-нибудь ваш ключ, то для проверки достоверности они могут сравнить идентификатор вашего ключа с тем идентификатором, который вы передали им отдельно. Таким образом можно проверить правильность ключа. Для получения идентификатора наберите:

    [user@mdk]$ gpg --fingerprint [email protected]
    pub 1024D/9B1386E2 2002-04-07 Joe User (My First GPG Key!) <[email protected]>
    Key fingerprint = 88A9 166B 13E6 516A 87C8 F127 5CA9 2D9E 9B13 86E2
    sub 1024g/7F72A50F 2002-04-07

    Идентификатор для этого ключа – 88A9 166B 13E6 516A 87C8 F127 5CA9 2D9E 9B13 86E2. Вам нужно распечатать его и хранить в надежном месте. Так же его можно вставить в вашу подпись. Тогда люди смогут использовать его для подтверждения того, что сообщение, подписанное вами – настоящее, если ключ, с помощью которого подписывалось это сообщение, имеет тот же самый идентификатор. Конечно же, при построении сети доверия совпадение идентификаторов – это не основание для полного доверия.

    Использование GnuPG для подписи/шифрования.

    Теперь, когда у вас есть пара ключей, вы можете ставить цифровую подпись на ваших сообщениях и файлах, и зашифровывать данные. Многие Email-клиенты поддерживают шифрование и цифровую подпись ваших писем; обычно все это конфигурируется в разделе «Security». Короче говоря, использовать GPG при работе с Email очень просто. Теперь рассмотрим, как происходит процесс шифрования и подписывания обычного текстового файла. Чтобы зашифровать текстовый файл, введите:

    [user@mdk]$ gpg -ea -r Joe test.file

    Эта команда шифрует файл test.file с использованием открытого ключа Joe. Вообще, эта команда означает, что только Joe сможет расшифровать этот файл. А в нашем примере это значит, что этот файл сможете расшифровать только вы. Эта функция полезна для защиты важных документов. Опция «-e» (encrypt) означает, что файл нужно зашифровать, а опция «-a» – что будет использован режим ASCII. Этот режим позволяет вставлять зашифрованный файл в письма и просматривать его в текстовых редакторах. Без указания режима ASCII файл шифруется в бинарном виде, и некоторые текстовые редакторы не смогут с ним работать. Опция «-r» указывает получателя. Мы указали здесь просто «Joe», потому что Joe User – единственный ключ в нашей связке. Вы можете указать любое имя или адрес для определения получателя. После шифрования будет создан новый файл, содержащий зашифрованные данные – test.file.asc.

    Теперь, если вы хотите расшифровать эти данные, введите:

    [user@mdk]$ gpg -d test.file.asc >test.file

    Опция «-d» указывает GPG на то, что данные из файла test.file.asc должны быть расшифрованы. По умолчанию GPG отправляет расшифрованные данные на stdout, поэтому мы перенаправляем поток данных в test.file. После этого вам нужно ввести ключевую фразу, и, когда вы успешно ее введете, данные будут расшифрованы и детали ключа будут выведены на экран. Пример:

    [user@mdk]$ gpg -d test.file.asc >test.file

    You need a passphrase to unlock the secret key for
    user: "Joe User (My First GPG Key!) <[email protected]>"
    1024-bit ELG-E key, ID 7F72A50F, created 2002-04-07 (main key ID 9B1386E2)

    gpg: encrypted with 1024-bit ELG-E key, ID 7F72A50F, created 2002-04-07
    "Joe User (My First GPG Key!) <[email protected]>"

    Здесь вы можете увидеть приглашение GPG к вводу ключевой фразы для секретного ключа, принадлежащего Joe User'у. Так же здесь показано, что данные были зашифрованы с помощью секретного ключа Joe User'а.

    Использование GnuPG для цифровой подписи файлов.

    Если вы хотите просто добавить цифровую подпись к файлу, то это можно сделать двумя путями. Вы можете вставить подпись в сам файл – это подходит для текстовых документов. Так же вы можете создать подпись в виде отдельного файла – это используется для бинарных файлов. Предположим, что у вас есть текстовый файл, содержащий текст «This is a text document». Если вы хотите подписать этот файл, вы можете использовать команду:

    [user@mdk]$ gpg --clearsign -a test.file

    Это создаст новый файл под названием test.file.asc, который будет выглядеть так:

    -----BEGIN PGP SIGNED MESSAGE-----
    Hash: SHA1

    This is a text document
    -----BEGIN PGP SIGNATURE-----
    Version: GnuPG v1.0.6 (GNU/Linux)
    Comment: For info see http://www.gnupg.org

    iD8DBQE8r8scXKktnpsThuIRAksEAJ9nziWMquPWD2GH57Oyr9LaXIMJLgCcCi3J
    uN8rDO8WOBK3GDp69lvi8Co=
    =lz2x
    -----END PGP SIGNATURE-----

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

    [user@mdk]$ gpg --verify test.file.asc

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

    Так же вы можете подписывать сообщения непрозрачной подписью. При этом создается еще один .asc файл, который с виду кажется зашифрованным. Но на самом деле он не зашифрован, и каждый может «расшифровать» его с помощью опции «-d», или использовать опцию «--verify» для проверки его достоверности. Чтобы подписать файл таким образом, используйте «-s» вместо «--clearsign».

    Если вы хотите создать цифровую подпись для бинарного файла, используйте опцию «-b», которая создает отдельную подпись. Пусть у вас есть архив под названием somefile-0.01.tar.gz, и вы хотите создать для него отдельную подпись, чтобы люди, скачивающие его, знали, что этот архив гарантированно останется таким, каким вы его запланировали (обычно это делается для защиты от троянов, и т.д). Пример:

    [user@mdk]$ gpg -ba somefile-0.01.tar.gz

    Подпись будет храниться в файле somefile-0.01.tar.gz.asc. Теперь, если кто-нибудь скачал ваш файл вместе с его подписью, он должен просто запустить:

    [user@mdk]$ gpg --verify somefile-0.01.tar.gz.asc

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

    Импорт и работа с ключами GPG.

    Теперь, когда вы разобрались, как шифровать, дешифровать, подписывать и проверять подписи с помощью GPG, пришло время подключить открытые ключи других людей к вашему набору ключей. Обмен открытыми ключами совершенно безопасен. Вы можете отдать ваш открытый ключ кому угодно, в отличии от закрытого ключа, который вы должны хранить в полной секретности. Существует несколько способов обмена открытыми ключами. Вы можете закачать свой ключ на специальный PGP/GPG сервер, созданный специально для хранения открытых ключей. Тогда другие смогут быстро найти и скачать ваш открытый ключ. Так же вы можете поместить его на своем сайте. Использование открытого ключа GPG в качестве вашей подписи нежелательно из-за его большого размера.

    Чтобы экспортировать ваш открытый ключ, запустите:

    [user@mdk]$ gpg --export -a [email protected] >user.asc

    Эта операция производит экспорт открытого ключа, принадлежащего [email protected] (то есть – вам :), который записывается в файл user.asc. Вам нужно раздать всем именно этот файл с вашим открытым ключом. Так же вы можете поместить ваш открытый ключ сразу же на сервер для обмена ключами:

    [user@mdk]$ gpg --send-keys --keyserver wwwkeys.pgp.net [email protected]

    Эта команда отправит ваш открытый ключ на сервер wwwkeys.pgp.net. Вы можете заменить этот адрес на адрес любого другого сервера для обмена ключами PGP/GPG.

    Если кто-нибудь послал вам свой открытый ключ, то вы можете импортировать его к себе командой:

    [user@mdk]$ gpg --import user.asc

    где user.asc – файл с открытым ключом. Эта команда добавляет ключ к вашему набору открытых ключей. Так же вы можете скачать ключи с сервера:

    [user@mdk]$ gpg --recv-keys --keyserver wwwkeys.pgp.net [email protected]

    Эта команда импортирует открытый ключ пользователя [email protected] с сервера wwwkeys.pgp.net. Так же вы можете использовать идентификатор ключа вместо Email-адреса. Например, идентификатор ключа Joe User'а – это 9B1386E2. Если вы посмотрите на вывод «--list-keys», то вы увидите строку с идентификатором вашего ключа. (Например, строка «pub 1024D/9B1386E2» расшифровывается так: открытый ключ, 1024 бита, DSA, идентификатор ключа – 9B1386E2).

    Чтобы посмотреть все ключи из вашего набора открытых ключей, используйте «gpg --list-keys». Если вы хотите посмотреть все закрытые ключи, используйте «gpg --list-secret-keys». Если вы хотите посмотреть открытый ключ конкретного пользователя, используйте команду «gpg --list-keys [email protected]».

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

    [user@mdk]$ gpg --edit-key [email protected]

    Эта команда перенесет вас в интерактивную систему редактирования параметров ключа. Чтобы получить список всех команд, наберите в командной строке «help». Существует несколько информационных команд, например, «fpr» выводит идентификатор ключа, а «check» выводит подписи ключа. Другие команды – административные, и именно с помощью них меняются параметры ключа. Многие из опций будут рассмотрены ниже.

    Так же вы можете отредактировать свой ключ, чтобы добавить к нему дополнительные параметры или подключи. Это может быть полезным, если вы используете один и тот же ключ с несколькими Email-адресами. Чтобы создать подключ для вашего ключа, войдите в меню команд в режиме редактирования ключа, и выберите команду «adduid». У вас спросят те же самые 3 параметра, что и для создания нового ключа: Имя, Email-адрес и комментарий. После ввода ключевой фразы вы увидите новый пользовательский идентификатор (User ID) внутри ключа (перед каждым идентификатором пользователя стоит его номер). Если вы хотите удалить идентификатор пользователя, используйте команду «deluid <номер uid, который вы хотите удалить>»

    В версиях GnuPG до 1.0.6 включительно за первичный uid считается самый последний из номеров созданных подключей, и изменить его невозможно. Но в новой версии 1.0.7 создатели GnuPG пообещали сделать команду «primary», с помощью которой можно будет выбрать первичный подключ. В списке ключей (его можно получить с помощью команды «list») вы увидите символ «.» перед первичным ключом.

    Валерий Качуров
    Softerra.ru​
     
    1 person likes this.
  2. bobob

    bobob Member

    Joined:
    2 Jun 2006
    Messages:
    111
    Likes Received:
    69
    Reputations:
    -15
    для КДЕ вот это - http://developer.kde.org/~kgpg/
    имеет приятный вид и функционал, лично пробывал гггггг
    файлы шифрует хорошо, но как мне показалось медленно(
    фильм 700 метров жарился минут 20, ну наверное оно того стоит
     
  3. elimS2

    elimS2 Elder - Старейшина

    Joined:
    21 Mar 2008
    Messages:
    195
    Likes Received:
    159
    Reputations:
    11
    такие большие файлы не криптовал, но знаю что gpg при криптовании использует гибридный алгоритм - создается сеансовый (на один раз) симетричный ключ (тоесть пароль, которым можно как и зашифровать так и расшифровать) и им криптуется весь файл, а уже сам этот сеансовый ключ криптуется асиметричным ключем. за счет этого скорость возрастает, так как симетричными ключами файлы криптуются быстрее чем ассиметричными
     
    1 person likes this.
  4. SpRyt

    SpRyt Member

    Joined:
    18 Oct 2010
    Messages:
    45
    Likes Received:
    5
    Reputations:
    5
    Итересненькая статейка, спс большое, позновательно. :)
     
  5. dupD0M

    dupD0M Elder - Старейшина

    Joined:
    18 May 2010
    Messages:
    1,130
    Likes Received:
    74
    Reputations:
    34
    хорошая статья,позновательно!
     
  6. HIMIKAT

    HIMIKAT Elder - Старейшина

    Joined:
    12 Jan 2007
    Messages:
    2,707
    Likes Received:
    581
    Reputations:
    403