Yes, passkeys are safe, and for most people they're safer than passwords. A passkey is a cryptographic key pair: the website only stores a public key, and the private key never leaves your device or password manager. Because a passkey only works on the website it was created for, it can't be phished, reused or leaked in a server breach. The real downsides are not about security but about control: how your passkeys are stored, whether you can move them between providers, and what happens if you lose access to your account with the company that syncs them.
That second point is why passkeys were the most-discussed security topic on Hacker News this week. A post titled "Passkeys are a trap. Do not use them.", published on 10 October 2026, reached the front page with over 900 points by 11 October. This guide explains what passkeys are, what the post gets right and where it goes further than the evidence, and how to use passkeys sensibly.
What is a passkey?
The passkeys.dev introduction, maintained by members of the FIDO Alliance and the W3C Web Identity & Credentials Adoption Community Group, defines passkeys as "a replacement for passwords. A password is something that can be remembered and typed, and a passkey is a secret stored on one's devices, unlocked with biometrics."
Under the hood, a passkey is a WebAuthn credential. WebAuthn is a W3C standard that browsers implement, and it lets a website ask your device to create and use a public/private key pair. passkeys.dev lists four properties:
- Intuitive: you consent to save and use the passkey instead of inventing a password.
- Automatically unique: every passkey is unique per service, so there's nothing to reuse.
- Breach-resistant: the website (the "relying party") stores only public keys. Even the servers that sync your passkeys "never have the ability to view or use the private keys".
- Phishing-resistant: browsers and operating systems make sure a passkey is only ever used for the right service.
How do passkeys work?
When you sign in with a passkey, three things happen:
- The website sends a random challenge.
- Your device asks you to unlock it (fingerprint, face, PIN or a tap), then signs the challenge with the private key for that website.
- The website checks the signature with the public key it stored when you registered.
Nothing secret crosses the network. Your fingerprint or face never goes to the website either; it only unlocks the key on your device.
The phishing protection comes from origin binding. When you create a passkey, it's tied to the website's domain (the "relying party ID"). If a fake site at a look-alike domain asks your browser for a signature, the browser simply won't offer the real site's passkey. With a password, you're the one who has to spot the fake domain, and people get that wrong.
Passkeys vs passwords: which is safer?
Passwords fail in predictable ways, and passkeys remove most of them:
- Phishing: a password typed into a fake site is stolen. A passkey won't work on a fake site at all.
- Reuse: a password leaked from one site is tried on others ("credential stuffing"). Each passkey is unique to one site.
- Server breaches: a leaked password database can be cracked offline if hashing is weak. A leaked list of public keys is useless to an attacker.
- Weak choices: people pick "password123". You can't pick a weak passkey.
If you build login systems, it helps to see how much work a password needs on the server: salting, slow hashing and verification, as in my PHP password_hash and password_verify example. With passkeys, the server stores a public key and checks a signature, and there's no secret on the server to protect.
Passkeys vs authenticator apps (TOTP)
The viral post praises authenticator apps, and it has a point: TOTP (time-based one-time passwords) is an open standard, RFC 6238, so any app or even your own code can generate the codes. The algorithm is short enough to write yourself. Here's a Python version checked against the RFC's official test vectors:
import hmac, hashlib, struct
def totp(secret: bytes, unix_time: int, digits: int = 6, step: int = 30) -> str:
counter = struct.pack(">Q", unix_time // step)
mac = hmac.new(secret, counter, hashlib.sha1).digest()
offset = mac[-1] & 0x0F
code = struct.unpack(">I", mac[offset:offset + 4])[0] & 0x7FFFFFFF
return str(code % 10 ** digits).zfill(digits)
# RFC 6238 Appendix B test vectors (SHA-1, 8 digits)
seed = b"12345678901234567890"
for t, expected in [(59, "94287082"), (1111111109, "07081804"), (2000000000, "69279037")]:
print(t, totp(seed, t, digits=8), "expected", expected)
Output on Python 3.13:
59 94287082 expected 94287082
1111111109 07081804 expected 07081804
2000000000 69279037 expected 69279037
TOTP is portable and you fully control the seed. But it has one big weakness that passkeys don't: a TOTP code can be phished. If you type a valid code into a convincing fake login page, an attacker can relay it to the real site within its 30-second window. A passkey refuses to sign for the wrong domain, so that attack doesn't work.
What does "Passkeys are a trap" actually argue?
The post is aimed at non-technical readers and agrees that "passkeys can be far more secure than passwords". Its argument is about who controls them. In summary, it says:
- "Passkey" covers many different things. WebAuthn credentials can be discoverable or not, hardware-backed or software-backed, copyable (synced) or not, and with or without user verification. The post argues that using one friendly name hides these differences.
- Websites can see some of these properties. WebAuthn authenticator data includes flags, such as whether the user was present and verified.
- Attestation lets a website check what made the passkey. An attested credential can prove it came from a particular kind of authenticator. The post's main fear is that websites could later start rejecting passkeys that aren't attested by approved providers, which could lock out people using open-source managers or custom operating systems.
- No consumer advocacy groups sit on the FIDO Alliance, the industry body behind passkeys, according to the author.
What the debate gets right, and what it doesn't
The concerns about control are reasonable:
- Lock-in is real in practice. Many people's passkeys live in Apple, Google or Microsoft accounts. If you lose access to that account, you can lose access to every passkey in it.
- Attestation exists in the standard. A relying party can request attestation and decide which authenticators it accepts. Organisations already do this with hardware security keys for staff.
- Moving passkeys between providers has been awkward. The FIDO Alliance has been working on credential exchange formats to make export and import standard, but support still varies between managers.
But some claims go further than the evidence:
- Attestation is optional, and most consumer sites don't demand it. The post itself says attested passkeys "are not yet required on most websites". It's a possible future risk, not a current one.
- Keeping a password as well is still common. Most sites let you keep a password or another sign-in method alongside a passkey, so you aren't forced to choose.
- Passwords have a lock-in problem too: a password stored only in one manager, or protected by SMS codes tied to one SIM, can also be lost.
The fair reading: passkeys are a big security improvement, and the open questions are about portability and who decides what counts as an acceptable authenticator.
Synced vs device-bound passkeys
This is the most useful distinction to understand:
- Synced passkeys are stored in a password manager, such as iCloud Keychain, Google Password Manager or a third-party manager, and copied to your other devices. They're convenient and survive losing one phone, but their safety depends on the security of that cloud account.
- Device-bound passkeys live on one piece of hardware, such as a USB security key or a phone's secure chip, and can't be copied. They're the most secure option, but if the device is lost, so is the passkey.
WebAuthn reports this to websites through "backup eligible" and "backup state" flags, so a bank, for example, can tell whether a passkey is synced.
What happens if I lose my phone?
If your passkeys are synced, sign in to your password manager account on a new device and they come back. That's why you should protect that account carefully, with its own recovery options set up.
If your passkeys are device-bound, you'll need another way in: a second passkey on another device, a backup security key, recovery codes, or the site's account recovery process.
A good rule is to register at least two passkeys for important accounts, for example one on your phone and one on a laptop or security key, so a single lost device never locks you out.
Can passkeys be hacked?
Passkeys remove phishing and password leaks, but they aren't magic:
- Malware on your device can abuse an unlocked session or wait for you to approve a sign-in. Keep your operating system updated, and on Windows don't click through elevation prompts without thinking; my guide on what UAC is in Windows explains why those prompts exist.
- Your sync account is a target. If someone takes over your Apple, Google or password manager account, they may get your synced passkeys.
- Account recovery is often the weakest link. If a site lets anyone reset access by SMS or email, an attacker can go around the passkey.
- Session theft: after you sign in, websites use cookies. Malware that steals session cookies bypasses any sign-in method, passkeys included.
Should I use passkeys?
For most people, yes, especially for email, banking and your password manager itself. A practical approach:
- Use passkeys where offered for important accounts; they stop the most common attack, phishing.
- Keep at least two sign-in methods, such as two passkeys, or a passkey plus recovery codes.
- Choose your passkey manager deliberately. If portability matters to you, prefer a manager that supports exporting passkeys.
- Secure the sync account with strong recovery options.
- Watch for attestation demands. If a consumer service starts rejecting your manager's passkeys, that's worth complaining about.
If you're a developer adding passkeys to your own site, keep a fallback sign-in method, and don't require attestation unless you have a strong reason, such as an internal staff system. The rest of your login flow still matters: secure session handling, as in my PHP login session example, and safe account recovery.
FAQ
Are passkeys safer than passwords?
Yes. Passkeys can't be phished, reused across sites or leaked from a website's database, because the website stores only a public key and the browser only offers the passkey on the correct domain.
What is the "passkeys are a trap" post about?
It's a 10 October 2026 Substack post that went viral on Hacker News. It accepts that passkeys can be more secure, but argues that features like attestation could let websites control which passkey providers you're allowed to use.
What are the disadvantages of passkeys?
The main ones are dependence on the company that syncs them, uneven support for moving passkeys between managers, and the risk of lock-out if you lose your only device or your sync account.
What happens to my passkeys if I lose my phone?
Synced passkeys come back when you sign in to the same password manager account on a new device. Device-bound passkeys are lost with the device, so keep a second passkey or recovery codes.
Can passkeys be hacked?
They can't be phished, but malware on your device, a compromised sync account, weak account recovery or stolen session cookies can still lead to an account takeover.
Can you export passkeys?
Some password managers can export or transfer passkeys, and the FIDO Alliance has been working on standard credential exchange formats, but support varies. Check your manager's documentation before relying on it.
Is an authenticator app better than a passkey?
An authenticator app gives you more control over your secret, but its codes can be phished in real time. A passkey is stronger against phishing. Many people use passkeys where available and authenticator apps elsewhere.
Do I still need a password if I use passkeys?
Often you can keep one as a fallback, and many sites still require it. If you keep a password, make it unique and store it in a password manager.