Autentificación de clave pública: ¿qué se firma?

2

Acabo de empezar a leer sobre SSH y cómo se usa para la autenticación. De este sitio web , dice:

  

La clave privada es capaz de generar firmas. Una firma creada con su clave privada no puede ser falsificada por nadie que no tenga esa clave; pero cualquiera que tenga su clave pública puede verificar que una firma en particular es genuina.

     

Así que genera un par de claves en su propia computadora y copia la clave pública al servidor. Luego, cuando el servidor le pide que demuestre quién es usted, PuTTY puede generar una firma utilizando su clave privada. El servidor puede verificar esa firma (ya que tiene su clave pública) y le permite iniciar sesión. Ahora, si el servidor está pirateado o falsificado, el atacante no obtiene su clave privada o contraseña; solo ganan una firma. Y las firmas no se pueden reutilizar, por lo que no han ganado nada.

Mi pregunta es ¿qué tipo de mensaje se usa en la vida real, junto con su clave privada, para generar la firma digital? Y una vez que el servidor aplica su clave pública para generar el mensaje original, ¿cómo sabe si ese mensaje es correcto? ¿Está el mensaje públicamente disponible?

O cuando intenta conectarse, ¿el servidor le envía un mensaje de uso único para que cree la firma digital utilizando su clave privada?

    
pregunta shimizu 31.12.2014 - 19:43
fuente

2 respuestas

4

Consulta RFC 4252 sobre el protocolo de autenticación SSH , que se encuentra en la sección 7 (en las páginas 8 y 9) :

  

Para realizar la autenticación real, el cliente PUEDE enviar una firma generada utilizando la clave privada ... La firma se envía utilizando el siguiente paquete:

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

Eso ya lo sabías, más o menos, pero en realidad no hemos descubierto qué contiene el campo de cadena final signature . La sección que sigue inmediatamente en realidad responde a su pregunta:

  

El valor de 'firma' es una firma de la clave privada correspondiente en los siguientes datos, en el siguiente orden:

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

Al consultar las secciones 1, 5 y 6, podemos entender el significado de estos valores:

  • el identificador de sesión (un valor por conexión obtenido antes del protocolo de autenticación del cliente),

  • el nombre de usuario utilizado por el cliente,

  • el nombre del servicio que se solicita (aquí, " ssh-userauth "),

  • la clave pública del cliente, y

  • algunos valores estáticos ( "publickey" , TRUE , SSH_MSG_USERAUTH_REQUEST (que es el valor 50 )).

respondido por el apsillers 31.12.2014 - 21:46
fuente
4
  

Mi pregunta es qué tipo de mensaje se usa en la vida real, junto con   ¿Tu clave privada, para generar la firma digital?

El mensaje puede ser cualquier cosa, realmente no importa.

  

... una vez que el servidor aplica su clave pública para generar el original   mensaje, ¿cómo sabe si ese mensaje es correcto? Es el   mensaje público disponible?

El propósito de una firma digital es garantizar:

  • Autenticidad del remitente
  • Validez del mensaje

Podemos hacer esto generando un HMAC (tecleado con nuestra clave privada) y enviándolo junto con el mensaje original.

El uso del PK aquí proporciona no repudio porque solo la clave pública correspondiente puede descifrar el MAC por lo tanto, sabemos que al menos quien envió el mensaje tiene acceso a la clave privada ( nota: tenemos No hay forma de saber si el PK ha sido comprometido, solo podemos asumir que el remitente es quien dice que está basado en que tienen acceso al PK )

Una vez descifrados, generaríamos un MAC del mensaje original, lo compararemos con el MAC descifrado y, si coinciden, sabemos que el mensaje no ha sido manipulado y por lo tanto es válido.

  

... ¿el servidor envía un uso único?   Mensaje para que cree la firma digital utilizando su   clave privada?

Para que el cliente genere una firma digital, debe conocerla. PK: la forma en que el PK se entrega al cliente depende completamente de usted (certificado del cliente, OTP, entrega en mano, etc.).

La clave para hacer que una firma no sea reutilizable (mensaje de una sola vez) es utilizar un nonce . El tipo de nonce que usa depende de la vida útil que desea que tenga su mensaje. Por ejemplo, los nonces basados en el tiempo se pueden usar para proporcionar una ventana de tiempo en la que se deben usar los mensajes; esto es útil en escenarios donde las solicitudes pueden tardar un tiempo considerable en completarse (las solicitudes de OAuth son un buen ejemplo)

En resumen, lo único que se requiere para generar una firma digital es una clave & un mensaje. La clave en sí puede ser cualquier cosa (GUID, número aleatorio, etc.) siempre y cuando se mantenga segura y solo sea conocida por los remitentes autorizados. El contenido del mensaje solo es relevante para garantizar la integridad de los datos, no ayuda a aclarar quién envió el mensaje, las claves privadas / públicas se utilizan para esto.

    
respondido por el James 01.01.2015 - 04:59
fuente

Lea otras preguntas en las etiquetas