Gibt es eine Möglichkeit, eine crypt () in c umzukehren?

7

Nicht sicher, ob das möglich ist, aber ich möchte in der Lage sein, mit einer Zeichenkette zu beginnen und dann herauszufinden, wie die Eingabe in crypt sein muss, um diese Zeichenkette zu erhalten.

Oder vielleicht ist es unmöglich, was wäre der ganze Zweck des Dinges sowieso?

Ja, es gibt ein Salz im Code, wo ich das versuche.

    
BigOmega 21.07.2009, 19:14
quelle

7 Antworten

13

Nach der Designabsicht ist crypt() ein Einweg-Hash. Wie alle gesagt haben, bedeutet dies, dass die Absicht darin besteht, dass es rechnerisch unmöglich ist, einen Klartext-String zu finden, der denselben Hash erzeugt.

Ein paar Faktoren wirken sich auf diese Designabsicht aus.

  1. Berechnung ist ein Los billiger als es war, als crypt() entworfen wurde. Schlimmer noch, die Rate, mit der die Berechnung billiger wurde, wurde nicht erwartet, so dass es jetzt viel billiger ist, als es sich jemals vorstellen konnte.

  2. DES hat nicht so gut gehalten, wie es gedacht wurde. Es war wahrscheinlich die beste Wahl angesichts des damaligen Wissensstandes der Öffentlichkeit.

  3. Auch wenn die Berechnung noch nicht billig genug ist, um selbst zu knacken, hat die Cloud, die das Internet ist, bereits einen großen Teil der Arbeit für Sie erledigt. Die Leute haben Rainbow Tables berechnet und veröffentlicht, was es möglich macht, einen Großteil der Berechnungen, die zum Umkehren eines bestimmten Hashs erforderlich sind, zu vereinfachen. ( Jeff hatte auch einen Blog-Eintrag auf Rainbow-Tischen .) Salt schützt vor Regenbogen-Tischen (weil du es tust eine Tabelle für jeden möglichen Wert des Salzes benötigen), aber die Größe des Salzes, das in der klassischen Implementierung von crypt() benutzt wird, ist nur 12 Bits, also das ist nicht so riesiger Block, wie man hoffen könnte.

Schlimmer noch, für bestimmte hochrangige Hash-Funktionen (wie den LM-Hash ) erfunden für alte Microsoft Lan Manager-Passwörter aber in allen Versionen von Windows vor Vista) für ein kurzes Passwort) fast vollständige Wörterbücher von Hashes und deren Inversen existieren.

    
RBerteig 21.07.2009, 22:39
quelle
4

Wenn es sich um eine alte Implementierung von crypt(3) handelt, die DES verwendet, dann können Sie es fast (aber nicht ganz) brute-force.

In diesem Schema wird die Eingabe auf 8 Zeichen und jedes Zeichen auf 7 Bits verkürzt, was bedeutet, dass ein 56-Bit-Bereich mit verschiedenen Passwörtern zum Suchen vorhanden ist.

Nur für DES können Sie den gesamten Speicherplatz in ca. 18 Tagen auf FPGAs im Wert von $ 10K durchsuchen ( Ссылка ), so ist die voraussichtliche Zeit 9 Tage. Aber ich nehme an, Sie haben nicht $ 10K für das Problem ausgeben. Gib es noch ein paar Jahre, und wer weiß, ob DES-Cracker in plausibler Zeit auf der GPU eines PCs laufen werden.

Selbst dann enthält crypt(3) normalerweise 25 Runden DES, mit leichten Modifikationen des Algorithmus basierend auf dem Salz, also erwartet man, dass es mindestens 25 mal langsamer ist als Brute-Force.

Neuere Implementierungen von crypt(3) sind weit mehr als rohe Gewalt, da sie auf besseren Hashalgorithmen basieren als die DES-basierte, die das alte crypt(3) verwendet.

Natürlich, wenn die Zeichenfolge nicht zufällig ist (z. B. wenn es ein Passwort ist, das von einem Menschen gewählt wurde), dann können Sie möglicherweise eine viel bessere Zeit als die rohe Gewalt erhalten.

    
Steve Jessop 21.07.2009 19:55
quelle
2

Nein, das ist die Idee hinter Einweg-Hash-Funktionen, aber Sie können google in einigen Fällen verwenden Fälle.

Um auf einen Kommentar zu dieser Antwort zu antworten (Google hilft nicht, wenn es ein Salz gibt), sage ich: ja und nein. Das Salz erhöht den Raum der Lösung und macht die Erstellung eines vollständigen Wörterbuchs weniger einfach (da für jedes Wort eine verschlüsselte Version für jedes mögliche Salz aus zwei Buchstaben berechnet und gespeichert werden muss). Wenn Sie davon ausgehen, dass das Internet eine riesige Datenbank ist, und googlen Sie seinen Index, was Google tut, ist zu suchen, wenn irgendwo das Vorhandensein der verschlüsselten Zeichenfolge im Web ist. Die Anwesenheit von Salz verringert die Chance, dass Sie es finden, aber wenn Sie Glück haben, dass das Ereignis vorhanden ist, und es ist auch zusammen mit dem Klartext, dann haben Sie das Passwort.

Siehe auch diesen Artikel auf slashdot .

Abschließend: Das Salz wird die Chance verringern, diese spezifische verschlüsselte Zeichenfolge im Web zu finden, stimmt, aber Google ist gleichgültig gegenüber jeder Menge Salz und kann trotzdem irgendwie helfen, wenn Sie Glück haben (so wie es war) der Fall, den ich gab).

    
Stefano Borini 21.07.2009 19:32
quelle
1

Nein.

crypt () ist kein reversibler Algorithmus (er verwendet eine Einwegfunktion), der durch das Hinzufügen von Salz zum verschlüsselten Wert die Brute-Force-Funktion erschweren kann.

Nach Kommentaren bearbeitet.

    
Jeff Leonard 21.07.2009 19:19
quelle
0

Nein, es ist nicht möglich, einen Blick auf diese Seite zu werfen (vorausgesetzt, Sie benutzen die GNU C-Bibliothek) Ссылка

Die Art, wie die Krypta gesalzen wird, garantiert ziemlich genau, dass das, was Sie versuchen zu tun, nicht funktionieren wird.

    
Splashlin 21.07.2009 19:33
quelle
0

Diese Funktion, die in einer Richtung ist, ist das Rückgrat jedes Passwort-Schemas in der Welt. Wenn irgendjemand hier mit "Ja, und hier ist wie ..." antworten würde, wäre die Regierung gezwungen, ihren Kommentar sofort zu löschen, ihr Haus niederzubrennen und sie an einen unbekannten Ort zu bringen.

Kurz gesagt, nein.

    
T.E.D. 21.07.2009 19:41
quelle
-1

Nein. Es ist eine Einwegfunktion.

    
eduffy 21.07.2009 19:16
quelle

Tags und Links