it-swarm.com.de

Kann ein sha1 rückgängig gemacht werden?

Kann ein sha1 rückgängig gemacht werden?

Ich denke darüber nach, ein sha1 zu verwenden, um ein einfaches, leichtes System zur Authentifizierung eines kleinen eingebetteten Systems zu erstellen, das über eine unverschlüsselte Verbindung kommuniziert.

Nehmen wir an, ich erstelle so ein sha1 mit Eingabe eines "geheimen Schlüssels" und würze es mit einem Zeitstempel, damit sich der sha ständig ändert.

sha1("My Secret Key"+"a timestamp")

Dann füge ich dieses sha1 in die Kommunikation und den Server ein, der dieselbe Berechnung ausführen kann. Und hoffentlich kann niemand den "geheimen Schlüssel" herausfinden.

Aber stimmt das wirklich?

Wenn Sie wissen, dass ich es so gemacht habe, würden Sie wissen, dass ich dort einen Zeitstempel gesetzt habe und Sie würden den sha1 sehen. Können Sie diese beiden dann verwenden und den "geheimen Schlüssel" herausfinden?

secret_key = bruteforce_sha1(sha1, timestamp)

Vielen Dank. Johan


Note1 : Ich glaube, Sie könnten auf irgendeine Weise Gewalt anwenden, aber wie viel Arbeit wäre das eigentlich?

Note2 : Ich habe nicht vor, Daten zu verschlüsseln, ich möchte nur wissen, wer sie gesendet hat.

37
Johan

Nein, Sie können SHA-1 nicht rückgängig machen, deshalb wird es als Secure Hash-Algorithmus bezeichnet.

Was Sie jedoch unbedingt tun sollten, ist die Einbindung der Nachricht in die Hashberechnung. Andernfalls könnte ein Man-in-the-Middle die Nachricht abfangen und die Signatur (die nur den Absenderschlüssel und den Zeitstempel enthält) verwenden, um sie an eine gefälschte Nachricht (wo sie noch gültig wäre) anzuhängen.

Und Sie sollten SHA-256 wahrscheinlich jetzt für neue Systeme verwenden.

sha("My Secret Key"+"a timestamp" + the whole message to be signed)

Außerdem müssen Sie den Zeitstempel zusätzlich im Klartext übertragen, da Sie sonst keine Möglichkeit haben, den Digest zu überprüfen (abgesehen von vielen plausiblen Zeitstempeln).

Ob ein Brute-Force-Angriff möglich ist, hängt von der Länge Ihres geheimen Schlüssels ab.

Die Sicherheit Ihres gesamten Systems würde sich auf dieses gemeinsame Geheimnis stützen (weil sowohl Sender als auch Empfänger wissen müssen, aber niemand sonst). Ein Angreifer versucht, dem Schlüssel nachzulaufen (entweder mit dem Brutalitätsraten oder indem er versucht, ihn von Ihrem Gerät abzurufen), anstatt SHA-1 zu brechen.

39
Thilo

SHA-1 ist eine Hash-Funktion , die das Umkehren der Operation unpraktisch erschwert. Solche Hash-Funktionen werden aus diesem Grund oft als Einwegfunktionen oder kryptografische Hash-Funktionen bezeichnet.

SHA-1 hat jedoch einige kürzlich entdeckte Schwachstellen , die es ermöglichen, eine Eingabe schneller zu finden als durch eine brutale Suche aller Eingaben. Sie sollten in Erwägung ziehen, für neue Anwendungen etwas Stärkeres wie SHA-256 zu verwenden.

Jon Callas zu SHA-1:

Es ist Zeit zu laufen, aber nicht zu den Feuerausgängen zu rennen. Sie sehen keinen Rauch, aber der Feueralarm ist abgegangen.

24
Mark Byers

Die Frage ist eigentlich, wie man sich über eine unsichere Sitzung authentifiziert.

Der Standard, warum dies zu tun ist, ist die Verwendung eines Message Digest, z. HMAC.

Sie senden die Nachricht im Klartext sowie einen begleitenden Hash dieser Nachricht, in den Ihr Geheimnis eingemischt wurde.

Also anstatt deiner:

sha1("My Secret Key"+"a timestamp")

Du hast:

msg,hmac("My Secret Key",sha(msg+msg_sequence_id))

Die Nachrichtensequenz-ID ist ein einfacher Indikator, um von beiden Seiten die Anzahl der Nachrichten zu verfolgen, die sie in dieser 'Sitzung' ausgetauscht haben. Dies verhindert, dass ein Angreifer zuvor gesehene Nachrichten einfach wiedergibt.

Dies ist die Industriestandard und sicher Methode zur Authentifizierung von Nachrichten, unabhängig davon, ob sie verschlüsselt sind oder nicht.


