<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Crypto on gtank writes here</title><link>http://blog.gtank.cc/tag/crypto/</link><description>Recent content in Crypto on gtank writes here</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Thu, 26 Mar 2020 20:12:09 +0000</lastBuildDate><atom:link href="http://blog.gtank.cc/tag/crypto/index.xml" rel="self" type="application/rss+xml"/><item><title>Notes on anonymous credentials</title><link>http://blog.gtank.cc/notes-on-anonymous-credentials/</link><pubDate>Thu, 26 Mar 2020 20:06:25 +0000</pubDate><guid>http://blog.gtank.cc/notes-on-anonymous-credentials/</guid><description>&lt;p&gt;Best anonymous credentials that don&amp;rsquo;t use pairings:&lt;/p&gt;
&lt;p&gt;Single show, no attributes, symmetric issuer: Privacy Pass; uses VOPRFs&lt;/p&gt;
&lt;p&gt;Multi show, attributes, symmetric issuer: CMZ14 (original, &lt;a href="https://eprint.iacr.org/2013/516"&gt;https://eprint.iacr.org/2013/516&lt;/a&gt;)/CPZ19 (group element attribute variant, &lt;a href="https://eprint.iacr.org/2019/1416"&gt;https://eprint.iacr.org/2019/1416&lt;/a&gt;); uses &amp;ldquo;algebraic MACs&amp;rdquo; and categorically supercedes U-Prove&lt;/p&gt;
&lt;p&gt;Single show, attributes, publicly verifiable: Anonymous Credentials Light; uses an Abe signature variant&lt;/p&gt;
&lt;p&gt;For multi-show with attributes &lt;em&gt;and&lt;/em&gt; public verifiability, as far as I know you need to use pairings to get randomizable signatures. The best general credential of this type might still be the first real one, CL04 (&lt;a href="https://cs.brown.edu/people/alysyans/papers/cl04.pdf"&gt;https://cs.brown.edu/people/alysyans/papers/cl04.pdf&lt;/a&gt;) but probably now you&amp;rsquo;d instantiate it with Pointcheval-Sanders signatures (PS16, &lt;a href="https://eprint.iacr.org/2015/525"&gt;https://eprint.iacr.org/2015/525&lt;/a&gt; + PS18, &lt;a href="https://eprint.iacr.org/2017/1197"&gt;https://eprint.iacr.org/2017/1197&lt;/a&gt; tweaked for better proofs) which allows for constant-size credentials.&lt;/p&gt;</description></item><item><title>Notes on threshold signature schemes</title><link>http://blog.gtank.cc/notes-on-threshold-signatures/</link><pubDate>Fri, 18 Oct 2019 02:33:40 +0000</pubDate><guid>http://blog.gtank.cc/notes-on-threshold-signatures/</guid><description>&lt;p&gt;A threshold signature allows a subset &lt;em&gt;t&lt;/em&gt; of a group of &lt;em&gt;n&lt;/em&gt; possible signers to collectively produce a signature for the entire group. The simplest ones tend to use some &lt;a href="https://en.wikipedia.org/wiki/Distributed_key_generation"&gt;distributed key generation&lt;/a&gt; (&amp;ldquo;DKG&amp;rdquo;) based on &lt;a href="https://en.wikipedia.org/wiki/Verifiable_secret_sharing"&gt;verifiable secret sharing&lt;/a&gt; (&amp;ldquo;VSS&amp;rdquo;) to construct the keys and secret inputs to a &lt;a href="https://en.wikipedia.org/wiki/Schnorr_signature"&gt;Schnorr signature&lt;/a&gt; in a distributed manner. There have been a lot of these, and recalling all the Feldman-this and Pedersen-that gets confusing. The following seem to be the core papers in the field of discrete-log threshold signatures:&lt;/p&gt;</description></item><item><title>Adding privacy to legacy protocols with zero-knowledge proofs</title><link>http://blog.gtank.cc/private-legacy-with-zero-knowledge/</link><pubDate>Sun, 18 Aug 2019 22:24:19 +0000</pubDate><guid>http://blog.gtank.cc/private-legacy-with-zero-knowledge/</guid><description>&lt;p&gt;Last January, Adam Langley did a really cool thing. He &lt;a href="https://www.imperialviolet.org/2019/01/01/zkattestation.html"&gt;grafted zero-knowledge proofs&lt;/a&gt; onto an already-deployed, non-upgradable hardware system, thereby gaining privacy that the original design never allowed.&lt;/p&gt;
&lt;p&gt;I am VERY EXCITED ABOUT THIS. It&amp;rsquo;s an existence proof for all kinds of amazing things.&lt;/p&gt;
&lt;h2 id="the-problem"&gt;The problem&lt;/h2&gt;
&lt;p&gt;The specific problem here is that some websites want to know what type of &lt;a href="https://en.wikipedia.org/wiki/Universal_2nd_Factor"&gt;security key&lt;/a&gt; you&amp;rsquo;re using. Security keys support this by showing the site a signed &amp;ldquo;attestation certificate&amp;rdquo;, which sounds fine&amp;hellip;until you consider the details. The attestation key is burnt into the device at manufacture time, and will be the same for every attestation. Attestation certificates are &lt;a href="https://www.chromium.org/security-keys"&gt;supposed to be issued in large batches&lt;/a&gt;, but nothing holds vendors to it. Even if vendors are honest and competent, 100k possible identities isn&amp;rsquo;t very many in the face of &lt;a href="https://panopticlick.eff.org/"&gt;modern tracking techniques&lt;/a&gt;. And worse: each site gets to make very granular decisions about which brands and batches of keys to trust, which goes against the idea of a standards-based web.&lt;/p&gt;</description></item><item><title>Efficient Private Contact Search</title><link>http://blog.gtank.cc/private-contact-search/</link><pubDate>Mon, 22 Apr 2019 16:08:39 +0000</pubDate><guid>http://blog.gtank.cc/private-contact-search/</guid><description>&lt;p&gt;Recently, a &lt;a href="https://twitter.com/filosottile"&gt;friend&lt;/a&gt; and I indulged in the very normal spring weekend activity of discussing the &lt;a href="https://signal.org/blog/contact-discovery"&gt;Signal contact discovery problem&lt;/a&gt; in the park.&lt;/p&gt;
&lt;p&gt;The contact discovery problem is this: a service holds a list of all registered users, and an individual user has an address book. The user wants to learn which of their contacts is also registered for the service without leaking the contents of their address book to the service, and the service wants to provide that information without publishing a global list of users to anyone who doesn&amp;rsquo;t already know them. The typical app&amp;rsquo;s solution to this is for the user to upload their entire address book to the service.&lt;/p&gt;</description></item><item><title>A Macaroons Reading List</title><link>http://blog.gtank.cc/macaroons-reading-list/</link><pubDate>Fri, 14 Dec 2018 03:47:26 +0000</pubDate><guid>http://blog.gtank.cc/macaroons-reading-list/</guid><description>&lt;p&gt;Macaroons are one of my favorite cryptographic constructions. They were almost the first one I really understood, and they &lt;a href="https://privacypass.github.io/"&gt;heavily influence my designs&lt;/a&gt; for anything involving authorization.&lt;/p&gt;
&lt;p&gt;There&amp;rsquo;s a lot to love about macaroons. They&amp;rsquo;re elegant and fast. They&amp;rsquo;re secure and easy to reason about. They offer new capabilities over what was there before while sacrificing nothing. They are the anti-JWT, and they are &lt;em&gt;tragically underused&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;A macaroon is a bearer token consisting of a list of statements and an &lt;a href="https://en.wikipedia.org/wiki/HMAC"&gt;HMAC&lt;/a&gt; (a type of secret-keyed hash) of the whole list. The statements (called &amp;ldquo;caveats&amp;rdquo;) are restrictions on what the bearer can do. They can be anything, like &amp;ldquo;must be logged in&amp;rdquo;, &amp;ldquo;not after next Tuesday&amp;rdquo;, &amp;ldquo;once per hour&amp;rdquo;, &amp;ldquo;read but not post&amp;rdquo;, or &amp;ldquo;can only see the /catpics directory&amp;rdquo;. When a server protecting some resources sees a macaroon it issued, it can check the HMAC to see that the list is valid, then compare the restrictions to the bearer&amp;rsquo;s request.&lt;/p&gt;</description></item></channel></rss>