?

Log in

о сертификации ЖЖ-страниц - Поклонник деепричастий [entries|archive|friends|userinfo]
Anatoly Vorobey

[ website | Website ]
[ userinfo | livejournal userinfo ]
[ archive | journal archive ]

Links
[Links:| English-language weblog ]

о сертификации ЖЖ-страниц [дек. 19, 2003|08:27 am]
Anatoly Vorobey
В связи с некоторыми недавними скандалами [предупреждение: всё, что следует далее, никакого отношения ни к какому конкретному скандалу не имеет, и никакой позиции ни в одном из них я для себя не заявляю. Просто эта тема подтолкнула меня на размышления, никак с ней не связанные. Прошу о "скандальных" поводах ничего мне не писать и в них меня не втягивать. Спасибо] подумал немного о возможности сертификации страниц ЖЖ. В принципе, я могу сейчас взять страницу ЖЖ, например, показывающую какую-то запись с комментами, сохранить её в файле, и как угодно отредактировать перед тем, как выставлю её в другом месте. Изменить текст, имена юзеров, что угодно. Могу, скажем, изменить текст записи на что-то предосудительное, и сказать, "что так и было", а сейчас в той же записи того же юзера (если она вообще открыта) другое, потому что он быстренько отредактировал, но я успех сохранить первоначальный вариант. И так далее — ясно, что возможностей куча. Кто-то в это поверит, кто-то не очень (зависит от многих факторов: от степени доверчивости зрителя, от его оценки моей репутации и моей готовности к манипуляциям, от моих технических способностях, если подделывать нужно не просто текст, а какой-нибудь HTML, итд. итп.).

Можно было бы в принципе убрать фактор неопределённости. Скажем, в каждой HTML-странице, которую он выдаёт, LJ включает в качестве HTML-комментария значение криптографического хэша (скажем, MD5) от содержимого страницы + секретный ключ, хранящийся внутри LiveJournal.com . Можно какие-то ещё данные в вычисление этого хэша включить (например, имя того юзера, который смотрит эту страницу, если он logged in; или ещё неплохая идея - текущее серверное время, которое тут же рядом со значением хэша добавляется в HTML-комментарий). Далее, добавляется сервис "проверьте аутентичность данной страницы": посылаем LJ обратно страницу (напр. в таком виде, в какоме её кто-то выложил в другом месте) и он вычисляет заново значение хэша и сравнивает. Если кто-то что-то менял, проверка это обнаружит. Конечно, злоумышленник может вычистить хэш из HTML-кода страницы, но это само по себе будет свидетельством того, что файл редактировали, и, следовательно, информации в нём нельзя доверять.

(почему MD5, а не подписывать с помощью PGP, скажем? Потому, что MD5 - легко, быстро и реально сделать для всех страниц просто в коде их отдачи. Ведь LJ — полностью динамический сайт, всё, кроме картинок, строится в Перле).

Вряд ли на это будет большой спрос, впрочем.

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

Конечно, надо не забыть упомянуть, что защищённость самого сайта livejournal.com и его баз данных остаётся слабым звеном во всех этих схемах. Это слабое звено в свою очередь можно укреплять — ротацией секретных ключей, использованием для их хранения другого уровня шифровки, или не находящиеся в Интернете компьютеры, итд. итп. — о таких вещах немало статей и диссертаций написано, куда более интересных и сложных, чем это примитивное перечисление, призванное всего лишь передать общую идею.
СсылкаОтветить

Comments:
[User Picture]From: object
2003-12-18 10:50 pm
Безусловно, первоначальные правки записи и редактирование после полученных комментариев - разные вещи. Что имеет смысл указывать. Вероятно, хеширование MD5 - слишком строгая мера. Достаточно, чтобы запись указывала, что изменялась ПОСЛЕ получения комментариев.
(Ответить) (Thread)
[User Picture]From: qub
2003-12-18 11:05 pm

вроде бродила вокруг

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

