Текущая версия |
Ваш текст |
Строка 1: |
Строка 1: |
− | {{Навигация|Криптоконспирология}} | + | {{Навигация|Криптоконспирология}}{{stub|help=yes|картинок, примеров, фейлов, взломов, страха криптоконспирологов, описания алгоритмов. Убрать лишнюю википидоту и прочие некошерные вещи}} |
| [[Файл:pgp1.jpg|thumb]] | | [[Файл:pgp1.jpg|thumb]] |
| | | |
| {{q|Людям необходима конфиденциальность. PGP распространяется, как огонь в прериях, раздуваемый людьми, которые беспокоятся о своей конфиденциальности в этот информационный век. Сегодня организации по охране прав человека используют программу PGP для защиты своих людей за рубежом. Организация Amnesty International также использует её.|Филипп Циммерманн}} | | {{q|Людям необходима конфиденциальность. PGP распространяется, как огонь в прериях, раздуваемый людьми, которые беспокоятся о своей конфиденциальности в этот информационный век. Сегодня организации по охране прав человека используют программу PGP для защиты своих людей за рубежом. Организация Amnesty International также использует её.|Филипп Циммерманн}} |
| | | |
− | '''PGP''' — криптографическая система, основанная на [[Криптография с открытым ключом|криптографии с открытым ключом]]. Можно использовать как программу или как библиотеку, во втором случае можно самому написать программу, использующую PGP. В настоящее время считается одним из самых надёжных средств шифрования и [[ЭЦП]]. Существуют бесплатные и коммерческие версии. Изначально программа была бесплатной с открытым исходным кодом. Проанализировав код, ведущие криптоаналитики признали эффективность применения данного средства шифрования. Кроме самой PGP, существуют аналоги в виде filecrypt, gnupg (GPG), использующие те же алгоритмы. Все реализации полностью совместимы между собой — то, что зашифровано одной программой, может быть расшифровано другой при наличии ключа. Первые версии программы созданы Филиппом Циммерманном в 1991 году. Нынче технологии шифрования данных на основе PGP или совместимые с ней реализованы для всех ОС. | + | '''PGP''' — криптографическая система, основанная на [[Криптография с открытым ключом|криптографии с открытым ключом]]. Можно использовать как программу или как библиотеку, во втором случае можно самому написать программу, использующую PGP. В настоящее время считается одним из самых надёжных средств шифрования и [[ЭЦП]]. Существуют бесплатные и коммерческие версии. Изначально программа была бесплатной с открытым исходным кодом. Проанализировав код, ведущие криптоаналитики признали эффективность применения данного средства шифрования. Кроме самой PGP, существуют аналоги в виде filecrypt, gnupg (GPG), использующие те же алгоритмы. Все реализации полностью совместимы между собой — то, что зашифровано одной программой, может быть расшифровано другой при наличии ключа. Первые версии программы созданы Филиппом Циммерманном в 1991 году. Нынче технологии шифрования данных на основе PGP или совместимые с ней реализованы для всех ОС. |
| | | |
| == Как это работает == | | == Как это работает == |
Строка 20: |
Строка 20: |
| * RSA — примечателен тем, что одна и та же пара ключей может использоваться и для асимметричного шифрования, и для ЭЦП. | | * RSA — примечателен тем, что одна и та же пара ключей может использоваться и для асимметричного шифрования, и для ЭЦП. |
| * DSA | | * DSA |
− | * Схема Эль-Гамаля (Elgamal) | + | * схема Эль-Гамаля |
| | | |
| == Практическое применение == | | == Практическое применение == |
| | | |
| Тут понятно и ежу. Всё, что не должно быть известно третьим лицам, подлежит шифрованию. PGP и её аналоги дают достаточную (но не абсолютную) защиту конфиденциальности передаваемой информации, делая невозможным её анализ программами, собирающими персональные данные, и системами контроля типа eshelon и СОРМ. Кроме шифрования, PGP используется для создания электронной подписи документа — хэшa на основе всего документа и закрытого ключа его владельца. Таким образом, обладатель публичного ключа может проверить, не был ли изменён документ при пересылке и в действительности ли он составлен обладателем ключа закрытого. При этом по имеющемуся хэшу невозможно установить сам закрытый ключ, но и невозможно создать подпись, аналогичную обладателю закрытого ключа. Электронная подпись позволяет обеспечить целостность документа, а также точно установить его владельца. | | Тут понятно и ежу. Всё, что не должно быть известно третьим лицам, подлежит шифрованию. PGP и её аналоги дают достаточную (но не абсолютную) защиту конфиденциальности передаваемой информации, делая невозможным её анализ программами, собирающими персональные данные, и системами контроля типа eshelon и СОРМ. Кроме шифрования, PGP используется для создания электронной подписи документа — хэшa на основе всего документа и закрытого ключа его владельца. Таким образом, обладатель публичного ключа может проверить, не был ли изменён документ при пересылке и в действительности ли он составлен обладателем ключа закрытого. При этом по имеющемуся хэшу невозможно установить сам закрытый ключ, но и невозможно создать подпись, аналогичную обладателю закрытого ключа. Электронная подпись позволяет обеспечить целостность документа, а также точно установить его владельца. |
− |
| |
− | == PGP с командной строки ==
| |
− | [[Файл:Testkey.png|thumb|right|Пример закрытого ключа]]
| |
− | [[Файл:Testpubkey.png|thumb|right|Пример открытого ключа из той же пары]]
| |
− | На примере GNU Privacy Guard (свободная замена PGP).
| |
− |
| |
− | Зашифруем файл '''симметричным''' шифром (программа спросит пароль):
| |
− | <pre>gpg -c file.txt</pre>
| |
− | Образуется файл ''file.txt.gpg''.
| |
− |
| |
− | Расшифруем файл ''file.txt.gpg'':
| |
− | <pre>gpg file.txt.gpg</pre>
| |
− | При этом программа создаст файл ''file.txt''.
| |
− |
| |
− | Создадим пару ключей для '''асимметричного''' шифрования и [[ЭЦП]]:
| |
− | <pre>gpg --gen-key</pre>
| |
− | Всё, о чем спросит, можно оставить без изменений (нажимая ввод), кроме имени, адреса и комментария. По желанию можно указать пароль.
| |
− |
| |
− | {{NSFW|1=Пример|2=<pre>
| |
− | $ gpg --gen-key
| |
− | gpg (GnuPG) 1.4.10; Copyright (C) 2008 Free Software Foundation, Inc.
| |
− | This is free software: you are free to change and redistribute it.
| |
− | There is NO WARRANTY, to the extent permitted by law.
| |
− |
| |
− | Please select what kind of key you want:
| |
− | (1) RSA and RSA (default)
| |
− | (2) DSA and Elgamal
| |
− | (3) DSA (sign only)
| |
− | (4) RSA (sign only)
| |
− | Your selection?
| |
− | RSA keys may be between 1024 and 4096 bits long.
| |
− | What keysize do you want? (2048)
| |
− | Requested keysize is 2048 bits
| |
− | Please specify how long the key should be valid.
| |
− | 0 = key does not expire
| |
− | <n> = key expires in n days
| |
− | <n>w = key expires in n weeks
| |
− | <n>m = key expires in n months
| |
− | <n>y = key expires in n years
| |
− | Key is valid for? (0)
| |
− | Key does not expire at all
| |
− | Is this correct? (y/N) y
| |
− |
| |
− | You need a user ID to identify your key; the software constructs the user ID
| |
− | from the Real Name, Comment and Email Address in this form:
| |
− | "Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>"
| |
− |
| |
− | Real name: test
| |
− | Name must be at least 5 characters long
| |
− | Real name: test test
| |
− | Email address: test@example.com
| |
− | Comment: no comment
| |
− | You selected this USER-ID:
| |
− | "test test (no comment) <test@example.com>"
| |
− |
| |
− | Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O
| |
− | You need a Passphrase to protect your secret key.
| |
− |
| |
− | gpg: key BC0A6855 marked as ultimately trusted
| |
− | public and secret key created and signed.
| |
− |
| |
− | gpg: checking the trustdb
| |
− | gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model
| |
− | gpg: depth: 0 valid: 1 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 1u
| |
− | pub 2048R/BC0A6855 2013-03-03
| |
− | Key fingerprint = 7A9D 15DD 2E7C 44C7 CACA 6D59 27CC 8672 BC0A 6855
| |
− | uid test test (no comment) <test@example.com>
| |
− | sub 2048R/4C920DE9 2013-03-03</pre>
| |
− | Хеш публичного ключа: BC0A6855, фингерпринт: 7A9D 15DD 2E7C 44C7 CACA 6D59 27CC 8672 BC0A 6855}}
| |
− |
| |
− | Посмотрим ещё раз на фингерпринт нашего ключа:
| |
− | <pre>gpg --fingerprint</pre>
| |
− | {{NSFW|1=Пример|2=<pre>
| |
− | $ gpg --fingerprint
| |
− | /home/guest/.gnupg/pubring.gpg
| |
− | ------------------------------
| |
− | pub 2048R/BC0A6855 2013-03-03
| |
− | Key fingerprint = 7A9D 15DD 2E7C 44C7 CACA 6D59 27CC 8672 BC0A 6855
| |
− | uid test test (no comment) <test@example.com>
| |
− | sub 2048R/4C920DE9 2013-03-03</pre>}}
| |
− |
| |
− | Укажем в настройках сервер ключей. Для этого добавим в файл ''.gnupg/gpg.conf'':
| |
− | <pre>keyserver hkp://pool.sks-keyservers.net</pre>
| |
− | где pool.sks-keyservers.net — адрес сервера ключей.
| |
− |
| |
− | Вместо этого можно каждый раз указывать сервер ключей в командной строке: --keyserver pool.sks-keyservers.net
| |
− |
| |
− | Отправим наш ключ в '''сервер ключей''':
| |
− | <pre>gpg --send-keys хеш_ключа</pre>
| |
− | {{NSFW|1=Пример|2=<pre>
| |
− | $ gpg --send-keys BC0A6855
| |
− | gpg: sending key BC0A6855 to hkp server pool.sks-keyservers.net</pre>}}
| |
− |
| |
− | Серверы ключей обмениваются ключами между собой, поэтому достаточно загрузить ключ на один из них, а скоро он окажется доступен на всех серверах.
| |
− |
| |
− | У сервера ключей может быть [http://keys.gnupg.net/ веб-интерфейс], через который можно загружать и скачивать ключи. При поиске по хешу нужно перед хешом приписывать «0x».
| |
− | {{NSFW|1=Пример|2=[http://key.ip6.li:11371/pks/lookup?search=0xBC0A6855&op=vindex результаты поиска ключа с хешом BC0A6855]}}
| |
− |
| |
− | На другом компьютере получим ключ с сервера ключей:
| |
− | <pre>gpg --recv-keys хеш_ключа</pre>
| |
− | {{NSFW|1=Пример|2=<pre>
| |
− | $ gpg --recv-keys BC0A6855
| |
− | gpg: requesting key BC0A6855 from hkp server pool.sks-keyservers.net
| |
− | gpg: key BC0A6855: public key "test test (no comment) <test@example.com>" imported
| |
− | gpg: Total number processed: 1
| |
− | gpg: imported: 1 (RSA: 1)</pre>}}
| |
− | Теперь авторство файлов, подписанных этим ключом, будет считаться достоверным.
| |
− |
| |
− | Альтернативный способ передачи публичного ключа — через файл:
| |
− | <pre>gpg --output файл_с_ключем.gpg --export</pre>
| |
− | Можно добавить опцию --armor, чтобы файл получился текстовым.
| |
− | {{NSFW|1=Пример|2=<pre>
| |
− | $ gpg --output BC0A6855.gpg --armor --export
| |
− | </pre>}}
| |
− | Скопируем файл на другой компьютер и импортируем его:
| |
− | <pre>gpg --import файл_с_ключем.gpg</pre>
| |
− | {{NSFW|1=Пример|2=<pre>
| |
− | $ gpg --import /tmp/BC0A6855.gpg
| |
− | gpg: key BC0A6855: public key "test test (no comment) <test@example.com>" imported
| |
− | gpg: Total number processed: 1
| |
− | gpg: imported: 1 (RSA: 1)</pre>}}
| |
− |
| |
− | Теперь нужно подписать ключ:
| |
− | <pre>gpg --edit BC0A6855 sign</pre>
| |
− |
| |
− | На втором компьютере '''зашифруем''' файл открытым ключом с первого:
| |
− | <pre>gpg --recipient получатель --encrypt файл</pre>
| |
− | Получателя можно указывать разными способами, например через хеш его ключа, имя или e-mail.
| |
− | Чтобы скрыть получателя, используйте --hidden-recipient вместо --recipient.
| |
− | {{NSFW|1=Пример|2=<pre>
| |
− | $ gpg --recipient BC0A6855 --encrypt 1.txt</pre>
| |
− | Получится файл 1.txt.pgp, который нужно отправить на первый компьютер.
| |
− | }}
| |
− |
| |
− | На первом компьютере расшифруем файл:
| |
− | <pre>gpg файл</pre>
| |
− | {{NSFW|1=Пример|2=<pre>
| |
− | $ gpg 1.txt.gpg
| |
− | gpg: encrypted with 2048-bit RSA key, ID 4C920DE9, created 2013-03-03
| |
− | "test test (no comment) <test@example.com>"</pre>}}
| |
− |
| |
− | '''Подпишем''' файл:
| |
− | <pre>gpg --sign 1.txt # бинарный файл 1.txt.gpg, включает исходный файл
| |
− | gpg --clearsign 1.txt # текстовый файл 1.txt.asc, включает исходный файл
| |
− | gpg --detach-sig 1.txt # бинарный файл 1.txt.asc, не включает исходный файл (только подпись)</pre>
| |
− |
| |
− | Проверим подпись:
| |
− | gpg --verify файл_с_подписью # проверяет подпись
| |
− | gpg --decrypt файл_с_подписью --output новый_файл # проверяет подпись и извлекает подписанный файл
| |
− | {{NSFW|1=Пример|2=<pre>
| |
− | $ gpg --verify 1.txt.sig
| |
− | gpg: Signature made Sun 03 Mar 2013 04:42:13 PM MSK using RSA key ID BC0A6855
| |
− | gpg: Good signature from "test test (no comment) <test@example.com>"
| |
− | $ gpg --verify 1.txt.asc
| |
− | gpg: Signature made Sun 03 Mar 2013 04:40:31 PM MSK using RSA key ID BC0A6855
| |
− | gpg: Good signature from "test test (no comment) <test@example.com>"
| |
− | $ gpg --verify 1.txt.gpg
| |
− | gpg: Signature made Sun 03 Mar 2013 04:39:05 PM MSK using RSA key ID BC0A6855
| |
− | gpg: Good signature from "test test (no comment) <test@example.com>"
| |
− | $ gpg --output 1.txt --decrypt 1.txt.gpg
| |
− | gpg: Signature made Sun 03 Mar 2013 04:39:05 PM MSK using RSA key ID BC0A6855
| |
− | gpg: Good signature from "test test (no comment) <test@example.com>"
| |
− | $ cat 1.txt
| |
− | hello
| |
− | $ gpg --output a.txt --decrypt 1.txt.asc
| |
− | gpg: Signature made Sun 03 Mar 2013 04:40:31 PM MSK using RSA key ID BC0A6855
| |
− | gpg: Good signature from "test test (no comment) <test@example.com>"
| |
− | $ cat a.txt
| |
− | hello</pre>}}
| |
− |
| |
− | Опции -c, --encrypt и --sign можно использовать совместно.
| |
− |
| |
− | {{NSFW|1=Ещё|2=
| |
− | Удалить чей-то публичный ключ:
| |
− | <pre>gpg --delete-keys кто-то</pre>
| |
− |
| |
− | Протестировать импорт ключа (вхолостую):
| |
− | <pre>gpg --dry-run --import file.gpg</pre>
| |
− | }}
| |
− |
| |
− | == См. также ==
| |
− | * [[Jabber|Jabber/XMPP]]
| |
− | * [[RetroShare]]
| |
| | | |
| == Ссылки == | | == Ссылки == |
− | * [http://x-hack.ru/modules.php?name=Articles&file=view&articles_id=14 Установка и использование PGP] | + | * [http://x-hack.ru/modules.php?name=Articles&file=view&articles_id=14 о pgp] |
| * [http://pgpru.com Русская энциклопедия] | | * [http://pgpru.com Русская энциклопедия] |
| * [[:w: PGP|Статья в википедии]] | | * [[:w: PGP|Статья в википедии]] |
Строка 217: |
Строка 34: |
| == Примечания == | | == Примечания == |
| <references /> | | <references /> |
− | {{talk}}
| |