web-dev-qa-db-fra.com

Comment estimer le temps nécessaire pour casser le cryptage RSA?

Comment estimer le temps nécessaire pour casser le cryptage RSA? Je veux dire le temps nécessaire pour casser le cryptage Rsa avec une longueur de clé de 1024, 2048, 3072, 4096, 5120, 6144, 5120, 7168, 8192, 9216, 10240, 11264, 12288, 13312, 14336, 15360 et 16384?

67
Predator

Voir ce site pour un résumé des principales estimations de résistance utilisées par divers chercheurs et organisations.

Votre "512 bits en 12 μs" est complètement faux. Voyons d'où ça vient. 1999 a été l'année où la première factorisation générale de 512 bits a été effectuée, sur un défi publié par RSA (la société) et appelé RSA-155 (car le nombre était composé de 155 chiffres décimaux - en binaire , la longueur est de 512 bits). Cette factorisation a pris 6 mois. Lors du événement Eurocrypt organisé la même année (en mai; à cette époque, l'effort de factorisation de 512 bits avait commencé mais n'était pas encore terminé), Adi Shamir , du Weizmann Institute, a présenté un dispositif théorique appelé SCINTILLEMENT qui, soi-disant, peut aider un peu dans un effort de factorisation. Il devrait consister en un grand nombre de diodes clignotant à des fréquences soigneusement sélectionnées, dans une sorte de tube noir. Shamir a apporté un appareil personnalisé qui, à 10 mètres de distance, ressemblait à une machine à café. Il a demandé aux gens d'éteindre la lumière, afin que le participant d'Eurocrypt puisse s'émerveiller des diodes rouges quatre clignotant à des intervalles de 2, 3, 5 et 7 secondes. Ooh! et Aah! ils sont allés, bien que la machine réelle, si elle était construite, nécessiterait quelques millions de diodes et de fréquences dans les 10 ou 100 gigahertz. L'idée est donc amusante (au moins pour les chercheurs en cryptologie, qui sont connus pour avoir un étrange sens de l'humour) mais n'a pas encore dépassé l'étape de l'esquisse théorique. Shamir est un grand showman.

Cependant, TWINKLE n'est qu'une "aide". L'algorithme de factorisation le plus connu est appelé General Number Field Sieve ; les deux algorithmes qui viennent ensuite sont le Quadratic Sieve et le Elliptic Curve Method . Un nombre de 512 bits est hors de portée de QS et ECM avec la technologie d'aujourd'hui, et a fortiori avec la technologie de 1999. GNFS est très complexe (mathématiquement parlant), d'autant plus qu'il nécessite une sélection rigoureuse de certains paramètres critiques ("sélection polynomiale"). Il doit donc y avoir un effort initial de cerveaux très intelligents (avec de gros ordinateurs, mais les cerveaux sont les plus importants ici). Ensuite, GNFS se compose de deux parties, le tamis et le réduction linéaire. Le tamis peut être fabriqué en parallèle sur des centaines ou des milliers de machines, qui doivent encore être relativement grandes (en RAM), mais c'est faisable. La réduction linéaire implique de calculer des choses avec une matrice qui est trop grande pour tenir dans un ordinateur (de plusieurs ordres de grandeur, et même si nous supposons que ledit ordinateur a des téraoctets de RAM rapide). Il existe des algorithmes pour conserver la matrice (qui est assez clairsemée) dans un format compressé et toujours en mesure de calculer cela, mais c'est difficile. Dans la factorisation de 512 bits, le tamisage a pris environ 80% du temps total, mais pour les plus grands nombres, la réduction linéaire est le goulot d'étranglement.

TWINKLE consiste uniquement à accélérer la partie de tamisage. Cela ne fait rien sur la réduction linéaire. En d'autres termes, cela accélère la partie qui est facile (relativement parlant). Même une moitié de tamisage améliorée par TWINKLE serait loin de 12 μs. Au lieu de cela, cela aiderait plutôt à ramener un effort de tamisage de quatre mois à, disons, trois semaines. Ce qui est bien, d'une manière scientifique, mais pas un record, d'autant plus que la réduction linéaire domine pour les grandes tailles. Le chiffre de 12 μs semble provenir d'une confusion avec une bête encore plus mythique, le Quantum Computer , qui pourrait facilement factoriser de grands nombres si un QC avec 512 "qubits" pouvait être construit. D-Wave a récemment annoncé un ordinateur quantique avec 128 qubits, mais il s'est avéré qu'il ne s'agissait pas de "vrais" qubits, et ils ne conviennent pas à la factorisation (ils peuvent toujours, théoriquement, faire quelques approximations efficaces dans les problèmes d'optimisation, ce qui est génial mais fondamentalement non applicable à la cryptographie, car les algorithmes cryptographiques ne se prêtent pas à des approximations - ils sont conçus pour qu'un seul mauvais bit brouille le tout). Le meilleur "vrai" QC à ce jour semble être le prototype d'IBM avec, pour autant que je m'en souvienne, 5 qubits, lui permettant d'établir que 15 est égal à 3 fois 5.

Le record de factorisation RSA actuel est pour n entier de 768 bits , annoncé en décembre 2009. Il a fallu quatre ans et a impliqué les théoriciens des nombres les plus intelligents vivant actuellement sur Terre, y compris Lenstra et Montgomery, qui ont quelque chose de divin- comme le statut dans ces cercles. J'ai récemment appris que la sélection des paramètres pour une factorisation des nombres à 1024 bits a commencé (c'est la partie "intelligente"); le tamisage est techniquement réalisable (il coûtera cher et impliquera des années de temps de calcul sur de nombreux clusters universitaires) mais, pour le moment, personne ne sait comment faire la partie de réduction linéaire pour un entier 1024 bits. Ne vous attendez donc pas à une pause de 1024 bits de sitôt.

