Respuesta corta a su pregunta, tal como está actualmente: No.
La razón:
Cada IP permitiría un solo voto
Debido a la traducción de NAT, una sola dirección IP puede representar mucho más que un solo usuario (una IP pública puede apuntar a una red corporativa completa, por ejemplo). Además, el uso de una dirección IP para identificar a alguien no es factible de ninguna manera; se puede cambiar, falsificar, etc. fácilmente, sin mencionar el hecho obvio de que varias personas que viven en la misma dirección y posiblemente incluso compartan la misma computadora obviamente también tendrían la misma dirección IP.
Realmente no puedo ver cómo podría lograr algo como esto sin incluir algún tipo de registro de usuario / votante, y el problema es obviamente el anonimato: ¿Cómo puede garantizar que una persona solo vote una vez, sin al menos almacenar? ¿Alguna cantidad mínima de información personal?
En el mejor de los casos, puedo imaginar algún tipo de solución de sistema dividido, donde un voto es anónimo, pero está respaldado por algún otro servicio que puede garantizar la singularidad de cada votante (al menos hasta cierto grado de confianza) .
Como idea básica, considera lo siguiente:
Cree un sistema de votación donde los usuarios anónimos puedan iniciar sesión con un token de acceso y registrar una votación firmada digitalmente mediante criptografía asimétrica. Esa firma digital se realizaría utilizando una clave privada que tendría una clave pública correspondiente que estaba explícitamente vinculada al token de acceso de los usuarios. El token en sí sería proporcionado por un servicio distinto, de modo que el sistema de votación en sí estaría separado de manera limpia de cualquier información que contenga datos personales sobre los votantes.
A partir de esto, un auditor podría verificar lo siguiente para cada voto simplemente mirando los votos y los tokens:
- La votación fue emitida por un usuario que lleva el token de acceso X.
- Ningún usuario ha emitido otros votos con ese token específico.
Ahora deberá respaldar esto con un servicio de proveedor de tokens que pueda garantizar que cada token se haya otorgado solo a una sola persona (que es elegible para votar), y que no se haya otorgado a ninguna persona más de un token único (un auditor probablemente también querrá evaluar esta parte de la solución, pero podría hacerlo al mismo tiempo que limita el acceso a la información personal sobre los votantes).
Entonces, ¿cómo podría hacer esto manteniendo al mínimo la cantidad de datos personales? La mejor opción que se me ocurre sería un sistema que almacene un hash (una "huella digital" criptográfica irreversible) de algún identificador personal, como un número de seguro social. Esto podría usarse para verificar que ningún identificador único se use más de una vez y, sin embargo, evitar que alguien con acceso a la base de datos genere una lista completa de todos los que han votado (ya que la lista solo contendría valores de hash, que son naturaleza irreversible).
Lo que esto no no evitaría, es la enumeración de cuentas; comprobar si hay personas específicas registradas, siempre que ya tenga su identificador (si estuvieran registrados, luego intentar registrarse nuevamente con sus credenciales debería causar un error o advertencia, lo que confirmaría que su cuenta existía).
Una posible solución para esto podría ser simplemente registrar todos votantes potenciales desde el principio. De esa manera, buscar una cuenta que pertenezca a alguien que haya votado devolverá el mismo tipo de resultado que buscar a alguien que no lo haya hecho, y la lógica basada en token debería funcionar. El punto principal es dividir la identificación y la votación real en dos partes separadas, y usar la criptografía para asegurar la votación, mientras mantiene la información personal fuera de ella tanto como sea posible.
Esto es bastante conceptual, y obviamente hay mucho más que considerar, pero espero que le brinde algunas ideas en el contexto de su pregunta.