что-то даже строилось вроде. Гугль нам поможет, наверно.

это не вполне заменяет твое предложение, поскольку часто уж поезд ушел к тому моменту как выясняется что надо было визировать контент; но параллельно ему.
(Ответить) (Thread)
[User Picture]From: avva
2003-12-19 05:54 am

Re: вроде бродила вокруг

Да, я тоже смутно помню, что было такое, оттуда и пошли мысли плясать в сторону похожих мыслей внутри ЖЖ. Но всё это - не более чем Gedankenexperiment.
(Ответить) (Parent) (Thread)
[User Picture]From: alexmoskalyuk
2003-12-18 11:19 pm

Вопрос по теме

А кстати, как у вас сo соответствием Sarbanes Oxley Act?
LJ вроде как американский бизнес?
Или записи пользователей в каждой редакции не относятся к тому, что предписывает архивировать SOA?
(Ответить) (Thread)
[User Picture]From: avva
2003-12-19 05:53 am

Re: Вопрос по теме

Я даже не знаю, что это такое. Но посмотрев сейчас в Гугле, вижу, что это закон, касающийся, если не ошибаюсь, только public companies. LiveJournal - компания в частном владении, она вообще не обязана публиковать никакой отчётности, и архивировать тоже, думаю (за исключением тех финансовых отчётностей, которые должна представлять в налоговые учреждения любая компания).
(Ответить) (Parent) (Thread)
[User Picture]From: ullr
2003-12-18 11:29 pm
Интересно, я сегодня думал в похожем направлении, но моя схема включала асимметричный алгоритм и пару ключей (т.е. в принципе что-то типа ПГП). Если подпись будет делать программа-клиент (которая и будет хранить этот частный ключ), то нагрузка на сервер возрастать не будет. А публичный ключ можно публиковать в юзер-инфо.
В такой распределенной системе хранение и ротация ключей будет делом каждого конкретного пользователя и будет определяться в соответсвии с его нуждами (ведь понятно, что далеко не всем это вообще нужно). Тогда можно было бы создавать и шифрованные записи, которые нельзя прочитать вообще никому, кроме владельца (хотя, возможно, это и не нужно).
(Ответить) (Thread)
[User Picture]From: scolar
2003-12-18 11:34 pm
Я бы разделил два вопроса, на которые мы, возможно, хотим получить ответ:
1. Является ли страница подлинной в том смысле, что подписана автором.
2. Вносил ли автор изменения в текст после определенного момента.

Для ответа на первый вопрос не требуется никакого централизованного authority - достаточно PGP-подписи.

Выяснение же ответа на второй вопрос, как мне кажется, этически неочевидно - я бы, по крайней мере, возражал против того, чтобы мои записи могли бы быть подвергнуты такому анализу - я не в суде под присягой.
(Ответить) (Thread)
[User Picture]From: avva
2003-12-19 05:49 am
Дело тут в том, что иногда именно Вы заинтересованы в том, чтобы доказать правильный ответ на второй вопрос. Например, представьте себе, что в этой записи содержится описание изобретения, и Вам нужно доказать, что Вы её написали именно два года назад, а не отредактировали совсем недавно, после того, как Ваши конкуретны опубликовали те же подробности. Это всего лишь один пример из множества возможных.

Я согласен в том, что совершенно неочевидным является право других требовать узнать, редактировали ли ВЫ вашыи записи или нет. Интересный для меня вопрос заключается в том, сможете ли Вы доказать, в случае надобности, что этого не делали.
(Ответить) (Parent) (Thread)
[User Picture]From: scolar
2003-12-19 06:18 am
Сейчас прибегут либертарианцы и от меня мокрого места не оставят, но всё-таки есть же патентное право. Но, конечно, это только один пример.