À l'heure actuelle, un amateur dédié utilisant le code publié (par exemple Msieve ) peut atteindre une factorisation de 512 bits s'il a accès à des ordinateurs puissants (plusieurs dizaines de gros PC et au moins une horloge pleine de RAM rapide). ) et quelques mois de temps libre; Fondamentalement, "amateur dévoué" signifie "étudiant en informatique ennuyé dans une université riche". Tout ce qui dépasse 512 bits est hors de portée d'un amateur.

Résumé: dans votre code, vous pouvez renvoyer "pratiquement infini" comme temps de craquage pour toutes les longueurs de clé. Un utilisateur typique ne cassera pas une clé RSA 1024 bits, pas maintenant et pas dans dix ans non plus. Il y a environ une douzaine de personnes sur Terre qui peuvent, avec n'importe quelle crédibilité, prétendre qu'il est concevable, avec une probabilité faible mais non nulle, qu'elles pourraient être capables de factoriser un seul 1024- bit entier à un moment non spécifié avant l'année 2020.

(Cependant, il est extrêmement facile de bâcler une implémentation de RSA ou de toute application utilisant RSA de telle sorte que les données confidentielles qu'il détenait puissent être récupérées sans se soucier du tout de la clé RSA. Si vous utilisez des clés RSA 1024 bits, vous pouvez être sûr que lorsque votre application sera piratée, elle ne passera pas par une factorisation des clés RSA.)

90
Thomas Pornin

Réponse courte : La méthode la plus simple serait d'utiliser le théorème des nombres premiers , mais sachez que c'est une approximation. Estimez le temps qu'il vous faudrait pour essayer chacun de ces nombres premiers; temps par nombre premier * nombre de nombres premiers vous donne le temps total. Cela vous donnera une estimation pour la recherche par force brute.

Vous pouvez également utiliser l'estimation du temps de fonctionnement pour le tamis quadratique ou le tamis de champ de nombre général . Cela vous donnera des estimations pour les algorithmes d'affacturage réellement utilisés par les personnes brisant les nombres RSA.

Arrière-plan long :

Temps de la théorie des nombres!

Tout d'abord, examinons la taille des chiffres dont vous parlez. Etant donné 2 ^ 3 = 8, qui est 1000 en binaire, nous pouvons voir que c'est un nombre à quatre bits, le minimum possible. Donc, 2 ^ 2 = 4 est un nombre à 3 bits (100). Donc, pour un x donné, la valeur minimale possible pour garantir que nous avons suffisamment de bits est 2 ^ (x-1). 2 ^ = 2047 16158503035655503650357438344334975980222051334857742016065172713762327569433945446598600705761456731844358980460949009747059779575245460547544076193224141560315438683650498045875098875194826053398028819192033784138396109321309878080919047169238085235290822926018152521443787945770532904303776199561965192760957166694834171210342487393282284747428088017663161029038902829665513096354230157075129296432088558362971801859230928678799175576150822952201848806616643615613562842355410104862578550863465661734839271290328348967522998634176499319107762583194718667771801067716614802322659239302476074096777926805529798115328. C'est la taille du numéro que vous avez affaire ici, à savoir la taille de n être prises en compte.

La grande question suivante est alors de savoir comment n est construit? n=pq Comme vous le savez d'après la définition de RSA, vous recherchez donc deux nombres premiers comme facteurs de ce nombre. La question devient alors comment déterminer qu'un nombre est premier et pouvons-nous les compter?

Donc, par définition, un nombre est irréductible si, pour tout nombre x inférieur à lui, \gcd(p, x) = 1 à l'exception de x=1. Cependant, nous pouvons améliorer cela. Vous devez vous rendre compte assez rapidement que pour n'importe quel nombre, il est premier ou non. S'il n'est pas premier, alors le pgcd et au moins un premier doivent être supérieurs à 1 (sinon ce serait premier). Nous en concluons que tout entier non premier doit être divisible par un ensemble de nombres premiers. Une preuve mathématique formelle n'est pas vraiment un grand pas d'ici.

Ceci est appelé le théorème fondamental de l'arithmétique et simplifie légèrement les choses. Alors maintenant, lorsque nous déterminons si un nombre est premier, nous n'avons plus besoin d'essayer chaque nombre, seuls les nombres que nous connaissons déjà sont premiers!

C'est clairement encore très lent, alors faisons une autre observation - étant donné que les facteurs se produisent par paires, le plus bas des deux nombres est au plus la racine carrée du nombre. Si nous sommes limités à N (l'ensemble des nombres naturels), cela représente une limite supérieure sur la plus grande valeur possible que nous devons vérifier. Alors maintenant, pour tout nombre N, nous devons rechercher chaque entier à partir de 2 et se diriger vers sqrt (N) pour chaque nombre que nous déterminons comme premier dans cette liste. Nous pouvons alors, si nous trouvons un nombre premier, déduire s'il factorise N lui-même. Je ne vais pas estimer le temps d'exécution de cela car je dirai sans doute la mauvaise chose, mais cela prendra beaucoup de temps.

