Most small businesses have no security team. They have a handful of people, fifty-ish logins, and one person who happens to be "good with computers." If that person is you, this post is for you.
The passkeys vs. passwords debate has moved past theory. Passkeys are supported across Apple, Google, and Microsoft platforms, and many major services now offer them. The real question is how to adopt them without breaking your team's workflow.
I'm writing this on behalf of ZIA Networks, where we help small businesses make practical security decisions, so I'll keep it grounded.
Why passwords keep failing small teams
Passwords have three problems that training only partly fixes:
- Reuse. One leaked password from an unrelated site can unlock a business account.
- Phishing. A convincing fake login page can capture a typed password in seconds.
- Overhead. Resets, lockouts, and shared spreadsheets cost time every week.
The weakness is structural: a password is a shared secret that can be typed anywhere, real or fake.
How passkeys work (the short version)
Passkeys are built on the WebAuthn and FIDO2 standards and use public-key cryptography.
- During registration, the user's device creates a key pair.
- The private key stays on the device (or in a synced credential manager).
- The public key is stored by the service.
- At sign-in, the service sends a challenge; the device signs it after the user verifies with a biometric or PIN, and the service checks the signature.
Two properties matter for security:
- The credential is bound to the site's domain (the relying party ID), so a lookalike domain can't use it.
- A server breach exposes public keys only, which are useless to an attacker.
What registration looks like in code
If you build or maintain a web app for your business, here is a simplified browser-side registration call. The options come from your server, and the challenge must be random and single-use.
const credential = await navigator.credentials.create({
publicKey: {
challenge: challengeFromServer, // ArrayBuffer, generated server-side
rp: { name: "Example Co", id: "example.com" },
user: {
id: userIdBytes, // stable, opaque user handle
name: "dana@example.com",
displayName: "Dana",
},
pubKeyCredParams: [
{ type: "public-key", alg: -7 }, // ES256
{ type: "public-key", alg: -257 }, // RS256
],
authenticatorSelection: {
residentKey: "required", // creates a discoverable passkey
userVerification: "preferred",
},
},
});
// Send the result to your server, which must verify it and store the public key.
One important note: don't write the server-side verification yourself. Use a well-maintained library (SimpleWebAuthn is a popular option for Node.js) and review its documentation carefully. Cryptographic code is easy to get subtly wrong.
Where passkeys win
| Area | Passwords | Passkeys |
|---|---|---|
| Phishing resistance | Weak | Strong (domain-bound) |
| Breach impact | Reusable secrets can leak | Only public keys stored |
| Reuse and guessing | Common problem | Not applicable |
| Sign-in speed | Typing and resets | Touch or glance |
Where passkeys fall short
I'd rather be honest than hype this:
- Not universal. Older software and niche tools may only support passwords, so you'll run both for a while.
- Recovery needs design. Synced passkeys (iCloud Keychain, Google Password Manager) make device loss easier to handle, but that account becomes a high-value target. Protect it well.
- Shared accounts are awkward. Passkeys are built around individuals. Shared logins are better handled with a business password manager or separate user seats.
- Adoption takes a little training. A short walkthrough prevents confusion.
A practical rollout plan
You don't need a big-bang migration:
- Inventory your accounts and mark which ones would hurt most to lose: email, cloud storage, accounting, and banking.
- Enable passkeys on those first, and test sign-in before removing anything else.
- Keep a business password manager for tools without passkey support, with long, unique passwords.
- Keep MFA on every account that still uses a password.
- Write a recovery plan: who helps when a phone is lost, and where recovery info is stored.
- Brief the team in 15 minutes. Keep it simple.
- Review quarterly, since more services add support all the time.
Takeaway
Where they're supported, passkeys are the safer choice: they resist phishing, leave nothing reusable in a breach, and make sign-in faster. Passwords still have a place as a backup for tools that haven't caught up.
If you'd like help deciding which accounts to move first or setting up recovery without disrupting your team, ZIA Networks can walk you through it.
Discussion
- Have you rolled out passkeys for a team or a product yet?
- Which tools in your stack still don't support them?
- How do you handle shared accounts and recovery?
Top comments (0)