{"id":28362201,"url":"https://github.com/afcapel/rallot","last_synced_at":"2025-07-13T07:02:57.964Z","repository":{"id":1049140,"uuid":"880683","full_name":"afcapel/rallot","owner":"afcapel","description":"Secure electronic voting system backend","archived":false,"fork":false,"pushed_at":"2010-09-27T01:03:05.000Z","size":116,"stargazers_count":6,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-06-04T20:07:28.965Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"www.partidodeinternet.es","language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/afcapel.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2010-09-01T21:21:51.000Z","updated_at":"2021-11-11T14:57:54.000Z","dependencies_parsed_at":"2022-08-16T11:55:12.400Z","dependency_job_id":null,"html_url":"https://github.com/afcapel/rallot","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/afcapel/rallot","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/afcapel%2Frallot","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/afcapel%2Frallot/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/afcapel%2Frallot/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/afcapel%2Frallot/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/afcapel","download_url":"https://codeload.github.com/afcapel/rallot/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/afcapel%2Frallot/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":265101621,"owners_count":23711579,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-05-28T14:10:10.991Z","updated_at":"2025-07-13T07:02:57.959Z","avatar_url":"https://github.com/afcapel.png","language":"Ruby","funding_links":[],"categories":[],"sub_categories":[],"readme":"README\n======\n\nRallot is a cryptographically secure voting system. It's a Ruby port of the University of Connecticut \n[Adder project](http://www.dagstuhl.de/Materials/Files/07/07311/07311.KiayiasAggelos.Paper.pdf).\n\nIt is developed as a Ruby Mendicant University individual project.\n\nGOALS\n=====\n\nRallot has these design goals.\n\n* Transparency. Anyone should be able to review an election process and be sure than the tallying of\nvotes is accurate.\n\n* Privacy. No one, not even the system administrators, can guess the individual vote of a user. Only\nthe total results for the election can be known.\n\n* Distributed trust. The system should be supervised by a number of authorities, and the election proccess\ncan only take place if a qualified mayority of authorities agree. \n\nHOW IT WORKS\n============\n\nThe following is a summary of the theory behind Rallot's secure electronic voting system. For a full explanation of\nthe subject, please refer to the original [Adder paper](http://www.dagstuhl.de/Materials/Files/07/07311/07311.KiayiasAggelos.Paper.pdf).\n\nIn order to achive its design goals Rallot uses two cryptographic tools:\n\n### Distributed encryption\n\nIn a traditional cryptosystem there are two keys: a public key that is public and a private key that is only know by a particular user. \n\nRallot uses a form of distributed ElGamal encryption in which there is a shared public key for the election, but the private key is splitted between the multiple authorities. No single authoritie can decrypt any vote. A qualified majority of authorities must combine their private keys to perform a decryption. \n\n### Homomorphic encryption\n\n[Homomorphic encrpytion](http://en.wikipedia.org/wiki/Homomorphic_encryption) is a form of encryption that\nallows to perfom some operations over encrypted values and obtain the same result than performing the operations\nfirst and the encryption later, that is, encryption(a+b) == encrypytion(a) + encrpytion(b).\n\nThis property allow Rallot to operate over encrypted votes and perform their sum before make a decrpytion.\n\n## Election process\n\nWhen an election starts, a number of authorities are created. They are the entities in charge of the distributed trust of the system and can be operated by politicaly divergent individuals to ensure trustworthiness. Each authority creates a private key and collaborate with the others to generate a public shared key. \n\nTo cast a vote, a user must first athenticate with the system. Then it should send her encrypted vote and a cryptographic proof that the vote is valid -that is, that she has only choose one valid option. The system\ncheck the cryptographic proof and stores the vote and the proof in a central location.\n\nWhen the election is over, the system add all the encrypted votes and make the result public. Then, each authority, download the encrypted result and make a partial decryption. \n\nThe combination of all this partial decryptions is the final result of the election.   \n\nWORK IN PROGRESS\n================\n\nRallot is yet work in progress.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fafcapel%2Frallot","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fafcapel%2Frallot","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fafcapel%2Frallot/lists"}