(aus diesem Grund können Sie den Hash nicht rausschmeißen :)

Ein Hash ist eine Einwegfunktion, das heißt, dass viele Eingänge den gleichen Ausgang erzeugen.

Wenn Sie das Geheimnis kennen, und Sie eine vernünftige Schätzung hinsichtlich des Zeitstempelbereichs treffen können, können Sie alle Zeitstempel durchlaufen, den Hashwert berechnen und ihn vergleichen.

Natürlich können zwei oder mehr Zeitstempel innerhalb des von Ihnen untersuchten Bereichs "kollidieren", d. H. Obwohl die Zeitstempel unterschiedlich sind, erzeugen sie den gleichen Hash.

Es gibt also grundsätzlich keine Möglichkeit, den Hash mit Sicherheit umzukehren.

15
Will

Mathematisch gesehen haben nur Bijektivfunktionen eine Umkehrfunktion. Hash-Funktionen sind jedoch nicht injektiv , da es mehrere Eingabewerte gibt, die zum gleichen Ausgabewert (Kollision) führen.

Nein, Hash-Funktionen können nicht umgekehrt werden. Sie können aber nach solchen Kollisionen suchen.


Bearbeiten

Da Sie die Kommunikation zwischen Ihren Systemen authentifizieren möchten, würde ich vorschlagen, HMAC zu verwenden. Dieses Konstrukt zur Berechnung von Nachrichtenauthentifizierungscodes kann verschiedene Hash-Funktionen verwenden. Sie können SHA-1, SHA-256 oder eine beliebige Hash-Funktion verwenden.

Und um die Antwort auf eine bestimmte Anfrage zu authentifizieren, würde ich zusammen mit der Anfrage ein nonce senden, das zur Authentifizierung der Antwort als Salt verwendet werden muss.

9
Gumbo

Es ist nicht ganz richtig, dass Sie die mit SHA-1 verschlüsselte Zeichenfolge nicht umkehren können.

Sie können eine Tabelle nicht direkt umkehren, dies ist jedoch mit Rainbow-Tabellen möglich.

Wikipedia: Eine Rainbow-Tabelle ist eine vorberechnete Tabelle zum Umkehren von kryptographischen Hash-Funktionen, normalerweise zum Knacken von Passwort-Hashes. In der Regel werden Tabellen zur Wiederherstellung eines Klartextkennworts bis zu einer bestimmten Länge verwendet, die aus einer begrenzten Anzahl von Zeichen besteht.

Grundsätzlich ist SHA-1 nur so sicher wie die Stärke des verwendeten Passworts. Wenn Benutzer lange Kennwörter mit undeutlichen Zeichenkombinationen haben, ist es sehr unwahrscheinlich, dass vorhandene Rainbow-Tabellen einen Schlüssel für die verschlüsselte Zeichenfolge haben.

Sie können Ihre verschlüsselten SHA-1-Zeichenfolgen hier testen: http://sha1.gromweb.com/

Es gibt andere Rainbow-Tabellen im Internet, die Sie verwenden können, damit Google SHA1 umkehrt.

3

Beachten Sie, dass die besten Angriffe gegen MD5 und SHA-1 darin bestanden haben, zwei beliebige Meldungen m1 und m2 zu finden, wobei h(m1) = h(m2) oder m2 so zu suchen, dass h(m1) = h(m2) und m1! = m2. Das Auffinden von m1 mit h(m1) ist rechnerisch noch nicht machbar. 

Außerdem verwenden Sie einen MAC-Code (Message Authentication Code), sodass ein Angreifer eine Nachricht nicht vergessen kann, ohne das Geheimnis mit einem einzigen Vorbehalt zu kennen. Die generelle MAC-Konstruktion, die Sie verwendet haben, ist für Angriffe mit Längenausdehnung anfällig eine Nachricht m2 | m3, h (geheim, m2 | m3) gegeben, m2, h (geheim, m2). Dies ist nicht nur ein Problem mit dem Zeitstempel, sondern es ist ein Problem, wenn Sie den MAC über beliebig lange Nachrichten berechnen. Sie können das Geheimnis an den Zeitstempel anhängen, anstatt sich vorher anhängig zu machen. Im Allgemeinen ist es jedoch besser, HMAC mit SHA1-Digest zu verwenden (HMAC ist nur eine Konstruktion und kann MD5 oder SHA als Digest-Algorithmen verwenden).

