Forum: Mikrocontroller und Digitale Elektronik CRC8-Algorithmus finden (anscheinend CRC8/146 )


von Reticent (Gast)


Lesenswert?

Huuh, Hallo erstmal alle zusammen.

Ich habe eine Aufgabe bekommen, bestimmte Nummern auf einige 
Kontaktchipkarten (SLE4428) zu kodieren. Nur dummerweise hat der Kunde 
nur sehr wenig Dokumentation gebracht. Darin steht, dass es eine 
CRC8/146 über eine Seriennummer errechnet werden muss und auf die Karte 
kodiert. Was dieses 146 nun bedeutet weiss niemand von uns, der Kunde 
auch nicht :(  (Es wurde von langer Zeit so definiert. Jetzt muss es 
auch drauf wegen den alten Karten und Leser, welche der Kunde hat)

Jetzt ist die Frage, wie dieser CRC8/146 Algorithmus aussehen muss. Ich 
habe mit der standard CRC8 Funktion alle Polynome und Startwerte 
durchlaufen lassen und manchmal Treffer gehabt. Es ist aber nicht 
sicher!

Kann hier jemand helfen herauszufinden wie der CRC8/146 gerechnet werden 
muss, damit richtige Zahlen rauskommen?

Beispieldaten(der letzte Byte ist der CRC):

30303030303335323536315F
und
3030303030333532353634E8
und
3030303030333438313537E7
und
30303030303334383135369D
und
3030303030333337303133AA
und
303030303032393531393440

p.s.(bei der ersten zwei, wenn ich die die Reihenfolge der Bytes 
umdrehe, dann bekomme ich die richtige CRC's mit einem Polynom = 0x4D 
und Startwert = 0x12. Wenn ich aber dieselben Werte bei weiteren Daten 
anwende, bekomme ich nicht das richtige Ergebnis. dumm...)

von Tim T. (tim_taylor) Benutzerseite


Lesenswert?

Aus dem Bauch raus und ohne deine Beispiele zu prüfen, würde ich sagen 
das 146 das Generatorpolynom angibt.

146 = 10010010 -> x^7 + x^4 + x^1

von Xenu (Gast)


Lesenswert?

Kann es sein dass mit 146 das CRC-Polynom gemeint ist?
Vielleicht x^6 + x^4 + x?

von Xenu (Gast)


Lesenswert?

Zu spät ...

von Reticent (Gast)


Lesenswert?

dachte ich auch, aber das ist es nicht... Ich habe mithilfe von zwei 
ineinander gesetzten Schleifen alle Polynome von 0x00 bis 0xFF und 
jeweils alle Startwerte durchprobiert. Kein einziger Treffer wo alle 
Beispieldaten gleichzeitig den richtigen CRC haben! Hammer, oder?? Das 
heisst doch, dass es irgendwie anders berechnet wird, oder nicht?


p.s.
(Ich habe jetzt etwas über das "CRC and how to Reverse it" gefunden. Nur 
leider fehlt mir das Grundwissen um es richtig zu verstehen. Es gibt 
anscheinend eine Software namens PEiD. Kennt sich damit jemand 
vielleicht aus? Vielleicht kann man damit das Algorithmus herausfinden 
oder so...)

von Karl-heinz S. (cletus)


Lesenswert?

Reticent wrote:
> dachte ich auch, aber das ist es nicht... Ich habe mithilfe von zwei
> ineinander gesetzten Schleifen alle Polynome von 0x00 bis 0xFF und
> jeweils alle Startwerte durchprobiert. Kein einziger Treffer wo alle
> Beispieldaten gleichzeitig den richtigen CRC haben! Hammer, oder?? Das
> heisst doch, dass es irgendwie anders berechnet wird, oder nicht?

Wird die CRC vielleicht mit einem Startwert berechnet?
Probier die 256 verschiedenen Startwerte doch auch mal mit aus, dauert 
ja nicht lang ;-)

von Reticent (Gast)


Lesenswert?

> .. Ich habe mithilfe von zwei
> ineinander gesetzten Schleifen alle Polynome von 0x00 bis 0xFF und
> jeweils alle Startwerte durchprobiert.

ähm... habe doch geschrieben, dass ich alle Startwerte ausprobiert 
habe?!

von dgl (Gast)


Lesenswert?

Some CRC implementations xor the final value with some other value.
crc = crc ^ xor_Value

xor_Value = 146 ?

Maybe?

von Reticent (Gast)


Lesenswert?

> Some CRC implementations xor the final value with some other value.
> crc = crc ^ xor_Value
>
> xor_Value = 146 ?
>
> Maybe?

