Something you know
A password, PIN, or recovery phrase.
Multi-factor authentication (MFA) means proving who you are with two or more independent credentials drawn from different categories:
Something you know
A password, PIN, or recovery phrase.
Something you have
A passkey on your phone, a security key, an authenticator app.
Something you are
A fingerprint or face scan that unlocks the “something you have.”
A password by itself is one factor. A password + an SMS code is technically two factors but a poor one (see below). A password + a passkey is two factors that are genuinely different — and meaningfully harder to bypass.
Not all MFA is equal. The difference that matters most is phishing resistance — can the second factor be stolen by tricking you into giving it to a fake site?
| Tier | Method | Phishing-resistant? | Best for |
|---|---|---|---|
| Best | Passkeys + hardware security keys (both are FIDO2/WebAuthn) | ✅ Yes — credential is bound to the legitimate domain | Anything that offers it |
| OK | TOTP authenticator app (Aegis, Ente Auth, 2FAS) | ❌ No — codes can be stolen by AiTM proxies | Sites that don’t yet support passkeys |
| Weak | SMS codes | ❌ No — and vulnerable to SIM swap, SS7 interception | Last resort only |
| Avoid | Email codes, “security questions” | ❌ No — your email password is the same factor; questions are public records | Skip entirely if possible |
CISA (2022, reaffirmed in their 2024 “Secure by Demand” guide): “The only widely available phishing-resistant authentication is FIDO/WebAuthn authentication.”
NIST SP 800-63B Rev. 4 (April 2024): synced passkeys are acceptable at AAL2. Hardware-resident FIDO2 credentials reach AAL3. SMS-based MFA is restricted.
Passkeys are the biggest change since this page was first written. If you only do one thing from this guide, enroll a passkey wherever it’s offered.
A passkey is a FIDO2 / WebAuthn credential — a cryptographic keypair created when you register at a site. The private key never leaves the authenticator. When you sign in, the site sends a random challenge, your authenticator signs it with the private key, and the site verifies the signature with the public key it stored at registration.
Two things make this phishing-resistant:
goog1e.com site can’t get a signature from your google.com passkey — the authenticator refuses.| Synced passkeys | Device-bound passkeys | |
|---|---|---|
| Where it lives | A password manager or OS keychain that syncs across your devices | A hardware security key — never leaves the device |
| Convenience | High — log in from any of your devices | Lower — you have to have the key physically |
| Recovery | Through your sync provider | Through a backup hardware key |
| NIST level | AAL2 | AAL3 |
| Best for | Daily-driver accounts on many devices | Critical accounts (email, financial, admin, password manager itself) |
Most readers will mix both: synced passkeys for the bulk of their accounts, hardware-key-bound for the few accounts where compromise would be catastrophic.
| Storage | Synced? | Notes |
|---|---|---|
| Apple Passwords / iCloud Keychain | Apple devices only | Default on iOS/macOS. Locked into the Apple garden. |
| Google Password Manager | Google account / Chrome | Default on Android/Chrome. Locked into Google. |
| Bitwarden | Cross-platform | FOSS, free tier includes passkeys. Strong default for most users. |
| 1Password | Cross-platform | Polished UX, paid only. Native Windows 11 passkey provider since late 2025. |
| Proton Pass | Cross-platform | FOSS, free tier includes passkeys. Ties into Proton account suite. |
| KeePassXC / KeePassDX | File-synced (you provide the sync) | Both support passkeys. Offline-friendly. |
| YubiKey 5 / Nitrokey 3 / Token2 | No — device-bound | The phishing-resistant choice for high-value accounts. |
Solidly supported (web and mobile): Google, Apple ID, Microsoft, GitHub, Amazon, PayPal, LinkedIn, X/Twitter, WhatsApp, Coinbase, eBay, Best Buy, Shopify, Adobe, the password managers themselves. About 48% of top-100 sites as of late 2025.
Laggards to be aware of:
A live, community-maintained directory is at passkeys.io.
Even with synced passkeys in a password manager, a hardware security key still earns its place — it’s the device-bound, AAL3, can’t-leave-this-piece-of-metal option. Use one (actually two) for the handful of accounts where compromise would ruin your week.
| Use case | Pick | Approx. price |
|---|---|---|
| First key — entry-level | Yubico Security Key C NFC (blue, FIDO2 only) | ~$29 |
| Power-user pair (main + backup) | 1× YubiKey 5C NFC + 1× Security Key C NFC | ~$87 |
| FOSS-priority | Nitrokey 3C NFC (×2 for backup) | ~$118 |
| Maximum features | YubiKey 5C NFC (×2) | ~$116 |
| Cheap bulk / secondary | Token2 PIN+ Release 3 (FIDO2-only, Swiss-audited 2024) | ~$13–25 |
Notes:
For the deeper setup walkthrough — GPG on-card, FIDO2-sk SSH keys, smartcard configuration, and what works in each desktop/mobile email and SSH client — see the SSH & GPG Keys page.
TOTP is now a fallback factor — use it where passkeys aren’t offered (most banks, legacy SaaS, many self-hosted services). It generates a 6-digit code every 30 seconds from a shared secret.
TOTP is not phishing-resistant. An AiTM proxy that captures your password can also capture the code in real time. It’s still vastly better than SMS, just not as good as FIDO2.
| App | Platform | Sync | Notes |
|---|---|---|---|
| Ente Auth | Cross-platform (Android, iOS, desktop, web) | E2EE, opt-in | New top cross-platform pick. FOSS, server audited by Cure53 (Oct 2025). |
| Aegis | Android only | Local-only by design | Top Android-only pick. F-Droid: com.beemdevelopment.aegis. Pair with Syncthing if you need multi-device. |
| 2FAS | Android, iOS | iCloud / Google Drive (not E2EE) | Acceptable iOS option. Be aware sync isn’t end-to-end encrypted. |
| OTP Auth | iOS only | Encrypted iCloud | Apple Watch, Siri integration. Niche but solid for power users. |
| Bitwarden Authenticator | Cross-platform | E2EE | Fine if you’re already deep in Bitwarden. Keep it separate from the password vault. |
Convenient, but a real tradeoff: it collapses two factors (something you know + something you have) into one (access to the vault). The 2026 community consensus:
| Account type | TOTP in password manager? |
|---|---|
| Low/medium-stakes (forum, retailer, social) | ✅ Acceptable |
| The password manager itself | ❌ Never |
| Primary email | ❌ Never |
| Banking, brokerage, crypto | ❌ Never |
| Sysadmin / root / cloud-admin | ❌ Never |
For the “never” rows, use a separate TOTP app or a hardware key.
Use only if literally no other option exists.
If a service only offers SMS, at minimum: set a SIM PIN on the receiving phone, and enable a port-out lock with your carrier (Verizon “Number Lock,” AT&T “Wireless Account Lock,” T-Mobile “SIM Protection,” Mint “SIM Lock”). These don’t make SMS phishing-resistant, but they make SIM swap harder.
The thing that actually locks people out is not having a recovery plan when their primary factor disappears. Build one at enrollment, not after.
.2fas export) somewhere recoverable — your password manager is fine for low-stakes accounts; for high-stakes, also keep an offline copy.