it-swarm.com.de

Ist dies eine selbst gerollte Hashing- / Verschleierungsmethode? Kannst du das Muster erkennen?

Ein System, das wir in die Organisation einführen, verwendet keine traditionelle Hashing-Funktion, die ich finden kann. Ich wurde beauftragt, es durch Black-Box-Tests zu "genehmigen".

Ich vermute, dass Passwörter einfach verschleiert oder verschlüsselt (nicht gehasht) werden, da sich die Länge des Ergebnisses mit der Passwortlänge ändert (obwohl es anscheinend ein Minimum gibt - vielleicht Auffüllen?).

Hier sind einige Daten:

 Passwort: Ergebnis 
 1: TG3432WB7VU = 
 11: r8ahLkJGWbY = 
 111: E7fXdNqEWAA = 
 11111111: FIcx3a00R4eGhFyHjD56qw == 
 1111111111: FIcx3a00R4evxqEuQkZZtg ==
 2111111111: GPwnH80qEACvxqEuQkZZtg ==

Das Ergebnis ist offensichtlich base64, dekodiert aber nicht in etwas Lesbares. Bevor ich wusste, dass sich die Länge des Ergebnisses geändert hat, habe ich versucht, die dekodierten Bytes als MD5 und andere Hashing-Funktionen zu behandeln, aber das hat offensichtlich nicht geklappt. Jetzt, da ich weiß, dass sich das Ergebnis in der Länge ändert, denke ich über andere, schlechtere Alternativen nach. Bemerkenswert sind die beiden fett gedruckten Teile oben: Sie sind in zwei verschiedenen Passwörtern identisch. Entweder werden alle 8 Bytes unabhängig voneinander verarbeitet (warum?) Oder es findet eine polyalphabetische Substitution statt (?).

pdate :

Jedes Zeichen, einschließlich Unicode-Zeichen, wird vom System für Kennwörter akzeptiert. Das achtmalige Wiederholen eines 3-Byte-Zeichens führt zu einem 24 Byte langen "Hash".

46
coldfused

Ich vermute sehr, dass dies eine selbst gerollte oder zumindest sehr veraltete Methode ist. Es ist für moderne Verhältnisse sehr schwach und sollte nicht zum Schutz von wichtigen Dingen verwendet werden.

Kurze Passwörter konnten mit nicht mehr als 2 ^ 64 Brute-Force-Versuchen geknackt werden, was selbst mit einem normalen Computer durchaus möglich ist. Wenn beide Hälften des Ergebnisses unabhängig sind, selbst bei ziemlich langen Passwörtern, könnten 2 * 2 ^ 64 Brute-Force-Versuche es knacken (also 2 ^ 65 Versuche). Es gibt wahrscheinlich weitere Schwachstellen im Algorithmus, die ihn schwächer machen als hier beschrieben.

Ein weiterer interessanter Punkt zum Testen wäre 2111111111 und zu prüfen, ob der zweite Teil des Ergebnisses gleich bleibt. Wenn sich der zweite Teil nicht ändert, ist dies definitiv ein schwacher Algorithmus.

Edit :

Da die Ergebnisse des 2111111111-Tests für die zweite Hälfte gleich sind, ist dies definitiv ein schwacher Algorithmus und sollte nicht zum Schutz von empfindlichen Gegenständen verwendet werden! Ich habe den relevanten Vergleich unten aufgenommen:

  • 1111111111 : FIcx3a00R4evxqEuQkZZtg==
  • 2111111111 : GPwnH80qEACvxqEuQkZZtg==

Edit :

Ein weiterer interessanter Test wäre das, was Ricky Demer unten vorschlägt:

Als nächstes muss überprüft werden, ob die 8-Byte-Blöcke identisch behandelt werden. Was sind die "Hashes" von aaaaaaaabbbbbbbc und bbbbbbbbaaaaaaac? - Ricky Demer 25. Februar um 6:44 Uhr

