Ephemeral

This is a simple utility for trading secrets over public channels.

Rather than create a new secret in 1Password that is visible to a bunch of people on the team and will live there forever, this is useful for passing one-off secrets that can be instantly forgotten. The server remembers nothing from one request to the next. There are no cookies (aside from what a load balancer or gateway app like Teleport might add).

The process has three steps:

Request
The person who needs the secret information, the Requester, creates a request for it. The request has two parts: a public part and a private. You should download the private part of the request, as you'll need it later. The public part can be shared over Slack or email or any other public channel.
Respond
The person who has the secret, the Responder, can use this form to paste in the public request as well as the secret data. The server will respond with a response, which can be shared over public channels.
Receive
The Requester receives the response and pastes that into the form along with the private request that they created in the Request step. The server will decrypt and reply with the secret data.

How does it work?

The server uses Elliptic Curve Diffie-Hellman Key Exchange to allow the Requester and the Responder to agree individually on an encryption key for the symmetrical AES256 encryption. Each party creates a secret key and a public key. If you have one secret key, and the other public key, you can generate a shared key. But no one that is not in possession of either secret key can know what that shared key is, even if they have both public keys.

How secure is it?

The steps all use NIST best-practice encryption tools. The server doesn't remember any information from one request to the next, so it can't be hacked. However, the process does involve sharing the secret key twice (once when the server tells you what it is, and again when you tell the server). So it's only as secure as the transmission line. Hopefully, this server is secured via HTTPS with proper certificates. It can also be downloaded and run locally. Because it is stateless, the Requester and the Responder don't need to have access to the same server.

In fact, the server itself works as a command-line tool, and that's really the best way of using it. This web server is only provided as a convenience for sharing secrets with people for whom the console is awkward.