Dhke

Aufgrund dieses Threads:

Schläft das Forum ein?

dachte ich, ich poste mal ein etwas anderes hackit. Ihr wollt anspruchsvolle Themen, hier habt ihr eins.

Ziel: Sich ins Scoreboard einzutragen(Die entschlüsselte Nachricht ist der Link zum Scoreboard)

Über Ansätze, Probleme, Lösungen kann gerne diskutiert werden, dafür ist der Thread da. Vollständige Lösungen oder Ansätze bitte in Spoiler seten.

http://darksquirrel.ath.cx/hackit3/

//edit: Das hackit stammt von DarkSquirrel auch bekannt als BoLt/GrafZahl
 
Ich habs gerade geschafft und mich eingetragen :) Ne Lösung gibts heute Abend, muss jetzt zur Vorlesung...

cByte
 
Glückwunsch, c
ich dachte schon, dass sich gar keiner daran versucht. :)

Ich post einfach mal ein paar tipps:


Woher weiß A, dass die Nachricht wirklich von B kommt?
Das Protokoll ist gegen eine ganz bestimmte Art von Angriff anfällig
 
Wenn auch etwas verspätet, hier mein Lösungsweg:

Zunächst muss man sich vor Augen führen, dass man bei dieser Art von Keyaustausch keine Möglichkeit hat jemals einen Klartext zu sehen, solange man nur den Datenaustausch von A und B "mithört". Ergo muss man aktiv in den Datenaustausch eingreifen und sich zwischen A und B setzen, quasi als Vermittler. Nur dürfen A und B nichts davon mitbekommen.

Zu Beginn einigen sich A und B auf eine Primzahl p und eine Zufallszahl g. Diese haben wir auch gegeben durch:
p=212935040031604815141240756551104688603
g=63594830015359383540729212896882214340

Jetzt wählt A sich eine zufällige Zahl a. A berechnet sich nun einen Key Xa = g^a mod p. In diesem Beispiel gilt:
Xa=115479666761256450455063207607300019587
Dieser Wert sollte normal zu B gesendet werden, landet aber erstmal bei uns :) A hat also quasi versucht mit uns in Verbindung zu treten.
Wir müssen jetzt natürlich - damit die Daten von A auch nach B gelangen - unsererseits eine Verbindung zu B öffnen. Das machen wir, indem wir uns ein beliebiges z>1 ausdenken und den Key Xz= g^z mod p berechnen. Ich habe hier z=2 gewählt.
Für z=2 gilt: Xz=g^z mod p = 137103982843136238647594426704956426850
Das senden wir nun mit IDa = A als Xa zu B
B denk also jetzt: Aha, A will mit mir Kontakt aufnehmen (was aber in Wirklichkeit nun wir sind).

Jetzt geht das ganze Spiel zurück in die andere Richtung. B denkt sich ein b>1 aus, um mit dem vermeintlichen A in Verbindung zu treten. Also: Xb= g^b mod p -> hier: Xb=129097000862523749840957581813757545440

Xb kommt bei uns an, und damit wissen wir schonmal: Der Key, den wir zur Verbindung mit B brauchen ist:
Kb=Xb^z mod p=191384704897205033618818732734805885958

Jetzt steht noch unsere Antwort an A aus. A schicken wir das gleiche, wie B, nämlich unser Xz=g^z mod p = 137103982843136238647594426704956426850

Den Key, den wir zur Kommunikation mit A brauchen können wir uns jetzt auch schon berechnen. Wir nehmen das Xa, was wir im ersten Schritt von A bekommen haben und berechnen:
Ka=Xa^z mod p = 152496511506345413237982002012998611773

Was nun folgt ist eine Kontrolle von A und B, um festzustellen, dass mit der Kommunikation alles in Ordnung ist. A und B müssten normalerweise jetzt den gleichen Key haben. Dafür legen A und B einen Hash von ihrem Key an, und vergleichen diese. Das kann natürlich so nicht funktionieren, da wir ja in der Mitte hängen. Das heißt für uns: Weitere Manipulationen sind nötig. Genau läuft das Ganze hier so ab:

A berechnet sich seinen Key mit Xb^a mod p, um mit B, bzw. mit uns in Verbindung zu treten. Nun wird ein Hash über die beiden IDa und IDb gemacht, allerdings mit Key+1. Dabei kommt dann "77; 49" heraus. Diesen Wert müssen wir nun an B weiterleiten. Damit B aber nichts Auffälliges feststellen kann, müssen wir "77; 49" zunächst mit dem Key, den wir zur Kommunikation mit A haben entschlüsseln. Aber aufpassen, wir brauchen hier Schlüsselwert+1. Also ganz unten auf der Seite key=sha1(152496511506345413237982002012998611774)
msg= 77; 49
Hier sollten wir AB als Ergebnis erhalten, oder was auch immer wir für IDa und IDb verwendet haben. Jetzt müssen wir AB wieder mit dem Key für die Kommunikation mit B verschlüsseln. (wieder key+1)
key=sha1(191384704897205033618818732734805885959)
msg=AB
Was heraus kommt sollte 121; 131 sein (abhängig vom gewählten z, und gewählten IDa und IDb). Diesen Wert übermitteln wir B. "Sieht ok aus..." sollte die Antwort sein.
Jetzt geht das Ganze wieder in die andere Richtung mit key+2. Nachricht von B mit Kb+2 entschlüsseln, dann mit Ka+2 wieder verschlüsseln, und an A übermitteln.

Nun haben wir es im Prinzip schon geschafft. A sendet B eine Nachricht. Als key nutzen wir unseren Ka und die Nachricht als msg, und schon haben wir es geschafft :D

Gruß,
cByte
 
Hallo

im Prinzip richtig. Nur geht es in diesem hackit noch einfacher. ;)

Was passiert denn, wenn wir B komplett aus der Kommunikation ausschließen?

1.p ist eine Primzahl. Aber was gibt diese Primzahl beim DHKE eigentlich an?Warum wird gerade eine Primzahl verwendet?
2.Was ist g mathematisch gesehen?(In bezug zu 1.)
3. Auf welchem Problem beruht die Tatsache, dass sich a,b nicht so einfach berechnen lassen?
4.Wann ist der DHKE eigentich in diesem hackit zuende?
 
Funktioniert in diesem Fall auch, da wir nur eine Nachricht von A abfangen und lesen wollen. In der Praxis will man normalerweise aber die komplette Kommunikation von A und B haben.

Ich werd mich hier kurzfassen, weil zu den Fragen könnte man durchaus ganze Arbeiten schreiben :D

zu 1. Es gibt nur zu Primzahlen auch eine Primitivwurzel. Benutzt man keine Primitivwurzel in der Rechnung kann man nicht mehr alle Zahlen des Restklassenrings der gewählten Zahl für p mehr darstellen und ein Angreifer hat meisten wesentlich weniger Zahlen, die er noch zu knacken hat.

zu 2. g ist eine Primitivwurzel zu p. Das bedeutet, dass ich alle Zahlen des Restklassenrings von p durch eine Potenzen mit der Primitivwurzel g als Basis und einem z mit 1 < z <= p-2 darstellen kann.

zu 3. Dies ist auf das Diskreter-Logarithmus-Problem zurückzuführen. Die Aussage ist, dass bei b=x^z mod p, ein b leicht zu berechnen ist, bei gegebenen x,z und p - die Berechnung von z aber bei gegebenen b, x und p sehr schwer ist.

zu 4. Sobald A den Wert Xb übermittelt bekommt. Ab hier kann jede Partei den gemeinsamen Schlüssel berechnen.

:D
 
Zurück
Oben