Про eParaksts.
Если мы хотим иметь возможность делать legally-binding signatures, то нам необходимо некоторое доверие к государству (ну хотя бы потому, что в обратную сторону доверия нет). Так что тут особо не отвертишься-то от модели CA, пусть они даже позволят гражданам свои ключи загружать, всё равно ведь могут что-нибудь от твоего имени залить. Можно, разве что, делать какие-то WOT-подобные мутки с привлечением нотариусов...
Кстати, можно получить eID, но не активировать сертификаты, поскольку активация сертификатов — отдельная процедура, требующая твоей подписи на бумажной форме. Так что в случае мистической активации сертификатов на твоё имя, которые ты сам не активировал, можно указать PMLP (ну или кто там эти сертификаты выдаёт) на отсутствие у них бумажной формы с твоей подписью, доказывающей валидность этих сертификатов. Хотя вообще расчёт на то, что что-то такое удастся отстоять в суде, весьма оптимистичен, конечно. С виртуальным eP похожая ситуация — там тоже нужно сдать какую-то подписанную бумажку, но вот на этой бумажке уже точно нет фингерпринта ключа, так что твой ключ всегда могут подменить. Ну или вообще делать подписи твоим реальным ключом, приватная часть-то всё равно у них.
Про электронные выборы.
Из допущения про необходимость доверия к какому-то CA в вопросе аутентификации народа сразу возникает уже упомянутая проблема фильтрации — как бы мы ни реализовывали схемы голосования, удалённый сервер всегда может, например, симулировать перебои в сети, как только к нему попытаются аутентифицироваться «неугодные» граждане. Это как если вы пришли на участок, протянули паспорт, а вам говорят, что с фамилиями на «-opovs» сегодня не обслуживают, и не дают бюллетень. Тут есть определённые обходы (типа, сначала свой запрос шифруем, потом кидаем серверу в зашифрованном виде, он шифротекст подписывает (чтобы потом можно было доказать, что сервер наш запрос видел) и кидает нам подпись, а только после этого мы раскрываешь ключ. тут уже злонамеренные граждане могут подлости устраивать, но и тут есть варианты), но они усложняют систему, которую и без того не понятно, как строить.
Ну и тем более никак (по-моему) не защититься от возможности вбросов со стороны обеспечивающих аутентификацию — это как если б PMLP напечатало кучку левых паспортов, чтобы с ними голосовать. Частично можно было бы усложнить эту атаку, публикуя все подписи, использованные для аутентификации (гипотетически, могут существовать способы проверить, есть ли там несуществующие граждане), но в ЛР это нереализуемо, ибо каждая подпись содержит секретные личные данные — персональный код.
Если мы хотим, чтобы доверие к анонимности системы основывалось исключительно на используемых алгоритмах (== на математике и формальных доказательствах), то нам нужна система, в которой (например)
- аутентифицированные клиенты могут negotiate'ить с сервером некие токены
- этими токенами клиент может подписать голос (не используя средство аутентификации)
- сервер не может подписать голос, даже если в его распоряжении есть несколько других голосов, подписанных каким-то токеном (т.е. токены асимметричны)
- для двух подписанных голосов возможно определить, подписаны ли они одним токеном
- нельзя проследить, какому средству аутентификации соответствует токен, которым сделана данная подпись
Последнее требование, без сомнения, является самым сложнореализуемым. По сути, на стороне сервера нужно создать некий пул асимметричных токенов, так, чтобы для любой подписи можно было проверить, подписана ли она одним из токенов в пуле, но нельзя узнать, каким. Обратите внимание, что у сервера есть логи абсолютно всех процедур, так что для достаточно простых схем он может просто после каждого negotiation сохранять копию старого пула, т.е. для каждого гражданина будет известно, как выглядел пул до него и после него — тогда последнее требование не реализуемо. В общем, я могу долго об этом говорить, но суть такова, что это реально сложная задача (даже чисто академически, не говоря о практической реализации), у которой на данный момент, насколько мне известно, нет решений.
Кстати, любопытно, что в такой схеме выполняется не только анонимность, но и верифицируемость — подписанные голоса не являются секретными, так что их можно спокойно публиковать. Отдельные личности утверждают, что такая схема вредна, поскольку позволяет верифицируемо продавать голоса (ну т.е. доказывать кому-то, что проголосовал за того, за кого обещал), но от этого свойства, кажется, тоже никак не избавишься, реализуя верифицируемые выборы.
У эстонцев абсолютно другой подход — они доверяют людям, которые администрируют машины. Я немного упрощаю, но у них всё работает так: гражданин X, желая проголосовать за кандидата C, генерит сообщение Sign(Encrypt(C, Election_pubkey), X_privkey). Election_pubkey соответствует приватному ключу, который хранится в Hardware Security Module, который подключён к серверу А, который не имеет доступа в сеть. Это сообщение кидается на сервер Б, который проверяет, что голос подписан нормальным ключём гражданина и, если да, сохраняет сообщение (при этом у него нет Election_privkey, так что он не видит, что там за голос вообще). Когда выборы окончены, Б выкидывает подписи и все Encrypt(C, Election_pubkey) (т.е. обезличенные голоса) пишет на болванку, которую переносят на сервер А, он их расшифровывает и считает результаты, которые уже идут напрямую в ЦИК.
Проблема такая, что безопасность всего этого ужаса держится на миллионе необоснованных предположений — с железом всё ОК, на личных ноутбуках сотрудников ЦИКа нет вирусов, ... Мне до сих пор никто не может сказать, что после выборов происходит с HSM, а ведь вообще-то достаточно подключить его к серверу Б (уже после окончания выборов), чтобы получить миленькое соответствие гражднин→расшифрованный голос. На видео, которые ЦИК публикует, чтобы якобы доказать, что во время выборов всё было ОК, видно, что
- на личных ноутах сотрудников ЦИКа (которые используются для переноса данных на сервера) стоит виндоус с клиентами покеррумов и прочим хламом
- данные переносятся на личных флэшках сотрудников, на которых помимо этого есть и какие-то другие данные
- ПО на сервера скачивается через HTTP
ну и так далее. А про то, что происходит после выборов, никто вообще не знает. О верифициуемости и вовсе нет и речи. На эту тему можно почитать
отличный пейпер.
В общем, говорить (на политическом, а не академическом уровне) об интернет-выборах совершенно бесполезно, пока нет конкретных схем, обеспечивающих хотя бы анонимность.