Question:
RSA octets maximum à crypter, comparaison à AES en termes de sécurité?
pandoragami
2013-03-30 10:23:20 UTC
view on stackexchange narkive permalink

Quel est le nombre maximum d'octets pour crypter un message en clair à l'aide de RSA qui est raisonnablement sécurisé et également efficace et AES serait-il préférable pour la même taille en octets? Le cryptage n'a pas besoin d'être public d'ailleurs, je me demande simplement si AES est aussi bon sur un message court que sur un gros document. Fondamentalement, le message ou le document serait envoyé crypté mais la clé ne serait jamais rendue publique. Je suppose que cela irait également à l'encontre de l'objectif de RSA, mais j'ai lu à plusieurs reprises en ligne que RSA est bon pour les messages courts et AES est bon pour les longs.

Cinq réponses:
Thomas Pornin
2013-03-30 18:50:18 UTC
view on stackexchange narkive permalink

RSA, tel que défini par PKCS # 1, crypte les "messages" de taille limitée. Avec le "remplissage v1.5" couramment utilisé et une clé RSA de 2 048 bits, la taille maximale des données pouvant être chiffrées avec RSA est de 245 octets. Pas plus.

Lorsque vous «cryptez des données avec RSA», en pratique, vous cryptez en fait une clé symétrique aléatoire avec RSA, puis cryptez les données avec un algorithme de cryptage symétrique, dont la taille n'est pas limitée . Voici comment cela fonctionne dans SSL, S / MIME, OpenPGP... Régulièrement, certaines personnes suggèrent de faire "RSA uniquement" en divisant le entrez le message en morceaux de 245 octets et chiffrez chacun d'eux plus ou moins séparément C'est une mauvaise idée car:

  • Il peut y avoir des faiblesses substantielles dans la manière dont les données sont divisées puis reconstruites. Il n'y a pas de norme bien étudiée pour cela.
  • Chaque morceau, lorsqu'il est chiffré, grandit un peu (avec une clé de 2048 bits, les 245 octets de données deviennent 256 octets); lors du traitement de grandes quantités de données, la surcharge de taille devient importante.
  • Le décryptage d'un message volumineux peut devenir excessivement coûteux.

