Monorepo for the BitAuth2017 protocol standard. (full specification)
- Part 1: Authenticating Bitcoin Transactions (slide →)
- Part 2: Static Authentication vs. Scriptable Authentication (slide →)
- Part 3: Scriptable Authentication & the Blockchain (slide →)
- Part 4: Use Cases & Implications (slide →)
This is a highly-simplified demo of message signing using a testnet BitAuth identity.
You'll need to have Node (v6 or later) and Yarn installed. To build the demo, clone this repo and install the dependencies with the following commands:
git clone https://github.com/bitjson/bitauth2017.git
cd bitauth2017/lib && yarn && yarn link
cd ../demo && yarn && yarn link bitauth
Generate a new HD key for our testing by running:
yarn genkey
This will generate the file: data/private.json
, and output a new testnet address.
Paste your testnet address into a testnet bitcoin faucet, and send some funds.
Once the funds have been sent, create your BitAuth Identity by running:
yarn genid
This command will fetch all UTXOs sent to your address, create a new Authentication Transaction (authtx) at data/authbase.bitcointx
, and broadcast the transaction to the testnet.
This transaction will serve as the authbase of your testnet identity. It's currently single-signature, but can be upgraded to more complex authentication requirements with additional authtxs.
If everything looks good, you can broadcast the transaction by running:
yarn broadcast
Your transaction will look something like 6213455da06d44842cde9b1b271aa186e6ec0b2b3b2df82a55aa54da756339d4.
01000000014298e0e9f1fa4aad63b25a701095b937150be03c9304a86dd846a098a48dd8dd000000006a473044022078cc85f6d83fea8961a6afa8f1b524a5fd618526c9f98c63b00d3fb1d3f4008a0220248bb35fb12c46349f6c94aa224db16d32ecbb75e6ea8819116268261cfb78cc012103c8a2dc1bbbb5e261abcdc89c03384c2b80330b84a52694725cd53d28aeb0f56fffffffff03405dc600000000001976a914cf7e9df9c834338aa1b310b288e2d91cf459c74388ac405dc600000000001976a914a1a767a9b17fdd3ee0f841568a369fd56d1fc5e288acfe318e0a000000001976a914ac19d3fd17710e6b9a331022fe92c693fdf6659588ac00000000
With your identity ready, you can sign a message. You can modify message.txt
if you'd like, then run:
yarn sign
This will sign the contents of message.txt
and output signature.bitauthsig
Example using the authbase above:
01000000016213455da06d44842cde9b1b271aa186e6ec0b2b3b2df82a55aa54da756339d4010000006b483045022100a152595d0d0a74b18e1c528bc5da0500c98b2ab35d5c57034227b6232e9b889302202888b281e13a3a623d0f24c108685ffe30a67903d1b3e3d04c5effd741a977fe012102a9e7d0b9d3dd050105140986901ddfbdf3398e14d9f906d4076af3cc2af32b3effffffff010040075af07507002a6a286861736832353600fc75eaa433dac149fd2ed5304f98e1542ce16a77fbb57a91fd489d87d2bc0a8500000000
To verify the signature, run:
yarn verify
This will validate that your identity properly signed the exact contents of message.txt
.
$ node build/verify.js
Verifying the signature transaction, given authhead: 6213455da06d44842cde9b1b271aa186e6ec0b2b3b2df82a55aa54da756339d4
✔ Signature transaction is valid.
Verifying the message digest is correct:
Message as string:
Hello, BitAuth!
Message as hex:
48656c6c6f2c2042697441757468210a
Message digest using algorithm hash256:
fc75eaa433dac149fd2ed5304f98e1542ce16a77fbb57a91fd489d87d2bc0a85
Signature transaction digest info:
algorithm: hash256
message digest: fc75eaa433dac149fd2ed5304f98e1542ce16a77fbb57a91fd489d87d2bc0a85
✔ Message digest matches.
✨ Done in 0.37s.
An alpha version of the library is available for Node v6 and above (as well as Typescript typings).
git clone https://github.com/bitjson/bitauth.git
cd lib && yarn
yarn link
See the readme for details.
Please note, there have been a number of other projects which apply concepts in bitcoin for identity and authentication purposes.
My hope is that BitPay's BitAuth Node.js project will be deprecated in favor of the @bitjson/passport-bitauth
module in this one, and that the infrastructure work in the following projects will migrate to the identity construction and authentication strategy utilized by this one:
- AirBitz Edge Security - a single-signon security platform for blockchain apps
- BitID – very well-developed set of infrastructure for authentication. Bitcoin-like public/private keypair.
- BitPay's BitAuth – a Node.js implementation of Jeff Garzik's Identity Protocol v1. Bitcoin-like public/private keypair.
- BlockAuth - Decentralized Identity & Authentication by Neuroware
- BlockchainID (old) – Decentralized alternative to Facebook Login and OpenID
- Blockstack Blockchain ID – a unique identifier that is secured by a blockchain
- Blockstack Auth JS - Blockstack Auth library, written in node.js
- Certcoin - A Decentralized PKI for Highly-Available Hierarchical Identities
- identity-on-bitcoin - create identities, anchor them into the Bitcoin Blockchain, and authorize service providers to access specific attributes