Bitcoin: Limitations and advantages of the NFC ring
-
There are two potential uses for a Bitcoin NFC ring.
The first is taking payments.
This is very easy.
I recommend doing the following:
Format ring with NDEF text message containing Bitcoin address. Set all lock bytes to 0xFF, to prevent anyone from overwriting your address with a different one. Whenever someone wants to pay you, they can scan your ring.
The second use is making payments. This is a [b:cbrmq5mt]much harder[/b:cbrmq5mt] problem. Why? Because the NFC ring v1.0 is an inactive NFC device, and can not perform arbitrary computation. There is also no way to interact with the ring beyond communication through NFC. This means that your only option, as of now, is to store your Bitcoin private key on the ring and then use that from a more powerful computer. This is a terrible idea, and I don't see any reason for doing this.
Now, there are some NFC chips out there that can perform more advanced computations, and at some point we might get one advanced enough to do ECDSA signatures, which are required for actually making Bitcoin payments from the ring. However, without any sort of meaningful UI with which to confirm or deny transactions, the usefulness of the ring is still limited.
This means that, without doing something clever, the ring is basically useless for making payments, but great for taking them.
Now, if security isn't such a big deal, and we are OK with having credit card levels of security, a conceivable method of making Bitcoin payments with the ring would be to have a third-party service managing payout. So you scan your ring at the store, the store reads your <third party service> ID, and asks for $X from your account at <third party service>. This isn't terribly useful as of yet, unfortunately.
There are a number of other options involving your ring communicating with some third-party service or oracle software directly, acting as a cryptographic access token to your remotely-hosted account which manages your Bitcoins. This is probably one of the best (currently feasible) options.
-
This is exactly what I was going to post but you already have.
You raise an interesting idea however... A third party would be required for this to work but in keeping with the bitcoin spirit you could have that third party on your phone.
In essence your ring stores some sort of key which can be given to a person in order to request a payment (which includes the amount and the public wallet address to send to). The key the ring shares is simple to authenticate the request. This request could be sent to your smart phone which then notifies you requesting you to enter a pin to authorize the payment. The app on your phone then automatically makes the correct transfer out of whatever account you have set it up with. Your private key is never exposed. The only downside is that previous keys you share could be used to make additional requests. This could be solved by you periodically updating the verification key in the ring.
That should work... And I don't see any obvious security flaws in it (but I may be wrong). Implementation wise however the vendor who you are trying to pay will need to know how to request a payment and the format that it needs to be in (assuming that we can't make a standard) I'm not sure how much data can be stored in the ring. But storing all that might be a bit too much.
It really would be so much easier if the ring could do the Authentication inside it. However this more convoluted method does have the benefit that even if an evil party had access to your ring, they would still need your phone AND pin number. I guess that's about as much as you can hope for.
EDIT: After sleeping on it, If you have to have your phone with you to approve transactions it would be far simpler just to have your phone scan a QR code or interact through NFC to perform the action. The ring adds nothing and makes things a good deal more complicated. You could potentially set up a remote server to perform the same features but at that point I think you have moved beyond what is viable for the general public.
-
Why not have a "wallet" private key address on the Private side of the ring?
I don't keep all of my money in my physical "wallet", I wouldn't do it either with my ring.
So, I move coins from my "bank" to my "wallet". My "wallet" private key is stored offline, in my ring. I go out and shopping and if I want to accept a payment, I provide (or they scan) the public side of my ring and they pay me, it goes into my "wallet" just like it would with my physical wallet.
If I want to pay someone, it's a two-step process. My mobile device reads the Private side of my ring, and scans the private key. It then uses that private key with an Application that makes the payment (possibly scanning the payee's ring to get their public key), and then deletes the Private key from the mobile device after payment.
If I don't have enough funds in my "wallet", then it's no different than if I didn't have enough funds in my physical wallet, I cannot buy it.
-
I think one option would be to have a third party however this would make things easier and less friction for the user but less secure (might be sensible for smaller payments).
Another option is to just store the keys on your ring and use them to interact with your mobile phone so your mobile phone never stores your private key (might be sensible for larger payments or payments when you can't trust the vendor).
-
I would like a mobile wallet that will not send out BTC without an extra 'unlock' from my ring.
hopefuly if my phone gets stolen the nfc lock is some protection but an extra layer on getting money out sounds good to me.
-
The ring could be a security 'factor' that relies on physical possession, like the Trezor.
Example: You have a bitcoin wallet on your mobile. You want to make a payment. You scan a QR code, Your wallet requests your BIP-38 encrypted key from your ring. You present it and the payment proceeds.
The only difference is that the ring wouldn't sign the transaction, the wallet would still do that, but it wouldn't do it without the ring.
If you lost the ring you would need to turn off 2-factor authentication temporarily until you got another ring. You might get your 'phone snatched, but without the ring the wallet would be useless and you could recover your bitcoin from a backup of your private key.
-
@DerekW I super would love for my ring to authenticate a wallet.
-
Another option is to just store the keys on your ring and use them to interact with your mobile phone so your mobile phone never stores your private key
Sorry, but storing a complete private key on the ring is probably a bad idea. Since the merchant taking payments are surely funneling all payments via some bank or payment processor, they could just send your public ID and let the remote payment processor handle things. They could do an instant debit or even a delayed credit transaction. You could have traditional (and costly) option to dispute the transaction.
With banks testing contactless payments (NFC) for sums under 25EUR, the same could be done with NFC rings, but that would surely mean the ring must use other NFC chips and the whole process would probably get more expensive. The brave could perhaps dare to extract the active part of a Paypass and try to squeeze that into a ring. But it'd surely be illegal for the stores to receive a payment unless you have an unharmed card with your signature etc etc. So, trouble.