2011-07-12 47 views
30

Me gustaría saber cuál es la longitud de la firma 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? ¿Qué significa RSA-sha1? Cualquier puntero muy apreciado.Tamaño de firma RSA?

Respuesta

43

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, así es como funciona esto: El algoritmo RSA se basa en modular exponentiation. 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 Number Theory. Existe la definición de congruencia (≡) es

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

Ejemplo sencillo - Sea n = 2 y k = 7, entonces

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 realidad no división 0, la definición de la división es

un entero un divide una un número entero b si hay un número 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)

Así que la esencia es que el principio de congruencia expande nuestra comprensión ingenua de los residuos, 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 elegimos 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 d "exponente privado", el resultado r es el más pequeño número entero> 0 y menor que el módulo n de modo que

m^d ≡ r (mod n) 

Esto implica dos cosas

  • La longitud de r (en bits) está delimitada 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) , entonces necesitamos otra forma de "comprimir" nuestros mensajes para que sean más pequeños que n. Para este propósito, usamos cryptographically secure hash functions como SHA-1 que mencionó.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 fuerza bruta.

+0

¡Muchas gracias! Apreciar tu ayuda – user839917

+0

Entonces ... ¿cuánto tiempo es? Si encripto un solo byte con una clave de 1024 bits, entiendo que la firma tendrá una longitud de 1024 bits. – ixe013

+1

He enfatizado el resultado un poco más claro :) Tienes razón, una clave de 1024 bits producirá firmas de 1024 bits. – emboss

Cuestiones relacionadas