<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">2015-04-14 16:04 GMT+03:00 Natanael <span dir="ltr"><<a href="mailto:natanael.l@gmail.com" target="_blank">natanael.l@gmail.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div dir="ltr"><div><div><div><div><div>This started with the following Reddit thread: <a href="http://www.reddit.com/r/crypto/comments/32gh1v/looking_for_signing_algorithm_that_keeps_signee/" target="_blank">http://www.reddit.com/r/crypto/comments/32gh1v/looking_for_signing_algorithm_that_keeps_signee/</a><br><br></div><div>The goal is to be able to publish signed messages anonymously and then later on prove it was you who signed them, at a time of your choosing.<br><br>NOTE: I'm not a professional cryptographer, just a hobbyist, but I think I've got a good grip of how things work. I'm willing to learn, feel free to point out errors or flawed assumptions! It might be complete crap, or it might be useful. I'm trying to keep it reasonably formal, but there's probably some ambiguity left. I'm happy to answer questions.<br><br>Bonus features:<br>1: To be able to publish multiple messages without revealing at that time that they're signed by the same person.<br>2: To be able to selectively link together multiple sets of arbitarily chosen messages at a later point in time.<br>3: Not needing to store any state, so you don't need to store any data beyond your original private key. The random numbers needed are derived from values you already have whenever you need them.<br></div><div> <br></div></div></div></div></div></div></blockquote><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div dir="ltr"><div><div><div><div><div></div>    / - - - /  <i><font size="1"> ( Further contents omitted for brevity's sake, please refer to the original post for the complete text. )</font></i></div></div></div><br></div>___________________________________________<br></div>
The cryptography mailing list<br>
<a href="mailto:cryptography@metzdowd.com" target="_blank">cryptography@metzdowd.com</a><br>
<a href="http://www.metzdowd.com/mailman/listinfo/cryptography" target="_blank">http://www.metzdowd.com/mailman/listinfo/cryptography</a><br></blockquote></div><br></div><div class="gmail_extra"><br></div><div class="gmail_extra"><br></div><div class="gmail_extra">Why are you making it so complicated? <br><br>1) Have a message <b>m</b> for which you want to create a temporal anonymous signature.</div><div class="gmail_extra">2) Create your Personal Identifier String, which contains your name, birthday, etc.</div><div class="gmail_extra">3) Create an <b>n</b> character length password and hash it.</div><div class="gmail_extra">4) Use the hash of your password as an AES key with which to encrypt your Personal Identifier String.</div><div class="gmail_extra">5) Concatenate your <b>PIS</b> to the end of the message <b>m</b>.</div><div class="gmail_extra">6) ECCDSA the whole thing.</div><div class="gmail_extra">7) Append the public key of the ECCDSA signature to the end of the whole thing.</div><div class="gmail_extra">8) Done.</div><div class="gmail_extra"><br></div><div class="gmail_extra">Result: you have provided encrypted personal information with the data.</div><div class="gmail_extra">Adversary is unable to alter the data or the encrypted <b>PIS</b> without invalidating the ECCDSA signature. </div><div class="gmail_extra">If the user wishes to reveal himself as the author of the said message, he only needs to provide the password which was used to create the AES key.</div><div class="gmail_extra"><br></div><div class="gmail_extra"><u>Of course, this version of the implementation is vulnerable to identity theft.</u> An adversary is able to put anybodies personal info into the <b>PIS</b>.</div><div class="gmail_extra"><br></div><div class="gmail_extra"><br></div><div class="gmail_extra">This version fixes the ID theft issue:</div><div class="gmail_extra"><br></div><div class="gmail_extra">1) Have a nation-wide PKI system (Based on RSA) implemented, like the ID card in Estonia.</div><div class="gmail_extra">2) Have a message <b>m</b> for which you want to create a temporal anonymous signature.</div><div class="gmail_extra">3) Create your Personal Identifier String, which contains your name and your government-assigned personal identification code.</div><div class="gmail_extra">4) Sign your <b>PIS</b> with the private auth key on your ID card. CA provides an OCSP signed timestamp, which validates your signature. </div><div class="gmail_extra">5) Create an <b>n</b> character length password and hash it. </div><div class="gmail_extra">6) Use the hash of your password as an AES key with which to encrypt your <b>PIS.</b></div><div class="gmail_extra">7) Concatenate your encrypted <b>PIS</b> to the end of the message <b>m</b>.</div><div class="gmail_extra">8) ECCDSA the whole thing. </div><div class="gmail_extra">9) Append the public key of the ECCDSA signature to the end of the whole thing.</div><div class="gmail_extra">10) Done.</div><div class="gmail_extra"><br></div><div class="gmail_extra">Result: you have provided encrypted and authenticated personal information with the data.</div><div class="gmail_extra">Adversary is unable to alter the data or the encrypted <b>PIS </b>without invalidating the ECCDSA signature.</div><div class="gmail_extra">If the user wishes to reveal himself as the author of the said message, he needs to provide the AES password and his auth public key cert.</div><div class="gmail_extra"><br></div><div class="gmail_extra">How to verify the claimed identity of a message:</div><div class="gmail_extra">1) Verify the integrity of the ECCDSA signature.</div><div class="gmail_extra">2) If the sig is correct, proceed to step 3. Else, abort.</div><div class="gmail_extra">3) Decrypt <b>PIS</b> with provided password.</div><div class="gmail_extra">4) Verify RSA public key cert by making an OCSP request to CA. If valid, proceed to step 5. Else, abort.</div><div class="gmail_extra">5) Recover the <b>PIS</b> by decrypting it with provided public key. </div><div class="gmail_extra">6) If the contents of the <b>PIS</b> match the contents of the public key cert (it contains the persons name and personal identification code), the author of the message has been validated. Else, abort.</div><div class="gmail_extra">7) Done.</div><div class="gmail_extra"><br><br></div><div class="gmail_extra">Of course, this implementation does not fulfill your bonus features requirements, but it is a lot simpler and is based on already-proven math algorithms,  </div><div class="gmail_extra">which enable one to reason about the security of the said implementation in a more effective manner.</div><div class="gmail_extra"><br></div><div class="gmail_extra"><br></div></div>