Вопрос по криптографическим протоколам
Mar. 28th, 2012 05:34 pm![[identity profile]](https://www.dreamwidth.org/img/silk/identity/openid.png)
![[community profile]](https://www.dreamwidth.org/img/silk/identity/community.png)
Модельная ситуация.
Пусть есть, ну, скажем, газета, издаваемая в электронном виде по подписке. Есть множество зарегистрированных Подписчиков. Персональные данные подписчиков известны только Издателю, но, скажем, юзернеймы подписчиков публичны.
Издательство публикует статью и предоставляет право каждому Подписчику написать к статье публичный анонимный комментарий без цензуры, но только один. При этом ни администрация, ни подписчики, не должны знать, кто написал какой комментарий.
Нужно, чтобы каждый Подписчик мог проверить, что:
1. Каждый подписчик, действительно, написал не более 1 комментария.
2. Все анонимные комментарии принадлежат Подписчикам.
3. Никакие комментарии не были изъяты или подменены администрацией.
Условия 2, 3) можно и ослабить: каждый Подписчик, если что, может легко доказать, что именно его комментарий был изъят или подменён. Желательно, не деанонимизируясь.
Ещё очень желательное условие: чтобы Подписчику не требовалось при этом пользоваться личными ключами и/или генерировать одноразовые ключи.
Пусть есть, ну, скажем, газета, издаваемая в электронном виде по подписке. Есть множество зарегистрированных Подписчиков. Персональные данные подписчиков известны только Издателю, но, скажем, юзернеймы подписчиков публичны.
Издательство публикует статью и предоставляет право каждому Подписчику написать к статье публичный анонимный комментарий без цензуры, но только один. При этом ни администрация, ни подписчики, не должны знать, кто написал какой комментарий.
Нужно, чтобы каждый Подписчик мог проверить, что:
1. Каждый подписчик, действительно, написал не более 1 комментария.
2. Все анонимные комментарии принадлежат Подписчикам.
3. Никакие комментарии не были изъяты или подменены администрацией.
Условия 2, 3) можно и ослабить: каждый Подписчик, если что, может легко доказать, что именно его комментарий был изъят или подменён. Желательно, не деанонимизируясь.
Ещё очень желательное условие: чтобы Подписчику не требовалось при этом пользоваться личными ключами и/или генерировать одноразовые ключи.
no subject
Date: 2012-03-28 10:38 am (UTC)no subject
Date: 2012-03-28 11:03 am (UTC)1. Второй раз пароль просто не отсылается.
2. По определению.
3. ХЗ ;)
no subject
Date: 2012-03-28 11:24 am (UTC)1. Каждый подписывает свой комментарий двумя подписями. Первая подпись на открытом ключе издательства имеющимся только у подписчиков. В этом случае, издательство может проверить, что это его подписчик. Вторая подпись - собственным открытым ключом. Издательство не имея секретного ключа, не сможет узнать, кто подписал, но сможет сравнить подписи и выяснить что нет дубликатов. При этом сам подписчик с помощью своего секретного ключа, сможет проверить и доказать свое авторство, или подделку комментария.
no subject
Date: 2012-03-28 11:34 am (UTC)Не понимаю этот пункт. Если издатель имеет коллекцию всех открытых ключей, он сам может поочередно подписать каждым из них и сравнить, какой подошёл. А если не имеет такой коллекции, то и не сможет проследить, что все комментарии от разных подписчиков, а не от одного и того же, наштамповавшего себе ключевых пар.
no subject
Date: 2012-03-29 06:30 am (UTC)Закладываться на это нельзя -- любой подписчик может запросто передать открытый ключ другому человеку. Открытый ключ на то и открытый, что предполагается доступным неопределённому кругу лиц.
no subject
Date: 2012-03-28 01:34 pm (UTC)редакция дает посреднику статью, он публикует. Читатели дают камменты посреднику, он проверяет и обезличивает.
no subject
Date: 2012-03-29 06:59 am (UTC)1) спрашивает у Издателя, являешься ли ты его подписчиком (между Издателем и Авторизатором установлен взаимный траст, т.е. они заранее обменялись сертификатами и могут доверять друг другу)
2) выдаёт уникальный "токен комментирования" для данной статьи
3) запоминает, что он тебе его выдал (сохраняется только ID статьи и твой логин при нём, сам токен не сохраняется),
Второго токена на этут статью он не выдаст. Токен подписан сертификатом Авторизатора, поэтому его можно теперь использовать у Издателя.
После Подписчик логинится к Издателю -- но не под своим именем, а с использованием токена (Издатель может доверять ему, ибо подпись есть) и оставляет коммент, прикладывает к нему токен и подписывает всё это своим секретным ключём. Издатель запоминает токен, поэтому второй раз его использовать будет нельзя. Подписчик тоже запоминает токен. Коммент публикуется вместе с подписью.
Если Подписчику нужно проверить, что коммент не изменился, он берёт повторяет процедуру: берёт текст коммента, свой токен, подписывает -- и сравнивает с тем, что опубликовано.
Если ему нужно анонимно доказать подлог, он может дать свой токен для проверки любому --- токен никак не связан с ником Подписчика, т.к. Авторизатор этой информации не хранит, а Издатель не знает, кто к нему с каким токеном пришёл, он знает лишь то, что токены были выданы правильно. Всё, что можно узнать о Подписчике -- что он однажды комментировал статью.
Где-то так.
no subject
Date: 2012-03-30 06:59 am (UTC)Упс, тут небольшая дырка: если коммент единственный, то можно вычислить, кто его оставил, и анонимность нарушается. Нужно разделить логины "подписчика" и "комментатора", но так, чтобы сохранить единственность обоих, чтобы второй был безличным, и чтобы из второго нельзя было вычислить первый.
Схема создания логина комментатора из логина подписчика аналогична первой, только работает в обратную сторону:
1) Подписчик хочет участвовать в комментировании, поэтому он жмёт на сайте Издателя кнопку "Хочу иметь возможность комментировать",
2) Издатель выдаёт ему одноразовый "токен на оформление статуса комментатора",
3) Подписчик идёт с этим токеном к Авторизатору и тот создаёт "логин комментатора". Токен уничтожается. Созданный логин используется для написания комментов согласно процедуре в предыдущем комменте.
Авторизатор не будет знать, кто к нему пришёл и не сможет сохранить личные даные Подписчика, т.к. токен обезличен. Но так как токен подписан Издателем, то можно верить, что это Подписчик, а не кто-то левый.
Издатель не будет знать, кто комментирует его статьи, потому что этого не знает Авторизатор, выдающий одноразовые же токены на комментирование. Но вся процедура гарантирует, что комментируют только подписчики, и что каждый из них сможет комментировать лишь однажды.