web-dev-qa-db-fra.com

Taille de la signature RSA?

Je voudrais savoir quelle est la longueur de la signature RSA? Est-ce toujours la même taille que la taille de la clé RSA comme si la taille de la clé est 1024 alors la signature RSA est de 128 octets, si la taille de la clé est 512 bits alors la signature RSA est de 64 octets? qu'est-ce que le module RSA? Que signifie également RSA-sha1? Tout pointeur grandement apprécié.

36
user839917

Vous avez raison, la taille de la signature RSA dépend de la taille de la clé, la taille de la signature RSA est égale à la longueur du module en octets. Cela signifie que pour une "clé à n bits", la signature résultante aura exactement n bits de long. Bien que la valeur de signature calculée ne soit pas nécessairement n bits, le résultat sera complété pour correspondre exactement à n bits.

Maintenant, voici comment cela fonctionne: L'algorithme RSA est basé sur exponentiation modulaire . Pour un tel calcul, le résultat final est le reste du résultat "normal" divisé par le module. L'arithmétique modulaire joue un grand rôle dans théorie des nombres . Là, la définition de la congruence (≡) est

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

Exemple simple - soit n = 2 et k = 7, puis

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 fait divise 0 , la définition de la division est

Un entier a divise a un entier b s'il existe un entier n avec la propriété b = na

Pour a = 7 et b = 0, choisissez n = 0. Cela implique que chaque entier divise 0, mais cela implique également que la congruence peut être étendue à des nombres négatifs (n'entrerons pas dans les détails ici, ce n'est pas important pour RSA).

Donc l'essentiel est que le principe de congruence élargit notre compréhension naïve des restes, le module est le "nombre après mod", dans notre exemple, il serait 7. Comme il y a une quantité infinie de nombres qui sont congruents étant donné un module, nous parlons de cela comme les classes de congruence et choisissent généralement un représentant (le plus petit entier congru> 0) pour nos calculs, tout comme nous le faisons intuitivement lorsque nous parlons du "reste" d'un calcul.

Dans RSA, signer un message m signifie exponentiation avec "l'exposant privé" d, le résultat r est le plus petit entier> 0 et plus petit que le module n de sorte que

m^d ≡ r (mod n)

Cela implique deux choses

  • La longueur de r (en bits) est limitée par n (en bits)
  • La longueur de m (en bits) doit être <= n (en bits aussi)

Pour faire la signature exactement n bits de long, une certaine forme de remplissage est appliquée. Cf. PKCS # 1 pour les options valides.

Le deuxième fait implique que les messages plus grands que n devraient soit être signés en brisant m en plusieurs morceaux <= n, mais cela ne se fait pas en pratique car ce serait beaucoup trop lent (l'exponentiation modulaire est coûteuse en termes de calcul), nous avons donc besoin une autre façon de "compresser" nos messages pour qu'ils soient plus petits que n. À cette fin, nous utilisons fonctions de hachage sécurisées cryptographiquement comme SHA-1 que vous avez mentionné. L'application de SHA-1 à un message de longueur arbitraire m produira un "hachage" de 20 octets de long, plus petit que la taille typique d'un module RSA, les tailles courantes sont 1024 bits ou 2048 bits, soit 128 ou 256 octets, donc le le calcul de signature peut être appliqué pour tout message arbitraire.

Les propriétés cryptographiques d'une telle fonction de hachage garantissent (en théorie - la contrefaçon de signature est un sujet énorme dans la communauté des chercheurs) qu'il n'est pas possible de forger une signature autrement que par force brute.

48
emboss