J'ai lu sur les tables Rainbow car je pense qu'elles sont assez intéressantes car elles sont en fait un concept assez simple.
Quoi qu'il en soit, je me demandais, quelqu'un a-t-il été impliqué dans la génération d'un? Comment est-ce possible? Je ne vois tout simplement pas comment il est possible de générer chaque combinaison de chaque personnage.
Si nous excluons les caractères spéciaux, il y a ce nombre de caractères.
ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz 1234567890
Cela ressemble à 26 + 26 + 10 = 62 caractères
Cela signifie qu'un mot de passe de longueur 8 a 62 ^ 8 combinaisons.
ce qui est égal à 218340105584896
Cela seul sonne comme si cela prendrait des âges à générer. Qu'en est-il lorsque nous augmentons le nombre de caractères à 12 et ajoutons des caractères spéciaux (disons qu'il y en a 10 autres simplement en regardant les caractères que vous obtenez en appuyant sur shift - numéro)?
Nous obtiendrions 72 ^ 12 = 19408409961765342806016
c'est un nombre qui est assez grand pour prendre des années.
Une table Rainbow est "juste" une représentation compacte d'une table de valeurs de hachage précalculées. Lors de la construction de la table Rainbow, de nombreuses entrées possibles sont essayées et hachées. Chaque entrée rencontrée lors de la construction de la table sera attaquée avec succès avec cette table, et aucune autre. L'évaluation du hachage concentre la majeure partie du coût de construction de la table.
Donc, fondamentalement, le coût de construction d'une table Rainbow qui peut inverser [~ # ~] n [~ # ~] les mots de passe est à peu près équivalent au coût d'essayer ces [~ # ~] n [~ # ~] mots de passe via la fonction de hachage - le but de la table Rainbow étant que vous le construisiez une fois et peut ensuite l'utiliser pour casser plusieurs mots de passe. (Pour être précis, en raison des collisions de chaînes pendant la construction de la table, le coût est en fait plus proche de 1,7 * N , mais ignorons cela pour le moment. )
J'ai déjà fait quelques expériences avec SHA-1. Un hachage de mot de passe simple avec SHA-1 a pour coût de traiter un seul "bloc" (SHA-1, comme MD5, traite les données par blocs de 64 octets), ce qui nécessite environ 900 opérations logiques ou arithmétiques 32 bits. Une implémentation optimisée sur un processeur Intel Core2 x86 peut le faire en environ 500 cycles d'horloge. Cependant, les attaques par mot de passe (que ce soit directement ou pour la construction d'une table Rainbow, cela n'a pas d'importance) sont un travail très parallèle, donc on pourrait utiliser les instructions SSE2 qui offrent des registres 128 bits, et où un seul opcode peut effectuer quatre opérations 32 bits simultanément. SSE2 a moins de types d'opérations disponibles (en particulier, il n'offre pas de rotations, seulement des décalages), de sorte que le nombre d'opérations s'élève à environ 1200; mais, dans certaines conditions, l'unité SSE2 exécutera plusieurs opcodes simultanément. On se retrouve donc avec 800 cycles d'horloge, pour quatre instances SHA-1 en parallèle. Conclusion: mon PC est un Intel Core2 Q6600, avec quatre cœurs fonctionnant à 2,4 GHz. Chaque cœur peut exécuter mon implémentation SSE2, ce qui donne environ 48 millions de mots de passe hachés par seconde.
J'ai également une carte graphique Nvidia pas trop petite, et le GPU peut exécuter du code arbitraire via CUDA . Il s'agit d'un 9800 GTX +, avec 128 cœurs fonctionnant à 1,84 GHz. Chaque cœur peut exécuter une opération 32 bits par cycle (il y a une latence élevée, mais, grâce à la parallélisation élevée, ce débit d'une instruction par cycle peut être maintenu). Les cœurs ne connaissent pas les rotations, donc chaque code utilisera 1200 cycles d'horloge par mot de passe haché. La performance totale est de 160 millions de mots de passe hachés par seconde.
Mon PC et ma carte graphique datent de début 2009 et ne sont pas haut de gamme. On peut trouver aujourd'hui, pour quelques centaines de dollars, un GPU qui hachera les mots de passe environ trois fois plus vite que mon 9800 GTX +. Supposons donc qu'un attaquant avec un PC commun (qui coûte moins de 1000 $) puisse hacher un demi-milliard de mots de passe par seconde.
À cette vitesse, tous les mots de passe avec 8 caractères alphanumériques (lettres majuscules et minuscules et chiffres) sont traités en environ 5 jours . Avec un PC à 1000 $. Si vous utilisez MD5, les choses sont environ 30% plus rapides (MD5 utilise un peu moins d'opérations que SHA-1). Les bons schémas de hachage de mot de passe n'utilisent pas une simple invocation de hachage, cependant: ils utilisent un hachage itéré avec, disons, 2000 invocations de hachage imbriquées: cela multiplie le coût pour l'attaquant par le même facteur 2000 (il transforme donc les "5 jours" en environ 28 années, littéralement "vieillit" comme vous le dites).
Combien de temps faut-il pour générer une table Rainbow pour un hachage très simple, en utilisant une seule itération? Cela prend une heure! Ou moins, si vous le souhaitez.
Bien que les réponses ci-dessus soient entièrement correctes, il y a un développement important qu'ils ne mentionnent pas. Amazon EC2 et autres fournisseurs de serveurs 'cloud computing'.
Aujourd'hui, tout le monde avec une carte de crédit peut aller sur aws.Amazon.com et spouler un poignée d'instances spot EC2 , pour moins d'une centaine de dollars. Ou si vous disposez d'un bon code CUDA, louez 50 des instances "Cluster GPU" d'Amazon les plus chères avec deux processeurs graphiques NVIDIA Tesla M2050.
(Un peu comme les compagnies aériennes, Amazon a des prix différenciés. Si vous avez besoin d'un serveur EC2 spécifique avec une disponibilité garantie, les prix sont plus élevés. Par exemple, vous pouvez obtenir une instance "Hi-CPU Large" avec 8 cœurs de CPU virtuels pour 0,68 USD par heure Si vous êtes prêt à acheter la même instance que l'excédent d'approvisionnement le permet pendant les heures creuses, vous pouvez l'obtenir avec une remise de 40% à 50% .)
La création de tables Rainbow peut se faire en parallèle avec une augmentation linéaire des performances, c'est-à-dire qu'avec 100 ordinateurs fonctionnant, c'est 100 fois plus rapide qu'un seul ordinateur.
Amazon ne vous facture pas par instance, il facture par heure d'instance. Ainsi, exécuter 1 000 serveurs pendant une heure coûte le même qu'un serveur pendant 1 000 heures.
La nature parallèle de la création de tables Rainbow, associée à des services comme Amazon EC2, signifie qu'il n'y a plus de question "combien de temps faut-il". Il y a "combien êtes-vous prêt à payer pour l'obtenir vite, par rapport à payer moins et à l'obtenir en quelques jours?". La différence de coût et de temps provient principalement de la différenciation des prix d'Amazon entre les instances EC2 `` régulières '' et les `` instances ponctuelles '' moins chères.
En utilisant un simple test de 26 ^ 5, j'ai pu générer une table hexadécimale ascii dans Ruby qui a généré 228488 sorties MD5 par seconde. Toutes les entrées 11881376 ont pris 52 secondes sur mon Core i7 de 1,5 an. Si je n'ai apporté aucune amélioration à mon programme, je m'attendrais à ce qu'il fonctionne pendant 26 semaines pour générer votre liste 62 ^ 8.
Je pourrais probablement apporter des améliorations à mon programme en exécutant huit programmes distincts, un par hyperthread, pour partitionner l'espace problématique. Si chaque programme enregistrait la sortie sur son propre disque, ils ne rivaliseraient pas pour la bande passante IO. Je m'attendrais à un facteur de quatre à six accélérations par rapport à mon stupide programme à un seul thread pour 4-6 semaines d'exécution. Si je devais réécrire en C, je pourrais m'attendre à un autre facteur d'accélération de 1,5. (Peut-être plus? D'une part, c'est un programme simple, d'autre part, un tableau C de 13 octets de long, modifié à l'exécution, va probablement fonctionner avec beaucoup moins de mémoire et bien sûr pas de récupération de place par rapport à la création et à la destruction des objets chaîne Ruby.)
Je m'attendais à un après-midi de travail et quelques centaines de dollars de nouvel équipement me permettraient de terminer les 62 ^ 8 tableaux deux semaines sur du matériel de base.
Et bien sûr, personne n'utilise MD5 à exécution unique sur les mots de passe; il suffit de mettre à l'échelle mes résultats finaux, bien que le hachage unidirectionnel soit beaucoup plus cher que MD5. :)
Voir mes calculs de taux de hachage sur le réseau minier Bitcoin à Comment hacher en toute sécurité les mots de passe? - Sécurité informatique pour ce que les personnes déterminées avec des cartes GPU plus modernes peuvent accomplir en termes de hachage brut. La communauté fonctionne à 11 Thash/s (11 * 10 ^ 12 hash/s) début juillet 2011 ....