[identity profile] kray-zemli.livejournal.com posting in [community profile] useful_faq
Модельная ситуация.

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

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

Нужно, чтобы каждый Подписчик мог проверить, что:

1. Каждый подписчик, действительно, написал не более 1 комментария.
2. Все анонимные комментарии принадлежат Подписчикам.
3. Никакие комментарии не были изъяты или подменены администрацией.

Условия 2, 3) можно и ослабить: каждый Подписчик, если что, может легко доказать, что именно его комментарий был изъят или подменён. Желательно, не деанонимизируясь.

Ещё очень желательное условие: чтобы Подписчику не требовалось при этом пользоваться личными ключами и/или генерировать одноразовые ключи.

Date: 2012-03-28 10:38 am (UTC)
From: [identity profile] imfromjasenevo.livejournal.com
не знаю решения, но поискал бы его в алгоритмах анонимных голосований.

Date: 2012-03-28 11:03 am (UTC)
From: [identity profile] ---change---.livejournal.com
Одноразовые пароли по смс? По юзернейму телефон из персональных данных достается и на него отправляется смс-ка с паролем. 1 штука. Не более.

1. Второй раз пароль просто не отсылается.
2. По определению.
3. ХЗ ;)

Date: 2012-03-28 11:24 am (UTC)
From: [identity profile] crackjack00.livejournal.com
Нужно использовать электронные подписи основанные на несеметричных алгоритмах шифрования.

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

Date: 2012-03-29 06:30 am (UTC)
From: [identity profile] a-bronx.livejournal.com
на открытом ключе издательства имеющимся только у подписчиков.

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

Date: 2012-03-28 01:34 pm (UTC)
From: [identity profile] nicka-startcev.livejournal.com
вводим посредника, который аккумулирует инфу.
редакция дает посреднику статью, он публикует. Читатели дают камменты посреднику, он проверяет и обезличивает.

Date: 2012-03-29 06:59 am (UTC)
From: [identity profile] a-bronx.livejournal.com
Подписчик логинится со своим логином и с ID статьи на независимый сервис (назовём его "Авторизатор"), который делает пару простых вещей:
1) спрашивает у Издателя, являешься ли ты его подписчиком (между Издателем и Авторизатором установлен взаимный траст, т.е. они заранее обменялись сертификатами и могут доверять друг другу)
2) выдаёт уникальный "токен комментирования" для данной статьи
3) запоминает, что он тебе его выдал (сохраняется только ID статьи и твой логин при нём, сам токен не сохраняется),

Второго токена на этут статью он не выдаст. Токен подписан сертификатом Авторизатора, поэтому его можно теперь использовать у Издателя.

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

Если Подписчику нужно проверить, что коммент не изменился, он берёт повторяет процедуру: берёт текст коммента, свой токен, подписывает -- и сравнивает с тем, что опубликовано.

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

Где-то так.

Date: 2012-03-30 06:59 am (UTC)
From: [identity profile] a-bronx.livejournal.com
Всё, что можно узнать о Подписчике -- что он однажды комментировал статью.

Упс, тут небольшая дырка: если коммент единственный, то можно вычислить, кто его оставил, и анонимность нарушается. Нужно разделить логины "подписчика" и "комментатора", но так, чтобы сохранить единственность обоих, чтобы второй был безличным, и чтобы из второго нельзя было вычислить первый.

Схема создания логина комментатора из логина подписчика аналогична первой, только работает в обратную сторону:
1) Подписчик хочет участвовать в комментировании, поэтому он жмёт на сайте Издателя кнопку "Хочу иметь возможность комментировать",
2) Издатель выдаёт ему одноразовый "токен на оформление статуса комментатора",
3) Подписчик идёт с этим токеном к Авторизатору и тот создаёт "логин комментатора". Токен уничтожается. Созданный логин используется для написания комментов согласно процедуре в предыдущем комменте.

Авторизатор не будет знать, кто к нему пришёл и не сможет сохранить личные даные Подписчика, т.к. токен обезличен. Но так как токен подписан Издателем, то можно верить, что это Подписчик, а не кто-то левый.

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