Cómo me convertí en administrador de contraseñas

Las contraseñas son el método de autenticación más antiguo en la tecnología de la información, y todavía se utilizan ampliamente en la actualidad. Por desgracia, es simplemente imposible mantener en la memoria las contraseñas de todos los recursos de Internet, siempre que sean diferentes y complejas. Aquí, los administradores de contraseñas acuden en ayuda de una persona, que asume esta tarea: una persona recuerda solo una contraseña maestra, que da acceso a todas las demás.



No me gustaron los administradores de contraseñas existentes: es inconveniente sincronizar la base de datos de contraseñas entre diferentes dispositivos y sistemas operativos; además, los programas de administrador a menudo están abiertamente mal protegidos . Una vez estaba leyendo artículos sobre criptografía y se me ocurrió la idea: ¿por qué no hacer un administrador de contraseñas que, en lugar de almacenar contraseñas, las calcule?



La primera forma de implementar esta idea que me viene a la mente son las funciones hash criptográficas. A primera vista, todo es genial: seleccionamos una función persistente (digamos, SHA-3 en la versión de 224 bits), le damos la contraseña maestra qwerty y el tipo de cuenta vk como entrada, y obtenemos instantáneamente 56 caracteres del conjunto 0123456789abcdef. Inmediatamente encontré dos proyectos similares: pirateado y potencialmente pirateado.... Este enfoque tiene un gran problema: las funciones de hash criptográficas están diseñadas, entre otras cosas, para ser tan rápidas y poco exigentes para los recursos como sea posible y, por lo tanto, es posible organizar un diccionario o un ataque de fuerza bruta completo de la contraseña maestra utilizando la contraseña interceptada para un sitio en la CPU (relativamente lento), GPU , FPGA (mucho más rápido), ASIC (muy rápido). Para llevar a cabo tales ataques en algoritmos de hash populares sin usar sal, también puede usar tablas de arco iris, que aceleran enormemente el proceso de craqueo en la CPU.



Afortunadamente, existe otra opción de implementación: funciones para obtener claves. En pocas palabras, realizan hash, pero relativamente lento (digamos, un segundo en un procesador normal) y un consumo de recursos relativamente alto (digamos, 16 megabytes de RAM) para hacer que los ataques de fuerza bruta y de fuerza bruta sean lo más difíciles posible. Entre las funciones modernas que me son familiares PBKDF2 , bcrypt y scrypt, scrypt se veía mejor: creado en base a la experiencia de los dos primeros, oponiéndose con éxito a la computación en GPU y microcircuitos (FPGA y ASIC) y diseñado para flexibilidad en la personalización para cualquier tarea. Pensé en la implementación de este proyecto, pero por alguna razón lo dejé en un segundo plano. Y en vano.



Criptógrafo Nadim Kobeissihizo exactamente un administrador de contraseñas npwd en JavaScript (funciona como una aplicación de escritorio a través de Node.JS). Instalé la utilidad en una computadora con Linux y Windows, así como en una computadora portátil con Linux, comencé a usarla y realmente me gustó. Ingresa la única contraseña maestra y el tipo de cuenta (por ejemplo, "twitter") en la aplicación, y después de un par de segundos, su portapapeles ya contiene una contraseña compleja calculada específicamente para esta cuenta, y piratea su contraseña maestra (lea: todas sus contraseñas) por La contraseña para una cuenta será muy, muy difícil.



Pero también hubo un problema. La versión de Windows realmente dio una contraseña después de un par de segundos, pero bajo Linux (¡incluso en la misma computadora!) Se necesitaron 15 segundos para los cálculos, lo cual fue molesto. Al principio solo reduje una constante, haciendo que la contraseña maestra fuera menos segura, pero luego pensé: ¿por qué no reescribir la aplicación en C, porque probablemente funcionará mucho más rápido? Me animó especialmente la idea de que tenía un plan para este proyecto durante mucho tiempo, pero era lento y alguien lo había implementado antes que yo.



Después de unos días de trabajo sin prisas, creé mi propio administrador de contraseñas cpwdtotalmente compatible con el original. ¡Fue divertido! Después de una pequeña optimización, logré alcanzar la alta velocidad deseada. No he intentado migrar cpwd a Windows, pero debería ser fácil. En la página de GitHub del proyecto, he recopilado una colección de enlaces a proyectos similares en el mundo académico y más allá; resulta que la idea es bastante antigua.



Seguramente no es una solución milagrosa, pero funciona para mí. En el proceso de uso, me encontré con un problema: algunos sitios tienen requisitos interesantes para contraseñas como "no más de 20 caracteres", "debe haber una letra grande, una letra minúscula, un número y un carácter especial", como resultado, la contraseña generada por npwd / cpwd a veces debe elaborarse a mano antes de ingresar ... Afortunadamente, no hay muchos sitios de este tipo.



El original fue publicado en mi blog el 7.08.15. Han pasado 5 años y todavía utilizo esta utilidad.



All Articles