id: Гость   вход   регистрация
текущее время 08:40 23/11/2017
Владелец: SATtva (создано 10/06/2007 22:29), редакция от 21/10/2007 00:38 (автор: serzh) Печать
Категории: криптография, софт, pgp, gnupg, openpgp, сайт проекта, руководства, аутентификация, эцп, стандарты, faq
создать
просмотр
редакции
ссылки

Цифровая подпись комментариев и страниц сайта


Оглавление документа:


Платформа сайта, интегрированная со средствами OpenPGP, позволяет легко проверять цифровые подписи с редакций страниц и комментариев, публикуемых пользователями. Например, если вы хотите опубликовать на сайте нечто такое, что не должно быть бесконтрольно изменено другими участниками и даже модераторами, и чтобы при этом каждый мог убедиться, что истинным автором являетесь именно вы (скажем, это может быть ваш новый открытый ключ или метод криптоанализа алгоритма шифрования), вы можете подписать свое сообщение с помощью PGP, GnuPG или любой другой совместимой программой.

Как подписать и разместить


В некоторых случаях это может быть несколько сложнее, чем подписание электронной почты (современные браузеры порой слишком "умны" и перекодируют текст даже тогда, когда это не требуется), но в целом не должно составить труда. Конкретные инструкции зависят от используемой программы OpenPGP и операционной системы, но не забудьте главное: публикуя подписанный текст, убедитесь, что опция "OpenPGP-подписанный текст" под полем ввода отмечена флажком. Особенности выбора кодировки будут описаны ниже. А задать параметры обработки подписанных сообщений по умолчанию можно в настройках профиля.

Windows/PGP/GnuPG с графической оболочкой


Это самое простое. Напишите текст, скопируйте его и воспользуйтесь функцией подписания содержимого буфера обмена. В PGP это делается так: нажмите на иконку PGPtray > Clipboard > Sign. Различные графические надстройки GnuPG имеют различные нюансы, но, в целом, порядок действий такой же. Перед отправкой текста на сайт убедитесь, что выбрана кодировка CP1251 (это вариант по умолчанию).

Windows/GnuPG без графической оболочки


В такой среде порядок действий может быть двояким. Во-первых, можно написать текст в файле, подписать файл, а затем скопировать его содержимое в поле ввода на сайте. Вот как это сделать: составьте текст в Блокноте и сохраните файл (кодировка файла должны быть ANSI), затем вызовите GnuPG из консоли следующей командой: gpg -u <ключ_подписания> --clearsign <путь_к_файлу>. Содержимое подписанного файла (он имеет расширение .asc) отправьте на сайт, выбрав кодировку CP1251.


Второй вариант — это подписание текста прямо в консоли. Откройте консоль и выполните gpg -a -u <ключ_подписания> -s, введите пароль к ключу, напишите свой текст, нажмите Enter, Ctrl+Z и ещё раз Enter. Блок сообщения скопируйте и отправьте на сайт, обязательно указав кодировку CP866 (иначе сообщение окажется нечитаемым). Также не подписывайте текст "прозрачно" (используя команду --clearsign) — в противном случае подпись будет повреждена.

