Apple, Google y Microsoft llevan años empujando en la misma dirección: eliminar las contraseñas. La tecnología que lo hace posible —passkeys, basadas en el estándar WebAuthn/FIDO2— ya está disponible en las grandes plataformas y miles de servicios. No es un rebranding del "inicia sesión con Google": es criptografía de clave pública aplicada al login, y funciona de forma radicalmente distinta a todo lo anterior.
El problema estructural de las contraseñas
Las contraseñas fallan por diseño, no por uso descuidado:
- Se pueden phishear: si un usuario la teclea en una web falsa, el atacante la tiene.
- Se pueden filtrar: cualquier base de datos comprometida expone material verificable.
- Se repiten: una filtración en servicio menor compromete cuentas mayores.
- Son memorizables o fuertes, rara vez ambas — tensión resuelta con gestores, que a su vez dependen de una contraseña maestra.
Cada intento histórico de arreglo (SMS 2FA, preguntas secretas, rotación forzosa) añadió fricción sin cerrar el agujero fundamental: algo secreto compartido viaja desde tu cerebro al servidor.
El cambio de modelo: nunca envíes el secreto
Una passkey reemplaza el secreto compartido por un par de claves asimétricas generado en tu dispositivo:
- Al registrarte, tu dispositivo genera un par único para ese sitio: clave privada que jamás sale de él, y clave pública que entrega al servidor.
- El servidor guarda solo la pública, asociada a tu cuenta.
- En cada login, el servidor envía un desafío aleatorio; tu dispositivo lo firma con la privada y devuelve la firma.
- El servidor verifica la firma con la pública. Correcta = eres tú.
El servidor nunca ve material secreto. Una filtración total de su base de datos entrega claves públicas — inútiles para iniciar sesión, igual que un hash bien calculado, pero aquí ni siquiera existe la contraseña que robar.
Por qué no se pueden phishear
Esta es la propiedad revolucionaria, y nace de dos mecanismos combinados:
Vinculación al origen: la credencial queda atada al dominio real (RP ID). Un phishing en banco-seguro.xyz pidiendo tus credenciales de banco.com simplemente falla — el navegador niega la firma porque los orígenes no coinciden. No es que el usuario detecte la estafa: es que técnicamente no hay nada que entregar.
Verificación local: firmar requiere desbloquear el dispositivo (huella, FaceID, PIN). El phishing clásico de "escribe tu contraseña aquí" no tiene análogo: no existe ningún secreto tecleable que transferir.
Resultado medido por las propias plataformas: tasas de éxito de phishing contra passkeys cercanas a cero, frente a millones de cuentas comprometidas anuales con contraseñas+SMS.
Sincronización: la clave para que funcione de verdad
La crítica inicial del FIDO clásico era legítima: credenciales atrapadas en un dispositivo = perder el móvil pierde la cuenta. Las plataformas lo resolvieron con sincronización E2EE:
- iCloud Keychain (Apple): las passkeys se replican cifradas entre iPhone, iPad y Mac.
- Google Password Manager: igual vía cuenta Google, en Android y Chrome.
- Gestores terceros (1Password, Bitwarden, Dashlane): passkeys portables entre plataformas y navegadores.
El estándar añade además exportación/importación segura (FIDO credential exchange) para no quedar cautivo de un ecosistema. Y los flujos de recuperación (cuenta con múltiples passkeys, dispositivo de respaldo, canales alternativos verificados) son hoy el verdadero frente de trabajo — porque la criptografía es infalible, la logística humana no.
Cómo se implementa en tu aplicación
El flujo WebAuthn en el navegador:
// REGISTRO
const credential = await navigator.credentials.create({
publicKey: {
challenge: challengeDelServidor,
rp: { name: "Mi App", id: "miapp.es" },
user: { id: userIdBytes, name: "ana@ejemplo.es", displayName: "Ana" },
pubKeyCredParams: [{ type: "public-key", alg: -7 }], // ES256
authenticatorSelection: {
residentKey: "required", // discoverable: login sin escribir email
userVerification: "preferred" // biometría si disponible
}
}
});
// credential.response attestation -> enviar al backend, guardar public key
// LOGIN
const assertion = await navigator.credentials.get({
publicKey: {
challenge: nuevoChallengeDelServidor,
rpId: "miapp.es",
allowCredentials: [] // vacío + resident key = autofill de cuentas
}
});
// assertion.response.signature -> verificar en backend con la pública guardada
En el backend importa validar TODO: reto coincidente y de un solo uso, origen exacto (clientDataJSON.origin), RP ID, contador de firmas creciente (detecta claves clonadas), y formato de atestación si exiges fabricantes concretos. Librerías mantenidas existen para todos los stack (@simplewebauthn, webauthn4j, py_webauthn, go-webauthn) — rodarlo a mano es reinventar parsing CBOR con riesgo gratuito.
Estrategia de adopción sensata
No apagues las contraseñas de golpe. La migración que funciona:
- Ofrece passkeys como opción adicional tras login con contraseña.
- Pide crearla tras una autenticación exitosa (momento de máxima confianza).
- Permite múltiples passkeys por usuario (portátil + móvil).
- Cuando el usuario tenga una registrada, ofrece login directo con ella.
- Eventualmente, marca contraseña como método legacy o elimínala.
GitHub, Google y ya buena parte del SaaS siguen exactamente este camino. Los usuarios conservan su contraseña como respaldo mientras acumulan confianza en el nuevo flujo.
Genera contraseñas seguras mientras tanto
Hasta que el mundo complete la transición, las contraseñas siguen existiendo — y las que queden deben ser únicas y robustas: nuestro generador de contraseñas crea aleatorias fuertes al instante, y la guía de entropía en bits explica qué hace fuerte a una contraseña cuando no hay criptografía de por medio.
Preguntas frecuentes
¿Passkey = iniciar sesión con Google? No. Federación (OAuth/OIDC) delega identidad en un tercero; la passkey es tuya, generada por sitio, sin depender de que Google te preste el acceso.
¿Qué pasa si pierdo todos mis dispositivos? Depende del sistema de recuperación del servicio: segundo dispositivo, códigos de respaldo impresos, o canales de recuperación verificados. Por eso registra SIEMPRE más de una passkey y guarda los códigos de respaldo que te ofrezcan.
¿Funcionan offline o en navegadores antiguos? Necesitan navegador moderno y soporte del sistema (todos los OS principales desde 2022-2023). En máquinas viejas, el fallback sigue siendo contraseña+MFA — otra razón para no eliminarlas aún.
Genera contraseñas robustas mientras llega la transición con nuestro generador online, gratis y directamente en tu navegador.