Forum: Mikrocontroller und Digitale Elektronik Prüfsumme in Software-Datenübertragung


von Florian B. (leseratte10)


Angehängte Dateien:

Lesenswert?

Hallo,

ich versuche gerade in einer Software (Client-Server-Kommunikation) den 
Prüfsummenalgorithmus herauszufinden, aber ich komme nicht weiter. Es 
ist kein CRC32 mit Standardpolynom, keine XOR-Verknüpfung, kein CRC32 
mit einigen weiteren verbreiteten Polynomen. Da allerdings eine ziemlich 
einfache Übertragung (gerade mal 2 bit gesetzt, siehe unten) eine so 
krumme Prüfsumme ergibt, vermute ich, dass es irgendeine "echte" 
Prüfsumme und nicht einfache Addition oder XOR-Rechnung von 
irgendwelchen Teilen ist.

Wenn ich einige Bytefolgen (8 bis ca. 500 Byte, die meisten haben 204 
Byte) und die dazugehörige Prüfsumme (4 Byte) posten würde, könnte mir 
dann einer der Profis helfen und mal schauen, ob er da etwas bezüglich 
der Prüfsumme rauslesen kann?

Was würde bei so einer Analyse mehr helfen? Datenübertragungen, bei 
denen die Prüfsumme nahezu gleich ist? Datenübertragungen, bei denen die 
Nutzwerte möglichst gleich sind?

Es gibt leider nur ein einziges ziemlich kurzes Paket mit Prüfsumme, 
einige weitere habe ich mal in den Anhang gepackt.

Daten:      1000 0000 0000 0000
Checksumme: 9000 7a7e

Vielen Dank für eure Hilfe,

Florian B.

von Maxx (Gast)


Lesenswert?

Und du bist dir sicher, dass die Checksumme 32 bit sind?
Würde da eher auf die letzten 2 Bytes (16 Bit) tippen.

von Florian B. (leseratte10)


Lesenswert?

Es mag vielleicht bei dieser einen Bytefolge so aussehen, aber bei den 
anderen Übertragungen (Anhang) sieht das schon mehr nach Prüfsumme aus. 
Ich bin mir relativ sicher, dass das eine 4-Byte-Prüfsumme ist.

Ich habe mal über meine gesammelten Übertragungen ein Script laufen 
lassen - die Prüfsummen sind ungefähr gleichnäßig verteilt. Es wird also 
wohl keine einfache Summe o. ä. sein da - wie gesagt - viele Pakete so 
aussehen wie im Anhang und es dann auch viele ähnliche Prüfsummen geben 
müsste.

von greg (Gast)


Lesenswert?

Schuss ins Blaue: vielleicht ist das eine Variante von 
https://en.wikipedia.org/wiki/Fletcher%27s_checksum?

von Florian B. (leseratte10)


Lesenswert?

Also eine Standard-Fletcher32-Checksum (wie hier beschrieben: 
https://gist.github.com/regularcoder/8254723) ist es nicht. Gibt es da 
noch Varianten von bzw. was müsste ich da variieren?

von Florian B. (leseratte10)


Lesenswert?

Hat noch jemand eine Idee, welche Prüfsumme das sein könnte oder ist die 
Suche danach aussichtslos ohne genauere Anhaltspunkte?

von Gerd E. (robberknight)


Lesenswert?

wenn das auf nem PC berechnet wird und nicht auf nem µC wo Speicher und 
Rechenzeit knapp sind:

schau Dir auch mal die MD5- und SHA1-Summe an. Vielleicht ist es ein 
Teil davon (also z.B. die ersten oder letzten 32 Bit davon).

Hab ich auch schon als Prüfsumme verwendet gesehen.

Ach so: immer sowohl den tatsächlich übertragenen Klartext, als auch die 
Binärdaten anschauen. Du weißt ja nicht worüber von beidem die Prüfsumme 
gemacht wird.

von Florian B. (leseratte10)


Lesenswert?

Es handelt sich um ein Spiel für eine Spielkonsole - genauer gesagt die 
Wii von Nintendo. Ich denke nicht, dass da die Rechenleistung für ne 
Prüfsumme knapp wird.

Sowohl MD5 als auch SHA1 habe ich mir bereits angesehen, keine 
Übereinstimmungen gefunden, auch nicht teilweise.

von DrWright (Gast)


Lesenswert?

Probier mal die hier durch. 
www.nongnu.org/avr-libc/user-manual/group__util__crc.html

von Florian B. (leseratte10)


Lesenswert?

Nach langer Zeit habe ich es endlich rausgefunden!

Für den Fall, dass das später jemand findet, der auch die Lösung sucht:

Die Prüfsumme ist eine ganz normale CRC32, die allerdings nicht über den 
Datenbereich gebildet wird, sondern über das ganze Paket inkl. 
Prüfsumme.

Zur Prüfung, ob eine Prüfsumme stimmt, ersetzt man diese durch vier 
Nullbytes, berechnet dann vom gesamten Paket (inklusive der leeren 
Prüfsumme) eine CRC32-Prüfsumme. Dabei sollte dann die Prüfsumme 
herauskommen, die vorher im Paket stand.

Eigentlich hätte ich auf eine so simple Lösung viel früher kommen 
sollen, gerade da dieses "Prüfsumme auf 0 setzen" auch in TCP / UDP 
gemacht wird...

Dennoch Danke an alle, die versucht haben, mir zu helfen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.