Construir un Password Manager

En pleno 2022, mientras las contraseñas desaparecen.

Retos y aprendizajes de

¡Hola, soy Oriol!

Twitter: @OriolEgea - Github: @oegea - Web: www.oriol.im

Soy FE en el equipo de profesionales de coches.net

Reinvento la rueda en mi tiempo libre

555 millones

  • De contraseñas expuestas en la "dark web" de 2017 a 2020. (Fuente: CNET, 2020)
  • Repetir contraseñas en distintas aplicaciones nos hace vulnerables.
  • Un gestor de contraseñas nos proporciona un lugar seguro para almacenar contraseñas robustas y diferentes.

Quiero compartiros el proceso hablando de:

  • La historia que me llevó a crear un password manager, y por qué alguien querría hacerlo en 2022.
  • Conceptos básicos de criptografía.
  • Ideación de la aplicación, e implementación utilizando la API Web de criptografía.

Empecemos por la historia

Por qué construir un gestor de contraseñas en 2022

Qué inconvenientes existían en el pasado, y por qué ahora es más emocionante que nunca

2010

Laura

Su hermano

2010

2010

2014

Mantenimiento frecuente

Actualizar el navegador implica disponer de un entorno seguro

2010

2014

2022

1. Web Crypto API es ahora una API madura y documentada.

2. Web APIs + Web Assembly = Ningún requisito es imposible :D

3. A día de hoy, aún solventa una necesidad. ¿Por qué no empezar?

2010

2014

2022

1. Web Crypto API es ahora una API madura y documentada.

2. Web APIs + Web Assembly = Ningún requisito es imposible :D

3. A día de hoy, aún solventa una necesidad. ¿Por qué no empezar?

2022

¡Manos al código!

Hablemos de criptografía

Disclaimer:

2. Se simplifican y obvian conceptos.

1. No soy un experto matemático. Intento utilizar algoritmos seguros y ser cauteloso utilizando buenas prácticas.

Criptografía
Cifrado E2E
Cifrado Simétrico

Qué es la criptografía

1. Práctica y estudio de técnicas para securizar información.

2. Permite cifrar mensajes, garantizar la integridad de éstos (checksum), asegurar el no-repudio de un emisor (firma digital), entre otros.


3. En lo relativo al cifrado de datos, se utilizan claves secretas para cifrar y descifrar datos.

Cifrado E2E

1. Operación de cifrado/descifrado se realiza por el emisor/receptor desde su propio dispositivo.

2. Sólo emisor y receptor disponen de claves de cifrado. ISP, proveedor de servicio, u otros, no pueden acceder al mensaje.

Resumen: Los datos los cifra/descifra "frontend". El servidor no realiza operaciones criptográficas ni accede a las claves de cifrado.

Cifrado E2E

Hasta 2016 Whatsapp no implementó un diseño incorporando cifrado e2e.

👉🏾 https://shorturl.at/mDIWY

Cifrado simétrico

1. Utilizamos la misma clave para cifrar y descifrar.

2. Emisor y receptor deben conocer esta clave.

3. Si existen varios participantes, compartir de forma segura la clave de cifrado es un reto.

¡Ahora sí!

Diseñemos un Password Manager

¿Qué debe hacer un Password Manager básico?

1. Organizar la información (i.e. vaults, directorios)

 

2. Almacenar información sensible (contraseñas, tarjetas de crédito)

3. Aplicar medidas de seguridad en almacenaje, transporte, etcétera.

Esbozando la arquitectura

1. Completa login.
2. Crea y gestiona directorios y contraseñas.

1. Actúa como almacén de datos.
2. Identifica al cliente (login).
3. Envía a FE sólo sus datos.

¿Es esto suficiente?

No

Riesgos existentes

holamundo123

Texto plano

- Proveedor de servicio puede visualizar contraseñas.
- Leak de datos interno (error humano).
- Acceso no autorizado (vulnerabilidad).

Añadiendo una contraseña maestra

nfgfeg4r4tgrfdfdsfsdfsdf==

Datos cifrados

master-password

Contraseña maestra.
(No se comparte, no se almacena)

Derivamos clave de cifrado de la contraseña

Derivando clave de cifrado

Derivando clave de cifrado

Cifrando contenido

Cifrando contenido

Descifrando contenido

Descifrando contenido

¿Es esto suficiente?

Depende

Opciones de un adversario

PBKDF2

123456

holamundo

holamundo123

123456789

admin

root

admin123

toor

PBKDF2

AES GCM

770 USD
Una contraseña débil
-
14.000.000.000.000.000 USD
(14 mil billones) Una contraseña robusta

(Fuente: 1Password, Enero 2023 - https://support.1password.com/pbkdf2/)

Ataque de fuerza bruta

Un sistema es seguro dependiendo de los recursos que cueste comprometerlo. Los que hoy en día es seguro, puede dejar de serlo "mañana".

Ampliando la seguridad: Solicitar contraseñas seguras

Ampliando la seguridad: Instalando la app On Premise

Ampliando la seguridad: Asignando una clave aleatoria

Además de cifrar los datos con la clave derivada de la contraseña maestra, los ciframos con una clave aleatoria.

La clave aleatoria solo la solicitamos la primera vez, y la almacenamos en el dispositivo (i.e. local storage).

Ampliando la seguridad: Asignando una clave aleatoria

Pros:

1. Es mucho más difícil para un adversario conseguir la clave aleatoria y además la contraseña maestra.

Cons:

1. Configurar un nuevo dispositivo es ahora más difícil (impacto en UX).

 

2. Perder la clave aleatoria comporta perder el acceso.

Ampliando la seguridad: Generando una clave aleatoria

Conclusiones finales

1. No hay recetas mágicas: Siempre es buena idea añadir capas de seguridad adicionales intentando no deteriorar la UX.

3.  Leer y documentarse sobre qué algoritmos son seguros (a día de hoy) y qué buenas prácticas debemos cumplir es vital.

2. Los algoritmos de cifrado asimétrico abren un abanico de posibilidades. (¡Compartir contraseñas, por ejemplo!)

¡Es hora de hacer cosas guays aplicando criptografía!

Avatars by getavataaars.com. Some images by rawpixel.com, storyset and  jcomp on Freepik.

(También de hacer preguntas, si ha quedado tiempo =D)

¡Puedes descargar las slides aquí!

(Además he dejado algunas notas post-presentación)