Most computer scientists who study elections are personally opposed to even electronic voting and prefer paper ballots, which I do too. That's because they can be physically counted and intuitively understood in a way that software cannot be by most of the population. That simplicity is a strength in building trust.
1) Each voter enters the booth and a computer immediately generates a random number, let's call it a transient voter ID. The computer then prints out their number shuffled in with 10-20 other (real) transient voter IDs. User takes the printout and notes the position of their number.
2) Voter makes their selections, and their vote is recorded by the software.
3) At the end of the election, the ledger of all transient voter IDs and the accompanying vote is published.
Voters can confirm that their ID is present in the list, along with the correct candidate choice, and that the final totals were summed correctly. The general public can also spot-check that the appropriate number of votes per precinct are present. Yet since the printout includes 20+ other IDs, no one can prove conclusively who they voted for. The computer could ensure that at least one vote for each candidate is included on the printout.
There's really no need to trust the software since the vote ledger is fully published (also no need for blockchain).
Edit: If you do show all 20 votes, you'd have to have votes for all candidates on them.
Also if someone is trying to manipulate a bunch of votes, they'd run into dupes and know one is lying.
Neither of those however should be difficult with electronic voting systems.
But a simple search on the internet shows that there are a lot of folks who don't want something like this.
Or, I'm offering $10 to you, junkie, to support my party. But if you want to be paid I'm going to use your device/private key/one time code to do it myself. Or maybe you're my employee and we'll have a voting party where I can see you all wisely agree with me.
The privacy of a voting booth where neutral officials who are supervised by all candidates doesn't allow either of these scenarios work.
The voter can remember the position of their own key if they choose to for later validation against the open ledger and can use the others for deniability (if needed).
The described method seems to prevent voting authorities from seeing specific voter's votes, which is useful, but it doesn't solve the "show me you voted for X, or I break your legs" problem.
There are verifiable voting protocols that allow for accurate counting. That is, verification by the voter that the ballot is accurately recorded without allowing the voter to prove which way they voted to a third party. They require complex infrastructure and they don't hold up against total corruption of the process any better than paper anyway.
I think simple paper ballots are superior.