El "archivo lleno de contraseñas" está bien, pero requiere cierto cuidado al usarlo. Cuando viajo con el mío, lo cifro con GnuPG y lo descifro solo en una computadora portátil (la mía , por lo que es "limpio") que ejecuta Linux, sin ningún espacio de intercambio activado, y descifro solo en /tmp
, que he configurado como un "sistema de archivos de memoria" ( tmpfs
) respaldado con RAM. El objetivo del ejercicio es evitar que alguna de mis valiosas contraseñas alguna vez llegue sin cifrar un almacenamiento de datos permanente (el disco duro interno / SSD).
Algunas aplicaciones de administración de contraseñas (por ejemplo, KeePass ) pueden automatizar este proceso y brindarle un sistema más fácil de usar.
Otro método es cambiar a matemáticas en el momento de generación de las contraseñas. La idea es almacenar en su mente una sola "contraseña maestra" (hacerla grande y muy aleatoria; digamos 20 letras al azar). Cuando necesite generar una contraseña para algún uso U , simplemente aplique alguna operación criptográfica determinista (por ejemplo, hashing) que involucre tanto a U como a la contraseña maestra. " U " aquí será una cadena que utilizará un formato ( cualquier formato que desees) que codifica de alguna manera el destino de la contraseña.
Por ejemplo, haga que U la cadena " ssh:foo.example.com
" signifique "la contraseña utilizada para conectar con SSH a la máquina foo.example.com
". La codificación no importa mucho mientras sea inequívoca, es decir, puede reconstruir dinámicamente la cadena a partir de su conocimiento de la situación ("Quiero conectarme con SSH a foo.example.com
") y no tendrá colisiones (dos distintas Usos que terminan en la misma cadena de uso).
La "operación criptográfica" que combina la contraseña maestra y la cadena de uso en una contraseña debe diseñarse con cierto cuidado. Sugiero usar PBKDF2 , la cadena de uso U es la "sal". El recuento de iteraciones para PBKDF2 es un compromiso: un recuento más alto protege mejor su contraseña maestra, pero implica un costo más alto cuando desea volver a calcular una contraseña. Un costo de iteración de alrededor de un millón es probablemente adecuado.
No tengo una referencia útil a un producto existente que haga eso, pero estoy seguro de que tales productos existen; y, de lo contrario, se podría volver a implementar fácilmente con una aplicación .NET simple (.NET tiene una implementación de PBKDF2 desde .NET 2.0 y también está disponible en el puerto Linux Mono ).
El punto de usar las matemáticas es que no tienes nada para almacenar : la aplicación (pública, fija) y la contraseña maestra (privada, nunca se almacena en ningún lado excepto en tu cabeza) conceptualmente " contiene "todas las contraseñas para un número virtualmente infinito de usos. Los desafíos con este tipo de solución son:
-
Debe codificar la salida PBKDF2 (una secuencia de bytes) en una "contraseña" que se considerará aceptable "en todas partes". Desafortunadamente, cada sitio, servidor o aplicación que acepta contraseñas puede tener sus propias restricciones (longitud mínima, longitud máxima, conjunto de caracteres aceptables, conjunto de caracteres NO aceptables ...) y no está claro si puede diseñar una única codificación que resulte en contraseñas que funcionan para todos los sistemas.
-
Para el mismo destino (nuestra "cadena de uso"), siempre obtiene la misma contraseña. Algunos sitios / sistemas obligan a los cambios de contraseña de forma regular (sin ninguna razón realmente racional, pero eso es humano para ti). Puede admitir tales cosas incluyendo la fecha actual (mes y año) en la "cadena de uso", pero es incómodo tener que recordar si un sitio determinado necesita o no tales contraseñas rotativas.
Entonces, si bien este método tiene algo de elegancia, puede ser poco práctico hasta que se piense y se haga un poco de esfuerzo en la creación de un producto que haga el trabajo (el producto puede ser una herramienta de línea de comandos con un código corto).
Editar: en cuanto a su actualización, una vez que puede almacenar contraseñas, siempre puede cifrar archivos arbitrarios con GnuPG (cifrado simétrico con una contraseña: gpg -c
). Por lo tanto, puede almacenar cualquier cosa de esa manera, incluidas las claves privadas para los certificados.