Noch mehr Theorie


 

Bei Syster/Nagravision werden die Positionen der Zeilen permutiert. Der Decoder hat RAM für 32 Zeilen und da schreibt er auch erstmal die letzten 32 Zeilen eines verschlüsselten Halbbildes rein bevor irgendwas anderes passiert. Das sind nämlich die ersten 32 Zeilen des decodierten Halbbildes, was man auch sehr schön erkennt, wenn man sich das verschlüsselte Bild mal anschaut. Danach schiebt er Zeile für Zeile an den Fernseher und holt sich für jede Zeile die er rausschiebt sofort eine neue. Die Reihenfolge bestimmt, wie bei videocrypt, ein pseudo random number generator, der durch einen verschlüsselten seed gestartet wird. Dieser prng ist ein sehr einfaches Modell. Er besteht aus einer Liste von 256 geschickt angeordneten Zahlen zwischen 0 und 31. Der seed besteht aus zwei Byte, das erste gibt an, an welcher Stelle in dieser Liste begonnen wird, das zweite, mit welcher ungeraden Schrittweite round robin durch die Liste gegangen wird (deshalb auch 256 x 128 = 32768 mögliche Permutationen). Heraus kommt jeweils eine Zahl zwischen 0 und 31. Dies ist der Index der Zeile im RAM des Decoders, die als nächstes an den Ferseher geschoben wird.
Der Prozessor und die gesammte restliche Hardware wird duch den Zeilentakt des Videosignals getaktet, damit eine hundertprozentige Synkronität gewährleistet werden kann.

Die Decodierungssoftware für den PC funktioniert nun so:
Die Software braucht als Grundlage die oben beschriebene Liste. Es handelt sich einfach nur um eine Datei, die 256 Zeilen enthält, jede Zeile mit einer Zahl zwischen 0 und 31. Daraus werden nun alle! 32768 Möglichen Permutationen errechnet.
Die Arbeit des Algorithmus besteht nun darin, so schnell wie möglich die richtigen zu finden. Der Algorithmus beruht auf folgendem Prinzip: "Wenn zwei im unverschlüsselten Bild aufeinanderfolgende Bildzeilen eines Fields (Halbbildes), die im verschlüsselten Bild von einander entfernt liegen, nach einer Transformation mit einer bestimmten Permutation wieder korrekterweise untereinander liegen, dann ist dieser Schlüssel mit großer Wahrscheinlichkeit der richtige." Selbstverständlich sind zwei Zeilen nicht ausreichend um sicher zu sein, das die angenommene Permutation auch die richtige ist. Im Folgenden werde ich diese Zeilenpaare "Kandidaten" nennen.

Aber wie kann man herausfinden, ob zwei Zeilen zusammen gehören ? Indem man beispielsweise ihre Korrelationsrate berechnet: Wenn die Summe der Beträge der Luminanzdifferenz jedes Pixels der beiden Zeilen "klein" ist, dann liegen sie wahrscheinlich nahe bei einander. Der Erfolg dieser Methode hängt davon ab, daß weit voneinander entfernte Zeilen des Bildes relativ unterschiedlich, nahe beieinanderligende aber sehr ähnlich sind. Das ist bei Video im allgemeinen der Fall, außer wenn das Bild sehr einförmig ist (z.B. ein einfarbiger Hintergrund) oder wenn vertikale Symmetrien vorhanden sind (ein einfarbiges, geometrisches Bild mit senkrechtem Rand). Kurz, je inhaltsreicher das Bild ist, um so besser geht es. Um die Gültigkeit einer Permutation festzustellen, muß man also
1.) eine größere Anzahl Kandidaten wählen. Je kleiner die Anzahl, um so schneller aber auch um so unzuverlässiger ist der Agorithmus.
2.) denjenigen variablen Schlüssel bestimmen, der das beste Korrelationsergebnis aller seiner Kandidaten erhält (es genügt, die individuellen Korrelationsraten zu summieren).

Die Anzahl der Pixel, die zur Berechnung der Korrelationsrate verwendet werden, kann geringer sein als die Anzahl der Pixel einer Zeile. Dabei ist es sinnvoll, aus verschiedenen Bereichen der Zeile einige nebeneinanderliegende Pixel zu nehmen, um Kontraste in der Senkrechten günstig auszuwerten. Je mehr Pixel man nimmt, um so zuverlässiger, aber auch um so langsamer arbeitet der Algorithmus. Alle diese Parameter haben eine große Wirkung auf die Geschwindigkeit des Algorithmus. Um eine Vorstellung davon zu geben: Wir schauen uns 12 Zeilen an. Daraus ergeben sich 800 möglichen Kandidaten (das sind alle möglichen Reihenfolgen dieser 12 Zeilen).In jeder Zeile schauen wir uns jeweils 4 von 16 Pixeln an. D.h. es müssen für jedes Bild  800 Korrelationsraten berechnet werden (800*2*(768*4/16))=307200 Pixel bearbeiten  und dann 32768*12=393216 Möglichkeiten bewertet werden. Das mit 25 multipliziert ergibt den Aufwand für 1 Sekunde real-time Video. Hinzu kommt (für 16 bit Farbe): 440k*25 = 11M Transferts vom PCI-Bus zum Speicher durch den BT848 und 11 M Transferts vom Speicher zur Grafikkarte. Das macht 22M/s. Ein AGP-Bus dürfte die Last auf dem PCI-Bus halbieren. Die Last auf dem PCI-Bus hat eine nicht vernachlässigbare Wirkung auf die Güte des Algorithmus, was teilweise den Abfall der Bildrate zwischen den 8, 16 und 32-bit Versionen erklärt.

         


Back To The Chaos Computer Club Home Page