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