The problem
I am in charge of implementing a secure, secret election for a small group of students on my school. I have a list linking valid student IDs to emails, and I want each one of them to vote in a candidate that will ultimately be elected. It is acceptable to use that email for authentication.
Naive solution
The obvious solution would be ask each student to mail me a public key, put a simple web-UI that used such key to cryptographically sign a vote (client-side), and then a HTTP server that received signed votes, incremented the candidate's vote counter, and erased the info. This is mostly secure, but there is still one problem: a malicious agent with access to the server could be able to see and log the vote of each particular student. Of course, I won't do that and the students trust me not to do it - but, since this is a CS course, I'd like to be able to use the opportunity to make a point and create a cryptographically safe ballot on which no party at all should be able to see the votes.
My solution
After some research, I've come to what I think is the perfect solution, which is Linkable Ring Signatures. It would work the same as the system above, with the small modification that we'd keep public map of StudentID -> PublicKey
, and each student would sign in name of each other student. The server is, then, able to verify that the vote came from an actual student, without being able to tell which. If a student votes twice, it is able to detect so using the "Linkable" aspect of those signatures.
Question
Unfortunately, I couldn't find any verified, open-source implementation of linkable ring signatures. I'm aware Monero uses a similar cryptographic scheme to grant anonymity to its users. I wonder, thus: is there any way Monero can help me implementing my system?