Lors du chiffrement de données avec un chiffrement par blocs symétriques, qui utilise des blocs de n bits, certains problèmes de sécurité commencent à apparaître lorsque la quantité de données chiffrées avec une seule clé se rapproche de 2 n / 2 sup > blocs, c'est-à-dire n*2n/2 bits. Avec AES, n = 128 (AES-128, AES-192 et AES-256 utilisent tous des blocs de 128 bits). Cela signifie une limite de plus de 250 millions de téraoctets, ce qui est suffisamment grand pour ne pas poser de problème. C'est précisément pourquoi AES a été défini avec des blocs de 128 bits, au lieu des blocs de 64 bits les plus courants (à l'époque): de sorte que la taille des données est pratiquement illimitée.

"Il peut y avoir des faiblesses importantes dans la manière dont les données sont divisées puis reconstruites."-Pouvez-vous préciser?Un exemple serait bon.
Je n'utiliserais pas n * 2 ^ (n / 2) bits dans aucune sorte de recommandation.Une fois que vous atteignez ce nombre de bits, la probabilité d'une collision augmentera rapidement et vous aurez une probabilité de collision bien supérieure à 50% au moment où vous atteindrez 2 * n * 2 ^ (n / 2) bits.Afin de garder la probabilité d'une collision négligeable, je recommande de ne pas chiffrer plus de n * 2 ^ (n / 4) bits avec la même clé.Dans le cas d'AES, cela équivaut à 64 Go.
Polynomial
2013-03-30 15:25:54 UTC
view on stackexchange narkive permalink

Comparer les deux directement, c'est un peu comme comparer un tracteur à un train - ce sont tous les deux des véhicules mais ont une fonction et une construction complètement différentes.

RSA est un chiffre asymétrique. Il est idéal pour l'échange sécurisé de messages sur un réseau non approuvé, car la clé publique peut être connue de tous - un message chiffré avec la clé publique ne peut être déchiffré que par la clé privée. En tant que tel, si deux parties connaissent les clés publiques de l'autre, elles peuvent échanger des messages en toute sécurité. Cela signifie qu'aucune information secrète ne doit être transmise - tant que l ' authenticité et l'intégrité sont maintenues, vous êtes en sécurité. Heureusement, RSA fournit une méthode de génération de signatures sur les données, qui aident à prouver leur authenticité. Étant donné un message signé par une clé privée, il est possible de vérifier cette signature à l'aide de la clé publique correspondante.

En règle générale, vous ne pouvez chiffrer que des données aussi grandes que la longueur de la clé RSA. Ainsi, si vous disposez d'une clé RSA de 4096 bits, vous ne pouvez crypter que des messages d'une longueur maximale de 4096 bits. Non seulement cela, mais c'est incroyablement lent. RSA n'est pas conçu comme un chiffrement de transport de données à pleine vitesse.

AES est un chiffrement par blocs symétriques, et est incroyablement rapide. Le texte brut est divisé en morceaux appelés blocs, et chaque bloc est chiffré dans une chaîne. Il existe différentes façons de faire cela, mais une méthode courante est appelée Cipher Block Chaining, ou CBC en abrégé. Cela permet des tailles de message théoriquement infinies. Cependant, les chiffrements symétriques comme AES nécessitent d'abord une clé secrète pour être échangés. Contrairement à RSA, la clé partagée doit rester inconnue des attaquants, vous devez donc garantir l'authenticité, l'intégrité et le secret. C'est difficile à faire directement.

Ce que vous aurez tendance à trouver, c'est que les deux schémas sont implémentés ensemble, de sorte que RSA est utilisé pour échanger la clé contre un chiffrement par bloc comme AES :

  1. Alice et Bob connaissent les clés publiques RSA de chacun. En général, ceux-ci sont échangés hors bande, par ex. via un certificat en cours de déploiement dans le cadre de votre système d'exploitation.
  2. Alice choisit une clé aléatoire de 256 bits pour AES et crypte cette clé avec la clé publique de Bob. Elle signe ce message avec sa clé privée et l'envoie à Bob.
  3. Bob utilise la clé publique d'Alice pour vérifier la signature. Il utilise ensuite sa clé privée pour déchiffrer le message.
  4. Eve (une espionne) a vu le message chiffré, mais ne peut pas le déchiffrer sans connaître la clé privée de Bob. Elle ne peut pas non plus modifier le message, car cela rendrait la signature incorrecte. Elle ne peut pas régénérer une signature valide sans connaître la clé privée d'Alice.
  5. Alice et Bob partagent maintenant une clé secrète de 256 bits et l'utilisent pour crypter les messages à l'aide d'un chiffrement symétrique, tel qu'AES.

Cela répond à quelques exigences:

  • La conversation peut avoir lieu sur un réseau non approuvé sans qu'un attaquant puisse lire les messages.
  • L'échange de clé de session peut être effectué de manière sûre, c'est-à-dire que l'authenticité et l'intégrité sont maintenues sur la clé.
  • Les performances de cryptage et de décryptage des données de conversation réelles sont très bonnes.

En termes de niveau de sécurité, comparer RSA et AES n'a pas vraiment de sens. Ils font des tâches différentes. Nous supposons actuellement que les clés AES 128 bits sont sûres et que les clés RSA 2048 bits sont sûres, mais cela dépend entièrement des exigences de sécurité individuelles. L'utilisation de clés AES 256 bits et RSA 4096 bits devrait être plus que suffisante pour la prochaine décennie, en supposant que l'implémentation soit solide.

Notez que tout cela est une simplification, car il y a beaucoup de mises en garde et de détails impliqué, et décrire l'échange RSA comme un "cryptage" n'est pas strictement correct, mais dans l'ensemble, cela devrait être un aperçu de haut niveau raisonnable de la façon dont les deux types de crypto fonctionnent.

C'est l'aperçu le plus clair de la façon dont les deux systèmes fonctionnent l'un avec l'autre pour un débutant que j'ai trouvé, merci beaucoup. J'ai utilisé ces informations en conjonction avec http://www.androidauthority.com/use-android-keystore-store-passwords-sensitive-information-623779/ pour implémenter un cryptage de jeton sécurisé (aussi sécurisé que l'Android Keystore) dans mon app.
Très bel aperçu du fonctionnement des cryptosystèmes hybrides.Cependant, je souhaite faire une petite sélection sur la ligne suivante: "si vous avez une clé RSA de 4096 bits, vous ne pouvez crypter que des messages d'une longueur maximale de 4096 bits."Ce n'est pas techniquement vrai - ce serait moins de 4096 bits et la quantité exacte dépendrait du schéma de remplissage utilisé.Je comprends que vous avez peut-être essayé de faire une déclaration générale ici, mais le libellé actuel, à mon avis, semble impliquer «taille de clé = limite de longueur du message».
Adam Caudill
2013-03-30 13:53:54 UTC
view on stackexchange narkive permalink

Une des raisons pour lesquelles vous ne voyez normalement pas RSA utilisé pour de plus grandes quantités de données est à cause des performances - RSA et AES sont sécurisés pour de grandes et petites quantités de données (lorsqu'il est correctement implémenté), mais RSA est beaucoup plus lent.

Dans les cas où la cryptographie à clé publique a du sens, mais où plus de performances sont nécessaires, un système hybride peut être implémenté qui exploite les deux.

Andrew Watson
2014-11-20 09:01:50 UTC
view on stackexchange narkive permalink

Selon le paquetage cryptographique GoLang "Le message ne doit pas dépasser la longueur du module public moins 11 octets". http://golang.org/pkg/crypto/rsa/#EncryptPKCS1v15

Eric G
2013-03-30 10:59:17 UTC
view on stackexchange narkive permalink

AES est un algorithme à clé symétrique. RSA est asymétrique. Bien que les deux soient destinés au chiffrement, ils sont souvent utilisés de différentes manières, il est donc difficile de les comparer en termes d'efficacité ou de force, car le but de l'utilisation de l'un par rapport à l'autre serait probablement un plus grand déterminant dans lequel l'un ou la classe de le chiffrement est utilisé.

Vous voudrez peut-être commencer par cette autre question: Chiffrement - devrais-je utiliser RSA ou AES?

J'ai déjà vu ce fil et c'est la raison pour laquelle j'ai posé cette question. Je suppose que les différentes utilisations de RSA et AES rendent ma question inutile car comparer les deux serait comme comparer deux choses non liées.


Ce Q&R a été automatiquement traduit de la langue anglaise.Le contenu original est disponible sur stackexchange, que nous remercions pour la licence cc by-sa 3.0 sous laquelle il est distribué.
Loading...