¿Cómo debe un webmaster administrar todas sus contraseñas y claves?

8

Tengo varias claves privadas que uso para ssh en AWS, dreamhost, github, etc. Tengo frases de contraseña para todas estas claves privadas que son demasiado complejas para recordar. Tengo las contraseñas de mysql que mi aplicación y yo debemos conocer.

¿Cuál es una forma cómoda y segura de realizar un seguimiento de todo esto? Mi idea inicial es que podría ser útil cifrar y tar un conjunto de archivos con toda esta información, y ponerlo en "la nube" (dropbox, gmail). También puedo ponerlo en una memoria USB que tengo siempre, pero eso es demasiado fácil de perder. ¿Hay alguna manera mejor?

Actualizar Yo uso lastpass para las contraseñas, y es decente. No estoy seguro de cómo tratar con las claves privadas, o cosas como los certificados ssl.

    
pregunta Snitse 30.08.2013 - 19:22
fuente

4 respuestas

6

[Divulgación: trabajo para AgileBits, los creadores de 1Password]

Ya mencionaste el uso de un administrador de contraseñas para los inicios de sesión web. Pero para cosas como las claves privadas SSH y GPG / PGP, debe considerar un administrador de contraseñas que le permita adjuntar archivos a elementos particulares y proporcione una fácil sincronización de estos datos.

Sistemas de archivos cifrados.

Otra opción, que no utiliza un administrador de contraseñas, es tener un sistema de archivos cifrado en algún dispositivo portátil (unidad de almacenamiento USB). La dificultad es encontrar un formato que funcione de manera portátil para usted. Si solo usas OS X, entonces un DMG encriptado es una opción, ya que podrás montarlo y descifrarlo en cualquier Mac. No sé cuál es la alternativa de Windows. Algo como TrueCrypt podría ser una opción, pero también necesitarías llevar o instalar TrueCrypt dondequiera que vayas.

Cosas que debes evitar

Evitaría usar algo como un archivo zip protegido por contraseña. Primero, la protección de la contraseña / criptografía no es tan buena, pero lo más importante es que es muy fácil terminar dejando datos sin cifrar por ahí.

También me gustaría evitar tratar de rodar su propio sistema de archivos cifrado. Realmente hay muchas sutilezas en el diseño de un sistema que la mayoría de la gente no va a considerar.

Lo que hago

Yo, por supuesto, uso 1Password (ver descripción). Debido a que maneja archivos adjuntos, puedo adjuntar mis varias claves privadas a los elementos en 1Password.

Inconvenientes

El mayor problema que tengo con esto es que 1Password no se ejecuta en Linux o FreeBSD. (Hay algunos proyectos de código abierto para construir un lector de 1Password para tales sistemas, pero aún no están listos).

También por mucho que confío en 1Password y en mi contraseña maestra de 1Password, todavía me siento incómodo al guardar tanto mi archivo de clave privada PGP como su contraseña en la misma canasta bien protegida. Así que guardo mi clave privada PGP en 1Password, pero confío en mi memoria para esa frase de contraseña en particular.

    
respondido por el Jeffrey Goldberg 30.08.2013 - 21:14
fuente
2

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.

    
respondido por el Thomas Pornin 30.08.2013 - 19:47
fuente
1

Muchos de nosotros usamos programas como KeePass para realizar un seguimiento de las cuentas. Los encripta de forma segura y los mantiene organizados. También tiene clientes disponibles para la mayoría de los teléfonos inteligentes y de escritorio, por lo que puede acceder a sus contraseñas dondequiera que esté.

    
respondido por el AJ Henderson 30.08.2013 - 19:29
fuente
0

Puede intentar KeePassX . Al menos en Linux, en cada entrada puede guardar un archivo. Probablemente no "abra" claves o certificados privados de manera automática, pero al menos es un lugar seguro para colocar toda la información crítica.

    
respondido por el Pipe 30.08.2013 - 19:47
fuente

Lea otras preguntas en las etiquetas