2014-11-06 17:21 GMT+01:00
Al.R...@gmail.com <
al.r...@gmail.com>:
> Pues quizas es un problema de que los documentos no se explican bien. Porque
> despues de estas semanas yo el proceso que he entendido es que el login en
> Podemos sirve para que este emita una identificacion unica que autoriza al
> votante en esa eleccion, y que con esa identificacion se le redirige al
> servidor de votacion y ya no se le vielve a ver el pelo en el de Podemos.
>
> Y se me hace raro que algo tenga que ocurrir forzosamente en el servidor,
> salvo una firma para doble validacion, que me huelo que tampoco esta
> implementada. Usease, un proceso de entrega que parece logico seria:
>
> - con las claves publicas de los agentes que van a contar la votacion, el
> cliente cifra el mensaje.
> - con la clave publica del agente censal el cliente cifra su autorizacion
> personal de voto, la fecha, y el cifrado anterior.
> - el cliente calcula el hash de este mensaje, y manda al servidor mensaje y
> hash.
> - el servidor archiva el mensaje, recalcula el hash y lo firma. Esto, un
> hash firmado, es lo que valdria como prueba de voto, si el cliente tiene que
> entregarlo en el curro o algo asi.
>
> En cambio la documentacion parece implicar que solo se hace el primer paso,
> y que el calculo del hash es en el servidor, emulando en cierto modo el paso
> cuatro. Digo en cierto modo porque un hash asi como asi, sin firma digital,
> no prueba nada. Si luego el usuario no lo encuentra en el tally, es su
> palabra contra la de una string alfanumerica.
Buenas:
Vamos por partes:
# Cómo funciona en Agora Voting
El hash del voto es generado en javascript en cliente antes de
enviarse al servidor de Agora Voting. Se muestra después y por eso es
fácil confundirse, pero eso es por cuestión de usabilidad.
Respecto de los credenciales, en el sistema actual hace falta que
tanto Agora Voting como el "agente censal" se compinchen para hacer
ballot stuffing, dado que el id del votante es un string
pseudoaleatorio (en realidad en el caso de Podemos es un hash sha256
de varias cosas, según les propusimos en la documentación [1]) que
sólo el agente censal sabe generar (y Agora Voting por no). Por tanto,
si el agente censal le reta a Agora Voting a desvelar los ids de los
votantes, el agente censal podría detectar si Agora Voting ha hecho
ballot-stuffing.
# Firma de votos por Agora Voting
El hecho de firmar votos por parte del servidor de Agora Voting que
recibe los votos podría realizarse, y lo hemos contemplado de cara al
futuro. Sirve para tener una característica de "dispute freeness", es
decir poder resolver disputas como la que propones (ej: un votante
afirma que su voto no ha sido contado). Firmar un voto con un sistema
de clave pública/privada como propones implica la necesidad de que el
votante se guarde un chorizaco de texto más largo que un hash.
Pero una forma de realizarlo sería dar al votante un segundo hash del
voto. Este hash sí que vendría del servidor, y sería el hash de el
hash1 + un secreto que revelaría Agora Voting al final del proceso
(por tanto es demostrable, es lo que criptográficamente se llama un
"commitment"). De esa forma, cualquiera que diga que su voto no ha
sido contado, podría decirlo antes de que Agora Voting revele el
secreto, y cuando Agora Voting lo desvele, todo el mundo podría ver
qué votos habían sido firmados por Agora Voting con ese secreto.
# Credenciales por parte del Agente Censal
Lo que propones de cifrar usando la clave pública del agente censal no
sirve para evitar que Agora Voting haga Ballot Stuffing, porque Agora
Voting también conoce dicha clave al ser, ejem, pública. Para poder
demostrar que un voto tiene los credenciales adecuados, hace falta
tener un credencial (anónimo) firmado por la autoridad censal. Este
credencial, de nuevo podría ser un hash por ejemplo, y aplicar un
procedimiento parecido al anteriormente explicado para cuando Agora
Voting firma que ha recibido un voto. Pero claro, de nuevo, tenemos
más y más hashes: terminamos volviendo loco al usuario. Pero incluso
es teóricamente posible hacerlo con múltiples autoridades de censo,
por ejemplo, lo cual añade aun más complicación.
--
Al final, en el esquema actual, para el censo tienes que:
1. Tienes que confiar en que el Agente censal no haga ballot stuffing.
Dado que dicho agente es quien decide cual es el censo, esto resulta
bastante razonable.
2. Agora Voting no puede hacer ballot-stuffing a menos que se
compinche con el Agente Censal, ver punto anterior.
3. Para las disputas del tipo "mi voto no ha sido contado", hay que
confiar en la palabra de Agora Voting dado que los votos no son
firmados (o hasheados como dije arriba, que es una forma de firma).
El punto 2 no añade más necesidad confianza que el 1, que de por sí
parece razonable. Es el 3 el que podría mejorarse, a costa de
disminuir un poco la usabilidad de los localizadores haciéndolos más
largos.
Saludos,
--
[1]
https://github.com/agoravoting/agora-core-view/blob/master/INTEGRATION.md
--
Eduardo Robles Elvira @edulix skype: edulix2
http://agoravoting.org @agoravoting
+34 634 571 634