Ricardus said:
One way hashes can not be reversed. They are not encryption algorithms. That's the point. There are an infinite number of inputs that output the same hash. Therein lies the security.
But at the very least I would think you would want very long, random UNIQUE numbers so there are no collisions in that field AT ALL.
Hashes can have collisions which is to say there can be different inputs that produce the same hash. But again, my scheme does NOT use hashes. That's just some confusion on boji's part.
My scheme uses plain o'l random numbers. Random numbers can also have collisions of course but if the bit width is large enough, collisions become unlikely to the point of no concern. A UUID for example has 128 bits. Just to give you an idea of how bit 128bits is, consider this python output:
>>> 0xffffffffffffffffffffffffffffffff
340282366920938463463374607431768211455L
That's pretty big. If everyone in a world with 10 billion people voted, the chances of a collision would be 1 in:
>>> 0xffffffffffffffffffffffffffffffff / 10000000000
34028236692093846346337460743L
So a UUID could be printed on each ballot would a little cut-away corner that has the same exact number on it. You cut that out or take a picture with your phone. Or maybe it's a QR codes (one of those square barcodes).
A UUID looks like this:
>>> import uuid
>>> print(uuid.uuid1())
08e28d3e-e482-11ea-921e-18dbf21e410a
After the election, you punch in this number somewhere and it looks up your vote in the DVD of votes released to the public. This does not rely on any central authority and can be independently verified by any individual.