Reutilizando claves privadas / públicas

36

Tengo cuentas en varios sitios de terceros: Bitbucket, Bluehost, etc.

Por lo que he recopilado, es una práctica común usar un par de claves para todos [id_rsa, id_rsa.pub], pero solo para entregar la clave pública

¿Es ese el uso correcto o es mejor generar un nuevo par para cada sitio?

Me parece que esto es inseguro; cualquier sitio en el que confíe con una intención nefasta [o que haya sido pirateado] podría tomar mi clave privada cuando me conecte por primera vez, y usarla para ingresar a otros sitios.

¿Puede alguien que comprenda SSH verificar que es seguro usar un par de claves en todas partes y, de ser así, tal vez explicar por qué?

Además, si tengo dos computadoras personales, ¿hay alguna razón para usar diferentes pares de claves de cada una?

Gracias a todos.

    
pregunta SamGoody 29.12.2011 - 10:38
fuente

4 respuestas

33

Su clave privada nunca se envía al otro sitio, por lo que es perfectamente seguro reutilizar la clave pública. También está bien reutilizar la misma clave en sus computadoras locales. Sin embargo, tenga en cuenta que si alguien roba la clave, tendrá acceso a todos ellos. Esto puede o no ser una preocupación.

    
respondido por el artbristol 29.12.2011 - 13:08
fuente
15

Hay varios pares de claves en SSH. La persona de la que estás hablando es el par de claves cliente . El cliente (es decir, la máquina que está en su escritorio, bajo su control físico) almacena la clave privada, y la clave privada nunca se envía al servidor. La clave pública se almacena en el servidor (generalmente en el archivo $HOME/.ssh/authorized_keys ).

Cuando el cliente se conecta al servidor, el cliente utiliza la clave privada para demostrarle al servidor que controla la clave privada y puede realizar cálculos con ella (es decir, a firma digital ). El servidor verifica la firma gracias a la clave pública. El conocimiento de la clave pública no le da el poder de generar nuevas firmas, por lo que se denomina clave "pública": se puede hacer pública, sin ningún efecto negativo. En particular, copiar su clave pública en cualquier número de servidores no le da poder a ninguno de estos servidores sobre los otros servidores, ya sean honestos o completamente controlados por un atacante.

Como señala @artbristol, esa es la clave privada que es importante. Si copia su clave pública a diez servidores, y alguien roba la clave private (posiblemente pirateando su sistema de escritorio, o robándola físicamente), entonces alguien obtiene acceso inmediato a los diez servidores en uno. ir. Las claves privadas son valiosas .

    
respondido por el Thomas Pornin 29.12.2011 - 14:52
fuente
5
  

Me parece que esto es inseguro; cualquier sitio en el que confíe con una intención nefasta [o que haya sido pirateado] podría tomar mi clave privada cuando me conecte por primera vez, y usarla para ingresar a otros sitios.

     

¿Puede alguien que comprenda SSH verificar que es seguro usar un par de claves en todas partes y, de ser así, tal vez explicar por qué?

Las claves públicas funcionan en función de la autenticación por desafío. Básicamente, le das a varios sitios tu clave pública, por lo que cada sitio puede presentar un desafío para ti. Este desafío es único cada vez y solo puede ser respondido por una persona con una clave privada.

Un ejemplo simplificado sería si el servidor toma su clave pública y cifra un mensaje como "La clave de sesión para el usuario X el 19 de diciembre a las 16: 30: 03.351213 UTC es XPa7sK35WjMgAezrPmG1Sq4CV7nsFN1Uc3TRW6P8Evc". Su computadora cliente recibe el mensaje cifrado, lo desencripta con su clave privada y luego envía la clave de sesión desencriptada al servidor, validando que tiene la clave privada en su poder sobre la cual el servidor lo autentica. (En la práctica, a menudo es más complicado que el servidor tenga claves de host públicas / privadas, por lo que puede cifrar sus mensajes en el servidor y autenticar que el servidor es quien dice ser).

Tener su clave pública no le da a un servidor malintencionado métodos de ataque adicionales, con la excepción de tratar de factorizar el módulo desde su clave pública para recrear su clave privada. Esto solo es posible si su clave es demasiado pequeña, es decir, las claves de 512 bits se descifraron hace una década, se informó que las claves RSA de 768 bits se descifraron el año pasado (con aproximadamente 10 ^ 20 operaciones; o 2000 años en un solo núcleo de un procesador moderno); Las claves de 1024 bits siguen siendo seguras, y el valor predeterminado de ssh es las claves de 2048 bits.

    
respondido por el dr jimbob 29.12.2011 - 19:42
fuente
3

Este documento tiene todos los detalles sobre cómo la autenticación de clave pública Trabaja en SSH. Lo he resumido a continuación.

El cliente envía el siguiente paquete:

data type   description/value

byte      SSH_MSG_USERAUTH_REQUEST
string    user name
string    service
string    "publickey"
boolean   TRUE
string    public key algorithm name
string    public key to be used for authentication
string    signature

donde signature es una firma que utiliza la clave privada en los siguientes datos:

string    session identifier
byte      SSH_MSG_USERAUTH_REQUEST
string    user name
string    service
string    "publickey"
boolean   TRUE
string    public key algorithm name
string    public key to be used for authentication

El servidor luego mira para ver si la clave pública especificada está autorizada para la clave pública dada (@ThomasPornin explica cómo se hace esto en su respuesta). El servidor luego verifica que la firma sea correcta (esto se hace usando la clave pública). Si eso tiene éxito, entonces la autenticación es exitosa.

Como puede ver (y como se señala en la respuesta de @ artbristol), la clave privada nunca se transmite al servidor. Solo tiene que demostrar que conoce la clave privada enviando la firma digital.

    
respondido por el mikeazo 29.12.2011 - 14:57
fuente

Lea otras preguntas en las etiquetas