How does the signature verification feature in bitcoin-qt work without a public key? bitcoin-qt has a "signature verification" feature where you can verify a signed message.  All it needs is the bitcoin address of the signer, the message and a short signature.  From what I understand about digital signatures, you would need the public key in order to verify a signature.  A bitcoin address is just a hash of the public key.  The public key may be in the blockchain but that would only be the case if the address had already claimed at least one output.  If they haven't claimed any outputs, how can the signature be verified?
The ECDSA public key can be recovered from the signature.

See this bitcointalk thread and the linked pdf for details.