Vous voyez maintenant la force de RSA. Choisissez un très grand nombre premier et vous vous retrouvez avec un long chemin à parcourir. Dans l'état actuel des choses, nous devons partir de 2, ce qui est clairement horrible.

Primality testing vise à améliorer cela en utilisant une variété de techniques. La méthode naïve est celle dont nous venons de parler. Je pense qu'une discussion détaillée de ces techniques est probablement plus appropriée pour les mathématiques, alors permettez-moi de le résumer: tous les temps d'exécution sont des ordures et l'utiliser comme un moyen de compter les nombres premiers serait horrible.

Ainsi, nous ne pouvons pas compter le nombre de nombres premiers de manière fiable inférieur à un nombre sans prendre une éternité, car il est effectivement analogue à la factorisation entière. Qu'en est-il d'une fonction qui compte d'une manière ou d'une autre les nombres premiers?

Entrez \pi(n) = \frac{n}{\log(n) - 1.08366}, une tentative de théorème des nombres premiers une approximation du nombre de nombres premiers. C'est pourtant exactement cela; le but d'une telle fonction est de compter exactement le nombre de nombres premiers mais pour l'instant elle ne vous donne qu'une estimation. Pour vos besoins, cela pourrait être considéré comme suffisant.

Cependant, c'est toujours une approximation. Jetez un œil au reste de l'article. Entre autres choses, d'autres estimations dépendent de l'hypothèse de Riemann.

Ok, alors qu'en est-il de factorisation entière ? Eh bien, la deuxième meilleure méthode à ce jour est appelée tamis quadratique et la meilleure est appelée tamis de champ de nombre général . Ces deux méthodes touchent des mathématiques assez avancées; en supposant que vous êtes sérieux au sujet de la factorisation des nombres premiers, je lirais ces informations. Vous devriez certainement être en mesure d'utiliser les estimations pour les deux comme améliorations de l'utilisation du théorème des nombres premiers, car si vous allez factoriser de grands nombres premiers, vous voulez les utiliser et non une recherche par force brute.

Mais je veux en savoir plus sur le quantum?

OK très bien. La factorisation entière sur un ordinateur quantique peut être effectuée en un temps ridiculement court en supposant que nous serons en mesure d'implémenter Algorithme de Shor . Je dois cependant souligner que cela nécessite un ordinateur quantique. Pour autant que je sache, le développement d'ordinateurs quantiques de l'échelle qui peut casser le RSA est actuellement loin. Voir développements de l'informatique quantique .

Dans tous les cas, l'algorithme de Shor serait exponentiellement plus rapide. La page qui s'y trouve vous donne une estimation de la durée d'exécution de celle-ci, que vous aimerez peut-être inclure dans vos estimations.

25
user2213

Une autre option consiste à créer une grande base de données de clés possibles et à l'utiliser comme table de recherche. Apparemment, vous n'avez même pas besoin de TOUS les nombres premiers, seulement quelques-uns vous permettront de traverser un gros pourcentage du trafic Internet.

Source: https://freedom-to-tinker.com/blog/haldermanheninger/how-is-nsa-breaking-so-much-crypto/

0
Evgeny