Hi,
Bekanntlich stecken in den ersten 14 Bit des DCF Signals Wetterinformationen.
Diese sind verschlüsselt und waren bisher mit einem IC plain zu lesen. (Das man so nicht kaufen kann)
Nun habe ich dieses gefunden, und mein Interesse ist geweckt:
Es ist im Prinzip alles Verstanden, nur was meint der Autor mit Cipher flip oder Key flip ?
Was für eine Operation steckt dahinter, ein "not" ist es nicht.
PS: Falls die Frage gegen die Forenregeln verstößt bitte löschen, und mir eins auf die Finger klopfen
ist im Gegensatz zum Standard-DES der Schlüssel bekannt und die S- und P-Boxen geheim. Wenn die S-Boxen nicht bekannt sind, wie kann es dann einen öffentlichen Algorithmus dazu geben?
Es kommt drauf an ob man die S-Boxen als Teil des Algorithmus ansieht oder nicht. Davon abgesehen finden die üblichen Suchmaschinen im Internet Meteotimedecoder incl. der S-Boxen. Man muß nicht wirklich lange suchen. Allerdings ist mir der rechtliche Status dieser Implementationen auch nicht klar. Einen Link spare ich mir deshalb.
Ok, dann stimmt die Information in dem Dokument einfach nicht
Die S-Boxen sind eigentlich der Kern von DES - und auch vielen anderen Feistel-Chiffren. Die Feistel-Struktur für sich alleine bringt keine Sicherheit ohne dass man die Bits in der F-Funktion verändert. Und die Eigenschaften der F-Funktion sind extrem wichtig für die Sicherheit der gesamten Chiffre (einer der größten Kritikpunkte an DES war, dass nicht alle Ideen hinter den S-Boxen bekannt waren). Deshalb würde ich das schon zum Algorithmus zählen.
Aber da stand halt auch explizit drin dass die S-Boxen geheim sind und nicht nur der Algorithmus an sich.
Habe mir das ganze wohl etwas zu einfach vorgestellt...
In diesem speziellen Fall wäre es so:
Der Schlüssel besteht aus den Zeitstempel , nur welcher.
Es müssen 3x14 Bit verschlüsselte "Wetterbits" aufgezeichnet werden, welcher Zeitstempel muss dem Crypter übergeben werden.
S-Boxen sind bekannt, es werden hier aber nur 5 benutzt. (Weicht also vom Standart ab)
Die P-Boxen sind hier noch gar nicht erwähnt worden ????
Aber da stand halt auch explizit drin dass die S-Boxen geheim sind und nicht nur der Algorithmus an sich.
Denke der DES Algo ist ein Standart ??, auch wenn hier am Algo etwas geändert werden müsste.
Nein. Ganz so einfach ist das nicht. Das ist kein DES! Nur eine Abwandlung davon. Die Schlüssel-Länge ist z.B. kürzer. Statt 56 Bit, wird die 40 Bit Zeit auf 30 Bit komprimiert (deshalb braucht man weniger S-Boxen). Die Eingangs- und Ausgangs-Permutationen entfallen. Und die Schlüssel-Erzeugung ist generell etwas anders (du musst auch noch aus dem einen Zeitstempel 16(?) Runden-Schlüssel generieren).
Wenn du verstehst wie DES funktioniert (was recht einfach ist), verstehst du auch den Algorithmus, aber es nicht genau das gleiche. Man braucht aber neben den S-Boxen noch die Permutation danach, die Expansions-Funktion des R-Blocks und die Kompressions-Funktion des Schlüssels (alle 3 gibt es auch in DES) . Jedenfalls laut dem Dokument oben. Aber wenn man das alles kennt, ist es sicher machbar.
Die Operation die du nicht verstanden hast ist glaube ich Teil der Runden-Schlüssel-Erzeugung:
*Zu Begin jeder Runde werden die beiden 20-Bit Zeiten jeweils nach rechts geschoben. Dabei wird das unten heraus fallende Bit oben wieder eingeschoben
*In den Runden 16, 8, 7 und 3 zwei mal, in den restlichen Runden ein mal (insgesamt 20 mal).
Aber ich dachte auf dem Link von dir gibt es fertigen Code zum Download...
Klar Udo für dich schon - Oder anders gesagt du meinst es sollen die grauen Zellen der anderen erstmal arbeiten.
Ich habe nun versucht das ganze zu verstehen, ich meine es nun kapiert zu haben.
Das in Code zu packen (vor allem für mich in C ist wieder eine andere Baustelle)
In dieser function kann man aber schön sehen was theoretisch hier beschieben wurde: unsafe private byte[] Decrypt(byte* cipher, byte* key)
Wobei ich das hier mit den S-Boxen mByteArrLookupTable1C_x nicht wirklich kapiere.
Es soll quasi eine Tabelle sein die 56 Bit in 54 Bit abbildet, beziehe meine Erkenntnisse von dort S-Box – Wikipedia
Die Strategie in dem Programm verstehe ich noch nicht.
Aber es ist alles da, muss nur noch nach C++ umgesetzt werden.
Du könntest doch den C++ DES Code oben als Ausgangs-Basis verwenden wenn du willst. Ich habe nicht gemeint, dass es damit unmöglich ist, sondern dass es komplizierter ist als nur die S-Boxen auszutauschen.
Diese Funktion im C# Code ist aber genau die wichtigste Stelle die dort modifiziert werden muss. Und natürlich die Hilfsfunktionen die darin aufgerufen werden. z.B. CompressKey um den Zeit-Schlüssel auf 30 Bit zu komprimieren. ExpandR um den R-Block zu expandieren. Oder ShiftTimeRight um den jeweiligen Runden-Schlüssel zu erzeugen.
Die Lookup Tables sind darin aber nicht so schön gelöst, da der Code nicht besonders leserlich ist was die Variablen-Namen angeht (da ist der DES Code viel schöner). Grob verstehe ich was gemacht wird (durch den Kryto-Algorithmus), aber im Detail blicke ich da auf die Schnelle auch nicht durch.
Serenifly:
im Detail blicke ich da auf die Schnelle auch nicht durch.
Was soll ich als C++ Anfänger und keine Ahnung von C# dann sagen
Man wächst mit der Aufgabe, Schritt für Schritt.
Fertigen Code finde ich nicht, und will ich auch nicht mehr - über diese Phase bin ich bei dem Projekt hinweg.
Aber ich fürchte ohne Hilfestellung geht es nicht.
Es fängt schon damit an, das ich die S-Boxen vom C# Code nicht verständlich nach C importieren kann. obwohl das wohl der einfachere Teil ist.
Meinem Verständnis nach stehen in jedem Byte des Array jeweils in oberen oder unterem nibble die 4Bit zur Ausgabe.
Der Algo brechnet aus jeweils 6 Bit des Eingangswertes den richtigen Index auf das Array und entscheidet dann noch welchles nibble (hi oder lo) das Richtige ist.
Das wären pro S-Box 32 Bytes, wir haben 5 davon also 160 Bytes. Im C# Code sind es aber 192 Bytes, also scheint meine Theorie schon mal nicht zu stimmen
Im C++ Code mit den 8 S-Boxen scheint meine Überlegung zu stimmen, und der Code der den Index berechnet arbeitet meiner Meinung so.
Wenn ich dort die schleife statt 8 mal 5 mal durchlaufe würde dieser kleine Teil schon mal passen
Sehr spannend ! Geht's weiter ?
Ein ausstehendes Projekt bei mir wäre auch noch ne Luxus-Wetterstation, die man mit diesen Werten ja zusätzlich füttern könnte ....
In dem Code stecken aber ein paar Dinge drin, die ich nicht logisch auf C++ umsetzen kann.
Siehe mein letztes Posting.
Es braucht also jemand der C# und C++ kann, der Unterschied ist wohl nicht so groß aber er ist halt da.
Ich habe es versucht, sehe aber keine große Chance das es läuft.
Bin ja schon ewig im VDR Portal (Habe auch seit ca. 15 Jahren nichts anderes), und dort gibt es einen Arduino Thread.
Es ging hier Anfangs um die LED Stripes mit den WS Chips, aber inzwischen auch um andere Dinge.
Dort habe ich mal gefragt wegen dem C# Code, und diese Antwort bekommen:
Zwei Freunde von mir sind gerade am selben Thema bei und wollen nun den C# Code in Arduino/plain avr überführen. Bei Erfolg melde ich mich
Ich wollte zwar nichts fertiges, aber wenn ich es nicht drauf hab und keiner Hilfestellung gibt muss man was fertiges nehmen.
Entwickler sind halt Eigenbrödler, und je besser die sind desto schlimmer wird dies
Bist du mal mit dem Debugger in die Funktionen eingestiegen die die Lookup Tables verwenden? Damit kann man wahrscheinlich rausfinden was da genau gemacht wird. Das ist der Punkt den ich nicht kapiere
Ein Unterschied ist halt, dass der C# Code einiges an objekt-orientiertes Zeug verwendet, die es auf dem Arduino nicht gibt. Aber DataContainer ist letztendlich auch nur ein struct, obwohl es erst mal wie eine Klasse aussieht (durch das "new"). Und das mit "FieldOffset" ist nichts anderes als ein Union. Das kann man in C/C++ einfacher machen. Das String-Handling ist in C# natürlich viel bequemer, aber da kann man ja direkt mit Zahlen arbeiten.
Ich habe mal in den C# Code reingeschaut. Das "Objekt Orientierte Zeugs" sind Annotationen mit denen ein explizites Speicherlayout erzwungen wird. Also gerade nicht objekt orientiert. Sieht sehr stark danach aus als wäre da C Code nach C# portiert worden. Das ist leicht nach C zu portieren. --> Übung mach den Meister
ich weiß, ich grabe hier einen echt alten Thread aus, aber da hier ja nie ein nachvollziehbares Ende dokumentiert wurde:
Ist es inzwischen gelungen, die Meteodaten zu entschlüsseln? Gibt es einen Microcontroller-brauchbaren C-Code, der das erledigt?
Könnte mir sowas vielleicht jemand zukommen lassen?