Что же до второй задачи, то, похоже, без третейского судьи не обойтись, но нужно построить систему с нулевым разглашением, дабы третейский судья мог удостоверить истинность авторского утверждения "запись такая-то сделана тогда-то", но не мог бы этого сделать в случае, если утверждение сделано не автором.
(Ответить) (Parent) (Thread)
[User Picture]From: bougakov
2003-12-18 11:35 pm
"посылаем LJ обратно страницу (напр. в таком виде, в какоме её кто-то выложил в другом месте) и он вычисляет заново значение хэша и сравнивает"
Avva, всё бы хорошо, только многие браузеры перелопачивают HTML при сохранении на диск, и MD5 сохранённой копии и оригинала будут различаться, даже если намеренно копию не трогали.
(Ответить) (Thread)
[User Picture]From: yakovis
2003-12-19 12:12 am
Это смотря где написать. Комментарии что ли кто-то лопатит?
(Ответить) (Parent) (Thread)
[User Picture]From: braindancer
2003-12-19 12:50 am
Дело не в том, что хэш вырежется. Просто код страницы изменится, а avva думал сделать шифр зависимым от него...
(Ответить) (Parent) (Thread)
[User Picture]From: yakovis
2003-12-19 12:52 am
А, да, вы правы, торможу.
(Ответить) (Parent) (Thread)
[User Picture]From: alexcohn
2003-12-19 01:23 am
Как раз проверяющий скрипт на сервере мог бы вырезать только видимый голый текст, который как раз и представляет интерес с точки зрения фальсификации - ну, перекрасили рамочку или расширили табличку - смысл-то не изменится; другое дело - что цитату вряд ли представляют в виде полной сохраненной страницы со всеми элементами оформления.

Вторая проблема - внешние ссылки, в первую очередь картинки. Проще всего показать мужской половой орган, а потом подставить на место той картинки невинную фотографию цветочков.
(Ответить) (Parent) (Thread)
[User Picture]From: braindancer
2003-12-19 01:30 am
1) Логично.

2) Ну так в этом случае никакая сертификация не сработает, кроме разве что авто-снятия скриншота :) Да и то при этом куча оговорок...
(Ответить) (Parent) (Thread)
[User Picture]From: awind
2003-12-19 06:45 am
перекрасили цвет текста с фона на видимый. ага.
(Ответить) (Parent) (Thread)
[User Picture]From: avva
2003-12-19 05:46 am
Да, об этом я не подумал. Ну, это зависит от браузера, способа сохранения на диске, итп.
(Ответить) (Parent) (Thread)
[User Picture]From: bougakov
2003-12-19 07:08 am
IE так делает, IE у 90-95% пользователей...
(Ответить) (Parent) (Thread)
[User Picture]From: evr
2003-12-19 12:56 am
"защищённость самого сайта livejournal.com и его баз данных остаётся слабым звеном во всех этих схемах"

Подумалось вот, что от ddos-атаки никакой серевер не защищен, но почему же не "роняют" беспрестанно всё подряд, все сколько-нибудь известные, значимые, популярные сайты? Только лишь оттого, что это не представляет особого интереса?
(Ответить) (Thread)
[User Picture]From: avva
2003-12-19 05:45 am
Нет - потому что эти сайты хорошо умеют защищаться. ddos-атаки их не валят, а всего лишь замедляют несколько. Конечно, бывает и по-другому, зависит от мастерства атакующего и того, сколько подчинённых компьютеров он насылает на серверы.

На практике dos и ddos-атаки против больших популярных сайтов случаются значительно чаще, чем о них становится известно публике; администраторы стремяется в первую очередь отразить их или защититься от них, не признавая вообще их существование (т.к. атакующие стремятся именно к известности, публичности, "славе", и если этого им не давать, им надоедает намного быстрее).
(Ответить) (Parent) (Thread)
[User Picture]From: evr
2003-12-19 05:57 am
Ну да, а те кто рассказывает об этом в теленовостях на всю планету, только подливают масла в огонь. Интересно, почему эта информация просачивается.
(Ответить) (Parent) (Thread)
[User Picture]From: kogan
2003-12-19 01:23 am

