## 1. Introduction

Simply stated, a bitcoin transaction is a transfer of **spending control** between different parties over a pre-specified amount of satoshis. A satoshi is the smallest fraction of a bitcoin and is equivalent to BTC In order to successfuly complete said transfer, the sender must demonstrate that she is the rightful owner of the satoshis she wishes to spend. Such a proof is imperative as it allows the different nodes on the network to reach an agreement regarding the validity of the transaction and as a result, facilitate its inclusion in the blockchain.

At the time of writing, bitcoin’s proof of ownership is encapsulated in a particular type of digital signature known as the Elliptic Curve Digital Signature Algorithm (**ECDSA)**. It is a variant of the Digital Signature Algorithm (**DSA**) that relies on Elliptic Curve Cryptography (**ECC**).

In the first section, we introduce the DSA scheme, prove its **correctness**, and discuss some of its **security** properties. In particular, we point out that as of the time of writing, and despite its prevalence in various cryptographic settings, we do not know of any valid security proof of DSA in the random oracle (RO) model. However, we highlight that slight variations of it can be proven to be secure.

In the second section, we introduce the ECDSA scheme and prove its **correctness**. Later on, we present a python-based implementation to further elucidate its building blocks. We also describe how an ECDSA signature gets typically encoded within a bitcoin transaction. Finally, we highlight some of the scheme’s potential shortcomings including the absence to-date of a **security** proof in the RO model, its susceptibility to being **malleable**, and its non-linear design that hinders an efficient implementation of **multisignature** transactions.