InterLAB tools · Ed25519 · passphrase · randomart

SSH key generator

Ed25519 or ECDSA P-256 in genuine OpenSSH format — id_ed25519 and id_ed25519.pub work with ssh, ssh-add and ssh-keygen without conversion. A key passphrase, SHA256 and MD5 fingerprints, randomart, a restricted authorized_keys line, a ~/.ssh/config block and an inspector for any public key.

Free, no sign-up

Keys exist only in this tab: they are not stored in the browser, not put in the address and not sent anywhere.

Algorithm

Usually user@host or an email — shown in authorized_keys and on GitHub. Not a secret.

Empty means id_ed25519, like ssh-keygen. For a dedicated key: e.g. id_ed25519_github.

Encrypts the private key file (bcrypt_pbkdf + AES-256-CTR, like ssh-keygen). Never stored or sent.

Key

No key. Press “New key”.

How the generator works

  1. Randomness

    The key secret is 32 bytes from crypto.getRandomValues (the browser’s cryptographic generator). Math.random is never used.

  2. Key

    Ed25519 and ECDSA P-256 are computed with @noble/curves (an audited JavaScript implementation, no WebAssembly).

  3. OpenSSH format

    The private key is packed into an openssh-key-v1 container exactly like ssh-keygen does: two equal random check values, the key, the comment, padding 1, 2, 3… and base64 wrapped at 70 characters.

  4. Passphrase

    With a passphrase the key is encrypted like ssh-keygen does it: bcrypt_pbkdf (16-byte salt, 24 rounds by default) derives the key and IV for AES-256-CTR (WebCrypto). The work is split into chunks so the page stays responsive.

  5. Fingerprints

    SHA256 (base64 without “=”) and MD5 (colon-separated pairs) over the public key blob; randomart uses the “drunken bishop” algorithm from sshkey.c character for character.

Standards and formats

SSH data types (string, uint32, mpint)

Document
RFC 4251 §5

Public key format, ssh-rsa, ssh-dss

Document
RFC 4253 §6.6

Ed25519 in SSH (ssh-ed25519)

Document
RFC 8709; signatures — RFC 8032

ECDSA in SSH (ecdsa-sha2-nistp256/384/521)

Document
RFC 5656 §3.1; curves — FIPS 186-5 / SEC 2

openssh-key-v1 private key container

Document
OpenSSH PROTOCOL.key

Passphrase key derivation

Document
bcrypt_pbkdf (OpenBSD, OpenSSH 6.5+)

Private key cipher

Document
AES-256 in CTR mode (NIST SP 800-38A)

Base64

Document
RFC 4648 §4

SSH2 public key format for the inspector

Document
RFC 4716

authorized_keys options, ~/.ssh/config

Document
sshd(8), ssh_config(5)

Browser support

  • Requires crypto.getRandomValues and WebCrypto AES-CTR — available in all current Chrome, Edge, Firefox and Safari, including mobile. WebCrypto works only over HTTPS, which this site uses.
  • Ed25519 and ECDSA are computed in JavaScript, so they do not depend on browser support for Ed25519 in WebCrypto.
  • Passphrase encryption with 24 rounds takes a fraction of a second on a computer and about a second on a phone; 100 rounds take several times longer.

Limitations

  • RSA keys are not generated: finding large primes in a browser is slow, and Ed25519 is shorter, faster and supported by every modern server, GitHub and GitLab. RSA keys can still be inspected.
  • Hardware token keys (sk-ssh-ed25519@openssh.com) can only be created with ssh-keygen -t ed25519-sk next to the token — a browser cannot write a key into it. Such public keys can be inspected.
  • OpenSSH certificates (*-cert-v01@openssh.com) and PuTTY (.ppk) files are not created; convert the key with PuTTYgen for PuTTY.
  • JavaScript cannot guarantee that strings are erased from memory: “Wipe keys” zeroes the secret bytes and removes the key from the page; close the tab after working with keys.

The inspector warns about weak and outdated key types: RSA under 2048 bits is considered weak (NIST SP 800-57), and OpenSSH 9.1+ rejects keys under 1024 bits — replace it. ssh-rsa (SHA-1) signatures are disabled since OpenSSH 8.8; the key itself works with rsa-sha2-256/512. Prefer Ed25519 for new keys. DSA has been disabled since OpenSSH 7.0 and removed in OpenSSH 10.0 — replace the key. A hardware token key (FIDO/U2F): the private part lives in the token and login requires a touch.

Security and privacy

  • The key is created on your device and exists only in this tab’s memory: it is not stored in localStorage, not put in the page address and never sent to a server — the site never sees it.
  • The passphrase is not stored either. The browser remembers only settings: algorithm, comment, file name, rounds, authorized_keys options, the ~/.ssh/config block and pasted public keys.
  • The private key stays hidden until you press “Show”; download and copy work without revealing it.
  • Analytics receives only the fact of a download or copy and categories (algorithm, passphrase yes/no, file type) — no keys, comments or addresses.
  • The result reaches us only if you send a request yourself and keep the “Attach the result” box ticked — the form shows exactly what will be sent. Keys, passwords and tokens are never part of the summary: it holds the algorithm, passphrase yes/no, rounds and the public key’s SHA256 fingerprint — not the key itself or its comment.
  • For keys to production servers, ssh-keygen on your own computer is the most trustworthy option. This tool does the same thing and helps when ssh-keygen is not at hand or you need authorized_keys and config quickly.

Related tools

All tools · 40
Tell us about your task — we'll review your request and get back to you

Need to sort out server access?

Technical consulting: team keys and access, a bastion host, disabling password logins, key rotation and authorized_keys audits. The first short call is free.

  • The first short conversation is free — we choose the format
  • NDA — yours or ours
  • Pricing after a brief and an agreed scope

Please do not send passwords, access keys or source code through this form — we will agree a safe way to share access separately.

By clicking the button you agree to the processing of your personal data.