Passkeys: qué son y cómo llevar tu sitio a un inicio de sesión sin contraseñas

Las contraseñas siguen siendo la puerta de entrada favorita de los atacantes. Te explicamos qué son las passkeys, por qué resisten el phishing y qué necesitas para ofrecerlas en tu sitio o app.

Passkeys: what they are and how to move your site to passwordless sign-in

Passwords are still attackers' favorite way in. We explain what passkeys are, why they resist phishing, and what you need to offer them on your site or app.

Las contraseñas llevan décadas siendo el punto débil de la seguridad en internet: se olvidan, se repiten entre sitios y se roban con correos falsos. Según datos de Verizon que recoge la FIDO Alliance, el 77 % de las brechas relacionadas con hackeos involucran credenciales robadas. Las **passkeys** nacieron para reemplazarlas, y hoy ya son compatibles con los principales sistemas operativos y navegadores.

## Qué es una passkey

Una passkey es una credencial de inicio de sesión basada en los estándares FIDO2 (WebAuthn y CTAP). En lugar de escribir una contraseña, la persona confirma el acceso con el mismo método con el que desbloquea su teléfono o computador: huella, reconocimiento facial, PIN o patrón.

Por dentro funciona con criptografía de clave pública:

- **La clave privada** se queda guardada en el dispositivo o en el gestor de contraseñas del usuario (por ejemplo, iCloud Keychain, Google Password Manager, 1Password o Dashlane).
- **La clave pública** es lo único que guarda tu servidor.
- Al iniciar sesión, el dispositivo firma un reto que envía el servidor, y el servidor verifica esa firma con la clave pública.

Los datos biométricos nunca salen del dispositivo: el servidor solo recibe la confirmación de que la verificación fue exitosa.

## Por qué son más seguras que una contraseña

- **Resisten el phishing.** La passkey está ligada al dominio real del sitio, así que no funciona en una página falsa que lo imite.
- **No hay secretos que robar en tu servidor.** Si alguien accede a tu base de datos, solo encuentra claves públicas, que por sí solas no sirven para entrar.
- **Siempre son únicas y fuertes.** No hay forma de reutilizarlas entre sitios ni de elegir una débil.
- **Reemplazan el combo contraseña + código por SMS.** La FIDO Alliance explica que una passkey sola es más segura que una contraseña acompañada de un código de un solo uso o de una aprobación en el teléfono, que siguen siendo vulnerables al phishing.

## Qué gana tu negocio

Además de la seguridad, las passkeys mejoran la experiencia de inicio de sesión. La FIDO Alliance recopila resultados reportados por empresas que ya las usan: Google habla de una tasa de éxito al iniciar sesión cuatro veces mayor que con contraseñas, Amazon de inicios de sesión seis veces más rápidos y Air New Zealand de un 50 % menos de abandono en el login. Para una tienda o un servicio en línea, eso se traduce en menos carritos abandonados, menos solicitudes de "olvidé mi contraseña" y menos tickets de soporte.

## Passkeys sincronizadas o ligadas a un dispositivo

Hay dos variantes:

- **Sincronizadas:** se copian de forma cifrada de extremo a extremo entre los dispositivos del usuario que usan el mismo proveedor. Si cambia de teléfono, sus passkeys lo acompañan.
- **Ligadas a un dispositivo:** nunca salen de un solo equipo, como una llave de seguridad física USB o NFC. Ofrecen el mayor nivel de garantía y son útiles en entornos con requisitos estrictos de cumplimiento.

Si la passkey no está en el equipo desde el que se quiere entrar, el usuario puede escanear un código QR con su teléfono y aprobar el acceso desde ahí, gracias a la autenticación entre dispositivos de FIDO.

## Cómo implementarlas en tu sitio

La guía de web.dev (Google) resume el registro de una passkey en estos pasos:

1. **Comprueba la compatibilidad** del navegador antes de mostrar el botón "Crear passkey", por ejemplo con `PublicKeyCredential.getClientCapabilities()`.
2. **Pide al backend las opciones de registro:** un reto generado por el servidor, el identificador del sitio (RP ID), un ID de usuario sin datos personales y la lista de passkeys ya registradas para evitar duplicados.
3. **Llama a `navigator.credentials.create()`** para que el proveedor de passkeys genere la credencial tras verificar al usuario con el bloqueo de pantalla.
4. **Envía la credencial pública al backend** y verifícala con una librería del lado del servidor en lugar de escribir tu propio código criptográfico.
5. **Guarda los datos clave:** ID de la credencial, clave pública, ID de usuario, fechas de creación y último uso, y el AAGUID que identifica al proveedor.
6. **Avisa al usuario por correo** cada vez que se registre una passkey nueva, para que pueda detectar accesos no autorizados.

Algunas recomendaciones prácticas:

