¿Puedo firmar un mensaje de un solo carácter con la clave privada RSA?

52

Si firmo un mensaje muy corto (0 o 1) con mi clave privada (y la parte receptora verifica la firma usando una clave pública), ¿es esto menos seguro que enviar el mensaje firmado lo suficientemente largo?

    
pregunta h22 20.10.2015 - 15:06
fuente

4 respuestas

117

El problema no consiste en falsificar la firma, sino en el significado del mensaje .

Lo que está firmado no es el mensaje, sino un hash del mensaje. El hash siempre tiene la misma longitud.

Un mensaje que consta de un solo bit o byte se puede cifrar, por lo que se puede firmar, para que se pueda probar que su clave lo firmó.

Pero incluso si se puede probar, ¿qué significa el mensaje? Si es la respuesta a una pregunta "sí / no", aún debe incluir alguna referencia a la pregunta a la que se responde, para evitar ataques de reproducción .

  1. Alice: ¿Tu nombre es h22?
  2. Bob: Signed(Yes) (Eve escucha por casualidad)
  3. Alice: ¿eres culpable de actividad subversiva?
  4. Eve: Signed(Yes) (Alice piensa que esto es de Bob)

Por lo tanto, cada respuesta debe incluir algún tipo de referencia a la pregunta, por lo que la respuesta no se puede reutilizar. Puede hacer esto dando a cada pregunta un "número utilizado solo una vez" (nonce) que incluya en la respuesta.

  1. Alicia: P1: ¿Tu nombre es h22?
  2. Bob: Signed(Q1:Yes) (Eve escucha por casualidad)
  3. Alice: P2: ¿Eres culpable de actividad subversiva?
  4. Eve: Signed(Q1:Yes) (Alice no se deja engañar: este es el número de pregunta incorrecto, por lo que es un ataque de repetición)
  5. Bob: Signed(Q2:No) (Alice sabe que esto es realmente Bob ahora)

Por supuesto, en realidad Alice también necesita firmar sus preguntas. De lo contrario, Mallory podría engañar a Bob para que responda preguntas diferentes.

  1. Alicia: P1: ¿Tu nombre es h22?
  2. Bob: Signed(Q1:Yes)
  3. Alice: P2: ¿Eres culpable de actividad subversiva? (Interceptado por Mallory)
  4. Mallory: P2: ¿Eres conocido como h?
  5. Bob: Signed(Q2:Yes) (Respondiendo a la pregunta de Mallory, pero Alice piensa que esta es una respuesta para ella).

Por eso es importante que toda la conversación esté protegida. En realidad, esto generalmente significa incluir la hora y la fecha como parte del mensaje que se firma, así como también firmar los mensajes en ambas direcciones y protegerlos contra la reproducción mediante un nonce.

    
respondido por el Ben 20.10.2015 - 16:23
fuente
11

Si firmo un mensaje no encriptado M usando mi clave privada con una firma S, cualquier persona en el mundo puede leer ese mensaje y sabrá que ese mensaje firmado con mi clave privada da la firma S. Si espera una respuesta de mi parte, entonces cualquiera en el mundo podría darle la respuesta M con la firma S, y usted sabría que se firmó con mi clave privada, excepto que el mensaje no fue dirigido a usted.

Si alguna vez firmé el mensaje "Sí" y el mensaje "No" con mi clave privada, y usted pregunta "¿está de acuerdo con nuestro plan?", cualquiera podría enviar un mensaje "Sí" o un mensaje. "No" a ti, aparentemente firmado por mí.

Para evitar ese riesgo, solo podría generar un número aleatorio largo R y decirme "¿Está de acuerdo con nuestro plan, e incluya R en su respuesta?". Entonces solo aceptarías las respuestas "Sí R" y "No R". Ya que R es aleatorio, nunca antes había enviado y firmado "Sí R" o "No R", por lo que nadie puede falsificarlo.

    
respondido por el gnasher729 20.10.2015 - 22:10
fuente
6

Los algoritmos de firma digital funcionan sobre entradas que son secuencias de bits de longitud arbitraria. De hecho, la mayoría de los trabajos realiza primero el hashing de los datos que se van a firmar (o verificar) y luego opera solo en la salida de la función hash; por lo tanto, el mensaje puede ser cualquier cosa que se ajuste a la función hash. Por lo tanto, un mensaje de un byte, o incluso un mensaje vacío, ciertamente puede ser procesado.

(La mayoría de las funciones hash tienen una longitud de entrada formal máxima , pero por lo general tan absurda que es tan buena como infinita en términos prácticos. Por ejemplo, SHA-256 acepta entradas de hasta 2 64 -1 bits, que es más de un par de millones de terabytes.)

Ahora, por supuesto, las firmas digitales solo prueban que la clave privada estuvo involucrada en algún momento, sobre un mensaje de entrada específico; no transmite más significado que lo que eligió incluir en el mensaje, y no hay mucho espacio en un mensaje de un solo byte. @Ben, en su respuesta , muestra cómo los atacantes podrían reutilizar los mensajes firmados fuera de contexto; esto generalmente se conoce como un ataque de repetición y la medida habitual es usar un nonce : la entrada incluye un valor que proporcionó la persona que va a verificar la firma, y ese verificador se asegura de que aceptará un valor nonce dado una sola vez. En un mensaje de 8 bits, puede ajustar como máximo 256 valores distintos de nonce, por lo que esto pronto se vuelve bastante limitado.

    
respondido por el Thomas Pornin 20.10.2015 - 16:41
fuente
3

No solo es inseguro al permitir que los mensajes se tomen fuera de contexto, sino que puede dar como resultado la pérdida de la clave privada: enlace

Por lo tanto, la operación de firma generalmente se realiza en hash (relleno aleatorio + hash (mensaje)) en lugar de solo (mensaje) o hash (mensaje). Consulte enlace

Algo similar se aplica al cifrado. Dado que en los sistemas PK es posible que cualquiera pueda cifrar un mensaje, cada cifrado del mismo mensaje debe producir un resultado diferente. De lo contrario, es posible producir un diccionario de todos los textos cifrados de mensajes cortos.

Si tus adversarios están intercambiando solo dos tipos de mensajes cortos "aiourghaoihvbu" y "048yqnb038", puedes resolver lo que significa sí y lo que significa no sin hacer ningún criptografía.

    
respondido por el pjc50 21.10.2015 - 15:16
fuente

Lea otras preguntas en las etiquetas