Надеюсь, этого не случится. Ибо будет хуже.

(Ответить) (Thread)
[User Picture]From: avva
2003-12-19 05:40 am

Re: Надеюсь, этого не случится. Ибо будет хуже.

Есть резон в Ваших словах. Можно сказать, что если A написал что-то в своём дневнике, существование чего B хочет сертифицировать, то помогать B "поймать за руку" A - нарушение баланса прав-ответственности, ущемляющее A, и LiveJournal не должен этим заниматься. Я правильно понял Вашу мысль?

Это можно было бы решить так: у A в настройках есть галочка, если её поставить, то B не сможет сертифицировать записи A.

Не забывайте ещё и тот факт, что сертификация не всегда нужна B для того, чтобы поймать А за руку. Иногда она нужна самому A, чтобы доказать кому-нибудь, что какой-то текст он действительно написал в прошлом, а не отредактировал совсем недавно. Можно представить себе немало случаев, в которых A такая сертификация будет полезна или даже необходима.

Наконец, добавлю на всякий случай: никаких планов вводить такую сертификацию в ЖЖ в обозримом будущем нет. Возможно, такие планы появятся впоследствии, возможно, нет. Я просто рассуждаю вслух на интересную для меня тему.
(Ответить) (Parent) (Thread)
From: _red_line_
2003-12-20 02:34 am

Re: Надеюсь, этого не случится. Ибо будет хуже.

на счёт опубликования чего-то, подобного изобретениям, давно давно найден простейший аналоговый способ
инструкция:
товарищ А отсылает самому себе по нормальной почтовой службе рф, или где там проживает, заказное письмо с подробным описанием изобретения, сценария или чего ему вздумается
информационный накопитель не важен,- главное запечатать
на письме по закону устанавливается дата отправления и в реестр почтовой службы заносится соответствующая запись
стоит оно копейки, так что таких писем товарищ А себе может прислать хоть 20 штук из разных отделений
письмо лежит себе до надобности, и на разбирательстве любого уровня, вскрыв, суд примет его как неопровержимое доказательство, чему товарищ А будет безмерно рад )))

не думаю, что вообще имеет смысл распространять подобного рода информацию в сети или конкретно в lj - здесь даже фотографии приходится подписывать )
(Ответить) (Parent) (Thread)
[User Picture]From: zurafa
2003-12-19 02:08 am

сохранение страниц

есть/намечается ли возможность предотвращать сюжеты "не пойман -- не вор" вроде этого: http://www.livejournal.com/community/israeli/288296.html ?
(Ответить) (Thread)
[User Picture]From: avva
2003-12-19 05:34 am

Re: сохранение страниц

Пока не намечается. Такое происходит не слишком часто. Если будет происходить часто, возможно, будет иметь смысл ввести режим записи "заморозить, не показывать в ленте, но не давать автору удалить" для смотрителей коммьюнити. Но пока этого в планах нет.
(Ответить) (Parent) (Thread)
[User Picture]From: elcour
2003-12-19 02:27 am
Объясни, пожалуйста: а хэширование поможет, если автор редактировал пост после отправки, исправляя опечатки или стилистику?
Я, например, редактирую большую часть своих уже отправленных постов. Текущее серверное время тогда вообще не много даст, так?
(Ответить) (Thread)
[User Picture]From: avva
2003-12-19 05:32 am
Ну, ты мог бы, по идее, сертифицировать любую версию своей записи (до или после редактирования) на данное конкретное время. Если бы эта идея была воплощена.
(Ответить) (Parent) (Thread)
[User Picture]From: elcour
2003-12-19 05:46 am
Ну, это как-то не очень интересно.
Если мне уже тогда придёт в голову, что её стоит сертифицировать, я просто скопирую запись и помещу комментом к посту.
Я-то думал, весь цимес в возможном подтверждении постфактум...
(Ответить) (Parent) (Thread)
[User Picture]From: rydel23
2003-12-19 02:38 am
Простейший вариант (чтобы не было излищней complexity) - ввести два состояния: edited & original. Соотвественно, показывать это где-то в углу маленькими буквами. Может просто галочку какую-то: вот этот пост редактировали.
(Ответить) (Thread)
From: ex_sighup150
2003-12-19 04:25 am
Есть некая безумная идея :)
При регистрации человека на сайте ему выдается клиентский SSL сертификат, и, ходя по (потенциальной :) https-версии livejournal, человек фактически подписывает все свои действия. Каждый его комментарий можно хранить в базе, подписанный этим самым клиентским сертификатом. Таким образом, если кто-то захочет затем их подделать, выложив изменную страницу в другом месте, можно всегда доказать подделку, сравнив с подписанным содержимым базы.
С записями немножно труднее -- их тоже можно хранить подписанными, конечно, но кто знает, что там было раньше.. Как вариант -- можно хранить первую запись, плюс набор подписанных diff'ов к ней вместе с их timestamps.
С таким подходом TLS можно встраивать и в клиенты, кстати.

