sshkeys

Security model

The design goal, stated bluntly: you should not have to trust this service. Here is what that means, and where its limits are.

How trust flows in sshkeys Your machine holds an identity key that never leaves it and signs your keyset. sshkeys.io stores and serves that signed keyset but cannot forge, alter, or roll it back. Your servers verify the signature against an identity key pinned locally, so trust flows directly from you to your servers and the service is never in the trust path. Every change is also recorded in an append-only log with signed checkpoints that anyone can mirror. YOUR MACHINE identity key ๐Ÿ”‘ generated locally signs every keyset โœ“ never uploaded โœ“ we cannot sign for you sshkeys.io stores + serves the signed keyset โœ— cannot forge a keyset โœ— cannot alter yours โœ— cannot roll it back YOUR SERVERS sshkeys-akc verifies the signature against the pinned key โœ“ admits only keys you signed publish fetch trust anchor: you pin your identity key on your servers the service is never in the trust path TRANSPARENCY LOG every change โ†’ append-only hash chain โ†’ signed checkpoint โ†’ anyone can mirror it
Keys are signed where they live. We distribute; your servers verify.

What the service cannot do

Every published keyset is signed on your machine by your identity key, which never touches our servers. Consumers โ€” the AuthorizedKeysCommand helper on your servers, the sshkeys verify command โ€” check that signature against locally pinned keys. Therefore, even a fully compromised sshkeys service (or a malicious operator, or a hijacked network path) cannot:

Signatures are standard OpenSSH SSHSIG. You can verify any keyset with ssh-keygen -Y verify and no software of ours.

What tampering would look like

Every keyset change is appended to a global hash chain; the service signs a checkpoint of the log head after every append. The checkpoint history is public and mirrorable. Consequences:

What you do still trust us with (stated honestly)

The service can refuse service (availability), can serve stale-but-unexpired keysets within their validity window, and the profile decorations โ€” identity badges, possession and attestation checkmarks โ€” are service attestations, not user-signed data. The transparency log in its current version makes dishonest operation detectable and evidenced, not impossible. The full analysis, including residual risks, lives in the threat-model document in the source repository.

Your side of the bargain

Reporting a vulnerability

Email [email protected]. You'll get an acknowledgement within 72 hours. We ask for up to 90 days of coordinated disclosure and give public credit unless you prefer otherwise. Most valuable to us: signature-verification bypasses, transparency-log integrity issues, proof-of-possession or rotation bypasses, and anything that makes the sshd helper admit an unauthorized key.