Nym Key — Keys and passphrases for a pseudonymous online | nymkey.com

Nym Key — Keys and passphrases for a pseudonymous online | nymkey.com

Second Factors Compared: TOTP Codes vs Security Keys

A second factor should prove possession of a key, not possession of a phone number — here is how the two main options differ in size, window, and recovery.

A TOTP code under RFC 6238 is six digits — 1,000,000 possibilities — recomputed every 30 seconds from a secret shared between your device and the service. The code's short life is the security: a guessed or intercepted code is worthless half a minute later, and the shared secret itself never travels.

A security key replaces typing with signing. The service stores a public key — 32 bytes for Ed25519, about 128 bits of security — and each sign-in is a challenge signed by the private half, which never leaves the hardware. Compare RSA-2048: 256 bytes for roughly 112 bits, twice the size for less strength.

The two differ most sharply under attack and under loss. A six-digit code can be relayed in real time by a convincing fake page, while a security key signs for the specific origin it sees. But a TOTP secret can be exported and backed up on paper, whereas a lost security key is simply gone — which is why keys are registered in pairs.

The signature mark of this site, drawn as a plate

On narrow screens, swipe or scroll the plate sideways.

One-time backup codes sit between the two: printed, single-use strings stored with the recovery seed, there for the day the phone and the key are both unavailable. They are a recovery path, not a daily factor.

For a pseudonymous identity the disqualifying option is SMS: a phone number is registered to a real person in most jurisdictions, and every code delivered to it is a thread back to you. TOTP secrets and hardware keys name nobody.

Whichever factor you choose, its backup belongs with the recovery seed described in the seed-backup page, and the passphrase it protects should be sized using the entropy table.

  • Code size: 6 digits, 1,000,000 possibilities
  • Refresh window: 30 seconds per code
  • Key length: 32 bytes (Ed25519, ~128 bits) vs 256 bytes (RSA-2048, ~112 bits)
  • Recovery path: exportable secret, paired keys, or printed backup codes

Further reading