(Ответить) (Thread)
[User Picture]From: avva
2003-12-19 05:33 am
Идея несколько безумная, да ;)
(Ответить) (Parent) (Thread)
[User Picture]From: altyn
2003-12-22 06:18 am
Перевести ЖЖ на SSL - нормальная идея, по-моему. Действительно, самый надежный способ аутентификации клиента - клиентский сертификат. Клиенту необходимо при регистрации этот сертификат получить и возможно добавить в trusted root сертификат certificate authority ЖЖ (если он не будет подписан каким-нибудь VeriSign).
Аутентичность контента ЖЖ обеспечивает серверный сертификат. Устранить возможность делать фэйковые страницы, как это делают для воровства номеров кредиток, в принципе не возможно. Впрочем, так же невозможно устранить человеческую глупость и халатность.
(Ответить) (Parent) (Thread)
From: ex_sighup150
2003-12-22 07:26 am
Ну как же невозможно проверить? Вполне. Если сертификат подписан trusted root, то все ясно. Если нет, то никто не мешает позвонить в офис Livejournal (чтоб я так помнил, как называется официально эта контора :), и проверить fingerprint.
(Ответить) (Parent) (Thread)
[User Picture]From: altyn
2003-12-22 07:59 am
Да, программа или достаточно внимательный и/или грамотный юзер все может проверить. Однако не всякий юзер смотрит на замочек в правом нижнем углу. Допустим даже что фэйк тоже на SSL - ну выдаст эксплорер security alert (а может и не выдаст), на Certification Path посмотрит еще меньше юзеров чем на замочек. Недавно на http://kpnemo.ru была ссылка на поломаный майкрософт - Microsoft.com меня очень удивило, когда некоторые мои коллеги купились на это.
(Ответить) (Parent) (Thread)
From: ex_one_way798
2003-12-19 05:59 am
А зачем все усложнять? Если вы не хотите, чтобы вас читали, не пишите сюда. Точно также в реальной жизни ваш собеседник может передать кому-то другому ваши слова, исказив смысл, и если это кто-то захочет обманываться, то он поверит не зависимо от убедительности доводов. При данной системе защиты любой мало-мальски здравомыслящий человек понимает, что копия страницы ЖЖ ничего не стоит. Если же будет введена система защиты, то подделки приобретут большую цену в глазах доверчивых.
ЖЖ - это не тот жанр, который подразумевает интриги, поэтому и не надо наводить на противоположную мысль, вводя какие-то ограничения. Интриги - вообще дело недостойное.
(Ответить) (Thread)
[User Picture]From: avva
2003-12-19 07:29 pm
ЖЖ - это не тот жанр, который подразумевает интриги

