Option to cryptographically authenticate votes
One potential security problem with Loomio is if the database administrator goes in to impersonate users when commenting, voting, etc. This can be mitigated by a user showing up and saying, "Hey, I didn't vote that way," but a lot of people I work with would prefer a more technological solution.
So, I'd like to see an option to require votes on certain proposals to be cryptographically verified, perhaps using public/private keys.
I like the way Blockchain.info handles it. If I understand it correctly, it stores an encrypted version of the user's private keys and data on its servers, and decrypts them entirely with Javascript when the user enters their password.
So, let's say Loomio generates a key pair for the user using OpenPGP.js: http://openpgpjs.org
Then the user types their password, and the private key gets encrypted with this password. Only then do the keys get sent to the server.
When voting, the user is prompted to retype their password to decrypt the private key (in Javascript, of course). Their vote is then signed with the private key, and uploaded to the server. It can be verified using their public key.
This is all very back-of-the-envelope because it's after midnight and I'm tired. But I think that's a good starting point.
Thanks for bringing this on the table @zacqaryadamgreen! I feel this is very important and a feature a lot of groups would require. Authentication is of utmost important in Loomio because it has a direct impact of what decisions are actually being made.
I think some tech-savvy users would prefer to use a key they generated at home though, and not have their private key hanging on Loomio's servers. But this could be an option.
I think this is really something that could sell loomio very well to hacktivist groups and many others.
I'm sure there could be various options on the ease-of-use/tinfoil-hattery spectrum.
Wow cool idea @zacqaryadamgreen. Have you had any thoughts about how this feature could be implemented in an unobtrusive way (i.e. that's not confusing to non-technical users)?