Война в Украине

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

PGP — различия между версиями

Материал из Urbanculture
Перейти к: навигация, поиск
м (стиль, оформление)
(PGP с командной строки)
 
(не показано 16 промежуточных версий 5 участников)
Строка 1: Строка 1:
{{Навигация|Криптоконспирология}}{{stub|help=yes|картинок, примеров, фейлов, взломов, страха криптоконспирологов, описания алгоритмов. Убрать лишнюю википидоту и прочие некошерные вещи}}
+
{{Навигация|Криптоконспирология}}
 
[[Файл:pgp1.jpg|thumb]]
 
[[Файл:pgp1.jpg|thumb]]
 +
 
{{q|Людям необходима конфиденциальность. PGP распространяется, как огонь в прериях, раздуваемый людьми, которые беспокоятся о своей конфиденциальности в этот информационный век. Сегодня организации по охране прав человека используют программу PGP для защиты своих людей за рубежом. Организация Amnesty International также использует её.|Филипп Циммерманн}}
 
{{q|Людям необходима конфиденциальность. PGP распространяется, как огонь в прериях, раздуваемый людьми, которые беспокоятся о своей конфиденциальности в этот информационный век. Сегодня организации по охране прав человека используют программу PGP для защиты своих людей за рубежом. Организация Amnesty International также использует её.|Филипп Циммерманн}}
'''PGP''' — криптографическая система, использующая в основе алгоритм шифрования с открытым ключом, или так называемую публичную криптографию. Представляет собой программу и библиотеку функций для шифрования. В настоящее время считается одним из самых надёжных средств шифрования информации. Существуют как бесплатные версии, так и распространяемые на коммерческой основе. Изначально программа была бесплатной, исходный код был открыт. Проанализировав код, ведущие криптоаналитики признали эффективность применения данного средства шифрования. Кроме самой pgp, существуют аналоги в виде filecrypt, gnupg, использующие те же алгоритмы. Все реализации полностью совместимы между собой, то есть то, что зашифровано одной программой, может быть расшифровано другой при наличии ключа. Первые версии программы созданы Филиппом Циммерманном в 1991 году. Нынче технологии шифрования данных на основе pgp или совместимые с ней реализованы на всех имеющихся ОС.
 
  
== Основные понятия ==
+
'''PGP''' — криптографическая система, основанная на [[Криптография с открытым ключом|криптографии с открытым ключом]]. Можно использовать как программу или как библиотеку, во втором случае можно самому написать программу, использующую PGP. В настоящее время считается одним из самых надёжных средств шифрования и [[ЭЦП]]. Существуют бесплатные и коммерческие версии. Изначально программа была бесплатной с открытым исходным кодом. Проанализировав код, ведущие криптоаналитики признали эффективность применения данного средства шифрования. Кроме самой PGP, существуют аналоги в виде filecrypt, gnupg (GPG), использующие те же алгоритмы. Все реализации полностью совместимы между собой — то, что зашифровано одной программой, может быть расшифровано другой при наличии ключа. Первые версии программы созданы Филиппом Циммерманном в 1991 году. Нынче технологии шифрования данных на основе PGP или совместимые с ней реализованы для всех ОС.
''Криптографический алгоритм'', он же ''шифр'' — математическая формула, преобразующая исходный текст в шифрованный с использованием ключа.
+
  
''Ключ ''— пароль (секретное слово или фраза), используемый при шифровании и известный только получателю сообщения. При условии, что алгоритм, то есть способ шифрования, известен, ключ является основой безопасности.
+
== Как это работает ==
 +
[[Файл:pgp3.gif|thumb|600px|right]]
  
''Криптографическая стойкость'' — устойчивость алгоритма и ключей к анализу или перебору, отсутствие в алгоритме уязвимостей. Чем выше стойкость, тем труднее получить исходный текст, не имея ключа.
+
{{Main|Криптография}}
  
''Электронная цифровая подпись'' — механизм подтверждения подлинности и целостности цифровых документов.
+
До 70-х годов 20 века было известно только симметричное шифрование, при котором для расшифровывания используется тот же ключ, что и для шифрования. Общим недостатком таких алгоритмов является необходимость безопасной передачи ключа через надежный (непрослушиваемый) канал. Прорывом было открытие [[асимметричное шифрование|асимметричного шифрования]], когда ключ для шифрования может быть подслушан, но его знание не поможет криптоаналитику дешифровать сообщение. Для расшифровки используется закрытый ключ, который создается и хранится только у адресата. Асимметричные шифры работают медленнее, чем симметричные и требуют ключ большей длины для обеспечения такой же криптостойкости.
  
