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

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

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

Материал из Urbanculture
Перейти к: навигация, поиск
м
Строка 32: Строка 32:
  
 
Зашифруем файл '''симметричным''' шифром (программа спросит пароль):
 
Зашифруем файл '''симметричным''' шифром (программа спросит пароль):
gpg -c file.txt
+
<pre>gpg -c file.txt</pre>
 
Образуется файл ''file.txt.gpg''.
 
Образуется файл ''file.txt.gpg''.
  
 
Расшифруем файл ''file.txt.gpg'':
 
Расшифруем файл ''file.txt.gpg'':
gpg file.txt.gpg
+
<pre>gpg file.txt.gpg</pre>
 
При этом программа создаст файл ''file.txt''.
 
При этом программа создаст файл ''file.txt''.
  
 
Создадим пару ключей для '''асимметричного''' шифрования и [[ЭЦП]]:
 
Создадим пару ключей для '''асимметричного''' шифрования и [[ЭЦП]]:
gpg --gen-key
+
<pre>gpg --gen-key</pre>
 
Всё, о чем спросит, можно оставить без изменений (нажимая ввод), кроме имени, адреса и комментария. По желанию можно указать пароль.
 
Всё, о чем спросит, можно оставить без изменений (нажимая ввод), кроме имени, адреса и комментария. По желанию можно указать пароль.
  
Строка 92: Строка 92:
 
       Key fingerprint = 7A9D 15DD 2E7C 44C7 CACA  6D59 27CC 8672 BC0A 6855
 
       Key fingerprint = 7A9D 15DD 2E7C 44C7 CACA  6D59 27CC 8672 BC0A 6855
 
  uid                  test test (no comment) <test@example.com>
 
  uid                  test test (no comment) <test@example.com>
  sub  2048R/4C920DE9 2013-03-03
+
  sub  2048R/4C920DE9 2013-03-03</pre>
</pre>
+
Хеш публичного ключа: BC0A6855, фингерпринт: 7A9D 15DD 2E7C 44C7 CACA  6D59 27CC 8672 BC0A 6855}}
Хеш публичного ключа: BC0A6855, фингерпринт: 7A9D 15DD 2E7C 44C7 CACA  6D59 27CC 8672 BC0A 6855
+
}}
+
  
 
Посмотрим ещё раз на фингерпринт нашего ключа:
 
Посмотрим ещё раз на фингерпринт нашего ключа:
gpg --fingerprint
+
<pre>gpg --fingerprint</pre>
 
{{NSFW|1=Пример|2=<pre>
 
{{NSFW|1=Пример|2=<pre>
 
$ gpg --fingerprint
 
$ gpg --fingerprint
Строка 106: Строка 104:
 
       Key fingerprint = 7A9D 15DD 2E7C 44C7 CACA  6D59 27CC 8672 BC0A 6855
 
       Key fingerprint = 7A9D 15DD 2E7C 44C7 CACA  6D59 27CC 8672 BC0A 6855
 
uid                  test test (no comment) <test@example.com>
 
uid                  test test (no comment) <test@example.com>
sub  2048R/4C920DE9 2013-03-03
+
sub  2048R/4C920DE9 2013-03-03</pre>}}
</pre>}}
+
  
 
Укажем в настройках сервер ключей. Для этого добавим в файл ''.gnupg/gpg.conf'':
 
Укажем в настройках сервер ключей. Для этого добавим в файл ''.gnupg/gpg.conf'':
keyserver hkp://pool.sks-keyservers.net
+
<pre>keyserver hkp://pool.sks-keyservers.net</pre>
 
где pool.sks-keyservers.net — адрес сервера ключей.
 
где pool.sks-keyservers.net — адрес сервера ключей.
  
Строка 116: Строка 113:
  
 
Отправим наш ключ в '''сервер ключей''':
 
Отправим наш ключ в '''сервер ключей''':
gpg --send-keys хеш_ключа
+
<pre>gpg --send-keys хеш_ключа</pre>
 
{{NSFW|1=Пример|2=<pre>
 
{{NSFW|1=Пример|2=<pre>
 
$ gpg --send-keys BC0A6855
 
$ gpg --send-keys BC0A6855
gpg: sending key BC0A6855 to hkp server pool.sks-keyservers.net
+
gpg: sending key BC0A6855 to hkp server pool.sks-keyservers.net</pre>}}
</pre>}}
+
  
 
Серверы ключей обмениваются ключами между собой, поэтому достаточно загрузить ключ на один из них, а скоро он окажется доступен на всех серверах.
 
Серверы ключей обмениваются ключами между собой, поэтому достаточно загрузить ключ на один из них, а скоро он окажется доступен на всех серверах.
Строка 134: Строка 130:
 
gpg: key BC0A6855: public key "test test (no comment) <test@example.com>" imported
 
gpg: key BC0A6855: public key "test test (no comment) <test@example.com>" imported
 
gpg: Total number processed: 1
 
gpg: Total number processed: 1
gpg:              imported: 1  (RSA: 1)
+
gpg:              imported: 1  (RSA: 1)</pre>}}
</pre>}}
+
 
Теперь авторство файлов, подписанных этим ключом, будет считаться достоверным.
 
