Alice wants to send Bob a message. Both have well known public/private EC keys (PA
, b
, PB
, b
). Both have well known public keys tied to an identity.
Alice computes a shared secret with Bob (PBa
), and uses the x
coordinate to tweak her private key, creating a new public/private keypair (PAx
, ax
).
Alice computes a shared secret between ax
and PB
, and encrypts a message for Bob this way (using ECIES, for example).
Bob can then easily read the messages, by computing the same shared secret, obtaining x
and using bx
and PA
to decrypt.
The advantage of this is that Bob can know that the message came from Alice, but cannot prove it came from Alice to anyone else, because he can forge it.
Also there's no need for an interactive exchange of temporary keys (which is not always possible). Alice can encrypt and walk away, knowing that Bob can read her message.
Likewise nobody observing the public key that the message was "encrypted for" can know that Alice is encrypting it for Bob, because the public key used is not Bob's well known key. It's a key only known to Alice and Bob.
Is using the "x coordinate" this way OK? Or am I leaking something dangerous?