Prozess auf zwei Computern ausführen

Luis Felger

Grünschnabel
Hallo,
erstmal, ich wusste nicht wo ich dieses Thema hin tun soll, denn es bezieht sich sowohl Hardware als auch auf den Apache und PHP.

Ich habe ein Script entwickelt, dass bis zu 10 stellige verschlüsselte MD5 Hashs wieder zurück verwandeln soll. (10 stelliger String -> MD5 Hash -> 10 stelliger String)
Wenn jetzt jemand schreibt, dass ich Hacker wäre, das stimmt nicht, denn ich dieses Projekt existiert nur Spaß halber.
Jedenfalls, ich lass zur Zeit dass Script auf einem Rechner mit 4 Kernen â 3,9 GHz laufen. Allerdings dauert das Encrypten bei 4808584372417849 Möglichkeiten eine ganze Weile...
Da ich ein Laptop habe würde ich gerne einen teil des Prozesses auf den Laptop überlagern.
Funktioniert so etwas überhaupt und wenn ja, wie?
 

sheel

I love Asm
Hi

Wenn jetzt jemand schreibt, dass ich Hacker wäre, das stimmt nicht, denn ich dieses Projekt existiert nur Spaß halber.

Das MD5 geknackt werden kann ist bekannt,
außerdem ist dein Vorhaben nicht strafbar.
Auf verschiedenen Unis etc. gibt/gab es immer wieder
ähnliche Versuche mit sichereren Algorithmen,
um die Unsicherheit zu beweisen.

Jedenfalls, ich lass zur Zeit dass Script auf einem Rechner mit 4 Kernen â 3,9 GHz laufen. Allerdings dauert das Encrypten bei 4808584372417849 Möglichkeiten eine ganze Weile...
Blöde Frage, aber verwendest du Threads?
Wenn nicht nutzt du nur einen Kern. Da könnte man viel mehr rausholen.
(Es wird trotzdem noch lang genug dauern).

Da ich ein Laptop habe würde ich gerne einen teil des Prozesses auf den Laptop überlagern.
Funktioniert so etwas überhaupt und wenn ja, wie?
Warum schreibst du das Programm nicht so, dass es wahlweise die erste oder zweite Hälfte der Möglichkeiten macht? Computer A macht dann die Erste, B die zweite.
Kann man natürlich auch verfeinern, dass man Prozent etc. festlegen kann.

Einfach so Prozesse teilen geht nicht.

ich wusste nicht wo ich dieses Thema hin tun soll, denn es bezieht sich sowohl Hardware als auch auf den Apache und PHP.
Thema verschoben zu Coders Talk.
Nur...warum betrifft das speziell Apache und PHP?
MD5 geht in vielen Programmiersprachen.

Gruß
 

CPoly

Mitglied Weizenbier
Wenn jetzt jemand schreibt, dass ich Hacker wäre, das stimmt nicht, denn ich dieses Projekt existiert nur Spaß halber.

Nur so am Rande: Wer heute noch MD5 für Passwörter verwendet ist der Bösewicht, nicht du. Und alle üblichen Passwörter mit unter 10 Stellen werden hier dabei sein http://www.md5decrypter.co.uk/


Was sheel Vorgeschlagen hat mit dem Aufteilen der Arbeit in zwei Teile halte ich für ganz sinnvoll, vor allem wenn du Apache und PHP benutzt.

-Jeder Rechner der mitmachen soll bekommt das Skript und stellt es via Webserver im Netzwerk bereit
-Ein Master Rechner hat eine Liste aller PCs und ruft einfach die URL des Skriptes auf jedem PC auf
-In der URL bekommt jeder gesagt, für welchen Bereich er zuständig ist

Und schon kannst du die Arbeit beliebig verteilen, ohne dass die Arbeiter/Sklaven Rechner (muharr) voneinander wissen.

Edit: Übrigens, um jetzt noch Multithreading auszunutzen, einfach pro Sklave die URL mehrfach aufrufen (mit verschiedenen Parameter). Apache verteilt das auf mehrere Threads.
 

