¿Cansado de memorizar contraseñas? Es el momento de comenzar a usar Passkeys (Llaves de Acceso)
Las contraseñas pueden, en teoría, ser seguras, pero en la práctica no suelen serlo. Si pretendemos recordarlas usaremos contraseñas cortas, que tengan significado y tenderemos a repetirlas. Esto es precisamente su talon de Aquiles, lo que las hace inseguras.
Una contraseña segura requiere de al menos 12 caracteres y debe tener una mezcla de letras, números y símbolos especiales. Con esa configuración existen aproximadamente 6E23 (600.000.000.000.000.000.000.000) posibles contraseñas. Esto es, cientos de miles de millones por cada persona que vive y que vivió alguna vez en la historia. Elegidas al azar, la probabilidad de que existan 2 contraseñas repetidas es virtualmente cero. No hay necesidad de repetir y la recomendación es no hacerlo. En otras palabras, si queremos hacerlas seguras, las contraseñas deben ser extremadamente imprácticas de usar.
Cuando definimos una contraseña de acceso a un sitio, este sitio tiene que guardarla para poder compararla con la que ingresemos luego cuando queramos volver a entrar. Por esta razón las contraseñas son “hasheadas” antes de guardarse. Hashear una contraseña es convertirla en otra cosa. El “hasheo” es un proceso irreversible, esto significa que es fácil convertir nuestra contraseña (que es una cadena de caracteres) en un hash (que es otra cadena de caracteres que no significa nada) pero es virtualmente imposible hacer la operación inversa, esto es, recuperar la contraseña a partir del hash. Si un hacker roba la base de datos del sitio, no robara las contraseñas sino los “hash” de las contraseñas.
Un algoritmo de hashing muy usando es SHA-256. Veamos un ejemplo de una muy mala contraseña:
- Contraseña: pepe123 tendrá el siguiente hash:
- Hash (SHA-256): 974a2be4c0f6db85c78778e367e905f6f4c1b3524505872ade3ddae1d9ef43b8
Veamos ahora el hash de una buena contraseña:
- Contraseña: WNwmXr$4qH9t
- Hash (SHA-256): 1bb2f93e50a9f2ef69480e84b28c1b4d9751e36a51dc2edd010b4094897a82f6
Pero Uds. me dirán, ambos hashes tienen la misma complejidad. Luego de hasheada ambas son similares. Como dijimos, es virtualmente imposible conocer la contraseña a partir del hash. Pero el hash no es la contraseña, aun hasheada, un hacker accedería a nuestra cuenta “adivinando” nuestra contraseña pepe123 mucho más fácilmente que se si la contraseña fuera WNwmXr$4qH9t.
¿Como resolvemos el dilema de que una buena contraseña es siempre impráctica? Hay varias alternativas.
La primera es la implementación de autenticación de factores múltiples (MFA), donde generalmente “multiple” significa “doble” (2FA). La implementación de doble factor de autenticación es un proceso que implica 2 instancias de autenticación: la primera, mediante el tradicional ingreso de contraseña y la segunda, que puede ser implementada de diversas maneras, por ejemplo, un código que la plataforma nos envía a un mail o por SMS o WhatsApp, pero también puede ser un factor biométrico, como nuestra cara o una huella digital. También hay aplicaciones autenticadoras que generan códigos de 6 números que duran unos 30 segundos que se usan como segundo factor de authentication. El doble factor de autenticación agrega una capa adicional de complejidad para un hacker, aun cuando nuestra contraseña sea débil.
Otra alternativa muy común es usar gestores de contraseñas. Estos son aplicaciones que generan aleatoriamente contraseñas con la complejidad que le pidamos y las almacenan de manera encriptada en nuestro dispositivo o en la nube. Solo tendremos que definir una única contraseña compleja para acceder a ellas. Esta contraseña se usa para encriptar todas las otras.
Por supuesto, la combinación de ambas estrategias es aún mejor. La seguridad informática consiste en agregar capa sobre capa de seguridad.
Además, un hacker no tiene por qué “adivinar” nuestra contraseña, la puede “robar” usando técnicas de “phishing” donde nosotros mismos, creyendo que estamos entrando en una página real, proveemos nuestra contraseña aun hacker.
Ahora bien, dicho esto, volvamos al tema central: las passkeys o llaves de acceso. Las llaves de acceso son mucho más seguras que las contraseñas, no necesitan ser recordadas por el usuario y no pueden ser interceptadas por técnicas de “phishing”.
Las passkeys son llaves de criptografía asimétricas Aquí podemos ver una explicación más técnica sobre las llaves criptográficas y por qué son seguras. Para el propósito de este artículo, basta con entender que la criptografía asimétrica utiliza 2 llaves, una privada que jamás se comparte y una pública que se comparte libremente. Ambas llaves están conectadas por un cálculo matemático. Lo que se encripta (imaginemos cerrar un candado) con una de esas llaves, solo puede ser desencriptado (abrir el candado) con la otra. Y viceversa. No es posible abrir lo que se cierra con la misma llave. Nuevamente si queremos entender cómo es eso posible, ver este enlace. Teniendo la llave pública no es posible “calcular” la llave privada pues hacerlo implica resolver una operación matemática (factorización de números primos) que resulta intratable para una computadora (le llevaría millones de años). Tampoco es posible adivinarla (probar todas por fuerza bruta) pues estas llaves tienen miles de bits.
Veamos entonces como es el proceso de registro en un sitio usando passkeys. En lugar de crear y enviar una contraseña que el sitio almacenará hasheada y que luego usará para autenticarnos cada vez que queramos acceder a ella, el procedimiento sera así:
- El sitio nos enviará un desafío criptográfico, que es básicamente un número aleatorio de 256 bits o más y que tiene una validez temporal.
- Nosotros generaremos un par de llaves pública/privada. Almacenamos la llave privada en nuestro dispositivo y jamás saldrá de él a menos que deliberadamente queramos subirla a la nube para poder recuperarla desde otro dispositivo, en cuyo caso se hará encriptada con una llave que solo nosotros tendremos.
- Enviamos la llave pública al sitio junto con el desafío criptográfico recibido firmado digitalmente (encriptado) por nuestra llave privada.
- El sitio usará la llave pública recibida para desencriptar el desafío criptográfico y de esta manera asegurarse que la llave pública recibida es nuestra.
- El sitio asociara esa llave pública a nuestra cuenta y la almacenará.
Ese es todo el proceso de registro.
Cada vez que deseemos acceder al sitio,
- El sitio nos enviará un nuevo desafío criptográfico, esta vez encriptado con nuestra llave pública que tiene asociada a nuestra cuenta. Solo nosotros en todo el universo seremos capaces de abrir ese mensaje encriptado con nuestra llave pública (porque solo nosotros tenemos la única llave que abre esa encriptación)
- Nuestro dispositivo nos pedirá que elijamos la llave privada adecuada de nuestra “boveda” de llaves privadas e iniciará un proceso de autenticación local (para verificar que seamos nosotros). Idealmente esto se hace con algún mecanismo biométrico (huella digital, escaneo de cara o iris) o en su defecto por medio de un PIN o una contraseña, pero en cualquier caso, es un proceso local, jamás sale de nuestro dispositivo, así que no es tan critico que la contraseña no sea compleja.
- Una vez autenticados localmente, usamos la llave privada para abrir el desafío criptográfico que nos envió el sitio, lo firmamos digitalmente con la misma llave privada y se lo devolvemos al sitio.
- El sitio desencriptará con nuestra llave pública el desafío criptográfico y de esta forma sabrá que solo puede venir de nosotros porque nadie más habría podido abrir el desafío que el mismo encriptó con nuestra llave pública.
- El sitio nos concede el acceso.
Como podemos ver a diferencia de las contraseñas, no necesitamos recordar miles de contraseñas complejas porque ninguna contraseña se envía. En el peor de los casos solo necesitamos recordar un único PIN o contraseña para abrir la bóveda que contiene todas las llaves privadas y eso es un proceso que ocurre localmente, por lo que las medidas de seguridad pueden ser más laxas. Las passkeys, como llaves criptográficas que son, simplemente no pueden ser adivinadas, ni calculadas.
El proceso de migración de contraseñas a passkeys ya ha comenzado pero llevara un tiempo.