== Асимметричное шифрование ==
+
[[Файл:pgp2.jpg|thumb|left]]
Метод шифрования, использующий пару ключей, публичный (открытый) и секретный, для обмена шифрованными сообщениями. Программа генерирует пару ключей, связанных между собой. Публичный используется только для шифрования, секретный же — лишь для расшифровки. Ключи связаны между собой так, что невозможно создать ещё один открытый ключ, не имея секретного. Но воссоздать секретный ключ, имея публичный, не выйдет даже при наличии образцов исходного и шифрованного текстов. Открытый ключ вместе с данными о его владельце распространяется среди корреспондентов, секретный же хранится в тайне. Отправитель шифрует сообщение публичным ключом, но расшифровать его может только получатель.
+
В современных версиях используют гибридное шифрование на основе обоих способов. Информацию вначале сжимают, затем шифруют одноразовым симметричным ключом, а тот, в свою очередь, асимметричным. Передаются зашифрованный текст и зашифрованный одноразовый ключ. (Сжатие нужно для [[скремблирование|устранения избыточности текста]], позволяющей проводить анализ на основе наиболее часто встречающихся фрагментов.) Расшифровка идёт в обратном порядке: с помощью закрытого ключа расшифровывают одноразовый, а посредством оного уже расшифровывают весь текст
 
+
<ref>https://www.pgpru.com/biblioteka/osnovy/vvedenievkripto/glava1/kakdejjstvuetpgp</ref>. Преимущество такого метода в том, что асимметричные алгоритмы менее стойки, чем симметричные, и при большом объёме данных легче подвергаются анализу <ref>по надёжности 1024-битный асимметричный ключ сравним с 128-битным симметричным</ref>; кроме того, шифрование симметричным способом идёт значительно быстрее. Надёжность одноразового ключа по сравнению с паролем высока, ибо он создаётся не человеком, а генератором случайных или псевдослучайных чисел. Также симметричный ключ в данном случае не может быть скомпрометирован, так как используется только один раз и не демонстрируется отправителю или получателю — его знает лишь программа шифрования, в зашифрованном виде передающая его программе адресата внутри самого сообщения. При этом одноразовый ключ не содержит количество информации, достаточное для успешного взлома или подбора закрытого ключа асимметричного алгоритма. Также такой одноразовый ключ не может быть подобран по словарю, в отличие от пароля, придуманного человеком.
Метод имеет ряд преимуществ перед симметричным шифрованием. При использовании одного ключа для кодирования и декодирования нужно быть уверенным, что он не попадёт в чужие руки. Следовательно, возникает множество проблем с его хранением и передачей. Пользователь может быть уверен в себе, но не в своих корреспондентах, или каналах связи, через которые он передаёт ключ. Асимметричное шифрование решает проблему сохранности секретного ключа однозначно, так как при его использовании нет необходимости передавать секретный ключ всем собеседникам. А публичный может передаваться и даже попасть в руки злоумышленника, но при попытке расшифровки того ждёт фиаско.
+
 
+
== Как это работает ==
+
[[Файл:pgp2.jpg|thumb|left]][[Файл:pgp3.gif|thumb|right]]
+
В современных версиях используют гибридное шифрование на основе обоих способов. Информацию вначале сжимают, затем шифруют одноразовым симметричным ключом, а тот, в свою очередь, асимметричным. Сжатие нужно для устранения избыточности текста, позволяющей проводить анализ на основе наиболее часто встречающихся фрагментов. Расшифровка идёт в обратном порядке: с помощью секретного ключа расшифровывают сеансовый, а посредством оного уже дешифруют весь текст<ref> по материалам https://www.pgpru.com/biblioteka/osnovy/vvedenievkripto/glava1/kakdejjstvuetpgp</ref>. Преимущество такого метода в том, что асимметричные алгоритмы менее стойки, чем симметричные, и при большом объёме данных легче подвергаются анализу<ref> по надёжности 1024-битный асимметричный ключ сравним с 128-битным симметричным</ref>; кроме того, шифрование симметричным способом идёт быстрее. Надёжность сеансового ключа по умолчанию высока, ибо он создаётся не человеком, а генератором псевдослучайных чисел. Также симметричный ключ в данном случае не может быть скомпрометирован, будучи использован только один раз без показа отправителю или получателю — его знает лишь программа шифрования, в зашифрованном виде передающая его программе вашего корреспондента внутри всего сообщения. При этом симметричный ключ не содержит количества информации, достаточной для успешного взлома или подбора ключа асимметричного алгоритма. Также такой сеансовый ключ не может быть подобран по словарю, в отличие от придуманных человеком.
+
  
 
== Применяемые алгоритмы ==
 
