I'm interested and confused at the same time, so I'm going to try and consolidate what I believe are related ideas. Please understand any hesitation on my part is only because I have this idea in my mind about keeping bitaddress simple and easy to use.
Since there has been a discussion about how Bitcoin addresses can be safely generated as the point sum of two public keys, you ought to consider making Bitaddress.org support creation of such addresses. This has generated a lot of interest, and would be a relatively simple change.
The result of making the change I propose, is that someone could paste in an EC point generated from somewhere else (e.g. smartphone) and the entire sheet of paper wallets would then have "half" private keys. (they are still full length, but they are only half of what's needed to spend the funds).
The other "half" needed to redeem the funds would be the private key used to create that other EC point. Basically, the paper wallet would be completely immune to a compromised machine or even a fake website, as long as the attacker didn't also control the independent source of that other EC point.
In brief:
1. Allow a user to paste in a public key (which is 65 bytes). Detect typos by verifying that X and Y are on the curve. Recall that a public key is an EC point.
2. You generate a Bitcoin address exactly the same way - but as you are computing the Bitcoin address - right after you generate the public key (pubkey = privkey * G), you do an EC point addition, adding in the public key you were just given. (so, pubkey = privkey * G + point)
3. You encode the private key in some way that indicates that it is only half of a private key. This clues redeemers into the fact that some other key is needed. (I would like to propose that this be signalled by using something other than 0x80 as the version byte when doing the base58 encoding, perhaps something that makes the Base58 coded number start with '6' instead of '5').
EDIT: I recommend you use the version byte 0xA2 for this purpose. Codes will start with a 6.
I will put a bounty on it. One of my silver coins mailed to the address of your choice.
Bounty for a "Split Key" (working name) tab on bitaddress. The tab needs to accept a list of public keys (textarea) and the output needs to look like the paper wallet but also have a hollow square to place a QR code of another private key (the seed key). The split key paper wallet would show two private keys and one bitcoin address. However byte 0xA2 is used in place of byte 0x80 for both private keys, signifying that they need to be combined.
Could you provide me an updated "in brief". I believe the Elliptic Curve math question thread didnt have a clear conclusion for me... possibly cause I took a good number of days to get through the whole thing, but what I understood was point addition was rejected in favor of point multiplication.
You mentioned this to me in the PM "except when you compute the Bitcoin address, you use a new public key from the pasted file in place of the secp256k1 constant G". That corresponds to Meni Rosenfeld's understanding below as well. Can you point me to the post from the other thread which talks about that? Is that the point multiplication people were speaking of?
I understand the seed key could be provided by you Casascius but ideally there would also be functionality within this tab to generate Part A (seed) and Part B of the Split Key. Therefore, I could generate Part A at my friend Alice's house and use her printer and I could generate Part B at my friend Bob's house and use his printer. I haven't thought this through fully.
The use case of the final product is long term paper storage of bitcoins... correct? These aren't mediums of exchange like Casascius coins or printcoins?
Side note for v1.4 of bitaddress
- I will allow for a deterministic wallet to be created by entering a passphrase on the wallet details tab, instead of a private key. You will be prompted that your entered value is not a valid private key and asked if you want to use it as a passphrase to create a private key. It's just a SHA256 of the passphrase.
- I may update the wallet details tab to show QRCode of bitcoin address and WIF private key. I'm realizing QRCodes are just a great way to copy/paste from computer to mobile.
- I may update the wallet details tab to show the 65 byte public key. Since there's so much chatter about it lately
- I'm adding some FAQs to the Bulk Wallet tab. I'm going to use some text you posted about using Bulk Wallet to accept bitcoins on your website.
Once that's done then I can decide on my next TODO.