For this project, we decided to look at Internet Voting Protocols. The only paper we could find that focused on its protocol instead of novel cryptographic functions was "An Anonymous Electronic Voting Protocol for Voting Over the Internet" by Indrajit Ray, Indrakshi Ray, and Natarajan Narasimhamurthi of the University of Michigan-Dearborn. They described a protocol for voting over the internet using pre-existing cryptographic primatives, but the protocol was not very clearly specified, and several of the parts were left unjustified. The properties we decided to focus on for this protocol were that if fraud were to occur, it could be easily proved, and if no fraud were to occur, it would not be possible for someone to prove that it did. Much of the protocol was straightforward and easy to program into Murphi. As with the previous models we've looked at, we modeled things like encryption, signed hashes, and voter marks using the corresponding agent id of the sender/receiver. The interesting part of this protocol is that rather than trying to prove that secrets are not divulged or that we are talking with who we think we are, we have to assume instead that everybody knows who they're talking to, but they can't trust anybody. Essentially the entities who are distributing, collecting, and counting ballots might be colluding to defraud the voter of their vote or cast additional votes. In this case, rather than preventing the fraud in the first place, the voter needs to be able to prove that it occurred. We chose not to model and prove that the identity of the voter is kept secret, since that seems to depend much more on the cryptosystem and the effectiveness of the blinding in teh blinded signature submission. In several places, we felt that the protocol was ambiguous or under-specified, and we made an effort to give the designers the benefit of the doubt when making decisions about what certain things meant. For example, we decided that the one-way permutation used to turn the serial number into an untraceable voter mark was a keyed hash function because otherwise anybody who knew all of the serial numbers could use the serial numbers to reconstruct all of the voter marks. We decided to remove the FTP server from our model, as we decided that at least within the confines of the model, it added nothing to the protocol. The paper does not really talk about the FTP server or justify why it should be in the protocol, but we have guessed that maybe it is used to obfusicate the origin of a cast vote. This seems like a pretty weak security measure, though, and they may want to think of using some sort of anonymous routing instead if this were their intent. In order to model intruders and collusion between the entities, we created a bunch of "bad" voters who are people not registered to vote. Essentially these could be actual people, or they could be fake entities created by some combination of the BD, CA, and VC. Because all 3 essentially share information and allow bad voters to vote, we feel that this method of modeling them is adequate to encompass the range of possible attacks on this protocol. The first invariant we tried to prove was that if a voter's vote had not been counted, they could prove that fraud had occurred. This is a simple invariant, and within the confines of our model, it holds. While modeling this, though, it occurred to us that with the necessary conditions stated in the paper for proving fraud, it may be possible for a voter to prove fraud when fraud did not occur. Our model confirmed that this was true. If a voter registers, recieves a ballot, and gets it certified, but does not vote, they can claim fraud by publishing their voter mark and the proper signatures of the BD and CA. While giving our presentation, Vitaly suggested that maybe a receipt from the VC could be used to demonstrate that not only was the voter certified to vote but that they actually cast a ballot. After our presentation, we went back and re-read the paper closely. We realized that there was such a receipt, but it was left undiscussed in the paper, and we had abstracted it away in our model when removing the FTP server. Because of this, we modified our model to reflect the existence of this receipt and we changed the invariant so that a voter needed such a receipt, as well as the signatures of the BD and CA, to prove fraud. With the addition of the this receipt, a voter cannot prove non-existant fraud any more in our model. Lastly, we wrote an invariant to confirm the attack on the protocol which is already stated in the paper. The attack occurs when someone registers to vote and gets certified but does not cast a ballot. In this case, the CA, BD, and VC can collude to cast a ballot in their stead. It is possible, if every single voter were to give up their annonymity and publish their signed salted voter marks, that this fraud could be proven. But first, if a number of voters equal to or greater than the number of fraudulent votes refuse to give up their annonymity, the fraud cannot be proven. Sencondly, and more importantly, there is no indication that this fraud may have occurred until all of the voters have revealed their secret voter marks. Thus, this fraud is only detectable and provable if the vote is not longer an annonymous one. While trying to model the protocol, we realized how under-specified it was. This led us to find a possible bug in the protocol which may not really have been a bug, but due to lack of solid specification, we can't quite tell. We also ran into some problems trying to use Murphi to demonstrate the correctness of the annonymity scheme. We feel that this is one case where some sort of proof techniques would be a better way to model and verify this protocol. Unlike authentication, where you are trying to prove whether or not something can occur, for this protocol we must assume that it can and then try to prove that the information a certain party has is enough to show that it occurred.