18 мая, 2014

Что такое PGP?

так, что такое PGP? Это сокращение от 'Pretty Good Privacy' — названия популярной системы шифрования с открытым ключом.

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

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

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

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

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

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

Таким образом, ты хранишь у себя первый - секретный - ключ, и никому его не показываешь. Второй ключ - публичный - ты раздаёшь всем друзьям, рассылаешь по FIDO, вставляешь в комментарии к своим архивам…

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

Вот это и есть тот самый 'PGP public key', который ты видел.

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

Это называется 'PGP signature', которую ты, возможно, тоже видел.

Hо у этого метода есть свои недостатки.

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

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

EP> "...если увидите несовпадения - бейте тревогу..."

именно для пpедотвpащения этого пpедусмотpены во-пеpвых возможность сеpтификации публичного ключа и во-втоpых пpесловутый pgp public key fingerprint, позволяющий, скажем, голосом по телефону по контpольным цифpам пpовеpить подлинность ключа.

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