maybe, I will try it :) (I was able to try "/146" as a division -> 
negative, now I'll try the XOR)
thx for the idea

von Reticent (Gast)


Lesenswert?

nop, still negative :))
I mean, I tried it and no consensus found. No hits where all of example 
data are have the right CRC... :(

----

nein, habe das mit dem XOR hinterher ausprobiert und keine 
{bereinstimmungen gefunden. Kein einyiger Fall wo alle Beispieldaten den 
richtigen CRC ausgerechten bekommen :(

von Reticent (Gast)


Lesenswert?

habe jetzt eine tolle Seite entdeckt
http://serversniff.net/crypt-checksum.php

da gibts viele super Tools und man kann alles auf ein Schlag ausrechnen 
lassen. Das habe ich auch mit meinen Beispieldaten gemacht. Leider keine 
Treffer :(

Dann habe ich auch etwas von einer Methode gelesen wie man den 
Algorithmus herausfinden kann. Man soll irgendwie ein lineares 
Gleichungssystem bilden.... Weiss nicht ob das so stimmt... Kennt das 
jemand?

Oh mann... ich bin scho am verzweifeln. Was soll bloß tun? Wie kann man 
denn sonst herausfinden wie der blö.. CRC8/146 zustande kommt?

Es kommt mir vor als ob ich eine verschlüsselte Geheimnachricht 
entschlüseln soll :D  Ich bin da gar nicht stark... So'n Mist ...

von Reticent (Gast)


Lesenswert?

Ohaa, drehe ich langsam durch? :)
Fange an schon bei der chaostheorie reinzuschauen 
http://www.chaostheorie.de/read.php?1,1890

von Fabio S. (codehamster)


Lesenswert?

so wie ich das sehe ist die SLE4428 sektionsweise beschreibbar.

wenn du die erste sektion nimmst:

30303030303335323536315F

Das Checksummen Byte weg lässt:

30303030303335323536315

CRC8 Bildest

und dieses Resultat XOR mit 146 rechnest bekommst du

F somit das Checksummen Byte!

versuch das gleich noch mit der nächsten Sektion.

Funktioniert anscheinend nicht so!

Aber überprüf doch mal ob pro (Bereich) eine CS gebildet wird.
Wenn ich das recht in Erinnerung habe das die SLE4428  in Bereiche 
aufgeteilt ist.

Zudem hat die glaube ich noch einen Schreib/lese Schutz...

von student (Gast)


Lesenswert?

Mit was liest du denn die Karte aus?
Sicher das die gelesenen Daten stimmen? (Lese Schutz der Karte) wenn Pin 
nicht korrekt eingegeben wurde kommt nichts sinnvolles zurück.

Zudem, gewisse Kontaktchipkarten Drehen die Bitreihenfolge.
Hast du das Datenblatt zur "alten" Chipkarte. Und bist du dir sicher 
dass die gelesenen Daten stimmen?

von student (Gast)


Lesenswert?

ev hilft dir das noch weiter

http://www.zorc.breitbandkatze.de/crc.html

von Reticent (Gast)


Lesenswert?

@Fabio S.
die 5 am Ende gehört aber schon dem CRC. Somit ist der CRC = 5F und 
nicht nur 5 seien soll.
Das mit dem XOR 146 habe ich auch probiert. Es klappt nicht bei allen 
Daten.

@student
Ic hlese die Karten mit SmartCardEditor V1.03. Leseschutz...hm.. Wird 
man überhaupt die Karte lesen können wenn der PIN nicht stimmt? Kommt da 
nicht gleich eine Fehlermeldung?
Von der alten Karte habe ich nur die Info das es ein CRC8/146 seien 
soll. Mehr nicht.
An die Bitreihenfolge habe ich auch gedacht. Daher in verschiedensten 
Variazionen probiert. von rechts nach links und umgekehrt.
Ich gehe davon aus, dass die gelesene Daten richtig sind. Aber wo du 
über den PIN sprichst und ich gerade sehe, dass es auf 0000 steht.... 
Ich prüfe das nochmal.
Die Internetseite mit dem Calculator kenne ich auch. Das war die erste 
Wahl bei mir. Aber dort bekomme ich auch nicht das was ich brauche :( 
Vlt habe ich nur krumme Arme...

von Michael G. (linuxgeek) Benutzerseite


Lesenswert?

Reticent wrote:
> Huuh, Hallo erstmal alle zusammen.
>
> Ich habe eine Aufgabe bekommen, bestimmte Nummern auf einige
> Kontaktchipkarten (SLE4428) zu kodieren. Nur dummerweise hat der Kunde
> nur sehr wenig Dokumentation gebracht. Darin steht, dass es eine
> CRC8/146 über eine Seriennummer errechnet werden muss und auf die Karte
> kodiert. Was dieses 146 nun bedeutet weiss niemand von uns

Ich rate mal dass es das Generatorpolynom ist.

von Reticent (Gast)


Lesenswert?

@student
@Fabio S.
es ist kein Leseschutz vorhanden. Von dem her sind alle gelesenen Daten 
richtig.

@Michael G.
ne ist es nicht. (Das wurde aber auch schon vorgeschlagen.)

von Hans (Gast)


Lesenswert?

>> Kontaktchipkarten (SLE4428) zu kodieren. Nur dummerweise hat der Kunde

Im Datenblatt zum SLE4428 steht nichts von einem CRC8!?

-Hans

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.