web-dev-qa-db-fra.com

Taille de sortie du chiffrement RSA

Quelle est la taille de sortie du chiffrement RSA lors de l'utilisation de la clé à 2048 bits et de pkcs1padding.

Est-ce toujours 256 octets indépendamment de la taille d'entrée?

Comment puis-je le calculer pour d'autres tailles de clés?

18
hyda

Oui , ça l'est.

output-size devrait toujours égal à la taille de Modulus (partie de la clé) , alors:

2048 bit Modulus -> 2048 bit output
1024 bit Modulus -> 1024 bit output
...

Si ce n'est pas le cas, il existe de nombreuses attaques contre [~ # ~] rsa [~ # ~], voir ici pour des informations de base à ce sujet.

Donc, pour garantir que la sortie est 2048 bit même lorsque l'entrée à chiffrer est, disons 7,
un remplissage doit toujours être appliqué!

16
i_turo

La sortie (sous forme d'entier) de RSAEP (primitive de chiffrement RSA) est toujours comprise entre 0 et n:

  1. Si le représentant du message m n'est pas compris entre 0 et n-1, le message de sortie est hors de portée et s'arrête.

  2. Soit c = m ^ e mod n.

  3. Sortie c.

Bien sûr, c est un nombre. Vous devez donc le convertir en octets pour qu'il soit utilisable. La seule chose connue sur c est qu'elle est plus petite que n pour une grande valeur de m. Il se peut que c soit plus petit de quelques octets même si m est grand.


Vous avez mentionné PKCS1Padding , qui fait partie du schéma de cryptage RSAES-PKCS1-V1_5-ENCRYPT . Le remplissage s'assurera que m est toujours grand et aléatoire; exigences pour le chiffrement RSA pour être sécurisé.

Vous constaterez que l'encodage de c est spécifié ici:

...

Étape 4: convertir le texte chiffré représentatif c en un texte chiffré C de longueur k octets: C = I2OSP (c, k)

...

où k est la taille du module en octets (octets).

Donc oui , la réponse est toujours k, la taille du module en octets. Tout simplement parce que la norme l'exige de cette façon. Il s'agit d'une valeur codée en tant que grand nombre endian non signé préfixé avec autant d'octets zéro que nécessaire.


Remarques:

  • la taille du module définit la taille de la clé. Ainsi, la sortie d'un cryptage RSA est identique à la taille de la clé: ceil(keySize / 8.0) à l'aide de flottants ou (keySize + 8 - 1) / 8 en utilisant des entiers.

  • RSA avec remplissage OAEP utilise la même technique, donc la réponse est également correcte pour OAEP (et la plupart des autres schémas moins connus tels que RSA-KEM).

  • De nombreuses routines de bibliothèque qui exécutent RSA "brut" (juste l'exponentiation modulaire du message avec l'exposant public) exécutent toujours la fonction I2OSP - mais il vaut mieux vérifier pour s'en assurer.

4
Maarten Bodewes

La taille de sortie de RSA ordinaire (en utilisant un schéma de remplissage, mais pas cryptage hybride ) est toujours la taille de la clé. La raison en est que pour une clé publique n le résultat est un entier c avec 0<=c<n. Il existe de nombreuses introductions pour RSA, par exemple http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-045j-automata-computability-and-complexity-spring-2011/lecture-notes/MIT6_045JS11_rsa.pdf

2
Perseids