<p>The cryptography Bitcoin uses for wallet private keys is ECDSA, using curve secp256k1:</p>

<p><a href="http://en.bitcoin.it/wiki/Elliptic_Curve_Digital_Signature_Algorithm" rel="nofollow">http://en.bitcoin.it/wiki/Elliptic_Curve_Digital_Signature_Algorithm</a></p>

<p>It is for signing messages, and does not useful for any method of encryption.</p>

<p>There are other methods of encrypting and communicating a message, ... <a href="http://gli.ph" rel="nofollow">Gli.ph</a>, <a href="http://bitmessage.org" rel="nofollow">BitMessage</a>, GPG/OpenPGP, and more.</p>

<p>If you trusted the party you are sending funds to, that party could use the message signing capability in the client to sign a message that tells you what GPG key to use in encrypting a message to that party, for instance.  That would give you the assurance that you are encrypting a message truly only readable by the party that has control of that Bitcoin address and signed the message.</p>

CC BY-SA 3.0
2013-11-10T16:27:53.183Z
2015-07-17T23:22:52.393Z
2015-07-17T23:22:52.393Z
Stephen Gornick
<p>You can not use the bitcoin address directly, but if the funds in the address have ever been spent, then you can see the public key associated with it in the blockchain, and you can encrypt with that using this python implementation: <a href="https://github.com/ikndevs/jeeq" rel="nofollow">https://github.com/ikndevs/jeeq</a></p>

<p>bitcointalk discussion here: <a href="https://bitcointalk.org/index.php?topic=196378.5" rel="nofollow">https://bitcointalk.org/index.php?topic=196378.5</a></p>

CC BY-SA 3.0
2015-07-19T00:56:33.970Z
Is this secure? This sounds like it's using a cryptographic primitive in a way that was never intended.
Nick ODell
CC BY-SA 3.0
2014-03-04T01:26:21.087Z
2014-03-04T01:26:21.087Z
Naveen
<p>It is not possible to encrypt something (if given an address) in a way the owner can decrypt. </p>

<p>However, if provided a message, an address, and a signature of the message by the respective private key, it is possible to recover the public key which you can use. </p>

<p>It's not quite so simple however - most public key encryption schemes have a limit on the data that can be encrypted (limited by key size). Because of this, GPG, and others using public key cryptography, involves generating a random for <strong>symmetric</strong> encryption of each message, and encrypts the new key with the recipients EC/RSA public key. </p>

<p>It might be possible to use secp256k1 as a basis for this, but ultimately the choice of curve is a minor detail in the overall design of the scheme. </p>

<p>Just because you can employ secp256k1 this way, doesn't mean you should - there is already software which has existed for years which can do just this. </p>

CC BY-SA 3.0
2015-07-17T16:31:39.560Z
2015-07-17T16:31:39.560Z
karimkorun
<p>Is it possible for a message sender to encrypt a message string with a receiver's public wallet address, email this ciphertext to the receiver and then have the receiver decrypt the message using their wallet (private key)?</p>

<p>I'm not talking about spamming the blockchain, the message could be sent using IM/Email once encrypted.</p>

<p>So it's sort of like using gpg but with the wallet public/private key.</p>

<p>Is this possible?</p>

<wallet><bitcoin-core><private-key><encryption><message>
Using the bitcoin wallet PKI for message encryption
NullPointer
# Using the bitcoin wallet PKI for message encryption

(Asked by: username_0 on 2013-11-08)

Is it possible for a message sender to encrypt a message string with a receiver's public wallet address, email this ciphertext to the receiver and then have the receiver decrypt the message using their wallet (private key)?

I'm not talking about spamming the blockchain, the message could be sent using IM/Email once encrypted.

So it's sort of like using gpg but with the wallet public/private key.

Is this possible?

**Tags:** wallet, bitcoin-core, private-key, encryption, message


---

## 3 answers

### Answer by username_1 on 2013-11-10. Score: 4

The cryptography Bitcoin uses for wallet private keys is ECDSA, using curve secp256k1:

<http://en.bitcoin.it/wiki/Elliptic_Curve_Digital_Signature_Algorithm>

It is for signing messages, and does not useful for any method of encryption.

There are other methods of encrypting and communicating a message, ... [Gli.ph](http://gli.ph), [BitMessage](http://bitmessage.org), GPG/OpenPGP, and more.

If you trusted the party you are sending funds to, that party could use the message signing capability in the client to sign a message that tells you what GPG key to use in encrypting a message to that party, for instance. That would give you the assurance that you are encrypting a message truly only readable by the party that has control of that Bitcoin address and signed the message.


---

### Answer by username_2 on 2014-03-04. Score: 3

You can not use the bitcoin address directly, but if the funds in the address have ever been spent, then you can see the public key associated with it in the blockchain, and you can encrypt with that using this python implementation: <https://github.com/ikndevs/jeeq>

bitcointalk discussion here: <https://bitcointalk.org/index.php?topic=196378.5>

> **Comments:**
> **username_3**: Is this secure? This sounds like it's using a cryptographic primitive in a way that was never intended.  

---

### Answer by username_4 on 2015-07-17. Score: 0

It is not possible to encrypt something (if given an address) in a way the owner can decrypt.

However, if provided a message, an address, and a signature of the message by the respective private key, it is possible to recover the public key which you can use.

It's not quite so simple however - most public key encryption schemes have a limit on the data that can be encrypted (limited by key size). Because of this, GPG, and others using public key cryptography, involves generating a random for **symmetric** encryption of each message, and encrypts the new key with the recipients EC/RSA public key.

It might be possible to use secp256k1 as a basis for this, but ultimately the choice of curve is a minor detail in the overall design of the scheme.

Just because you can employ secp256k1 this way, doesn't mean you should - there is already software which has existed for years which can do just this.


---

