No, it's not possible.
At least, not without violating multiple fundamental principles of democracy or making it seriously vulnerable. This is primarily because of the authenticity vs. voter anonymity problem. Consider this:
- A voter must be a citizen (Authentic)
- Their voting choices must not be known, especially not on a public ledger (Anonymous)
- The vote they cast isn't tampered with (Valid)
- A voter shouldn't be able to prove who they voted for (Bribery)
- A public final count so multiple people can validate the system as a whole.
Ledger systems are supposed to guarantee validity - nobody can cook the numbers - but watch what happens when authenticity and anonymity are involved in this example voting system:
- I create a cryptographic "key pair" - a private key that only I know and a public key that everybody can see. The Government signs my public key as proof that I'm a citizen using a Government private key.
- I place my vote. I sign my choice using my private key and add it along with the Government signature to the public ledger for everybody to see.
It has these properties:
- Nobody knows the Government private key so they can't place non-authentic votes.
- Nobody should know my private key so they can't tamper with my vote either.
- The Government signature provides authenticity and no other information is on the ledger, so it's anonymous too.
- The final count is public because anybody can add together the votes.
Nice, right? Nope! It actually scores 1/5:
- The Government can use the signature to identify me and my vote. After all, the signature originated from them when they verified me as a citizen and it's also right there on the ledger next to my choices.
- The Government can create as many "citizens" as they want, completely undermining both authenticity and validity. Anybody looking at the ledger won't be able to notice anything.
- Verifying a signature gives a cryptographic guarantee of exactly who I voted for; it's valid, sure, but it also opens up easy ways for people to bribe me.
So, anonymity is in contention with authenticity and validity is at odds with the ability to be bribed. Yikes.
However, notice that two signatures are involved. This can define a "chain of trust" between the Government and my vote. Maybe adding a few extra 'links' in the chain would at least separate the Government from being able to interfere quite that much? Unfortunately, this too is flawed - you can make the chain infinitely long and some entity along that chain will always be able to identify the voter and their vote. At some point, authenticity has to swap for anonymity. At the swap point, both your vote and identity are available.
Why is a public final count important?
Firstly, a quick side track: As mentioned in Hopelessn00b's answer, it is possible if you have a secret final count. The public ledger contains encrypted data effectively becoming a little useless to anybody but the Government. Estonia's e-Voting system currently has a secret final count - it's not a public ledger but the principle is the same. A public count is particularly important if, as seen in Estonia, the final vote counter is a single server that has been shown to be compromisable remotely. This means their entire democracy depends on a tiny group of people who make a series of rookie mistakes.
What about some kind of hybrid? Surely we can use something?
Don't get me wrong here; I'd love to see a system like this. Maybe someday a breakthrough will happen. A great digital boost to democracy everywhere - democracy so personal that it enters our homes. Let's just entertain the idea with a mixture of physical voting and see what happens.
So, we need to break the link between authenticity and anonymity and we can do that by flipping the voting process around - instead of dropping off your vote into a randomising pile, you pick up something from a randomising pile. Specifically, you pick up a pre-signed citizen ID. Next, in order to make it usable, you build a chain of trust relative to other citizens - for example, your parents could sign your new ID.
We're building trust chains of citizens here. It's still completely flawed however - the Government can still create as many fake citizens as it secretly wants and it'll always be easy to bribe, but at least it requires multiple people (2..) to pull off.
In order to list out votes in a public ledger, so anyone can count them up to conclude the results and confirm their vote was included, we have to give up the secret ballot. Alternatively we give up the public count but in doing so we make the public ledger useless. We also make ourselves vulnerable to fake citizens being created by the Government with ease, major digital security threats and admin failures due to the layers of complexity. Note that many of these also apply to e-voting in general.
It makes for an interesting concept none the less, but it doesn't come close to beating the simplicity and effectiveness of paper.