Wenn die 8-Byte-Blöcke identisch behandelt werden, ist es sogar für lange Passwörter noch schlimmer, unabhängig von der Länge. Es würde nur 2 ^ 64 Brute-Force-Versuche erfordern, wie Neil in den Kommentaren hervorhob. Sobald jemand eine Tabelle erstellt hat, zu der jede Möglichkeit berechnet wird, wäre dieser Algorithmus praktisch nutzlos. Es gibt wahrscheinlich noch weitere Schwachstellen in diesem Algorithmus, die noch entdeckt werden müssen.

Fazit :

Ich empfehle nicht, diesen Algorithmus unabhängig von den Ergebnissen des letzten Tests zu verwenden. Wir haben bereits genug gesehen, um zu wissen, dass es schwach ist. Etwas mit einem höheren Bit-Verschlüsselungs-/Hash-Schema, Salt, langer Rechenzeit usw. wäre viel besser, und ich würde empfehlen, eine der vorhandenen gründlich getesteten Methoden zu verwenden. Selbst gerollte Verschlüsselung/Hashing hatte nicht den Vorteil umfangreicher Tests, die die meisten Hauptstrommethoden haben.

58
Jonathan

Die Tatsache, dass die Länge der codierten Zeichenfolgen von der Länge der jeweiligen Kennwörter abhängt, deutet auf eine viel schlimmere Schwäche hin: Kennwörter scheinen eher verschleiert als gehasht zu sein.

Dies bedeutet, dass jeder, der die Interna des Systems kennt, in der Lage sein kann, jedes Passwort sofort zu entschlüsseln! Die Auswirkungen sind zahlreich: Sie müssen Entwicklern vertrauen, die jemals an dem System gearbeitet haben, der Quellcode muss für immer geheim gehalten werden (deshalb überprüfen Sie eine Black Box) usw.

Es spielt keine Rolle, wie gut der Verschleierungsalgorithmus ist (und 264 ist nicht gerade herausragend). Es ist von Natur aus kaputt.

10

Kerckhoffs_Prinzip trifft offensichtlich zu: Ein Kryptosystem sollte sicher sein, auch wenn alles am System außer dem Schlüssel öffentlich bekannt ist.

Dies allein sollte ausreichen, um zu sagen: "Ich kann dieses System ohne weitere Informationen nicht genehmigen."

Aus Ihren Beispielen geht hervor, dass die Eingabe in Blöcke mit 8 Zeichen/Bytes unterteilt ist, jeder Block einzeln gehasht und die Ausgaben zusammengestellt werden. Dann wird das gesamte Ergebnis base64-codiert.

Das ist nicht gut. Die meisten Passwörter mit mehr als 8 Zeichen sind nur wenige Zeichen länger. Dies bedeutet, dass ein Angreifer den zweiten Block sehr leicht knacken kann. Und wenn Sie den zweiten Block kennen, haben Sie einen starken Hinweis darauf, was der erste Block enthalten kann.

Die Crypto-Community hat dies vor Jahrzehnten entdeckt und wird keine unabhängigen Hash-Blöcke mehr erstellen. Das bedeutet, dass diese Programmierer [~ # ~] nicht [~ # ~] auf Krypto aktuell sind.

Die einzige gute Nachricht ist, dass eine Änderung des Kennworts um ein Zeichen den gesamten Ausgabeblock ändert. Dies bedeutet wahrscheinlich, dass sie tatsächlich die Passwörter hashen und sie nicht nur verschleiern. Mit den oben genannten Schwächen kann die weltweit beste Hash-Funktion den Algorithmus jedoch nicht speichern.

5
Stig Hemmer

Scheint wie eine einfache Blockchiffre und ist definitiv nicht etwas, das Sie jemals verwenden möchten. Vergleichen Sie es mit, anstatt Passwörter zu haschen, indem Sie sie einfach mit beispielsweise base64 codieren/verschleiern. Dies ist nichts, was Sie jemals tun möchten. Wenn jemand jemals eine einfache Kryptoanalyse anwendet, kann er leicht herausfinden, dass es sich nur um genügend Zeichen handelt, die früher base64 waren.