Can a zero knowledge proof (or MAC) be generated from human-typable input? Edit: My goal is to create a voting scheme that doesn't require a lot of crypto infrastructure to be deployed on the client side.  Smartcards, and tokens are impractical for these purposes.  I envision a user typing a &quot;code&quot; into a web browser (which is imperfect) and submitting the inputs.  The code is either static, or with minimal circuitry that can be covered in epoxy and embedded in a card.
Ideally this code could manifest itself in a way that is non-linkable to the original voter.  I would like these anonymised ballots to be publicly acessible for verification.
If I can somehow &quot;convert&quot; a human typeable code into Microsoft's UProve, then all my requirements would be solved.

Is it possible to create a ZKP (or comparable MAC scheme) that can be typed by a human with relative ease?  What would that crypto system look like?
If I were to design a crypto system around what can be typed easily by a human, say  26 uppercase ASCII letters, or 16 mixed case letters I believe that leaves me with security of 2^92 bits of security.

How should I take this design detail and turn it into something that can be used into a ZKP?

For example, take an ECC key with n bits and simply sign data with my key.  Or use that crypto material in a comparable standard such as UProve or PGP.
The usual way to encode long random bitstrings, so that they can be easily memorized and/or entered by humans, is to break them into blocks of (typically) 10 to 12 bits and map each block to an entry in a fixed dictionary of common words.  This approach is commonly used for secure passphrase generation, e.g. by Diceware, S/KEY and PGP.

Assuming an 11-bit (i.e. 2048 word) dictionary, which seems to be close to the "sweet spot" for English (in terms of difficulty of memorization per bit), you could compute a MAC of the current time using the shared secret key, truncate it to 88 bits and map these to a sequence of eight words for the user to enter.

Ps. The optimal choice of words to include in your list depends somewhat on the use case and especially the entry method you're envisioning.  For typed entry, shortness is important, whereas for spoken entry you want longer words with easily recognizable sounds.
For typed passphrase generation, I've personally found a good starting point to be the set of exactly 4-letter words in any basic English dictionary (which should give you around 2000 to 3000 words, depending on the size of the dictionary), optionally filtered to remove any inappropriate, obscure or confusingly similar words.

Edit: I didn't see your clarification before posting this answer.  Honestly, I'm not sure if the method I describe will help you in your task "to create a voting scheme that doesn't require a lot of crypto infrastructure", but then, I'm not really sure what would, either.  In the answer above, I implicitly assumed that storing the secret key and calculating the MAC would be done by a computer, with only the MAC entry stage being done by hand.  If you want the MAC calculation to be done by a human too, this becomes a very different (and much more difficult) challenge.