popoffka писал(а):
Darsh писал(а):
(Перечитав) согласен, утверждение "3) делает невозможным 1)+2)" несколько голословно. Но, хоть убей, я не вижу, как можно, сохраняя связку "один человек - один голос", отвязать при этом этого человека от этого голоса... На обычных выборах за этим человеком от получения бюллетеней до кабинки голосования физически следят, разрывая связку только в кабинке голосования. Как это реализовать в онлайне?..
Выше я уже предложил одну такую схему — собираем со всех граждан по ключу, а по пути все ключи перемешиваем (с технической т.з. это очень похоже на то, что ты предложил с необратимым шифрованием токенов). Г-н Neff утверждает, что для ElGamal/DSA это реализуемо.
Я не слишком въезжал в описанное г-ном Neff-ом, более-менее разобрал только про тасование колоды карт, но, если я правильно понимаю, чтобы расшифровать присланное гражданином, тебе понадобится именно его ключ. В данном случае у покера всего два игрока, а не все граждане плюс государство. А, получая ключ от гражданина, ты получаешь связку гражданин-голос - и анонимности каюк. Neff описывает покер на двоих, где колода - это бюллетени, и, тасуя их, ты таким образом скрываешь, какому именно ты отдал голос. В латвийских реалиях это не сработает, потому что игроку "гражданин" надо не просто выбрать одну карту из 15-20, предварительно зашифрованную игроком "государство", но ещё и расшифровать её, чтобы поставить плюсы-вычёркивания, а затем зашифровать обратно - что ломает всю схему.
Я больше думал про шифрование токена, которое добавит голосу анонимности, но по-прежнему позволит им воспользоваться. MD5, увы, не катит - зашифрованное гражданином MD5 можно проверить со стороны государства plain-text ключом - а его, в свою очередь, можно будет затем проверить на соответствие гражданин-токен. Какое-то решение должно быть. Токен надо зашифровать one-way (чтобы нельзя было получить из него обратно clear text и пробить по базе человек-токен), но чтобы при этом этот one-way можно было проверить и пометить по базе токен-голос.
Нет, всё равно не получается. Если можно проверить и пометить - значит, можно и идентифицировать по нему, кому он был выдан (при условии, что в обеих базах хранятся plain text токены).
Надо бы в базе человек-токен держать plain text - для выдачи гражданину, а в токен-голос класть MD5 hash токена. Тогда по MD5 hash нельзя будет определить, какому человеку этот токен принадлежит. А гражданин, предъявляя при голосовании plain text токен, позволит его сравнить с MD5 hash, хранящейся в базе токен-голос, чтобы проверить на валидность и пометить. Но здесь, увы, опять же слишком много доверия выдаётся государству - доверия, что оно зашифрует все токены, удалив при этом соответствие plain text - MD5 hash. Удалит - ура, схема работает. Не удалит - увы, опять дырка.
Хорошо бы доверить превращение plain text в MD5 hash самому пользователю - но тогда опять появляется связка человек-голос. Замкнутый круг :-(
Перетасовка токенов получилась бы, будь у нас покер на всех граждан плюс государство. Но это ж требует одновременного голосования всех участников, да ещё и точное знание их числа до начала игры, что уже совсем нереально :-(
Darsh