Identity & Access
MFA
Passkeys
WebAuthn
FIDO2
+3 more

Phishing-Resistant MFA: Passkeys, WebAuthn & the End of Passwords in 2026

SCR Security Research Team
January 29, 2026
19 min read
Share

Why Traditional MFA Is No Longer Enough

Multi-factor authentication (MFA) was supposed to stop account takeover. For legacy MFA methods — SMS OTP, email codes, and authenticator app TOTP — the protection is eroding fast.

The Problem: Real-time phishing proxies like Evilginx2 and Modlishka can intercept MFA tokens as users enter them, forwarding them to the attacker in real-time. This makes SMS, email, and TOTP-based MFA bypassable by moderately sophisticated attackers.

MFA Bypass Statistics

FindingValueSource
Phishing attacks that bypass MFA47%Microsoft Digital Defense Report 2024
MFA fatigue attacks successful1 in 4 attemptsMandiant 2025
SIM-swapping attacks (2024)12,000+ FBI reportsFBI IC3 2024
Cost of a SIM swap on dark web$100-500Trend Micro 2025
Account takeovers despite MFA25%Okta Businesses @ Work 2025

The MFA Hierarchy (Weakest to Strongest)

LevelMethodPhishing Resistant?Bypass Method
0 (None)Password onlyNoCredential stuffing
1 (Weak)SMS OTPNoSIM swap, Evilginx2 proxy
2 (Basic)Email OTPNoEmail compromise, phishing proxy
3 (Good)TOTP (Authenticator App)NoReal-time phishing proxy
4 (Better)Push notification (Okta, Duo)PartialMFA fatigue bombing
5 (Strong)Number matching pushMostlySocial engineering
6 (Best)FIDO2/WebAuthn/PasskeysYesPhysical device theft only
7 (Maximum)Hardware security key (YubiKey)YesPhysical key theft only

What Makes Authentication "Phishing-Resistant"?

Phishing-resistant authentication has two critical properties:

  1. Origin binding — The credential is cryptographically bound to the legitimate website's domain. Even if a user visits a phishing page, the credential will not work because the domain doesn't match.

  2. No shared secrets — Nothing typed by the user (no code, no OTP) that can be intercepted and relayed by an attacker.

How WebAuthn/Passkeys Prevent Phishing

Legitimate login (securecodereviews.com):
─────────────────────────────────────────
1. Server sends challenge (random nonce)
2. Browser checks: origin = securecodereviews.com ✓
3. Private key signs challenge (bound to this origin)
4. Server verifies signature with stored public key ✓

Phishing attempt (securecodereviews-login.com):
─────────────────────────────────────────
1. Fake server sends challenge
2. Browser checks: origin = securecodereviews-login.com ✗
3. Browser REFUSES to sign — credential doesn't exist for this origin
4. Attack fails automatically — user cannot be tricked

Implementing Passkeys (WebAuthn)

Registration Flow

// Server-side — Generate registration options
import { generateRegistrationOptions, verifyRegistrationResponse } from "@simplewebauthn/server";

const rpName = "SecureCodeReviews";
const rpID = "securecodereviews.com";
const origin = "https://securecodereviews.com";

async function startRegistration(user: User) {
  const options = await generateRegistrationOptions({
    rpName,
    rpID,
    userID: user.id,
    userName: user.email,
    attestationType: "none",
    authenticatorSelection: {
      residentKey: "preferred",      // Enables passkeys
      userVerification: "preferred", // Biometric/PIN on device
    },
  });

  // Store challenge for verification
  await storeChallenge(user.id, options.challenge);
  return options;
}

// Client-side — Create passkey
const credential = await navigator.credentials.create({
  publicKey: registrationOptions,
});

Passkey Adoption (2026)

PlatformPasskey SupportMarket Share
iOS 16+ / macOS Ventura+iCloud Keychain sync28% (mobile)
Android 14+Google Password Manager72% (mobile)
Windows 11Windows Hello35% (desktop)
Chrome 118+Cross-device passkeys65% (browser)
1Password / BitwardenThird-party passkey storage~15% of users

Google Case Study: Zero Phishing After FIDO2

In 2017, Google required all 85,000+ employees to use FIDO2 hardware security keys (YubiKeys). Since then:

MetricBefore FIDO2After FIDO2
Successful phishing attacks on employeesMultiple per monthZero
Account takeoversRegular occurrenceZero
Time spent on account recoverySignificantNear zero
Employee satisfaction with authLow (password fatigue)High (tap and go)

Deployment Strategy

Phase 1: Inventory and Assess (Month 1)

  • Audit current MFA methods across the organization
  • Identify high-risk accounts (admins, finance, executives)
  • Evaluate passkey/FIDO2 platform support

Phase 2: Deploy for High-Risk Users (Month 2-3)

  • Require FIDO2/passkeys for all admin accounts
  • Issue hardware security keys to executives and IT staff
  • Establish fallback procedures (supervised recovery)

Phase 3: Organization-Wide Rollout (Month 4-6)

  • Enable passkey registration for all users
  • Deprecate SMS OTP for new registrations
  • Implement conditional access — require phishing-resistant MFA for sensitive operations

Phase 4: Enforce and Sunset (Month 7-12)

  • Block SMS/email OTP for all accounts
  • Require phishing-resistant MFA for all access
  • Monitor and report on adoption metrics

Further Reading

  • FIDO Alliance — WebAuthn and passkey specifications
  • Evilginx2 — Understand the threat (for defense)
  • Google (2019), "Security Keys: Practical Cryptographic Second Factors for the Modern Web," ACM CCS
  • Password Security Guide — When passwords are still used

Advertisement