Let's assume we have N positions that we want to elect MPs for. Each ballot contains an ID and a secret number between 1 and N (both numbers are physically on the ballot, but you can only see it by scratching an area). Next you define a hash function that takes a vote and returns an integer. For each 1 to N, you simply take all the ballots with the secret number and sum the hash of the votes. You can then use that value you choose choose a ballot ID.
The good thing about this solution is that you can easily re-count the votes and you end up with the same answer. And, you can place all the information in public so other parties can verify it.
There may be issues with the above solution, but scratching off tickets isn't one of them. Do you know how inefficient the process of counting votes can be now? You might think that it is impractical, or that it "doesn't scale", but they manage.
Let's assume we have N positions that we want to elect MPs for. Each ballot contains an ID and a secret number between 1 and N (both numbers are physically on the ballot, but you can only see it by scratching an area). Next you define a hash function that takes a vote and returns an integer. For each 1 to N, you simply take all the ballots with the secret number and sum the hash of the votes. You can then use that value you choose choose a ballot ID.
The good thing about this solution is that you can easily re-count the votes and you end up with the same answer. And, you can place all the information in public so other parties can verify it.
Hm... Any randomness problems in this solution?