== Применяемые алгоритмы ==
* 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=
Несмотря на все преимущества описанных алгоритмов, некоторые проблемы всё же остаются. Основная — <u>возможность подмены публичного ключа</u>. Если вы получаете ключ не непосредственно от его владельца, то вероятность подмены велика. Допустим, существует третья, заинтересованная сторона, которая предоставит вам свой ключ вместо ключа вашего корреспондента, а ему в свою очередь такой же фиктивный свой ключ вместо вашего. Тогда эта третья сторона сможет расшифровать ваше сообщение, подменить его тем же самым исходным текстом, только зашифрованным настоящим публичным ключом вашего корреспондента, и переслать ему. Он же, обладая вашим фиктивным ключом (который ему заботливо подсунули), шифрует для вас ответ, также достающийся третьей стороне, которая преспокойно добывает исходный текст и шифрует его вашим настоящим ключом. В результате хитрых манипуляций окажется, что вся сложность перехвата сводится не к криптоанализу и созданию идентичных хэшей электронной подписи, что почти невозможно,<ref>даже при слабом ключе это очень долго, весьма дорого и при длине асимметричного ключа более 1024 бит пока не реализуемо, ведущие криптоаналитики гарантируют это</ref> а к банальной подмене, что вполне реализуемо — было бы сильное желание.
+
Удалить чей-то публичный ключ:
 +
<pre>gpg --delete-keys кто-то</pre>
  
Поэтому публичный ключ также имеет защиту от подмены. При его создании необходимо указать имя и адрес электронной почты (можно ник, если переписка анонимная), с помощью которых ваш корреспондент сможет проверить принадлежность имеющегося у него вашего ключа вам. Также у ключа имеется id (номер) и фингерпринт (отпечаток, также хэш, но уже самого ключа, представляющий собой короткую комбинацию, которую нетрудно проверить). Злоумышленник может сгенерировать свою пару ключей и вписать в публичный ваше имя и адрес электронной почты, но его фингерпринт будет отличаться от вашего. Получив чей-либо ключ из ненадёжного источника, можно легко проверить его, попросив корреспондента прислать его фингерпринт, используя альтернативный способ связи (по телефону или через im). После чего достоверность владения соответствующим секретным ключом будет равна достоверности выбранного альтернативного способа связи.
+
Протестировать импорт ключа (вхолостую):
 +
<pre>gpg --dry-run --import file.gpg</pre>
 +
}}
  
Существуют сети доверия, когда, проверив публичный ключ, вы подписываете его, и все, кто доверяет вам, будут считать, что оный принадлежит именно тому, с кем они хотят иметь дело, а не третьей стороне. При этом они сами могут проверить этот ключ вышеуказанным способом. Существуют и государственные сертификационные центры, где можно регистрировать ключи. За некоторую сумму они согласятся выдавать ваш публичный ключ и персональные данные любой требующей подтверждения стороне. Система сертификационных центров, широко эксплуатируемая на государственном уровне и в интернет-торгах, использует набор программного обеспечения X.509, работающий на основе тех же алгоритмов. Но их ПО является коммерческим и закрытым, а основная задача — создание и заверение электронных подписей, а не криптография.
+
== См. также ==
 +
* [[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|Статья в википедии]]
Строка 46: Строка 217:
 
== Примечания ==
 
== Примечания ==
 
<references />
 
<references />
 +
{{talk}}

Текущая версия на 13:26, 3 ноября 2015

Pgp1.jpg
Людям необходима конфиденциальность. PGP распространяется, как огонь в прериях, раздуваемый людьми, которые беспокоятся о своей конфиденциальности в этот информационный век. Сегодня организации по охране прав человека используют программу PGP для защиты своих людей за рубежом. Организация Amnesty International также использует её.

Филипп Циммерманн

PGP — криптографическая система, основанная на криптографии с открытым ключом. Можно использовать как программу или как библиотеку, во втором случае можно самому написать программу, использующую PGP. В настоящее время считается одним из самых надёжных средств шифрования и ЭЦП. Существуют бесплатные и коммерческие версии. Изначально программа была бесплатной с открытым исходным кодом. Проанализировав код, ведущие криптоаналитики признали эффективность применения данного средства шифрования. Кроме самой PGP, существуют аналоги в виде filecrypt, gnupg (GPG), использующие те же алгоритмы. Все реализации полностью совместимы между собой — то, что зашифровано одной программой, может быть расшифровано другой при наличии ключа. Первые версии программы созданы Филиппом Циммерманном в 1991 году. Нынче технологии шифрования данных на основе PGP или совместимые с ней реализованы для всех ОС.

Как это работает[править]

Pgp3.gif

Основная статья: Криптография


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

Pgp2.jpg

