Congratulations, you have arrived at Simple ECDH.
You're here because the person who sent you this link (let's call them Alice)
wants to communicate securely with you (Bob).
Alice does not trust the channel you're currently chatting on.
WhatsApp, Telegram, Facebook, Tinder, Instagram, Twitter: the companies that own
these chats are able to, at any point, intercept the messages that are sent back
and forth.
This doesn't mean that they're doing it right now, but
Alice feels like the subject she wants to talk to you is private enough so the
information cannot be known by a third party.
With ECDH, you can start a secure communication in a non-secure channel.
This applies to channels such as the listed above, where snooping is likely, but
it is assumed that no tampering takes place.
To begin, a key exchange has to take place. Alice generates a key,
and so does Bob. Both share their keys in form of links to this page
on the channel, and click each other's.
Once that's done, Alice and Bob derive a shared key with which they
can encrypt and decrypt messages that can be safely
sent throught the unsecure channel.
In order to begin the key exchange, the parties must share their public keys with each other.
Yours, the one below, was generated the first time you loaded this page, and it's stored in your browser local storage; it won't be lost if you close the window or reboot your computer.
Select the key from the list and you can start encrypting and decrypting messages.
This is a static site. Please do check the code to make sure nothing is sent over the wire. It's very short.
Key exchange is performed with ECDH on the curve curve25519, by djb. Advice taken from safecurves. Implementation uses elliptic.
Symmetric encryption is performed with AES-256-GCM. IV (96 bits) is randomly generated and sent on each message. Implementation uses sjcl.
Simple ECDH by jlxip under public domain