Bounty offered to Mycelium developersWe are developping the BitID authentication protocol. Basicaly it's an open standard to facilitate user's registration in login on a service using its Bitcoin key (it could be compared to "Facebook connect" on the UX and flow). User scans a QRcode which contains a bitid:// URI, it's parsed for validity by the wallet and a confirmation is prompted. After choosing a Bitcoin address, the URI is signed and a POST is made in the callback addres contained in the URI.
For the full explication of the protocol, examples and demo please refer to our GitHub :
https://github.com/bitid/bitidTo be successfull, BitID must be implemented in most of the popular wallets. We would like to start the development with Mycelium (because it has already the signing message functionality). To motivate developers we are offering a bounty of 1 BTC.
What is needed to do :- register the bitid:// scheme (so it is activated in case of click)
- throw a bitid:// intent when scanning a BitID QR code
- decode the URI and verify its format
- display a request for authentication showing the domain name callback and ask for validation
- ask the user to pick up or create a Bitcoin address for the authentication (show the last Bitcoin address used if this is a known callback address)
- sign the BitID URI with the private key
- POST the signature, the URI and the public key to the callback URL
- completion dialog : success/retry/cancel
Please PM me for more details and specifications.
Eric
Hi Eric, I have been toying around with a VERY similar login mechanism, just never got around to spec it. Great minds think alike :-)
Classical password authentication is an insecure mess that could be solved nicely with public key cryptography. The problem however is that it offloads a lot of complexity and responsibility on the user. Managing private keys securely is really hard. The good news is that this is already being solved in bitcoinland, simply because we have to (
if you don't have exclusive control over your private keys you don't have any bitcoin), so doing public key authentication is practically a free lunch to bitcoiners.
PM sent.
Comments:
- This should be formalized as a BIP
- The bitid request should optionally contain (a prefix of) the bitcoin address to sign with to allow automatic private key selection for the user
- I suggest that the callback URL is reduced to https only and possibly only to the host name and path (no parameters), and then URL encoded. This makes the bitid shorter and human readable. Instead of ...&c=aHR0cHM6Ly93d3cuc2l0ZS5jb20vY2FsbGJhY2s%3D it would just have ...&c=www.site.com%2Fcallback
- The server side does not need to have the public key of the user, the bitcoin address + signature is enough for verification
- The signature on the bitid should be prefixed with "Bitcoin Signed Message:\n" as any other Bitcoin signed message
This is just what I had in my head, I am certain that others want to chip in too.
Please make a separate thread for discussing the BIPification of bitid.