Key Pair Generator
Free key pair generator — Ed25519, NIST P-256/384/521, secp256k1, X25519 and RSA 2048/3072/4096, exported as PKCS#8 PEM, SPKI PEM, OpenSSH and JWK. Generated locally in WebAssembly; nothing is uploaded.
Runs entirely in your browser — nothing you enter is uploaded or stored.
Asymmetric key pairs
A key pair is two mathematically linked values: one you publish and one you must never share. What the pair is for differs by algorithm, and mixing those up is the most common mistake here — Ed25519 signs, X25519 agrees on shared secrets, and RSA can be used for both but should not be used for encryption directly in new designs.
Formats
Each key is shown in the encodings you are likely to be asked for: PKCS#8 PEM for the private key (the BEGIN PRIVATE KEY form nearly everything accepts), SPKI PEM for the public key, OpenSSH for authorized_keys, and a JWK for anything JOSE-shaped. They are the same key; only the wrapper differs.
Handling the private half
Treat it like a password you cannot change quickly. Do not commit it, do not paste it into a chat, and prefer generating it on the machine that will use it — for SSH that meansssh-keygen -t ed25519 locally, which never puts the key on a clipboard at all. This tool is for understanding formats, testing, and cases where a key genuinely needs to be created somewhere neutral.
Frequently asked questions
Ed25519 or RSA?
Ed25519 unless something in your stack cannot accept it. Keys are 32 bytes rather than hundreds, signing is fast, and the implementation has no parameter choices to get wrong — no curve to pick badly, no padding mode, no random nonce that leaks the key if it repeats. RSA persists because everything accepts it, not because it is better.
Is RSA-4096 worth it over RSA-2048?
Rarely. RSA-2048 is around 112-bit security and is not under threat; 4096 is roughly 128-bit and costs several times more per operation, which is felt on every TLS handshake. Choose 3072 if you want a margin, 4096 if a policy demands it. If you actually want more security per unit of work, move to an elliptic curve rather than a longer modulus.
What is X25519 doing in a list of signing keys?
It is not a signing key — it is for key agreement (ECDH), which is what establishes a shared secret in TLS and in encrypted messaging. It cannot sign, and Ed25519 cannot do key agreement, even though both are built on the same underlying curve. If you are choosing one, the question is whether you need to prove authorship or to agree on a secret.
Is the private key really generated here?
Yes — in a WebAssembly module in this page, from the browser CSPRNG, with no request made. But a private key you generated in a browser tab and copied through a clipboard has a wider exposure surface than one produced by ssh-keygen on the machine that will use it. For keys that protect something, generate them where they will live.