В современных версиях используют гибридное шифрование на основе обоих способов. Информацию вначале сжимают, затем шифруют одноразовым симметричным ключом, а тот, в свою очередь, асимметричным. Передаются зашифрованный текст и зашифрованный одноразовый ключ. (Сжатие нужно для устранения избыточности текста, позволяющей проводить анализ на основе наиболее часто встречающихся фрагментов.) Расшифровка идёт в обратном порядке: с помощью закрытого ключа расшифровывают одноразовый, а посредством оного уже расшифровывают весь текст [1]. Преимущество такого метода в том, что асимметричные алгоритмы менее стойки, чем симметричные, и при большом объёме данных легче подвергаются анализу [2]; кроме того, шифрование симметричным способом идёт значительно быстрее. Надёжность одноразового ключа по сравнению с паролем высока, ибо он создаётся не человеком, а генератором случайных или псевдослучайных чисел. Также симметричный ключ в данном случае не может быть скомпрометирован, так как используется только один раз и не демонстрируется отправителю или получателю — его знает лишь программа шифрования, в зашифрованном виде передающая его программе адресата внутри самого сообщения. При этом одноразовый ключ не содержит количество информации, достаточное для успешного взлома или подбора закрытого ключа асимметричного алгоритма. Также такой одноразовый ключ не может быть подобран по словарю, в отличие от пароля, придуманного человеком.

Применяемые алгоритмы[править]

  • RSA — примечателен тем, что одна и та же пара ключей может использоваться и для асимметричного шифрования, и для ЭЦП.
  • DSA
  • Схема Эль-Гамаля (Elgamal)

Практическое применение[править]

Тут понятно и ежу. Всё, что не должно быть известно третьим лицам, подлежит шифрованию. PGP и её аналоги дают достаточную (но не абсолютную) защиту конфиденциальности передаваемой информации, делая невозможным её анализ программами, собирающими персональные данные, и системами контроля типа eshelon и СОРМ. Кроме шифрования, PGP используется для создания электронной подписи документа — хэшa на основе всего документа и закрытого ключа его владельца. Таким образом, обладатель публичного ключа может проверить, не был ли изменён документ при пересылке и в действительности ли он составлен обладателем ключа закрытого. При этом по имеющемуся хэшу невозможно установить сам закрытый ключ, но и невозможно создать подпись, аналогичную обладателю закрытого ключа. Электронная подпись позволяет обеспечить целостность документа, а также точно установить его владельца.

PGP с командной строки[править]

Пример закрытого ключа
Пример открытого ключа из той же пары

На примере GNU Privacy Guard (свободная замена PGP).

Зашифруем файл симметричным шифром (программа спросит пароль):

gpg -c file.txt

Образуется файл file.txt.gpg.

Расшифруем файл file.txt.gpg:

gpg file.txt.gpg

При этом программа создаст файл file.txt.

Создадим пару ключей для асимметричного шифрования и ЭЦП:

gpg --gen-key

Всё, о чем спросит, можно оставить без изменений (нажимая ввод), кроме имени, адреса и комментария. По желанию можно указать пароль.

Посмотрим ещё раз на фингерпринт нашего ключа:

gpg --fingerprint

Укажем в настройках сервер ключей. Для этого добавим в файл .gnupg/gpg.conf:

keyserver hkp://pool.sks-keyservers.net

где pool.sks-keyservers.net — адрес сервера ключей.

Вместо этого можно каждый раз указывать сервер ключей в командной строке: --keyserver pool.sks-keyservers.net

Отправим наш ключ в сервер ключей:

gpg --send-keys хеш_ключа

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

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

На другом компьютере получим ключ с сервера ключей:

gpg --recv-keys хеш_ключа

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

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

gpg --output файл_с_ключем.gpg --export

Можно добавить опцию --armor, чтобы файл получился текстовым.

Скопируем файл на другой компьютер и импортируем его:

gpg --import файл_с_ключем.gpg

Теперь нужно подписать ключ:

gpg --edit BC0A6855 sign

На втором компьютере зашифруем файл открытым ключом с первого:

gpg --recipient получатель --encrypt файл

Получателя можно указывать разными способами, например через хеш его ключа, имя или e-mail. Чтобы скрыть получателя, используйте --hidden-recipient вместо --recipient.

На первом компьютере расшифруем файл:

gpg файл

Подпишем файл:

gpg --sign 1.txt # бинарный файл 1.txt.gpg, включает исходный файл
gpg --clearsign 1.txt # текстовый файл 1.txt.asc, включает исходный файл
gpg --detach-sig 1.txt # бинарный файл 1.txt.asc, не включает исходный файл (только подпись)

Проверим подпись: gpg --verify файл_с_подписью # проверяет подпись gpg --decrypt файл_с_подписью --output новый_файл # проверяет подпись и извлекает подписанный файл

Опции -c, --encrypt и --sign можно использовать совместно.

См. также[править]

Ссылки[править]

Примечания[править]

  1. https://www.pgpru.com/biblioteka/osnovy/vvedenievkripto/glava1/kakdejjstvuetpgp
  2. по надёжности 1024-битный асимметричный ключ сравним с 128-битным симметричным
Рекомендуется ознакомиться с обсуждением этой статьи