Ultrasick

Grünschnabel
PHP ist etwa 10 mal so schnell wie Python.
C ist etwa 200 mal so schnell wie Python.

Anstatt mehr Hardware würde ich lieber auf irgendeine beliebige Programmiersprache umsteigen. Selbst visual basic ist schneller als PHP.

Welchen Geschwindigkeitsvorteil erhoffst du dir von 2 Rechnern im vergleich zu 1 Rechner? 2 mal so schnell? Wenn beide Rechner gleich schnell sind, dann läuft dein Programm im Idealfall tatsächlich sage und schreibe 2 mal so schnell ab. :)
 
Zuletzt bearbeitet:

sheel

I love Asm
Weiß zwar nicht, woher du jetzt Phyton nimmst, aber ja,
C ist natürlich auch eine Idee :D

Und weil oben von Prozess-teilen die Rede war:
*Threads, die statt den üblichen Möglichkeiten innerhalb eines Prozesses
Sockets zur Kommunikation nehmen.
Damit kann man das ganze gleich über mehrere Rechner spannen.
*Pro Computer ein Programm, dass die Threads verwaltet und außerdem noch
*sich zu einem Hauptrechner verbindet, der die Bereiche der zu machenden Arbeit zuteilt.
*Ergebnisse schon während der Laufzeit einsammeln, falls Ausfall von Teilen
*Ggf. Neuzuordnung der nichtgemachten Arbeit des ausgefallen Teils
...

Das kommt dem verteilten Prozess schon näher.
 

Ultrasick

Grünschnabel
Weiß zwar nicht, woher du jetzt Phyton nimmst, aber ja,
C ist natürlich auch eine Idee :D

Weil ich nie

  • PHP vs. C

direkt getestet habe sondern nur

  • C vs. Python und
  • PHP vs. Python

aber zeigen wollte ich wie schnell

  • eine Skriptsprache vs. eine Programmiersprache

ist.

Aber zurück zum Thema:

Wenn du das wirklich nur spaßeshalber machst, dann würde ich an deiner stelle lieber sinnvollere Arbeit tun. MD5 ist eine (meist verkürzte) Prüfsumme von einer Byte-Folge. Ein Passwort ist ein Beispiel für eine Byte-Folge, aber auch eine "2 GB"-große Datei ist eine Byte-Folge, von der ein MD5-Schlüssel gebildet werden kann. Bei einer großen Datei wird also klar, dass der MD5-Schlüssel nicht eindeutig sein kann, weil er viel kürzer ist. Wenn von einer "123 Byte"-große Bytefolge ein MD5-Schlüssel gebildet wird, dann kann es sein, dass es genau der selbe MD5-Schlüssel ist, wie wenn von einer anderen Datei, die beispielsweise "2 Terrabyte"-groß ist, der MD5-Schlüssel gebildet wird. Dieses Phänomän nennt man "Kollision".

Sinnvoller wäre, wenn du einen Algorithmus ausdenkst, der eine solche Kollision erzeugen kann. Wenn man also einen MD5-Schlüssel vorgibt, dass dann dein Algorithmus ausgibt, welche Byte-Folge beispielsweise benutzt werden kann, um zu diesem MD5-Schlüssel zu kommen. Wenn von der Byte-Folge der MD5-Schlüssel erzeugt wird, dann erhält man den MD5-Schlüssel, den man vorgegeben hat. Das kann eine komplett wirre Zeichenfolge sein, die man dann auf irgendeiner Webseite als Passwort verwenden kann, anstatt dem wirklichen Passwort.

Aber mit roher Gewalt (brutal force) und einem Haufen Rechenleistung machst du nur die Umwelt kaputt.
  • Du bekommst keine Ehre für deinen klugen Algorithmus, wenn es nur rohe Gewalt war.
  • Du hilfst kein bischen dabei, irgendetwas sicherer zu machen, weil du vielmehr die Unknackbarkeit von MD5 vortäuschst.
  • Niemand wird wahrscheinlich jemals ernstes Interesse an deinem Verfahren haben.

