What is the public key?
new_P = (c*a)*G = c*(a*G) = c*P
That's pretty cool. The EC multiplication routine doesn't
look like it should associate and cancel like that.
ECDSA "multiplication" doesn't exactly resemble the multiple that most folks are familiar with, but it's still associative. a*G is just "adding" G to itself a times. Then c*(a*G) is just adding P to itself c times, which was just adding G to itself a times. So it makes sense (to me) that it's associative, but I've been doing this stuff for a long time...
I guess that means that if Moore's law holds for a bit longer (heh), it will become possible to attempt rainbow tables attacks on schemes like this if they don't start with a good entropy source for a and c. Brainwallets come to mind.
That's the basis for this thread:
https://bitcointalksearch.org/topic/self-descriptive-strengthened-keying-a-standard-for-deriving-keys-from-seeds-102349The idea is to make the standard clients only accept certain kinds of seeds, thus requiring brainwallet users to add X bits of hard entropy to their [probably crappy] brainwallet seed. I'm not a fan of brainwallets, but we know that folks insist on it, so we want to try to be responsible about it.
What issues could be presented just by monitoring the balance on a public address in a watch-only wallet?
You have a watching-only wallet on your system monitoring your offline coins. Then through some feat, either through unauthorized access, or exploiting users' ignorance of how Bitcoin works, they import one of their own addresses into your wallet. You don't know, because you don't pay attention to every address that is in your wallet at all times. Now they offer to buy something from you for 1000 BTC, send the coins to their own address -- and it shows up in your offline wallet watcher! Snugly, you believe that the coins have been sent, because there's 3000 confirmations by now. You send the merchandise, and then they sweep the address. SCAM!
What I was considering doing was the following:
(1) Create a special kind of watching-only wallet just for this, and it's balance will never be included in your master balance
(2) Allow a user to import a watching-only address
if it is signed by one of their offline private keys.
Part (2) sounds inconvenient, but it actually isn't that bad. Most people would import their private key to the offline computer, first, anyway. The program can sign the public key with one of your existing addresses, so that it can be imported to your online computer.
It's just one of those things where I'm putting security above convenience. The vast majority of users could do all this responsibly without hand-holding, but while Bitcoin is still immature, it's my integrity on the line when they screw up. So I want to help them avoid this...