Увы, интриг здесь предостаточно.
(Ответить) (Parent) (Thread)
From: lightspeed
2003-12-19 08:45 am
В базе есть поле, по которому можно определить отредактирована ли запись или нет (и сколько раз), так вот, вместо этого писать туда timestamp'ы дат редактирования (в столбик так, аккуратненько). В итоге узнаем была ли отредактирована запись после нужного нам момента. ИМХО, больше знать и не нужно.
(Ответить) (Thread)
[User Picture]From: avva
2003-12-19 06:57 pm
Да, можно и так, Вы правы.
Но тогда нет вот чего. Я, хозяин дневника, хочу отредактировать запись, чтобы показывала что-то другое, но сертифицировать её старую версию, чтобы в будущем иметь возможность доказать, что в такое-то время она выглядела так-то.
Хотя это не так уж и часто нужно, наверное.
(Ответить) (Parent) (Thread)
[User Picture]From: krylov
2003-12-19 07:32 pm
Вообще-то это можно сделать крайне просто, не вводя никакой криптографии и прочих лишний сущностей (кроме одной малости).

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

Ключ от почтового ящина checkist'а находится у Очень Уважаемого Человека (или у Абузы, или у какой-нибудь Комиссии по Скандалам).

Далее, после публикации записи от имени checkist'а делается один коммент (например, с надписью "заверено"). Это может сделать как сам автор постинга, так и кто угодно (пароль checkist'а доступен всем). Коммент уходит checkist'у в почту - вместе с текстом исходного сообщения. Всё, приехали: копия ушла туда, откуда её может извлечь только Очень Уважаемый Человек (или Комиссия по Скандалам).

Наконец, последнее. В Семаджике делается особая опция: "запостить вместе с проверочным комментом checkist'а". Технически, насколько я понимаю, семажик вполне может делать и комменты (просто это до сих пор никому не требовалось). Тогда коммент будет делаться сразу после записи. (Содержание его тоже можно стандартизировать, например: "Заверено. Сообщение отправлено по адресу такому-то. Если есть вопросы, обращайтесь в Комиссию По Скандалам, она вышлет вам исходный вариант.")

Заметим, что комментов можно оставлять несколько и в разное время.

Разумеется, лишние комментарии несколько перегружают работу системы. Однако, вряд ли все будут заверять каждое своё сообщение. Обычно такая необходимость возникает только в случае "неоднозначных высказываний", которых не так уж и много.
(Ответить) (Thread)
From: lightspeed
2003-12-19 08:32 pm
А вдруг вы сейчас напишите совсем обычный пост, даже не подумаете о том, чтобы его заверить, а потом окажется, что в нем вы открыли какую-нибудь новую теорию, которая всем под зарез... ИМХО, так всегда и бывает.
(Ответить) (Parent) (Thread)
[User Picture]From: david_m
2003-12-23 09:19 am
Я тут немного помедитировал на эту тему... кажется, достаточно большое количество зайцев можно убить следующим образом. LJ предоставляет каждому юзеру возможность зафиксировать любую (не только свою!) запись. Для этого около записи ставится дополнительная кнопочка. При нажатии на неё, юзеру по почте отправляется текст этой записи + время верификации, и всё это подписывается эл. подписью LJ. Тут нужна именно подпись, а не MD5, поскольку важна не только целостность данных, но и то, что на них поставил таймстамп и подписал именно LJ (ему доверяем априори).

Это удобно с т.з. LJ -- реализуется с полпинка и не требует глобальных изменений вроде хранения всей истории редактирования.

Это удобно с т.з. автора -- если он считает, что написал что-то важное, то после постинга жмёт на кнопочку и получает заверенную копию сообщения.

Это удобно для собеседников -- схема "у меня все ходы записаны!" реализуется элементарно, нужно только не забывать в процессе дискуссии на кнопочку жать:) Впрочем, ничто не мешает (опционально) подписывать таким образом все LJ-нотификации, приходящие по почте.

Что касается privacy, то тут можно, например, дать юзерам возможность запрещать ставить штампы на своих сообщениях, или разрешать делать это только френдам и т.д. Тут много чего придумать можно.
(Ответить) (Thread)