Edit:
Aussagen über AES gelöscht
 
Zuletzt bearbeitet:
Es gibt aber auch andere interessante Themen, bei denen man Sicherheitslücken aufzeigen kann. AES ist zum Beispiel eines von diesen pseudo-Verschlüsselungsverfahren, die oft als unknackbar hingestellt werden. Unknackbar ist AES auch nur dann, wenn man es mit roher Gewalt versucht. Ansonsten knackt dir selbst ein 386er eine AES Verschlüsselung in weniger als 1 Sekunde und kann sogar noch das ursprünglich eingegebene Passwort anzeigen, sofern man ein Teil von den unverschlüsselten Nutzdaten kennt.

Hier wird das ganze am Rande erwähnt wie das geht:
http://ontheserver.de/Downloads/Dok...0werden%20-%20Rekonstruktion%20vom%20Passwort
Hast du dazu auch eine seriöse Quelle? Der aktuelle Stand der Wissenschaft ist, dass bei der AES-Verschlüsselung selbst bei bekanntem Klartext ein überwältigender Großteil der Schlüssel durchprobiert werden muss, um den richtigen zu ermitteln. Alles andere wäre eine Sensation. Darum halte ich deine Aussage für äußerst unglaubwürdig, solange du keine überprüfbaren Fakten lieferst.

AES wurde übrigens vom israelischen Geheimdienst entwickelt und es war denen von Anfang an bekannt, wie deren eingebaute Hintertür funktioniert. Als dann später Intel 6 Maschinenbefehle in die Westermer-CPU-Architektur aufgenommen hatte, hatte Intel ein Dokument veröffentlicht, das den Geschwindigkeitsvorteil bei der Verwendung von den Maschinenbefehlen aufzeigt. Das Dokument wurde von deren israelischen Entwicklungsbüro verfasst und darin stand etwas wie:
Wenn du mir jetzt noch erklärst, warum Daemen und Rijmen (die Entwickler von AES) als gebürtige Belgier für den Mossad arbeiten sollten :suspekt: Insofern: halte ich auch wieder für Unsinn, solange du es nicht belegen kannst.

Grüße,
Matthias
 

Ultrasick

Grünschnabel
Hallo,
ich merke schon, ich hätte die Sache mit AES nicht erwähnen sollen, weil sie Off-Topic war. Das jetzt zu beweisen bringt die Diskussion noch weiter weg vom eigentlichen Thema.

Sorry.

Dann will ich eben diesesmal wie ein Depp und Dummschwätzer darstehen. *schäm*

@Matthias: könntest du bitte die Zitate löschen? Ich würde gerne meine Aussagen zurückziehen.
 
Zuletzt bearbeitet:

ikosaeder

Teekannen-Agnostiker
Am einfachsten ist es, wie schon gesagt wurde, wenn du dein Lösungsgebiet in mehrere unabhängige Bereiche aufteilen kannst. Dann berechnet der eine Rechner Teil 1 und der andere Teil 2. Das kannst du manuell machen.
Um Programme automatisch auf 2 Rechnern auszuführen, brauchst du ein parallelisiertes Programm. Dazu kannst du MPI oder OpenMP verwenden. Problematisch wird es, wenn die Teilbereiche nicht unabhängig sind, dann wird die Reihenfolge wichtig in der die Daten verarbeitet werden.
Sinnvollerweise solltest du hier eine Programmiersprache wie C, oder Fortran verwenden. Dafür gibt es gute, freie MPI Bibliotheken und Compiler die MPI und OpenMP unterstützen, teilweise sogar automatisiert.
Interessant wäre es, wenn du etwas mehr dazu schreibst was du machen willst und warum, dann ist es einfacher alternative Lösungswege auf zu zeigen. Brute force ist der schlechteste Ansatz.