# Stealth Address ## Abstract The `Stealth Address` is the technology which allows us to hide the **recipient** address. ## Details The blockchain for example `Ethereum`, we generate the private key and the public key based on private key. The hash of the public key is going to be a address which specifies the **recipient**. This address corresponds one private key and public key pair so we can easily identify who is the **recipient** of the transaction. In our blockchain, we generate **recipient** address for each transactions and make it hard to identify the **recipient**. 1. Generates recipient public key pairs 2. Generates recipient `Stealth Address` 3. Prove the ownership of `Stealth Address` Above sequence used for confidential transfer to keep the **recipient** address anonymous. ## Generates Recipient Public Key Pairs Every transaction has **recipient** and we hide the **recipient** with stealth address. We assume Alice send transaction to Bod. First of all, Bod generates the two key pairs (a, A) and (b, B) such that `aG = A` and `bG = B`. `a` and `b` are the private keys and, `A` and `B` are the public keys. Variable | Explanation | Derivation :------------ | :------------- | :------------- a | Bob private key | a ∈ Fp b | Bob private key | b ∈ Fp A | Bob public key for `a` | a * G B | Bob public key for `b` | b * G ## Generates Recipient `Stealth Address` Secondly, Alice generates the Bob **recipient** address as referred to the `Stealth Address`. Alice selects the random number `r` and calculate the `Stealth Address` with Bob public keys such that following. $$ P = H(r*A) * G + B $$ No one can link P address with `A` and `B` because it's concealed by elliptic curve arithmetic. Alice publish the `P` and `R` calculated as `R = rG`. Variable | Explanation | Derivation :------------ | :------------- | :------------- r | randomness generated by Alice | r ∈ Fp H | one-way hash function which takes curve point and maps field element | e: xG -> Fp R | public value generated by Alice | r * G P | stealth address of Bob | H(r*A) * G + B ## Prove the ownership of `Stealth Address` Lastly, Bob needs to prove the ownership of `Stealth Address` to use assets associated with it. Bob knows his private keys `a` and `b`. He can calculate the private key of `P` with `x = H(a * R) + b`. This is the [`Diffie–Hellman key exchange`](https://en.wikipedia.org/wiki/Diffie%E2%80%93Hellman_key_exchange#:~:text=Diffie%E2%80%93Hellman%20key%20exchange%20is,Whitfield%20Diffie%20and%20Martin%20Hellman.&text=Diffie%E2%80%93Hellman%20is%20used%20to%20secure%20a%20variety%20of%20Internet%20services.) algorithm. Only Bob can know the `x`. This is how concealing the **recipient** address. Next section, we explain how we conceal the **amount** of transactions.