Linux/*BSD/GnuPG


Установите системную локаль в кодировку CP1251, KOI8-R или UTF-8. Подпишите текст "непрозрачной" подписью, выполнив команду gpg -a -u <ключ_подписания> -s (конструкция команды может отличаться, но главное условие — использование параметра -s; также для упрощения операции можете воспользоваться готовыми скриптами, предложенными mellon'ом). Подписанный блок вставьте в поле ввода на странице сайта и перед отправкой укажите кодировку, соответствующую вашей системной.

Индикатор состояния


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


верная ЭЦПЭлектронная подпись верна, сообщение не было изменено или искажено. Здесь же отмечено время, когда сообщение было подписано (обратите внимание, что если время подписания на много часов или дней отстает от времени опубликования — это повод для подозрений).
неверная ЭЦПСообщение было изменено после подписания. Это не обязательно свидетельствует о подделке (возможно, текст был поврежден при публикации на сайте, например, если автор выбрал неправильную кодировку). Однако может означать и то, что кто-то взломал базу данных сайта и попытался скорректировать сообщение там.
неопределенная ЭЦПСистема может проверять достоверность подписей лишь в том случае, если в ее базе данных имеются ключи, которыми подписи были поставлены, т.е. те ключи, которые зарегистрированные пользователи сайта загрузили в свои профили. Поэтому, если текст подписывает незарегистрированный посетитель, система лишь сообщит здесь ID ключа, которым была поставлена подпись, а ее состояние все заинтересованные должны будут проверить вручную.
поврежденная ЭЦПСистеме не удается сверить цифровую подпись (вероятнее всего, в базе данных отсутствует подписанный экземпляр текста). Это сообщение наименее вероятно и более всего подозрительно, поскольку свидетельствует о каких-то изменениях, внесенных в содержимое базы данных сайта. Имейте в виду: система проводит предварительную проверку подписи еще на этапе сохранения текста, поэтому изначальное размещение сообщений с поврежденными ЭЦП невозможно.
отображаемый текст не соответствует подписанномуВ некоторых случаях может выводиться дополнительное предупреждение, что отображаемый текст не соответствует подписанному. Это означает, что исходный текст был изменен, однако на сайте осталась оригинальная подписанная копия (с которой и происходит сверка ЭЦП), которую можно открыть, нажав на индикатор состояния ЭЦП. (Обычно, подобная ситуация возникает с комментариями пользователей: если модератор отредактирует сообщение (или это сделает сам автор, забыв затем переподписать текст), система предупредит о расхождении. С редакциями страниц такого не должно случаться, поскольку они не изменяются, а замещаются одна другой.)
текст подписан ключом пользователя ИксЭто сообщение выводится для верной ЭЦП. Оно означает, что один пользователь заверил текст ключом другого. Это не следует расценивать как непременную компрометацию ключа пользователя Икс (хотя это и возможно); вот другие вероятные причины: 1) автор зарегистрирован на сайте под двумя именами и сам подписал текст не тем ключом (по ошибке или намеренно); 2) если это комментарий, то он мог быть переподписан модератором (в этом случае убедитесь, что у пользователя Икс есть модераторские полномочия; 3) если опубликованная заметка в вики или комментарий были подписаны неавторизованным пользователем (с помощью постороннего ключа), то автором данной заметки/комментария действительно мог быть владелец данного ключа, который просто не пожелал авторизоваться на сайте; 4) один пользователь мог скопировать подписанный текст другого и повторно отправить на сайт, пытаясь выдать его за свой (чтобы не пасть жертвой такого обмана, обращайте внимание на метку времени подписания текста и его опубликования: большие интервалы подозрительны).

Независимая проверка


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


Открыть оригинал можно, щелкнув по индикатору состояния ЭЦП. Оригинал будет отображен в виде простого текста вкупе с адресом, по которому текст был опубликован изначально. Вы можете скопировать блок подписанного сообщения и воспользоваться установленной у вас OpenPGP-совместимой программой для самостоятельной проверки ЭЦП.

А что, если...


(Это мини-FAQ, где мы постараемся отвечать на основные вопросы, связанные с данной функциональностью, по мере их поступления.)

...отправить неподписанный текст, отметив опцию обработки подписи?

Ничего страшного не случится, текст будет размещен как обычный неподписанный.

...отправить подписанный текст, не отметив опцию обработки подписи?

Ну, текст просто будет выведен, как есть, т.е. со всеми заголовками PGP и материалом ЭЦП — не слишком эстетичное зрелище. Однако, такое бывает необходимо, когда вам нужно опубликовать чужую ЭЦП, допустим, для совместной диагностики какой-то проблемы. В этом случае опцию обработки включать не следует.

...выбрать неправильную кодировку для публикуемого текста?

Это сделает сообщение нечитаемым (при необходимости желающие смогут его перекодировать подручными средствами, что, однако, не слишком удобно). Правда, подпись будет сверяться верно. Но в целях сохранения приличного вида конференции и документов модераторы могут просто удалять "битые" тексты.

...администратор сайта захочет подделать чужую ЭЦП?

Придётся взломать RSA по меньшей мере. :-) Лучшее, что можно реально сделать — это срезать подпись с опубликованного сообщения или удалить опубликованный текст из БД. (Можно, конечно, выводить на индикаторе "верную ЭЦП" даже для поддельных подписей, но слишком велик шанс быть пойманным, а ведь коварному администратору это не нужно, не так ли? ;-) К сожалению, атаки на отказ в обслуживании со стороны оператора централизованного сервиса принципиально не могут быть исключены.

...я подпишу редакцию документа, а после меня его отредактирует кто-то другой?

Ваша подписанная редакция сохранится, но уйдет в общий список редакций данного документа. Соответственно, при просмотре конкретной вашей редакции читатель обнаружит электронную подпись, но текущая (последняя, активная) редакция будет отображаться как неподписанная (что, в сущности, и есть).

...я захочу открыть подписанный текст в предпросмотре?

Вы увидите его вместе со всеми заголовками PGP и материалом подписи. Подпись сличается только в момент сохранения текста, на этом же этапе срезаются все заголовки (оригинал подписи сохраняется отдельно) и остается чистый текст. В общем, если вы хотите "предпросмотреть" свое сообщение, желательно делать это перед тем, как подписать его.

...помимо подписанного текста отправить через форму какой-то дополнительный текст (за пределами ЭЦП)?

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

Что означает цветной фон отпечатка ключа?


В качестве меры противодействия подмене ключа пользователя как одной из социальных атак и для удобства запоминания отпечатка ключа он окрашивается в два цвета, используя цветовую модель RGB. От значения отпечатка берутся последние 12 знаков, первые 6 из которых определяют цвет левой части, а вторые 6 — второй части. Например, для отпечатка 6BBF A6A8 2488 F017 4211 0AA5 FAEB 26F7 8443 620A цвет левого фона — 26F784, а правого — 43620A. Так как цвет запомниается проще, чем набор цифр, его отображение рядом с каждым сообщением участника даёт возможность остальным участникам запомнить его цвета и заметить подмену ключа в случае таковой. Запоминание цветов, ассоциированных с отпечатком ключа, не является гарантией отсутствия подмены, но усложняет осуществление указанной атаки. Более подробно вопрос о цветах отпечатков был освящён в работе spinore'а "Цветовая PGP-идентификация в социальных средах".


 
На страницу: 1, 2, 3, 4, 5 След.
Комментарии [скрыть комментарии/форму]
— mellon (11/06/2007 08:04, исправлен 02/08/2007 22:11)   профиль/связь   <#>
комментариев: 61   документов: 47   редакций: 68
Маленькие примеры скриптов для никсоидов :)





[admin]19/07/07: Дополнено по просьбе mellon'а.[/admin]
[admin]02/08/07: Исправлено по просьбе mellon'а.[/admin]

— spinore (12/06/2007 03:45, исправлен 12/06/2007 04:34)   профиль/связь   <#>
комментариев: 1515   документов: 44   редакций: 5786
да, ещё для полноты картины надо добавить что-то типа "rm -rf ~/" и "одну строчку на перл" :-)
P. S.: не пробуйте вышенаписанную команду
— spinore (12/06/2007 04:48, исправлен 12/06/2007 05:12)   профиль/связь   <#>
комментариев: 1515   документов: 44   редакций: 5786
2 SATtva:
<[ SATtva:
— spinore (12/06/2007 05:14, исправлен 12/06/2007 05:15)   профиль/связь   <#>
комментариев: 1515   документов: 44   редакций: 5786
Ддя SATtva:
Серьёзный баг: прочитайте оригинал предыдущего сообщения по отправленной подписи. Почему движок не обработал моё сообщение и просто съел его?!
— spinore (12/06/2007 05:19)   профиль/связь   <#>
комментариев: 1515   документов: 44   редакций: 5786
Дубль предпредыдущего сообщения "spinore (12/06/2007 04:48, исправлен 12/06/2007 05:12)" в связи с его съеданием движком (при наличии подписи):

2 SATtva:
<[ SATtva:
— spinore (12/06/2007 05:22)   профиль/связь   <#>
комментариев: 1515   документов: 44   редакций: 5786
Хм, дело не в движке. Я не прав :-(
Кажется, понял. баг на уровне драйвера мыши или на уровне иксов с мой стороны сообщение бъётся при копировании мышкой с терминала. Не могу скопировать не пользуясь aterm, ни Eterm ни xterm пока.
— spinore (12/06/2007 05:24)   профиль/связь   <#>
комментариев: 1515   документов: 44   редакций: 5786
Попытка всё же репостнуть предыдущее:

2 SATtva:
<[ SATtva:
— spinore (12/06/2007 05:26)   профиль/связь   <#>
комментариев: 1515   документов: 44   редакций: 5786
2 SATtva:

]>
— spinore (12/06/2007 05:29)   профиль/связь   <#>
комментариев: 1515   документов: 44   редакций: 5786
Фиксируем: у движка есть проблемы. Убираю всё разметку:
(настоятельно прошу изучить оригиналы предыдущих сообщений – среди них всё-таки есть нормальные и движок их тем не менее их СЪЕЛ..)

РЕПОСТ:

Для SATtva:

1. Цитата: 3) если текст подписан незарегистрированным гостем, то его
автором действительно мог быть владелец ключа, который просто не пожелал
авторизоваться на сайте
– не понял смысла. Перефразируйте или разъясните.
2. Косметика: в предыдущем сообщении в opera'е в тексте "верная ЭЦП от 12/06/2007
01:45; отображаемый текст отличается от подписанного" на второй строке оказывается
только одно последнее слово ("подписанного"), не смотря на тот факт, что вполне
достаточно места для размещения всего текста в одну строку. Фиксим? Или это причуда
оперы?
3. Я в нескольких местах уже исправил, но это оказалось распространено повсеместно в
ваших документах: слово "подписание" если и есть в русском языке, то звучит несколько
коряво. Если вы не делаете акцент на то, что "действие длилось втечение какого-то
промежутка времени (презент индефинит)" то лучше пишите "подпись". Возражения есть?
4. Цитата: 4) один пользователь мог скопировать подписанный текст другого и
повторно отправить на сайт, пытаясь выдать его за свой
А почему сразу так жёстко? Может быть он просто хотел показать что "такой-то
пользователь действительно утверждал то-то и то-то?
5. Кажется, я понял в чём была проблема при многократном редактировании сообщения в
браузерах, где активно используется кэш (типа elinks). Сложность здесь вот в чём:
очередно раз редактируя сообщение, когда я жму "сохранить" я должен перейти по урлу,
который уже был вызываем ранее на предыдущих редакция документа. В итоге браузер
просто загружает страницу с кэша и ничего никуда не отправляет, обновление страницы
принудительно (ctrl-r) тоже ничего не даёт. В итоге, не меняя браузер или не отключая
кэш вообще сделать ничего нельзя никак. Выходом из ситуации могло бы послужить
задание разных урлов для разных редакций одного и того же документа. А вы что думаете
на этот счёт? В принципе, я уже давно привык к исключительно принудительному
обновлению всех страниц браузера, что практикуется во всех браузерах типа links
(заметно ускоряется браузинг – когда заведомо известно что предыдущая страница скорей
всего ещё не изменилась либо это не важно на данный момент ctrl-r не жму и она быстра
грузится из кэша. С учётом тормозов движка сайта pgpru особенно актуально :-)) однако
в данном случае вылечить браузер не могу.
— spinore (12/06/2007 05:34, исправлен 12/06/2007 05:35)   профиль/связь   <#>
комментариев: 1515   документов: 44   редакций: 5786
P. S.: когда публиковал предпредыдущие сообщения галка с "OpenPGP-подписанное сообщение в кодировке" убрана не была, хотя подписи не было, но думаю дело не в этом, и этот случай предусмотрен уже на сайте (если подпись не детектится, то считать что её нет).
— spinore (12/06/2007 05:37)   профиль/связь   <#>
комментариев: 1515   документов: 44   редакций: 5786
И ещё одно замечание: в предыдущем сообщении при просмотре в опере "профиль <#>" на одной строке идут, а "правка удалить" – уже на другой в то время как места на предыдущей строке предостаточно. Нужно пофиксить.
— spinore (12/06/2007 05:41)   профиль/связь   <#>
комментариев: 1515   документов: 44   редакций: 5786
P. S.: предыдущее сообщение относится только к случаю когда слов "исправлен 12/06/2007 05:35" нету (а когда есть, действительно длинно и надо переносить, только тогда переносить всё сразу: на одной строкеоставлять только "spinore (12/06/2007 05:34, исправлен 12/06/2007 05:35" а на другой – только "профиль <#> правка удалить" однородности ради (ибо всё равно 2 строки используются в данном случае).
— SATtva (12/06/2007 19:18, исправлен 12/06/2007 19:21)   профиль/связь   <#>
комментариев: 11514   документов: 1035   редакций: 4046
Серьёзный баг: прочитайте оригинал предыдущего сообщения по отправленной подписи. Почему движок не обработал моё сообщение и просто съел его?!

Это парсер BBCode (конкретно проблему вызвали цитаты, вложенные в список). Если перевести всю разметку BBCode из оригинального сообщения в вики-разметку, сообщение отображается и сохраняется корректно. Будьте добры, добавьте это в раздел проблем на странице разработки движка (только не постите в комментарии, иначе я об этом забуду).

Касаемо содержания и Ваших вопросов-уточнений-замечаний:

  1. Ну, вот вы решили не логиниться на сайт, а оставить подписанное (Вашим ключом!) сообщение из-под гостя. Может формулировка действительно не очень, буду раз, если предложите лучше (кстати, если будете править эту страницу, тоже подписывайте её).
  2. Это именно косметика (и размер окна браузера). Исправлять не буду, ибо исправлять по сути нечего.
  3. Подписание — определение акта (действия), подпись — может быть как акт, так и предмет. В общем, разницы большой нет (хотя "подпись" — действительно благозвучней), так что не стану возражать, если исправите.
  4. Тогда ему следовало взять сообщение и переподписать самому. А иначе это как-то двусмысленно. Двусмысленность может быть устранена в контексте. Допустим, пользователь А пишет сообщение: "Сейчас я процитирую комментарий пользователя Б", и в следующем сообщении приводит оригинал рассматриваемого комментария. Думаю, все будет ясно, что попытки имперсонации здесь нет.
  5. Для редакций страниц это сделать можно (как было сделано в оригинальном движке WackoWiki, а затем безжалостно уничтожено мной), но для комментариев в их нынешнем виде — крайне проблематично. Можете повесить в список проблем на странице разработки движка: будущие поколения исправят.

И ещё одно замечание: в предыдущем сообщении при просмотре в опере "профиль <#>" на одной строке идут, а "правка удалить" – уже на другой в то время как места на предыдущей строке предостаточно. Нужно пофиксить.

Согласен, это некрасиво, лучше переносить все ссылки целиком. Исправлю.
— spinore (14/06/2007 08:11)   профиль/связь   <#>
комментариев: 1515   документов: 44   редакций: 5786
SATtva:
Это парсер BBCode (конкретно проблему вызвали цитаты, вложенные в список). Если перевести всю разметку BBCode из оригинального сообщения в вики-разметку, сообщение отображается и сохраняется корректно. Будьте добры, добавьте это в раздел проблем на странице разработки движка (только не постите в комментарии, иначе я об этом забуду).

сделано

1. Отредактировал страницу, переписав по-своему.
2. Вот пример того как это смотрится. Видите? Довольно некрасиво. Это действительно так сложно – переместить слово "подписанного" на предыдущую строку (поскольку я не разработчик всех этих вещей, я не знаю уровень технических сложностей чтоб исправить)?
3. Я понял, что возражать не будете :-) Только написал я это как раз потому что "устал исправлять" (извиняюсь за выражение) а потому решил указать вам на это (на будущее).
5. Повесил.
— spinore (14/06/2007 08:55, исправлен 14/06/2007 09:12)   профиль/связь   <#>
комментариев: 1515   документов: 44   редакций: 5786
Вдогонку:

  • При редакции страницы вики всегда идёт зелёная подпись вне зависимости от того чьим ключом было подписано. Это так было задумано? Может быть зелень оставить, но писать владельца ключа подписи? Имхо это более идеологически верно: зелень – потому что это _нормальное_ явление когда все редактируют страницу, совместно её разрабатывая, а вывод владельца ключа – чтобы все видели кто последний отредактировал страницу. Ясно, что владелец ключа, коим она подписана может не совпадать с именем пользователя, создавшим страницу впервые (а именно это имя сейчас отображается в поле "владелец").)
  • SATtva:
Соответственно, при просмотре конкретной вашей редакции читатель обнаружит электронную подпись, но текущая (последняя, активная) редакция будет отображаться как неподписанная (что, в сущности, и есть)

Так это не правда, последняя редакция отображается подписанной, но с пометкой о последующем редактировании. Может, вы хотели сказать то же самое, но не очень удачно получилось (?).
  • SATtva:
ак вот, подобный дополнительный неподписанный текст будет сохранен в первом экземпляре, но на страницы сайта никогда не попадет, поскольку не покрыт подписью.

Есть способ слать друг другу сообщения тайным каналом передачи :-)) (шутка).
  • По поводу моей атаки: вот что подумал: апелляция к странице со списком модераторов и админов будет являться хорошим аргументом, если она будет подписана ключом SATtva'ы, фингерпринт которого (!!!) будет высылаться в первом письме при удачной загрузке ключа пользователя в профиль пользователя, причём с принудительной(!) шифровкой загруженным ключом пользователя. Таким образом, мдея та же, что я изложил в теме про фак по SSL: все критические параметры доступа должны выдаваться вместе с учётной записью. Конечно, эта схема тоже неидеальна, но, имхо, лучше защищена.
  • Сохраняются ли предыдущии редакции документов wiki? А то много доверяем членам группы OpenPGP... Аналогичный вопрос, кстати, про резервное копирование содержимого сайте ежесуточно на случай его взлома/удаления_органами.
На страницу: 1, 2, 3, 4, 5 След.
Ваша оценка документа [показать результаты]
-3-2-1 0+1+2+3