Hallo liebe Leute!
Da ich zur Zeit an einem Problem hänge, denke ich, in diesem Forum
richtig aufgehoben zu sein.
Und zwar geht es um folgendes:
Eine Blackbox(x) schickt 2 Bytes an eine andere Blackbox(y).
09 78
Nun hat Blackbox(y) einen bestimmten Algorithmus verpflanzt, der die 2
Bytes von Blackbox(x) verwurschtelt.
Blackbox(y) schickt nach dem "verwurschteln" 2 Bytes an Blackbox(x)
zurück:
93 77.
Wie komme ich an diesen Algorithmus in Blackbox(y) ??
Ich habe insgesamt 10 Muster mit jeweils Anfrage und Antwort.
Helfen die mir weiter beim Finden des Algorithmuses?
ich weiß leider nicht mal einen Ansatz. Würde jetzt wüst hin- und
hershiften, logisch verknüpfen, usw.
Wie würdet ihr sowas machen?
Danke!
entweder sieht man das muster oder man hat kaum eine chance. Weist du
überhaupt das die Boxen sich Determinisich verhalten? Kommt also immer
wenn du 09 78 reingibst 93 77 raus.
Es kann also auch gut sein das dort einfach ein Tabelle hinterlegt ist,
dann gibt es keinen Algorithmus.
Erfahrungsgemäß sind es Algorithmen, die sich dahinter verbergen. Aber
ausschließen kann man es natürlich nicht.
> Kommt also immerwenn du 09 78 reingibst 93 77 raus?
ja tut es. Es kommt bei gleicher Anfrage immer die gleiche Antwort.
Danke!
Es gibt kryptografische Tools die dir evtl. weiterhelfen können.
Allgemein würd ich die ganzen werte mal in allen Varianten darstellen.
Byte, Hex, Bin... also die einzelnen Bits. Anhand der Bitdarstellung
kann man evtl. schnell ein Muster herausfinden. (xor, schieben, etc)
Aber wie der Vorgänger schon geschrieben hat... hast ne Tabelle oder
eine erweitere (evlt. abhängige) Logik drin hast verloren.
Markus Richel schrieb:> des Algorithmuses
OT und zur Allgemeinbildung:
Der Genitiv von dem Algorithmus ist der selbe wie der des Algorithmus...
;-)
> Eine Blackbox(x) schickt 2 Bytes an eine andere Blackbox(y).> 09 78
Sind das ASCII-Zeichen oder Hex-Werte?
> Ich habe insgesamt 10 Muster mit jeweils Anfrage und Antwort.
Poste die doch mal, evtl. hat einer einen Lichtblick...
Du kennst die Geschichte mit dem blinden Huhn?
Du hast 2 Byte eingabe, und 2 Byte Ausgabe,
Du hast 10 Muster.
Du hast keinerlei Information über die Aufgabe/Funktion der Blackbox.
Es ist nicht möglich einen exakten Algorithmus anzugeben, weil es nicht
möglich ist mit nur 10 Mustern das Problem ausreichend zu
generalisieren.
Das einzige was du weißst sind deine 10 Muster, die kannst du als
Tabelle hinterlegen, für alle anderen Eingabekombinationen kann man
keine Aussaage machen die auch nur näherungsweise akzeptabel ist!
Du müsstest schon weitere Zahlenpaare (also Ein- und Ausgänge) angeben.
Sonst kann man kein vernünftiges Muster erkennen.
Mit den Zahlen, die du gegeben hast, könnte ich z.B. sagen: Blackbox y
addiert auf das erste Byte immer 84 und dekrementiert das zweite Byte.
Da die Veränderungen in der Antwort selbst bei Einzelbitänderungen in
der Eingabe schon recht heftig sind, denke ich nicht dass es irgendetwas
einfaches ala 'XOR über alle Bytes' oder 'Summe' oder sowas in der
Richtung ist.
Viel Hoffnung sehe ich da nicht, das Verfahren zu erraten. Selbst wenn
man wüsste, dass es sich um eine CRC oder Abart davon handelt, sind die
Karten schlecht.
Das erste Beispiel von mir war KEIN anzunehmender Wert, er war
ausschließlich zur Veranschaulichung gedacht. Hat also NICHTS mit dem
Algorithmus selbst zutun.
Wenn du die Eingangswerte schnell reinschieben, und die Ausgangswerte
schnel mitschreiben kannst, dann kannst du doch alle 2^16 Möglichkeiten
durchgehen.
Vielleicht reicht dir dann schon eine Tabelle zum nachbauen.
Markus Richel schrieb:> 00000000 00000001 10011111 00101001> 00000000 00000010 10001110 00010000> 00000000 00000011 00011000 10010010> 00000000 00000100 10001111 00110010> 00000000 00000101 11010010 11001000> 00000000 00000110 11000011 11110001> 00000000 00000111 01010101 01110011> 00000000 00001000 10011111 00100000> 00000000 00001001 10110101 11011010> 00000000 00001010 10100100 11100011> 00000000 00001011 00110010 01100001dito schrieb:> Mit den Zahlen, die du gegeben hast, könnte ich z.B. sagen: Blackbox y> addiert auf das erste Byte immer 84 und dekrementiert das zweite Byte.
Wie bitte? Erklär mir das mal.
@Markus:
Du stellst Dir das etwas einfach vor. Nimm einen
Verschlüsselungsalgorithmus. Der hat die Aufgabe Daten so zu
verschlüsseln, daß man selbst dann, wenn man den Algorithmus kennt und
Millionen von Ein-Ausgabepaaren hat, den Schlüssel nicht zurückberechnen
können soll.
Insofern würde sich eine Lösung für Dein Problem nur dann finden, wenn
ein sehr simpler Algorithmus in Deinem System steckt.
Und wenn Du nur 10 Wertepaare hast, aber 256 * 256 Mögliche Eingabedaten
kannst Du nie wissen ob Deine Lösung korrekt ist, dazu müsstest Du schon
alle 65Tausend und verquetschte mögliche Paare kennen und mit Deiner
Lösung verifizieren.
U.R. Schmitt schrieb:> dito schrieb:>> Mit den Zahlen, die du gegeben hast, könnte ich z.B. sagen: Blackbox y>> addiert auf das erste Byte immer 84 und dekrementiert das zweite Byte.>> Wie bitte? Erklär mir das mal.
Ganz einfach: Vergleich mal die Zeiten. Als ich meinen Beitrag verfasst
habe, kannte ich die Muster noch nicht.
Wieso hab ich eigentlich das gefühl das du was ilegales machst? ;)
Das hier ist interessant....
00000000 00000001 10011111 00101001
00000000 00000010 10001110 00010000
00000000 00000100 10001111 00110010
00000000 00001000 10011111 00100000
Irgendwie kann ich das Muster schon fühlen.... %-)
Nein ich mache definitiv nichts illegales, ich möchte einfach nur
wissen, wie man Schritt-für-Schritt einen Algorithmus baut, wenn man
EINGANG und AUSGANG weiß.
Markus Richel schrieb:> Nein ich mache definitiv nichts illegales, ich möchte einfach nur> wissen, wie man Schritt-für-Schritt einen Algorithmus baut, wenn man> EINGANG und AUSGANG weiß.
Wenn du nichts anderes darüber weißt
Alle Eingangswerte allen Ausgansgwerten gegenüber stellen und eine
Lookup Tabelle.
Alles andere mag in bestimmten Einzelfällen gehen, es gibt aber kein
Schema dafür und das kann es auch nicht geben.
Markus Richel schrieb:> Nein ich mache definitiv nichts illegales, ich möchte einfach nur>> wissen, wie man Schritt-für-Schritt einen Algorithmus baut, wenn man>> EINGANG und AUSGANG weiß.
Ja, aber Du weißt das ja nicht. Du nennst uns 10 (OK, 11) von 2^16
Werten. Das ist nicht 'wissen'.
Und selbst wenn Du alle Daten kennst, ist die pragmatischste Lösung
tatsächlich eine Lookup-Tabelle.
Ansonsten gilt es genau die Fragen zu beantworten, die bereits gestellt
wurden:
- Kommt auf die selbe Frage immer dieselbe Antwort (d.h. gibt es innere
Zustände)`?
- Sind die Antworten linear? D.h. wenn a die Antwort A liefert und b die
Antwort B, liefert dann a+b die Antwort A+B?
- Sind alle Antworten verschieden? (Alternativ: Gibt es mindestens zwei
Fragen, die dieselbe Antwort liefern?)
Beantworte mal diese Fragen (für Dich, nicht für uns), dann wirst Du
sicherlich ein paar Schritte weiter sein.
Grüße,
Stefan
Eine erste Frage waere : Hat die Blackbox einen Speicher, ein
Gedaechtnis ? Hat es offensichtlich nicht.
Dann wuerde ich alle moeglichen Werte reinschieben und die Ausgaben
darauf aufzeichnen, dann nach einem Muster suchen. Sind ja nur 65k
wortpaare. das geht schneller als hier zu fragen.
A...aha Soooo. schrieb:> ine erste Frage waere : Hat die Blackbox einen Speicher, ein> Gedaechtnis ? Hat es offensichtlich nicht.> Dann wuerde ich alle moeglichen Werte reinschieben und die Ausgaben> darauf aufzeichnen, dann nach einem Muster suchen. Sind ja nur 65k> wortpaare. das geht schneller als hier zu fragen.
Wobei zu klären wäre, ob das System wirklich nur 2Byte-Weise
verarbeitet.
Wenn Du einen guten alten DES mit einem festen Schlüssel nimmst, kommt
bei Eingabe von 2 mal 2 Bytes immer das Gleiche raus (weil er intern die
2 Byte immer auf 56 Bit auffüllt) aber wenn man statt dessen 4 Bytes auf
einmal reingibt, kommt was völig anderes raus.
2 Möglichkeiten:
- Weitere Muster raussuchen/abfragen
oder schreib dir ein C-Programm das dir alle möglichen Algorithmen (bis
zu einem gewissen Grad) durchmacht. Wenn ein Match da ist dann die
anderen überprüfen. Musst halt viel Zeit haben und einen flotten
Computer.
Da muss man nichts irgendwie probieren. Das machen Hardwaredesigntools
z.B. für FPGAs tagtäglich...
Wenn es nur diese Zuordnung gibt, dann muß hier gar nichts geraten
werden: mit einer Wahrheitstabelle und einem Minterm-Verfahren kann ich
eine logische Verknüpfung basteln, die für diese Eingangswerte genau die
passenden Ausgangswerte bringt (zur Not von Hand mit einem KV-Diagramm).
Blöd ist nur, dass damit alle (unbekannten) Zustände beliebig sind...
:-/
Hmmm ich weiß ja nicht ob das jetzt völlig fehl am Platz ist aber die
Anfrage ist doch einach nur binär durchnumeriert O.o sieht man es so
kommen hinten einfach nur weitere Zahlenwerte raus ^^
00000000 00000001 10011111 00101001
0/1 -> 159/41
00000000 00000010 10001110 00010000
0/2 -> 142/16
00000000 00000011 00011000 10010010
0/3 -> 24/146
Das Spielchen hab ich auch mal gespielt, dabei ging es um einen alten
FastEYE LPt Dongle, der hat schlussendlich aber verloren.
Falls du ein ähnliches Spiel spielst, musst du viel mehr Werte
mitloggen, denn wenn das Teil schlauer ist als der von mir und solche
Sachen verwendet:
http://en.wikipedia.org/wiki/Linear_feedback_shift_register
dann musst brauchst du viele bis seeeehr viele Werte um das Ergebnis zu
berechnen.
Ich weiß zwar nicht was Martin riecht... verrate es doch!
Aber beim beliebten LFSR reichen unter Umständen nur wenige Zustände in
eines Strings aus, die ganze Kette zu generieren. Das gilt insbesondere
für die der Klasse maximum-length.
Eine weitere interessante Eigenschaft ergibt sich bei differentieller
Codierung, in dem die Kette sich dann ohne und mit dem Differentialcoder
nur um eine Verschiebung um die (Registerbreite-1) unterscheidet!
Nein, das ist jetzt nicht die direkte Lösung!
Hey, meine Alarmanlage kommuniziert genau so zwischen Master und Slaves!
;-)
Ist das jetzt ein tatsächliches Gerät, oder ein reines
Gedankenexperiment?
Markus Richel schrieb:> Wisst ihr irgendein Programm, was das mit BruteForce o.ä. errät?
Hast Du gelesen und verstanden was weiter oben geschrieben wurde?
Wenn Du uns 10 Wertepaare gibst und selbst WENN das System kein internes
Gedächtnis hat und WENN keine 2 Eingangswerte den gleichen Ausgangswert
haben, dann gibt es immer noch (2^16 - 10)! ((Zwei hoch 16 - 10)
Fakultät) mögliche Lösungen. Versuch das mal mit Deinem Taschenrechner
auszurechnen und erkläre uns warum da "Err" oder "Ovf" herauskommt.
Wenn diese WENNS nicht gelten gibts noch mehr mögliche Lösungen.
Man kann allenfalls aus wenigen Werten vermuten, daß es ein einfaches
System gibt, mit dem man die Ausgangswerte aus den Eingangswerten
berechnen/bestimmen kann. Ob diese Vermutung tatsächlich korrekt ist
weisst Du nur, wenn Du alle möglichen Eingangskombinationen geprüft
hast.