Pregunta Tamaño de la firma RSA?


Me gustaría saber cuál es la duración de la firma de RSA. ¿Es siempre del mismo tamaño que el tamaño de la clave RSA, como si el tamaño de la clave es 1024, entonces la firma RSA tiene 128 bytes, si el tamaño de la clave es 512 bits, entonces la firma RSA tiene 64 bytes? ¿Qué es el módulo de RSA? Además, ¿qué significa RSA-sha1? Cualquier puntero muy apreciado.


32
2017-07-12 01:57


origen


Respuestas:


Tiene razón, el tamaño de la firma RSA depende del tamaño de la clave, el tamaño de la firma RSA es igual a la longitud del módulo en bytes. Esto significa que para una "clave de n bits", la firma resultante tendrá exactamente n bits de longitud. Aunque el valor de firma calculado no es necesariamente n bits, el resultado se rellenará para coincidir exactamente con n bits.

Ahora aquí está cómo funciona esto: RSA algoritmo se basa en exponenciación modular. Para tal cálculo, el resultado final es el resto del resultado "normal" dividido por el módulo. La aritmética modular juega un papel importante en Teoría de los números. Allí la definición de congruencia (≡) es

m is congruent to n mod k if k divides m - n

Ejemplo simple - deje n = 2 yk = 7, luego

2 ≡ 2 (mod 7) because: 7 divides 2 - 2
9 ≡ 2 (mod 7) because: 7 divides 9 - 2
16 ≡ 2 (mod 7) because: 7 divides 16 - 2
...

7 en realidad hace dividir 0, la definición de división es

Un entero a divide a un entero b si hay un entero n con la propiedad de que b = na

Para a = 7 yb = 0 elije n = 0. Esto implica que cada entero divide 0, pero también implica que la congruencia se puede expandir a números negativos (no entrará en detalles aquí, no es importante para RSA).

Entonces, la esencia es que el principio de congruencia expande nuestra comprensión ingenua de los desechos, el módulo es el "número tras mod", en nuestro ejemplo sería 7. Como hay una cantidad infinita de números que son congruentes dado un módulo, hablamos de esto como las clases de congruencia y usualmente escogemos un representante (el entero congruente más pequeño> 0) para nuestros cálculos, tal como lo hacemos intuitivamente cuando hablamos del "resto" de un cálculo.

En RSA, la firma de un mensaje m significa exponenciación con el "exponente privado" d, el resultado r es el entero más pequeño> 0 y más pequeño que el módulo n, de modo que

m^d ≡ r (mod n)

Esto implica dos cosas

  • La longitud de r (en bits) está limitada por n (en bits)
  • La longitud de m (en bits) debe ser <= n (en bits, también)

Para hacer que la firma tenga exactamente n bits de longitud, se aplica alguna forma de relleno. Cf. PKCS # 1 para opciones válidas.

El segundo hecho implica que los mensajes mayores que n deberían firmarse rompiendo m en varios fragmentos <= n, pero esto no se hace en la práctica, ya que sería demasiado lento (la exponenciación modular es computacionalmente costosa), por lo que necesitamos otra forma de "comprimir" nuestros mensajes para que sean más pequeños que n. Para este propósito usamos funciones hash criptográficamente seguras como SHA-1 que mencionaste. Aplicando SHA-1 a un mensaje de longitud arbitraria m producirá un "hash" de 20 bytes de longitud, más pequeño que el tamaño típico de un módulo RSA, los tamaños comunes son 1024 bits o 2048 bits, es decir, 128 o 256 bytes, por lo que el cálculo de la firma se puede aplicar para cualquier mensaje arbitrario.

Las propiedades criptográficas de dicha función hash aseguran (en teoría, la falsificación de firmas es un gran tema en la comunidad de investigación) que no es posible forjar una firma que no sea por la fuerza bruta.


44
2017-07-12 09:41