- **Ofrece la passkey en el momento justo:** al registrarse, justo después de un inicio de sesión exitoso o desde una página de seguridad de la cuenta.
- **No elimines las contraseñas de un día para otro.** Convive con ambos métodos mientras tus usuarios se acostumbran, y diseña bien la recuperación de cuenta.
- **Usa el ícono oficial de passkey** de la FIDO Alliance para que los usuarios reconozcan la opción.

## En resumen

Las passkeys ya no son una tecnología experimental: están en los sistemas operativos y navegadores que tus usuarios usan a diario. Implementarlas reduce el riesgo de robo de cuentas, simplifica el inicio de sesión y baja los costos de soporte. Si estás construyendo o renovando el login de tu sitio o app, es un buen momento para incluirlas.

**Fuentes:**

- FIDO Alliance, "Passkeys": https://fidoalliance.org/passkeys/
- web.dev (Google), "Create a passkey for passwordless logins": https://web.dev/articles/passkey-registration
Passwords have been the weak spot of internet security for decades: people forget them, reuse them across sites, and hand them over to fake emails. According to Verizon data cited by the FIDO Alliance, 77% of hacking-related breaches involve stolen credentials. **Passkeys** were created to replace them, and today they are supported by all major operating systems and browsers. ## What a passkey is A passkey is a sign-in credential based on the FIDO2 standards (WebAuthn and CTAP). Instead of typing a password, the user approves the sign-in the same way they unlock their phone or computer: fingerprint, face recognition, PIN, or pattern. Under the hood it uses public-key cryptography: - **The private key** stays on the user's device or in their password manager (for example iCloud Keychain, Google Password Manager, 1Password, or Dashlane). - **The public key** is the only thing your server stores. - At sign-in, the device signs a challenge sent by the server, and the server checks that signature with the public key. Biometric data never leaves the device: the server only receives confirmation that the check succeeded. ## Why they're safer than a password - **They resist phishing.** A passkey is bound to the site's real domain, so it doesn't work on a fake page that imitates it. - **There are no secrets to steal on your server.** If someone gets into your database, they only find public keys, which can't be used to sign in on their own. - **They're always unique and strong.** They can't be reused across sites, and nobody can pick a weak one. - **They replace password + SMS code.** The FIDO Alliance explains that a passkey on its own is more secure than a password combined with a one-time code or a phone approval, both of which can still be phished. ## What your business gains Beyond security, passkeys improve the sign-in experience. The FIDO Alliance collects results reported by companies already using them: Google reports a sign-in success rate four times higher than with passwords, Amazon reports sign-ins six times faster, and Air New Zealand a 50% drop in login abandonment. For an online store or service, that means fewer abandoned carts, fewer "forgot my password" requests, and fewer support tickets. ## Synced vs. device-bound passkeys There are two kinds: - **Synced:** copied with end-to-end encryption across the user's devices that use the same provider. If they switch phones, their passkeys come along. - **Device-bound:** never leave a single device, such as a physical USB or NFC security key. They offer the highest level of assurance and suit environments with strict compliance requirements. If the passkey isn't on the device the user is signing in from, they can scan a QR code with their phone and approve the sign-in there, thanks to FIDO cross-device authentication. ## How to implement them on your site Google's web.dev guide breaks passkey registration down into these steps: 1. **Check browser compatibility** before showing a "Create a passkey" button, for example with `PublicKeyCredential.getClientCapabilities()`. 2. **Ask the backend for registration options:** a server-generated challenge, the site identifier (RP ID), a user ID with no personal data, and the list of passkeys already registered to avoid duplicates. 3. **Call `navigator.credentials.create()`** so the passkey provider creates the credential after verifying the user with their screen lock. 4. **Send the public credential to the backend** and verify it with a server-side library instead of writing your own cryptography code. 5. **Store the key data:** credential ID, public key, user ID, creation and last-used dates, and the AAGUID that identifies the provider. 6. **Email the user** whenever a new passkey is registered, so they can spot unauthorized access. A few practical tips: - **Offer a passkey at the right moment:** at sign-up, right after a successful sign-in, or from an account security page. - **Don't drop passwords overnight.** Support both methods while your users get used to passkeys, and design account recovery carefully. - **Use the official FIDO Alliance passkey icon** so users recognize the option. ## In short Passkeys are no longer experimental: they're built into the operating systems and browsers your users rely on every day. Adopting them lowers the risk of account takeover, simplifies sign-in, and cuts support costs. If you're building or redesigning the login for your site or app, now is a good time to include them. **Sources:** - FIDO Alliance, "Passkeys": https://fidoalliance.org/passkeys/ - web.dev (Google), "Create a passkey for passwordless logins": https://web.dev/articles/passkey-registration
← VOLVER AL JOURNAL