07.06 // Проект // Завершена работа над подсистемой цифровой подписи комментариев и страниц
Это оказалось проще, чем отделаться от навязчивых предложений spinore'а. :-) Что представляет собой это новшество? Если вы хотите, чтобы все могли убедиться в вашем авторстве того или иного комментария или редакции документа, вы, используя стандартные средства PGP/GnuPG подписываете текст и публикуете его, отметив в форме ввода специальную опцию "Обработать в сообщении цифровую подпись OpenPGP" (включать и выключать её можно на тот случай, если нужно разместить в тексте в качестве примера какую-то проблемную ЭЦП, которую не следует сличать).
В этом случае документ будет сохранён в базе данных в двух экземплярах: один — обычный чистый текст, как этот, а другой — со всеми заголовками OpenPGP и исходной цифровой подписью. Этот второй экземпляр не может быть отредактирован (может быть только полностью удалён), и остаётся доступен для просмотра пользователями сайта, если они решат лично убедиться в правильности ЭЦП. Сам же подписанный комментарий или текст страницы особо выделяется специальным маркером, отображающим состояние ЭЦП и некоторую дополнительную информацию. В частности, он выдаст предупреждение, если текст окажется подписан не тем ключом, который размещён в профиле пользователя, либо если подписанный текст отличается от отображаемого (это особенно вероятно для комментариев: если модератор отредактирует его, то обычный "чистый" экземпляр сообщения станет отличаться от "эталонного"; в таком случае все заинтересованные смогут проверить этот оригинал).
Следует отметить, что эта возможность доступна и незарегистрированным пользователям сайта, однако, поскольку база данных сайта не содержит их открытых ключей, подобные подписи будут обозначаться как "неопределённые" (сверить ЭЦП без открытого ключа, естественно, невозможно). Тем не менее, маркер отображает ID этих ключей, что упрощает отслеживание авторства (заинтересованные, опять же, могут сами найти нужный ключ и сверить подпись вручную).
Пока подсистема будет функционировать в тестовом режиме, поскольку для меня остаётся открытой проблема обработки сообщений в "трудных" кодировках. Тестирование проводится на этой странице. Заметьте, что в настоящее время опция "Обработать в сообщении цифровую подпись OpenPGP" будет доступна только там. Пожалуйста, примите участие в тестировании: хочется отловить все возможные ошибки, прежде чем открывать данную функциональность на всём сайте. Также высказывайте свои замечания и мнения относительно интерфейса, удобства и понятности (а также внешнего вида) маркеров.
Источник: http://www.pgpru.com
комментариев: 1515 документов: 44 редакций: 5786
Да... телепатия, квантовые каналы, невидимые линии связи... (а что было бы если
каждый мог подписать свою мысль? :-))
Вы имеете в виду как насчёт подделки сообщений в xmpp когда включены подписи
сообщений? Интересно...
Краткость и простота – залог безопасности и надёжности. Усложнение, которое вы
предлагаете, оправданно? Надо думать..
комментариев: 11558 документов: 1036 редакций: 4118
Сейчас — никак, подобные сопоставления у нас не используются (просто оба смогут ключ удалить, если имеют доступ к закрытой части).
А там подпись ещё порядковый номер сообщения в сессии покрывает, по-моему. Делать что-либо подобное на базе только полей в POST-запросах меня смущает. Это будет слишком массивная и неповоротливая схема. Вот если бы сайт имел собственный веб-клиент (браузер) с доступом к закрытым ключам пользователя — это другое дело! :-)
комментариев: 11558 документов: 1036 редакций: 4118
Есть две самые простые альтернативы (обе сделать на раз-два). Во-первых, можно сделать, чтобы индикатор для гостевых подписей вёл себя так же, как для подписей зарегистрированных пользователей (т.е. просто исправить баг с "ненайденным ключом"). Грубо говоря, если гость подписал сообщение ключом зарегистрированного пользователя (или скопировал чужое подписанное сообщение), то просто говорить, что ЭЦП верная и выводить дату подписи.
Вот тут-то мы и имеем защиту от атак вставкой, дата ведь выводится неспроста. Если обратить внимание на дату опубликования сообщения и дату его подписи, то для легитимных сообщений расхождение между ними (этими датами) составит от силы пару минут — столько обычно требуется пользователю, чтобы, подписав текст, вставить его в форму и запостить на сайт. А вот скопированные сообщения могут иметь расхождение в часы и даже дни. (Может быть просто как-то маркировать сообщения с большим лагом между подписанием и публикацией? А может и в этом потребности нет?)
Вторая альтернатива — это следовать простой логике программы. Если гость добавил сообщение, подписанное ключом зарегистрированного пользователя, указать, что ЭЦП верна, но "ключ подписи не соответствует ключу пользователя"... Блин, логичнее — "пользователь подписи не соответствует пользователю ключа"... Знаете, мне больше нравится первая альтернатива. :-)
комментариев: 1515 документов: 44 редакций: 5786
Гость, когда вставил чужую подпись, допустим mellon'овскую:
ЭЦП верна, владелец ключа: mellon
Гость, когда вставил свою подпись, а его ключ сайт не знает:
владелец ЭЦП неизвестен.
Варить кашу с временным лагом, который есть непрерывная величина, варить не надо!
Ибо всегда его можно будет обойти, и вообще лаг – не та величина за которую стоит цепляться
в таких вопросах.
Ваше мнение?
комментариев: 1515 документов: 44 редакций: 5786
время пишется в подписи... местное, и у каждого оно своё :-))) думаю, все поняли.
комментариев: 11558 документов: 1036 редакций: 4118
верная ЭЦП | текст подписан 10/06/2007 22:21, владелец ключ Name
Если ключ гостя не найден (что предполагалось основным вариантом):
неопределенная ЭЦП | ключ подписи 0xKEYID не найден
Так, если у кого-то возникнет желание, он сможет найти ключ и сверить подпись вручную.
У кого ещё какие соображения? Всё же, на мой взгляд, лаг использовать можно. Не стоит забывать, что взломщик не может изменить его напрямую, поскольку метка времени в подписи покрывается ЭЦП.
комментариев: 1515 документов: 44 редакций: 5786
информацию о времени и дате подписи писатть тоже надо, хоть я и не упомянул об этом в примере.
комментариев: 1515 документов: 44 редакций: 5786
лучше так, думаю, всё же:
неопределенная ЭЦП | текст подписан 10/06/2007 22:21 | ключ подписи 0xKEYID не найден
А что касается лага: допустим, я подписал сообщение, и завошкался... опубликовал его через пол дня. на меня сразу пойдёт подозрение, хотя вполне необоснованно. Имхо, той диагностики что предложил SATtva в последнем посте с учётом правки в этом вполне достаточно. Подпись – вещь надёжная, её надо скрещивать с надёжными параметрами. Лаг не из этой области, серьёзно он ничего детектить не даст – потому просто оставлять дату подписи чтоб все видели и кто хочит, пусть делает для себя какие-либо догадки – лаг итак всегда виден будет (как в этом посте я вышел написал, например).
комментариев: 1515 документов: 44 редакций: 5786
то есть имхо так лучше:
неопределенная ЭЦП | текст подписан 10/06/2007 22:21 | владелец ключа подписи 0xKEYID не опознан сайтом
может слишком длинное это... но поди мало таких подписей будет на сайте, как мне кажется. Но зато точнее отражает суть
комментариев: 11558 документов: 1036 редакций: 4118
А есть смысл указывать метку времени, если ключ всё равно не найден, подпись не сверена и неизвестно, правильная она или нет? Не думаю. Объём диагностического текста, опять же.
В общем, завтра днём перепишу метод валидации результатов, "чтоб всё кондово" и с учётом предложений. А пока доброй ночи.
комментариев: 1515 документов: 44 редакций: 5786
неопределенная ЭЦП | текст подписан 10/06/2007 22:21 | ключ подписи 0xKEYID не зарегистрирован на сайте
это ещё точнее
комментариев: 1515 документов: 44 редакций: 5786
Вот ИТОГ с учётом всех пожеланий:
| Если для подписи сообщения кем-либо (гостём или пользователем) использован
| незарегистрированный на сайте ключ:
Жёлтым цветом пишем:
неопределённая ЭЦП от 10/06/2007 22:21 не зарегистрированным на сайте ключом 0xKEYID
| Если для подписи сообщения использован зарегистрированный
| на сайте ключ:
1.
— верно подписанное зарегистрированным ключом сообщение отправлено: пользователем --
a) Сообщение подписано владельцем ключа, то есть тем, у кого этот ключ числится в профиле.
Зелёным цветом:
верная ЭЦП от 10/06/2007 22:21
b) Сообщение подписано не владельцем соответствующего ключа согласно информации в профиле.
Жёлтым цветом:
верная ЭЦП от 10/06/2007 22:21 ключом пользователя nickname
2.
— верно подписанное зарегистрированным ключом сообщение отправлено: гостём --
Жёлтым цветом:
верная ЭЦП от 10/06/2007 22:21 ключом пользователя nickname.
3.
— неверно подписанное зарегистрированным ключом сообщение, не важно кем отправленное --
Вне зависимости от числа редакций оригинального поста пишем
Красным цветом:
неверная ЭЦП | после подписи оригинальный текст был изменён
Дополнение:
— верно подписанное зарегистрированным ключом сообщение впоследствии было кем-либо отредактировано --
Тогда:
В нагрузку к уже существующей диагностике подписи пишем
Жёлтым цветом:
после подписи оригинальный текст был отредактирован
Комментарии к тексту:
1. Пользователь – это авторизованный на данный момент на сайте юзер.
Гость – это неавторизованный на данный момент на сайте юзер.
2. Психология цвета:
- Зелёный – используется исключительно когда подпись верна, сделана
авторизованным на данный момент на сайте юзером, и выполнена посредством ключа,загруженного в его профиль.
P. S.: Дело не в конкретных цветах а в делении всех подписей на три категории:
- верные, использованные предусмотренным на сайте способом (через загрузку ключа в
профиль)P. P. S.: формулировки диагностики искались с учётом оптимума между благозвучностью с
точки зрения языка, точностью смысла и краткостью. Возможность для
пользователей подписывать сообщения ключами, отличными от указанных в профиле,
реализована ради отсутствия дискредитации их по сравнению с гостями, а также в связи
с тем, что некоторые юзеры используют одновременно несколько ключей взависимости от
цели.
ну что, пинайте :-)
комментариев: 61 документов: 47 редакций: 68
Шучу :D
И так что можно предложить.
По поводу авторизации подписью .
Можно предложить авторизваться подписыванием случайной последовательности.
Можно также попросить гостей желающих авторизоваться по подписи, начать свой пост с предложенной случайной последовательности, в итоге после верификации подписи послание должно выглядить примерно так:
Дальше.
Не стоит забывать что ЭЦП это и есть подпись, самая натуральная.
То есть, если гость подписывается ключом не принадлежащим какому либо пользователю, и не находящимся в базе форума, то имя ключа присваевается полю "Ваше имя".
комментариев: 61 документов: 47 редакций: 68
ЗЫ
Конечно же, если поле было пустым
комментариев: 1515 документов: 44 редакций: 5786
И что? Подпись имхо в принципе не может служить самодостаточным способом авторизации если не наворчаивать.
Если один авторизовался, через 30 секунд другой продублирует его пост и будет считаться что 2 поста этих отправил один и тот же человек что не верно. Идея держать базу хюшей всех документов мне что-то не нравится и не вижу необходимости.
Плохо. Если собрать базу подписанных сообщений какого-либо пользователя с интернета а потом их вставлять в соответствующем контексте дискусси то можно копрометировать владельца ключа.
Имхо подпись есть всего лишь подпись и ничего более. Я в последнем посте из этого исходил.