Zum Schluss unterschreiben Sie nur den Zeitstempel und nicht die vollständige Anforderung. Ein aktiver Angreifer kann das System leicht angreifen, insbesondere wenn Sie keinen Wiedergabeschutz haben (obwohl dieser Fehler auch mit einem Wiedergabeschutz besteht). Zum Beispiel kann ich Zeitstempel, HMAC (Zeitstempel mit Geheim) aus einer Nachricht erfassen und dann in meiner eigenen Nachricht verwenden, und der Server akzeptiert sie.

Am besten senden Sie eine Nachricht, HMAC (Nachricht) mit ausreichend langem Geheimnis. Der Server kann sich auf die Integrität der Nachricht und die Authentizität des Clients verlassen.

Abhängig von Ihrem Bedrohungsszenario können Sie entweder einen Wiedergabeschutz hinzufügen oder feststellen, dass dies nicht erforderlich ist, da eine Nachricht bei vollständiger Wiedergabe keine Probleme verursacht.

2
mar

Hashes sind von der Eingabe abhängig und für dieselbe Eingabe wird dieselbe Ausgabe ausgegeben.

Bitte beachten Sie zusätzlich zu den anderen Antworten die folgenden Punkte:

Wenn Sie den Hash mit dem Kennwort starten, können Sie Rainbow-Tabellen vorberechnen und schnell plausible Zeitstempelwerte hinzufügen. Dies ist viel schwieriger, wenn Sie mit dem Zeitstempel beginnen.

Verwenden Sie also nicht Sha1 ("Mein geheimer Schlüssel" + "ein Zeitstempel")

gehen Sie für sha1 ("ein Zeitstempel" + "Mein geheimer Schlüssel")

1
TIPS

Ich glaube, dass die akzeptierte Antwort technisch richtig ist, aber falsch ist, da sie auf den Anwendungsfall zutrifft: Manipulieren von offensichtlichen Daten über öffentliche/nicht vertrauenswürdige Medien.

Denn obwohl es technisch äußerst schwierig ist, einen SHA - Hash brutal zu erzwingen oder umzukehren, wenn Sie, wie oben erwähnt, Klartext "data & a hash of the data + secret" über das Internet senden ist es möglich, das Geheimnis intelligent zu erfassen, nachdem Sie genügend Daten Ihrer Daten erfasst haben. Denken Sie darüber nach - Ihre Daten ändern sich möglicherweise, der geheime Schlüssel bleibt jedoch derselbe. Jedes Mal, wenn Sie einen neuen Datenblock versenden, handelt es sich also um ein neues Beispiel, auf dem grundlegende Cracking-Algorithmen ausgeführt werden. Mit 2 oder mehr Samples, die unterschiedliche Daten und einen Hash der Daten + Geheimnis enthalten, können Sie überprüfen, ob das von Ihnen festgelegte Geheimnis korrekt ist und kein Fehlalarm.

Dieses Szenario ähnelt dem, wie Wifi-Cracker WLAN-Passwörter knacken können, nachdem sie genügend Datenpakete erfasst haben. Nachdem Sie genügend Daten gesammelt haben, ist es unbedeutend, den geheimen Schlüssel zu generieren, auch wenn Sie SHA1 oder sogar SHA256 technisch nicht rückgängig machen. Die einzige Möglichkeit, um sicherzustellen, dass Ihre Daten nicht manipuliert wurden, oder um zu überprüfen, mit wem Sie sich am anderen Ende unterhalten, ist die Verschlüsselung des gesamten Datenblocks mit GPG oder ähnlichem (öffentliche und private Schlüssel). Hashing ist von Natur aus IMMER unsicher, wenn die von Ihnen gemachten Daten sichtbar sind.

In der Praxis hängt es wirklich von der Anwendung und dem Zweck ab, warum Sie überhaupt hashen. Wenn die erforderliche Sicherheitsstufe unbedeutend ist oder Sie sagen, Sie befinden sich in einem 100% -ig vollständig vertrauenswürdigen Netzwerk, ist Hashing möglicherweise eine praktikable Option. Ich hoffe, niemand im Netzwerk oder ein Eindringling ist an Ihren Daten interessiert. Ansonsten ist, soweit ich zu diesem Zeitpunkt feststellen kann, die einzige andere verlässliche Option die schlüsselbasierte Verschlüsselung. Sie können entweder den gesamten Datenblock verschlüsseln oder einfach signieren.

Hinweis: Dies war eine der Möglichkeiten, wie die Briten den Enigma-Code im 2. Weltkrieg knacken konnten, was die Alliierten begünstigte.

Irgendwelche Gedanken dazu?

0
John

SHA1 wurde entwickelt, um die Wiederherstellung des ursprünglichen Textes aus dem Hash zu verhindern. SHA1-Datenbanken existieren jedoch , die das Nachschlagen der allgemeinen Kennwörter anhand ihres Hashes SHA ermöglichen.

0
lovasoa