0 Daumen
244 Aufrufe

Guten Abend, wir sitzen hier gerade an einem Problem an dem wir nicht weiterkommen. Und zwar.

gegeben sind folgende verschlüsselte Passwörter (davor steht immer, wie das Passwort ist).

passwort = 1de54cd0a07040788bad383a33917a19

passwort123 = f477bc5732106f48c6fe089297a615d3

test123 = 5a21c3a038d20ea728da893efbb1a8b5

geheim = d07b7628317ad917c0f0983e0348730e

Mit welchem Verfahren wurden die Passwörter verschlüsselt? Wir haben jetzt schon sehr viel versucht haben aber bislang noch kein Land gesehen. Wär wirklich super, wenn das jemand rauskriegt.

von

Ist dort ein Salt enthalten? Dann wird es schwieriger.

2 Antworten

+4 Daumen
 
Beste Antwort
Mit welchem Verfahren wurden die Passwörter verschlüsselt?

So etwas ist ohne Anhaltspunkte nur schwer herauszufinden. Wenn es sich um einen proprietären Hash-Algorithmus handelt, sind in meinen Augen weitaus mehr Daten nötig, um herausfinden zu können, wie der Algorithmus funktioniert. Eigentlich sollte die Sicherheit eines Verfahrens maßgeblich durch die Geheimhaltung der Schlüssel und nicht die Geheimhaltung des Algorithmus bestimmt werden (Kerkhoffs Prinzip).

Als Basis für meine Überlegungen habe ich nun die Hash-Länge verwendet. Diese entspricht mit 32 Hexadezimalzahlen der des MD5-Algorithmus. Also habe ich ein paar Experimente unter Zuhilfenahme meiner Java-Funktionen gestartet:

 public static String sha1(final String to_hash) throws NoSuchAlgorithmException {
final MessageDigest digest = MessageDigest.getInstance("SHA1");
  final byte[] result = digest.digest(to_hash.getBytes());
  final StringBuffer buffer = new StringBuffer();
  for (int i = 0; i < result.length; i++) {
    buffer.append(Integer.toString((result[i] & 0xff) + 0x100, 16).substring(1));
  }
  return buffer.toString();
}

public static String sha256(final String to_hash) throws NoSuchAlgorithmException {
  final MessageDigest digest = MessageDigest.getInstance("SHA-256");
  final byte[] result = digest.digest(to_hash.getBytes());
  final StringBuffer buffer = new StringBuffer();
  for (int i = 0; i < result.length; i++) {
    buffer.append(Integer.toString((result[i] & 0xff) + 0x100, 16).substring(1));
  }
  return buffer.toString();
}

public static String md5(final String to_hash) throws NoSuchAlgorithmException {
  final MessageDigest digest = MessageDigest.getInstance("md5");
  final byte[] result = digest.digest(to_hash.getBytes());
  final StringBuffer buffer = new StringBuffer();
  for (int i = 0; i < result.length; i++) {
    buffer.append(Integer.toString((result[i] & 0xff) + 0x100, 16).substring(1));
  }
  return buffer.toString();
}

Meine Idee bestand darin, verschiedene Outputs an Hash-Strings erneut zu hashen (quasi eine "Hash-Chain"). Ich habe mir als Limit die Bildung von Hash-Chains der maximalen Länge 5, bei denen alle Kombinationsmöglichkeiten bezüglich der Algorithmen berücksichtigt werden, zu bilden. Zudem habe ich die Hashes je in Upper- und Lowercase-Lettern getestet. Dabei war MD5 immer der letzte Funktionsaufruf (diese Annahme fußt, wie bereits erwähnt, auf der Länge des Hashs).

Und bei einer habe ich tatsächlich die von Dir gegebenen Hashes erhalten (weshalb Du diese Antwort leist ;-)):

md5(sha1(md5("passwort"))); // Zuerst MD5, dann SHA1, dann wieder MD5

Du kannst die anderen Passwörter auch testen.

Es ist aber nicht die Regel, dass man bei unbekannten Verfahren "so leicht" auf den Algorithmus schließen kann. Ich bin davon ausgegangen, dass der Initiator eures Problems kein Sadist ist ;-)

von
+1 Daumen

Das einzige, was sich aus der Verschlüsselung erkennen lässt, ist die Blockbreite von 128 Bit. Das könnte z.B. MD5 oder AES sein. Ein generelles Problem bei der Entschlüsselung ist die Frage, ob

a) bekannte Krypto-Verfahren

b) eigens entwickelte, nicht veröffentlichte Krypto-Verfahren

verwendet wurden. Im Fall a) ist eine Entschlüsselung eventuell möglich. Bei MD5 ist das der Fall und gilt deshalb als nicht mehr sicher. AES ist mit vertretbaren Mitteln bisher nicht zu entschlüsseln.

Im Fall b) ist eine Entschlüsselung meiner Meinung nach unmöglich. Das geht z.B. so : ein Text wird Zeichen für Zeichen ganz simpel in ein anderes Zeichen umgewandelt. Der neue Text wird an geeigneter Stelle in ein JPG-Bild integriert, sodass das Bild darstellbar bleibt. Das Bild wird z.B. als  Email-Anhang verschickt. Jetzt weiss der Angreifer nicht mal, ob das Bild überhaupt versteckte Daten enthält, geschweige denn an welcher Stelle, geschweige denn nach welchem Verfahren umgewandelt. Daran scheitert sogar die NSA.

von

Ein anderes Problem?

Stell deine Frage

Ähnliche Fragen

+1 Daumen
0 Antworten
+2 Daumen
0 Antworten
+2 Daumen
1 Antwort
Gefragt 6 Sep 2018 von Gast

Willkommen bei der Stacklounge! Stell deine Frage einfach und kostenlos

x
Made by a lovely community