Теперь авторство файлов, подписанных этим ключом, будет считаться достоверным.
  
 
Альтернативный способ передачи публичного ключа — через файл:
 
Альтернативный способ передачи публичного ключа — через файл:
gpg --output файл_с_ключем.gpg --export
+
<pre>gpg --output файл_с_ключем.gpg --export</pre>
 
Можно добавить опцию --armor, чтобы файл получился текстовым.
 
Можно добавить опцию --armor, чтобы файл получился текстовым.
 
{{NSFW|1=Пример|2=<pre>
 
{{NSFW|1=Пример|2=<pre>
Строка 150: Строка 145:
 
gpg: key BC0A6855: public key "test test (no comment) <test@example.com>" imported
 
gpg: key BC0A6855: public key "test test (no comment) <test@example.com>" imported
 
gpg: Total number processed: 1
 
gpg: Total number processed: 1
gpg:              imported: 1  (RSA: 1)
+
gpg:              imported: 1  (RSA: 1)</pre>}}
</pre>}}
+
  
 
Теперь нужно подписать ключ:
 
Теперь нужно подписать ключ:
gpg --edit BC0A6855 sign
+
<pre>gpg --edit BC0A6855 sign</pre>
  
 
На втором компьютере '''зашифруем''' файл открытым ключом с первого:
 
На втором компьютере '''зашифруем''' файл открытым ключом с первого:
gpg --recipient получатель --encrypt файл
+
<pre>gpg --recipient получатель --encrypt файл</pre>
 
Получателя можно указывать разными способами, например через хеш его ключа, имя или e-mail.
 
Получателя можно указывать разными способами, например через хеш его ключа, имя или e-mail.
 
Чтобы скрыть получателя, используйте --hidden-recipient вместо --recipient.
 
Чтобы скрыть получателя, используйте --hidden-recipient вместо --recipient.
 
{{NSFW|1=Пример|2=<pre>
 
{{NSFW|1=Пример|2=<pre>
$ gpg --recipient BC0A6855 --encrypt 1.txt
+
$ gpg --recipient BC0A6855 --encrypt 1.txt</pre>
</pre>
+
 
Получится файл 1.txt.pgp, который нужно отправить на первый компьютер.
 
Получится файл 1.txt.pgp, который нужно отправить на первый компьютер.
 
}}
 
}}
  
 
На первом компьютере расшифруем файл:
 
На первом компьютере расшифруем файл:
gpg файл
+
<pre>gpg файл</pre>
 
{{NSFW|1=Пример|2=<pre>
 
{{NSFW|1=Пример|2=<pre>
 
$ gpg 1.txt.gpg  
 
$ gpg 1.txt.gpg  
 
gpg: encrypted with 2048-bit RSA key, ID 4C920DE9, created 2013-03-03
 
gpg: encrypted with 2048-bit RSA key, ID 4C920DE9, created 2013-03-03
       "test test (no comment) <test@example.com>"
+
       "test test (no comment) <test@example.com>"</pre>}}
</pre>}}
+
  
 
'''Подпишем''' файл:
 
'''Подпишем''' файл:
gpg --sign 1.txt # бинарный файл 1.txt.gpg, включает исходный файл
+
<pre>gpg --sign 1.txt # бинарный файл 1.txt.gpg, включает исходный файл
gpg --clearsign 1.txt # текстовый файл 1.txt.asc, включает исходный файл
+
gpg --clearsign 1.txt # текстовый файл 1.txt.asc, включает исходный файл
gpg --detach-sig 1.txt # бинарный файл 1.txt.asc, не включает исходный файл (только подпись)
+
gpg --detach-sig 1.txt # бинарный файл 1.txt.asc, не включает исходный файл (только подпись)</pre>
  
 
Проверим подпись:
 
Проверим подпись:
gpg --verify файл_с_подписью # проверяет подпись
+
gpg --verify файл_с_подписью # проверяет подпись
gpg --decrypt файл_с_подписью --output новый_файл # проверяет подпись и извлекает подписанный файл
+
gpg --decrypt файл_с_подписью --output новый_файл # проверяет подпись и извлекает подписанный файл
 
{{NSFW|1=Пример|2=<pre>
 
{{NSFW|1=Пример|2=<pre>
 
$ gpg --verify 1.txt.sig  
 
$ gpg --verify 1.txt.sig  
Строка 201: Строка 193:
 
gpg: Good signature from "test test (no comment) <test@example.com>"
 
gpg: Good signature from "test test (no comment) <test@example.com>"
 
$ cat a.txt  
 
$ cat a.txt  
hello
+
hello</pre>}}
</pre>}}
+
  
 
Опции -c, --encrypt и --sign можно использовать совместно.
 
Опции -c, --encrypt и --sign можно использовать совместно.
Строка 208: Строка 199:
 
{{NSFW|1=Ещё|2=
 
{{NSFW|1=Ещё|2=
 
Удалить чей-то публичный ключ:
 
Удалить чей-то публичный ключ:
gpg --delete-keys кто-то
+
<pre>gpg --delete-keys кто-то</pre>
  
 
Протестировать импорт ключа (вхолостую):
 
Протестировать импорт ключа (вхолостую):

Версия 13:25, 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-битным симметричным
Рекомендуется ознакомиться с обсуждением этой статьи