The wikipedia page on ECDSA signature explains how the signer's private key can be recovered if two signatures are produced with the same random (private key looking) element k. In fact, it is claimed on the DSA page that a fault in the implementation of java's SecureRandom class have led to such collision. I would like to confirm that in principle, it is possible to write code checking for such collisions in the blockchain in order to steal bitcoin private keys in the hope that some faulty wallet implementation has prevailed somewhere. Does the following algorithm outline make sense?

  1. Check every signature of every transaction input in the blockchain
  2. If two signatures correspond to the same public key, check if same r
  3. If same r assume there is a collision and derive private key
  4. Check if corresponding address is part of utxo set

Assuming this can be implemented, has it been done already?

1 Answer 1


It can easily be done, and has been done. See https://bitcointalk.org/index.php?topic=581411.0 for example.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.