Dim писал(а):
Андрей писал(а):
Если соблюдать правило что результаты голосования НЕ должны быть известны до его окончания - использовать этот ключ для нескольких голосований будет невозможно.
Наоборот. Легко. Просто голос делится на два пакета: зашифрованный симметричным ключом выбор и собственно ключ. Оба пакета
подписываются закрытым ключом и публикуется сначала пакет с голосом, а по окончании голосования публикуется пакет с кючом.
А подпись гарантирует, что пакеты пришли от имеющего право голосовать. А так как никто не знает кому принадлежит открытый ключ, то тайна сохраняется.
Я выделил в твоем тексте ключевые слова "подписываются закрытым ключом" и "А подпись гарантирует, что пакеты пришли от имеющего право голосовать.". Из этого следует что голос подписывается персональным ключем, что мгновенно раскрывает тайну голоса. Т.к. только при привязке ключа подписи к человеку можно определить что он имеет право голосовать.
Dim писал(а):
Андрей писал(а):
Таким образом, в плане повышения анонимности передача нашим методом ничего не даст. Я могу узнать кто подписал ключ для определенного голоса, прийти к нему и методом крипторектального анализа узнать у него кто это голосовал. Голос раскрывается за 1 шаг.
Не один шаг, а столько сколько было передач ключа по цепочке. Кроме того можно использовать блоки открытых ключей для подтверждения того, что в данном блоке содержится ключ пользователя. И если количество ключей соответствует количеству пользователей, то можно с чистой совестью цепочку потереть. Тогда терморектальный анализ станет бессмысленным.
Давайте на пальцах...
1. Есть одноразовый ключ участика системы, который он использует для шифрования своего голоса. Пара открытый/закрытый ключ. Изначально в паре ни один ключь не раскрывается публично.
2. Другой участник системы (участник2) получает от этого участника его будущий публичный ключ, подписанный персональной подписью голосующего участника1. Получаем ЭЦП(участник2, публичный одноразовый ключ учатсника1).
3. Далее "участинк1" отправляет свой голос в виде шифрованный(секретный одноразовый ключ участника1, голос).
4. Участник1 или учатсник2 (не важно) отправляет пусть даже и через нашу сеть свой публичный ключь для расшифровки с подписью участник1 из п.2.
В итоге у произвольного участника системы есть:
1. ЭЦП(участник2, публичный одноразовый ключ участника1).
2. Шифрованный(секретный одноразовый ключ участника1, голос)
Т.к. расшифровать голос мы можем публичным одноразовым ключем участника1, мы очень просто вычисляем участника2, т.к. именно он подписал этот ключ. Приходим к участнику2 и крипторектальным способом выясняем кто такой участник1 и раскрываем один голос за одно посещение. Что помешает это сделать?