This page has been robot translated, sorry for typos if any. Original content here.

Hacken von Metro (Reise, Karten) + ALGORITHME VON CRYPTOGRAPHISCHEN TRANSFORMATIONEN GEMÄSS GOST 28147-89

Auf der Seite:


Hacken der Metro (Reise, Karten)

Kennen Sie den Wunsch, alle Rätsel zu lösen und alle Schutzmaßnahmen der Moskauer Metro zu enthüllen? Um zum Beispiel selbst ein "ewiges Ticket" zu machen? Aber die Metro-Spezialisten finden ständig mehr und mehr anspruchsvolle Möglichkeiten, sich selbst zu schützen. Metall-Token wurden durch Plastik ersetzt, die wiederum durch Magnetkarten und Magnetkarten wurden durch kontaktlose Karten ersetzt. Viele Forscher ließen ihre Hände fallen - es scheint, dass der Metropolitan eine uneinnehmbare Festung geworden ist. Aber jeder Schutz kann umgangen werden. Und oft ist es viel einfacher, es zu öffnen, als es zu bauen ...

Wie alles begann

Das Interesse an U-Bahn-Systemen erschien für eine lange Zeit, kann ich sagen, von einer Schulbank, als es noch Tickets mit einem Magnetstreifen im Kurs gab. Zur gleichen Zeit (aus einem Dutzend Jahren) wurde eine kontaktlose Sozialkarte für Studenten in Umlauf gebracht. Ich interessierte mich dafür, wie es ist und wie es funktioniert. Aber damals hatte ich nicht genug Fähigkeiten, und es gab nicht viele Informationen, vor allem auf diesen Technologien. Ich musste die Idee der Forschung in einem langen Kasten verschieben, aber ich habe mir versprochen, dass ich auf jeden Fall zurückkehren würde ...

Vor etwa drei Jahren habe ich wieder Interesse an der U-Bahn-Thema. Ich habe aktiv magnetische Tickets (es gab viele Informationen über das Thema im Internet) und sogar montiert eine kleine Maschine für die Herstellung von Duplikaten von zwei Köpfen aus Bandspulen-Recorder und eine kleine Menge an Rassypuhi. Ich habe nicht vergessen, meine Social Card (bereits Studentenausweis). Aber nach dem Studium der Dokumentation wurde mir klar, dass das System fast uneinnehmbar ist - der MF1S50 Mifare Classic 1K Chip, auf dessen Basis soziale Karten gemacht werden, ist durch zwei 48-Bit-Schlüssel geschützt. Auf der Hardware-Ebene kann es nicht so leicht gehackt werden, und Schlüssel können bis zum Ende des Sonnensystems aussortiert werden. Ja, und die Karteninhaber, die den Klassiker unterstützen, waren damals etwas Geld wert (über Ebay, das habe ich irgendwie nicht gedacht). Das Interesse an Magnetkarten schnell abgekühlt, und die Social Card musste wieder verschoben werden, bis bessere Zeiten.

Treffen Sie: "Ultraleicht"

Tickets "Ultralight" erschienen in unserer Metro vor kurzem, aber sofort weckte großes Interesse an der Öffentlichkeit. Sie fingen an zu huhn, reißen, fügen ein Eisen ein und wenden andere Methoden der thermischen rektalen Kryptoanalyse an. Ich muss zugeben, der Durst nach Wissen hat mich und Raskurochit-Paar gemacht. Als Ergebnis ihrer Studie und Recherchen im Internet wurde festgestellt - es ist nichts weiter als Mifare Ultralight, eine "leichte" kompatible Version von Mifare Classic. Ein kurzer Überblick über die Dokumentation zu den Chips dieser Norm machte deutlich, dass es keine eingebauten Sicherheitssysteme für diese Karten gibt. Um alles andere habe ich einen Artikel angegriffen, der das erfolgreiche Brechen eines ähnlichen Transportsystems durch niederländische Studenten angibt. Alles in allem hat es mich auf neue Forschung geschoben.

Lass uns gehen!

Um zu beginnen, natürlich war es nur notwendig, einen drahtlosen Kartenleser zu bekommen, der "Ultralight" irgendwo unterstützt. Es gab zwei Möglichkeiten: entweder um sich zu versammeln (was viel Zeit in Anspruch nehmen würde) oder ein fertiges Gerät kaufen. Bei dem Gedanken an die zweite Option, achtsam der Preise vor drei Jahren, bekam ich Gänsehaut. Aber ich habe mich immer noch entschlossen, die aktuellen Preise zu betrachten. Und nicht umsonst! Ich war angenehm überrascht zu erfahren, dass man ein voll funktionsfähiges Gerät (OmniKey CardMan 5321) kaufen kann, das ein paar verdrahtete und drahtlose Karten zu einem attraktiven Preis unterstützt - 4000 Rubel.

Natürlich nicht ein wenig, aber auf der anderen Seite ist es nicht 10000; Darüber hinaus hat der Kauf eines fertigen Lesers es möglich gemacht, sich sofort auf die Erforschung von Tickets und nicht auf das Design und das Debugging von Eisen zu konzentrieren, was auf unbestimmte Zeit verzögert werden könnte. Zusammen mit dem Leser aus der gleichen Firma (ISBC) wurde ein sehr bequemes Original-SDK der lokalen Produktion gekauft. Er ließ es nicht mehr, Energie und Zeit zu verschwenden, um auf dem Niveau zu schreiben und die Arbeit der Software mit dem Leser zu debuggen und sich direkt auf die Tickets zu konzentrieren. So wurde für ein paar Tage der ungestörten Kodierung ein kleines Programm geboren, mit dessen Hilfe es möglich war, die gesamte innere Struktur von "Ultralight" in einer bequemen Form zu beobachten und zu kontrollieren. Dann fing ich an, Tickets zu studieren.

Gehörlose Mauer

In dem Prozess des Studiums durch meine Leser bestanden viele Tickets. Manche, ich rollte meine Ärmel hoch, stieg aus dem Müll, kaufte etwas - beobachtete, was sie niedergeschrieben hatten, dann ging es weiter und sah wieder zu. Es waren Karten von fast allen Typen, mit Ausnahme der Reise "Ultralight" für 70 Fahrten. In ein paar Wochen habe ich eine große und sortierte Datenbank von Dumps von verschiedenen Tickets und in verschiedenen Staaten angesammelt. Es wurden Müllhalde aus dem gleichen Ticket nach jeder Reise, und mehrere Tickets mit Metro-Nummern in einer Reihe. In meiner Sammlung, sogar ein paar Müllhalden von zwei verschiedenen temporären Einzel-Sozialkarten (eine wurde für einen Zeitraum von 5 Tagen, die andere für 30) ausgestellt, über ein bestimmtes Zeitintervall übernommen. Es stellte sich heraus, dass es sich um sehr interessante Exemplare handelte und zugleich sehr selten war (ich bekam sie aus erster Hand mit einer sofortigen Rückkehr, nur für "lesen").

In der Tat ist dies fast die einzige Art von "Ultralights", die nicht nur in der Metro, sondern auch auf Landverkehr funktioniert. Darüber hinaus hat nur diese Art von Ticket keine Begrenzung auf die Anzahl der Fahrten. Anschließend haben sie mir sehr gut gedient ... All dieser Zoo habe ich für einen Zweck gesammelt - um die Struktur und das Format der Aufzeichnungsdaten auf dem Ticket klar zu definieren. Natürlich waren einige Felder sofort sichtbar, mit dem bloßen Auge, aber einige sind nicht. Zum Beispiel habe ich nicht sofort verstanden, wo die Metro-Ticket-Nummer aufgezeichnet wurde (die, die darauf gedruckt wird). Das Bewusstsein kam völlig zufällig. Die Tatsache ist, dass ich (wie auch ich denke, die meisten von uns), mit Blick auf die Hexe, wird verwendet, um Informationen für Bytes auszurichten und denken, zumindest Bytes. Es stellte sich heraus, dass dieser Ansatz falsch ist Wenn du den Ticket-Dump betrachtest, musst du in kleineren Einheiten denken - Tetraden und manchmal Bits. Ich erkannte, dass ich, als ich endlich die Fahrkartennummer sah, um 4 Bits in Bezug auf den Anfang des Bytes bewegt wurde und die restlichen 4 Bits von der anderen Seite der Nummer von anderen offiziellen Informationen besetzt waren. Nach einer Weile wurde das Format für die Aufzeichnung von Daten auf Tickets fast vollständig klar.

Es wurde klar, wo und wie alle Daten, Zähler, Identifikatoren gespeichert sind. Es gab nur ein paar Felder, deren Zweck unklar war, nur weil die Daten in ihnen von der Müllcontainer identisch waren. Aber auf diese all die Freude und endete - es wäre töricht zu vermuten, dass diese Karten ungeschützt verlassen können. In jedem Dump gab es 32 Bits von verschiedenen Informationen, die nicht mit dem Rest des Inhalts korrelieren. Ich nahm an, dass dies eine Art von Prüfsumme ist, ein "Hash" von Daten auf dem Ticket geschrieben. Alle Versuche, diese 32 Bits zu schätzen oder zu berechnen, erwiesen sich als Totalausfall (insbesondere wurde davon ausgegangen, dass dies eine Art CRC32 mit einem Nicht-Standard-Polynom und Startwert ist).

Wenn Sie versuchen, mindestens eineinhalb Bits von Informationen innerhalb des Tickets zu wechseln, blitzte das Kassen-Terminal in der U-Bahn "BAD TICKET" mit einer kräftigen Jacke und nagelte die letzten Nägel in den Sargdeckel. Natürlich gab es Versuche, das System auf andere Weise zu umgehen, zum Beispiel, das Versuchen, das Ticket auf eine saubere Eins-zu-Eins-Karte zu kopieren (hier, leider die Fabrik-Serie, die, wie sich herausstellte, auch an der Erzeugung des Hashs teilnahmen) oder die Sperrbits so einstellen um das Drehkreuz daran zu hindern, den Inhalt des Tickets zu verändern. Das Verifikationsterminal hat dieses "ewige" Ticket erkannt, aber es weigerte sich, das Drehkreuz zuzulassen ... Also ruhte ich an der Wand. In dieser großen, starken Betonmauer, über die viele eine Gewohnheit haben, von einem Start getötet zu werden. Ich habe keine Informationen über die Foren und Boards gefunden, ich habe beschlossen, dass dies ist, wo meine Studien beendet sind - es gibt keine weiteren Möglichkeiten, und legen Sie einen fetten Punkt. Wie sich herausstellte, umsonst ...

Seltsame Bekanntschaft

Der Septemberabend war nicht anders als die anderen. Es war fast Nacht, die Straße war kühl und feucht. Ich saß vor dem Monitorschirm und nippte an einem warmen, leicht süßen, grünen Tee, friedlich ein Brett für mein nächstes Handwerk. DipTarce, ein kleiner Bastor, ICQ ... Jemand rief Skype an - abgelenkt! Wieder ICQ, wieder DipTrace - im Allgemeinen ist alles wie gewohnt. Noch einmal tauchte das Fenster von ICQ in den Vordergrund - jemand, der mir bisher unbekannt war, schrieb "Hallo". Ich, in keiner Weise zögernd, antwortete das gleiche. Die folgende Botschaft war ein Wendepunkt in der ganzen Geschichte: "Du interessierst dich für die U-Bahn, ich habe dort Müll. Wenn interessiert, lasst uns uns treffen, ich sage es dir. " Zuerst war ich ein bisschen verwirrt und beunruhigt (vielleicht eine Scheidung oder ein Set-up, und vielleicht sogar "spezielle Dienste" wurde interessiert - Paranoia nimmt seinen Tribut), aber dann dachte ich: warum nicht?

Spezielle Dienstleistungen, die ich nicht interessieren würde, und der Boden für die Scheidung, und noch mehr, für die Einrichtung scheint es nein zu sein. Nach einem kurzen Gespräch haben wir uns bereit erklärt, uns am Nachmittag in der Mitte der Halle einer der Moskauer Metro-Stationen zu treffen. Der Fremde war ein großer junger Mann mit Brille, mit einer großen schwarzen Plastiktüte in den Händen. Wir begrüßten uns, dann reichte er mir ein Paket mit den Worten: "Auf, halten Sie. Es war sowieso nicht praktisch, vielleicht wird es für dich nützlich sein. " Mit Blick nach innen sah ich zwei U-Bahn-Terminals, übersetzt durch Zeitungen, mehrere chaotisch verstreute weiße Plastikkarten und ein Schwein in der Box. Zu meiner Frage, wie sehr ich das verdanke (Geld), schüttelte der Kerl den Kopf und lächelte und sagte: "Nichts, niemand sollte irgendjemandem etwas tun ... Also muss ich schon laufen und mein Zug ist wie mal! Komm schon, tschüss! "

Mit diesen Worten floh er, sprang in die bereits geschlossenen Türen des Wagens und ging. Und ich, ich gestehe, ging ein wenig in neponyatkah nach Hause. Kontakt von ICQ Ich habe gerade in Fall gelöscht, zur gleichen Zeit Reinigung der contactee auf dem Server und Reinigung Protokolle (wieder hallo, Paranoia). Am Ende schreib nochmal, wenn das. Aber er hat mir nie wieder geschrieben ...

Das Phänomen der Software-Leute

Als ich nach Hause kam, zerlegte ich das Paket. Die zweite der Terminals war ein Bus-Validator (schwer, Pfannkuchen!); die Karten waren Mifare Classic 1K (sauber), und die Scheibe hatte ein einziges Archiv. Nach einer flüchtigen Prüfung der Inhalte stellte sich heraus - das ist eine Software, die an den Kassenbüros der Metro verwendet wird. Abgesehen von dem Terminal und dem Validator habe ich beschlossen, das Studium der interessanten Software aufzunehmen. Etwa eine Stunde von dem Chaos, das ausgepackt wurde, habe ich es geschafft, dieses Programm auf meinem Computer zu bauen und auszuführen. Eine weitere Stunde war erforderlich, um seine Struktur zu verstehen. Nach dem Kämmen aller Ini-Dateien (mit Kommentaren, die der Entwickler freundlich hinterlassen hat) hatte ich schon eine volle Vorstellung davon, wie es ist, wie es funktioniert und was es isst. Essen Sie, wie sich herausstellte, mit dem Leser Parsec PR-P08, also, aus Mangel an es, versuchen Sie die Software in Aktion fehlgeschlagen.

Der Entwickler war die Firma "Smartek" - ein bedeutender staatlicher Auftragnehmer, der Systeme dieser Art entwickelt (weitere Details können auf ihrer Website gelesen werden). Das Programm wurde in Delphi mit runtime-bpl'ok geschrieben. Darüber hinaus hatte die Software eine modulare Struktur, und alle Subroutinen, Klassen und Komponenten waren in separaten DLLs oder bpl'ks mit sprechenden Namen (das war die wichtigste Datei von Entwicklern). Nach einer flüchtigen Analyse des Interieurs der Software habe ich herausgefunden, dass erstens Informationen über alle ausgegebenen Tickets in eine zentrale Datenbank übertragen werden (übrigens ist dies Oracle) und zweitens verwendet das Programm einen bestimmten Schlüsselmechanismus. Das Programm konnte mit der Datenbank nicht nur in Echtzeit kommunizieren. Wir ziehen Schlussfolgerungen: Alle Operationen im System können mit einer gewissen Verzögerung auftreten. Theoretisch gibt es uns einen Vorsprung.

Aber zuerst interessierte ich mich für den Mechanismus der Schlüssel (ich hatte schon begonnen zu erraten, warum es nötig sein könnte). So nahm ich den Zerleger auf und arbeitete zur Arbeit. Der Mechanismus bestand aus zwei Dateien - CryptKeyRef.dll und keys.d (die einzige "knifflige" Datei im gesamten Programm, die im Gegensatz zur Datei mit den Tasten nicht mehr ähnelt). Und ich habe all das gute Run-bpl'in SmLayout.bpl benutzt. Diese Bibliothek war nur ein Götter für meine Forschung - es enthielt Klassen für die Arbeit mit der internen Füllung von Tickets. Da es sich um Laufzeit-bpl handelt, reicht es aus, nur seine Exporttabelle zu betrachten, um 60 Prozent dessen zu verstehen, was was ist. Eine genauere Analyse hat alles an ihre Stelle gestellt. Denken Sie daran, zu Beginn des Artikels, sagte ich, dass in der Struktur von "Ultralight" gab es noch ein paar Felder, deren Zweck war unverständlich?

Eines dieser Felder ist die sogenannte "Layout-ID". In der Tat sind alle Metro-Tickets aus einem festen Header-Teil und einem variablen Stück Daten gebaut. Also, dieses "Layout" -Feld im Header hat genau bestimmt, wie und welche Daten sich im Rest des Tickets befinden. Es gibt mehrere solche Layouts (jeweils für den eigenen Ticket-Typ), und in SmLayout.bpl jeder von ihnen entsprach seiner eigenen Klasse (plus die gemeinsame übergeordnete Klasse, die Methoden für die Arbeit mit dem Header-Teil hatte). Deshalb, um zu verstehen, welche Felder in jedem Layout verantwortlich sind, war es einfach (auch wenn man mit den Namen der Methoden im Export spricht!). Nachdem ich ganz das Layout 8 (das in "Ultralights" verwendet wird) und das erneute Prüfen, hatte ich die richtige Idee über alle Felder in der Ticket-Struktur, nahm ich den Schlüssel Mechanismus. In der Tat war er verantwortlich für die Erzeugung des Hashs. Wie der Mechanismus funktioniert, wurde es ganz klar nach dem Studium der Arbeit der Methode verantwortlich für die Berechnung der Hash. Zuerst wird die richtige Taste aus der Schlüsseldatei (keys.d) ausgewählt.

Das System ist so angeordnet, dass jede Art von Ticket eine eigene Kennung hat (komplett mit einer Tabelle mit Ticketkennungen und Namen, als Textdatei mit durch ein Komma getrennten Werten). Es besteht aus der Kennung der Zone (Anwendung) und der Kennung des Typs der Karte. Also, basierend auf diesen Zahlen, wird in der Schlüsseldatei die Keying-Funktion ausgewählt, in der sich mehrere Tasten befinden können (falls der neue Schlüssel eingegeben wurde und alte Tickets noch verwendet werden). Das neue Ticket wird mit dem allerersten Ticket aufgenommen und die Validierung erfolgt mit allen Schlüsseln im Keying. Dann wird der ausgewählte Schlüssel mit CryptKeyRef.dll entschlüsselt (warum sie verschlüsselt gespeichert sind, werde ich mich nicht dazu bringen). Danach werden der entschlüsselte Schlüssel und fast alle Ticketdaten sowie die Hardware-Seriennummer und -nummer (die Methode zur Erzeugung eines "Hash", die für die Keying-Taste angegeben ist.) - an die Funktion ckCalcHashCode übergeben, die sich in derselben CryptKeyRef.dll befindet. Am Ausgang bekommen wir einen Wert, auf den ich in meiner Zeit und "stecken" - das gleiche "Hash". Natürlich habe ich ein kleines Programm geschrieben, das mit diesen Funktionen von CryptKeyRef.dll und file keys.d überprüft werden kann und in diesem Fall den "Hash" in jedem Dump neu berechnet wird. Ich überprüfte alles auf mehreren Müllhalden, und nachdem ich ein positives Ergebnis erhalten hatte, ging es weg, zufrieden, um zu schlafen.

Foul Schlüssel

Trotz des theoretischen Erfolges wollte ich alles sozusagen "im Kampf" überprüfen. Am nächsten Tag, von der Arbeit zurückgekehrt, habe ich speziell einen frischen "Ultralight" für eine Reise gekauft, um zu sehen, ob meine Schlüssel arbeiten oder nicht (anscheinend waren sie alt). Sie können natürlich sofort versuchen, "gefertigt" "Ultraleicht" zu schreiben und zu gehen, aber damals lief ich aus leeren Karten, und ein bisschen beängstigend, "zufällig" zu gehen - plötzlich was? Als ich nach Hause kam, habe ich zuerst, ohne auch nur meine Hände zu waschen, mit Ungeduld gehetzt, um das frische Ticket mit meinen Schlüsseln zu überprüfen. Und dann wartete ich auf einen großen Schwindel - "Hash", der in der Karte aufgezeichnet wurde, ging nicht durch einen der Schlüssel. Also, die Schlüssel sind wirklich schon faul und durch neue ersetzt. Das hat alle meine Werke völlig überschritten. Ich war ein bisschen traurig Ich brachte grünen Tee, spielte ein wenig auf dem Klavier (ja-ja) und setzte sich hin, um meine unfertige Gebühr zu pflanzen ...

Nicht alles ist noch verloren

Die Idee kam zu mir unerwartet, als ich noch einmal aus irgendeinem Grund in die Akte mit den Schlüsseln schaute. Ich habe bemerkt, dass in der "laufenden" Keying (die verwendet wird, um 1-, 2-, 5-Wege und andere "Ultralights" zu berechnen) gab es zwei Schlüssel - eine neue (damals natürlich) und anscheinend eine alte. Aber es gab auch eine Keying, in der es nur einen Schlüssel gab. Vorher habe ich nicht darauf geachtet und konzentrierte mich auf den "laufenden". Um zu berechnen, welche Tickets dieser Schlüssel benutzt wird, wusste ich nicht. Als ich aussah, welche Art von Ticket ist an das Gehäuse gebunden, dann habe ich einen kleinen Funken der Hoffnung geflasht. Die Sache ist, dass diese Art von Ticket war - VESB. Ja, es ist diese seltene Art von Ticket - eine temporäre Reisekarte für alle Arten von Transport. Ich dachte mir, dass, wenn das Ticket einzeln ist, dieser Schlüssel nicht nur in der Metro, sondern auch auf Landtransport verwendet werden sollte, wo es sehr schwierig und lang ist, es mit einem neuen zu ersetzen.

Darüber hinaus gibt es nur einen Schlüssel in keaging, was indirekt bestätigt meine Vermutung. Um alles andere, erinnerte ich mich, dass, wenn ich das Metro-Programm aus verschiedenen "Müll" gereinigt, gab es etwas ähnliches wie das Archiv der alten Schlüsseldateien. Nach dem Graben und Öffnen des Originalarchivs sah ich, dass es wirklich so war. Und am wichtigsten, nachdem ich alle alten Schlüsseldateien durchgesehen hatte, fand ich, dass dieser Schlüssel unverändert blieb! Schon ohne einen einzigen Tropfen Zweifel habe ich meinen eigenen VESB genietet (gut, ich hatte Müllhalden von der Art, die zuweilen die Aufgabe vereinfachte - ich habe gerade das Datum und die Nummer in den Müllhalden geändert) und der "Hash", der mit diesem Schlüssel berechnet wurde. Also, es ist Zeit zu überprüfen (vor allem habe ich gerade noch mehr saubere Plastik gekauft). Als ich die Lobby betrat, stelle ich zuerst mein "Ticket" zum Bestätigungsterminal ein. Die Anzeigetafel zeigte das Ablaufdatum des Tickets, das ich angedeutet habe, und die grüne LED leuchtete auf. So funktioniert es. Eine Grimasse einfacher zu machen und schneeweißen Plastik in den Ärmel zu verstecken, ging ich zum Drehkreuz, legte meine Hand zum Validator und ging ruhig zu dem fröhlich glühenden Grün. Das war der endgültige sieg.

Und was kommt als nächstes?

Und dann begannen Experimente, in denen viele interessante Dinge entdeckt wurden. Zum Beispiel für eine solche "linke" VESB können Sie nur zwei oder drei Tage laufen. Die Tatsache ist, dass die Nummer, die ich in der Karte "aus dem Glatze" angeben, mit jeder Passage in der Erinnerung an den Kopf des Drehkreises gespeichert ist, und nach einiger Zeit wird mit dem Rest an das Rechenzentrum gesendet. Dort findet das System kein wirklich ausgegebenes Ticket mit einer solchen Nummer und fügt es der Stoppliste hinzu, die dann an alle Drehkreuze der Metro geschickt wird. Und das geschieht mit allen Tickets, nicht nur mit dem VEBB - neben dem "Hash" und häufig wechselnden Tasten ist das eine sehr gute Verteidigung. Um es zu umgehen, aus offensichtlichen Gründen ist es nicht möglich.

Es wurde auch beobachtet, dass das Installieren oder Nicht-Installieren von Sperrbits keine Rolle spielt, ob das Ticket funktioniert oder nicht. Die einzige Ausnahme ist das OTP-Zonen-Blockier-Bit, das das Drehkreuz anscheinend immer überprüft, obwohl es nicht beabsichtigt, auf OTP zu schreiben. Später nahm ich die U-Bahn und Bus-Terminals, brachte sie in Ordnung, studierte und startete sie auf dem Stand. Nun, um die nächste Vermutung zu überprüfen, war es nicht mehr nötig, mit einem frisch gebackenen Mutant-Ticket in der Metro zu laufen, aber es wurde möglich, sie zu überprüfen, "ohne von der Kasse zu gehen". Darüber hinaus hat sich die U-Bahn-Terminal als ganz alt (zu allen anderen und Buggy), wie meine Schlüssel. So könnte ich "bei der Arbeit" und jede andere Art von Tickets "Ultralight" versuchen - etwas, was ich niemals "live" in der U-Bahn machen kann. Parallel zu diesen Experimenten arbeitete ich weiter an Software.

Da gab es viel Diskussion darüber, welche Art von Algorithmus verwendet wird, um die "Hash" zu berechnen, entschied ich mich, es vollständig wiederherzustellen, indem ich den Algorithmus von der Scratch in der "menschlichen" Programmiersprache umschreibe, und in dem Prozess war ich gerade dabei zu verstehen, was für ein Algorithmus es war - das etwas bekannter oder irgendeine Art eigener innerer Entwicklung. Entlang des Weges wurde ich von vielen verschiedenen Gedanken besucht (einschließlich, dass es AES sein könnte), aber mit einer detaillierten Studie über den bereits arbeitenden Code ohne den Einsatz von Smartekov Bibliotheken wurde klar, dass dieser Algorithmus "nur" GOST ist - der nationale Verschlüsselungsstandard (alle notwendigen Informationen Sie können es ganz einfach im Internet finden). Speziell wurde eine 16-Z-Schleife verwendet, um den Hash zu berechnen. "Hash", in der Tat ist es nichts wie eine Nachahmung GOST.

Die Struktur der auf dem Ticket "Ultralight"

Was ist die Seite, wo und wie sich die Hardware-Seriennummer, die Sperrbits und die OTP-Zone befinden, können Sie in der Originaldokumentation lesen (die Dateispezifikation im PDF-Format mit vollständiger Beschreibung des Chips auf der Festplatte). Ich empfehle, das Studium mit ihr zu beginnen. Ich werde die Datenstrukturstruktur beschreiben, die durch Metrosysteme im Benutzerbereich gebildet wird, die zum Lesen und Umschreiben zugänglich sind (in Abwesenheit von Schlössern natürlich). Alle Inhalte des Tickets können bedingt in den Kopfteil und zwei komplett vervielfältigende Teile der Daten eingeteilt werden (dies erfolgt zum Zweck der Redundanz und des Fehlerschutzes). Der Header-Teil der Tickets "Ultralight" beginnt mit Seite 4. Ein Teil davon ist in allen Tickets und Bezeichnern des Systems der U-Bahn und der MosGorTrans identisch. Die ersten 10 Bits sind die Anwendungskennung; die nächsten 10 Bits - die Kennung der Art der Karte (über welche Art von Identifikatoren gibt es, können Sie in einem anderen speziell für diesen Rahmen ausgewählt lesen). Nach den Bezeichnern befindet sich die Seriennummer des Tickets (es wird auf der Rückseite des Tickets ausgeklopft, verwechselt es nicht mit der Hardware - das sind verschiedene Sachen!) Mit einer Größe von 32 Bits. Die letzten 4 Bits sind das Layout-Feld, das dem System mitteilt, wie man die nachfolgenden Daten interpretiert (so etwas wie das Dateiformat).

Bei Ultralight-Tickets ist der Layout-Wert 0x08. Damit endet der gleiche Teil des Titels. Weiter im Ticket "Ultralight" wird das Datum angegeben, an dem das Formular gültig ist (16 Bits). Alle Termine im System sind im Format der Anzahl der ab dem 01.01.1992 verstrichenen Tage angegeben. Hier endet der Kopfteil des Tickets "Ultralight" (Tickets mit einem anderen Layout können noch verschiedene Zusatzinformationen enthalten). Der erste Datenbereich beginnt auf Seite 8. Zuerst werden 16 Bits des Ticketausgangsdatums geschrieben. Danach beträgt die Gültigkeitsdauer des Tickets in Tagen (ab dem Moment der Ausgabe) 8 Bits. Die ersten 16 Bits von Seite 9 sind der Auslösezähler. Es kann entweder auf Null abfallen (auf allen Fahrkarten mit einer Beschränkung der Anzahl der Fahrten) oder von Null (auf WESC-Tickets, ohne Einschränkung der Anzahl der Fahrten). Nach dem Zähler, in den Rest der Seite das Drehkreuz gibt seine eindeutige Kennung bei jedem Pass. Anscheinend wird dies verwendet, um ein Wiederholen zu verhindern, ohne auf ein VEB-Ticket zu warten (die Drehkreuze in der Lobby sind mit dem Netzwerk verbunden und verhören einander) und auch zu sehen, welches Drehkreuz der Pass gemacht wurde (z. B. im Falle eines Fehlers oder für Statistiken ). Page 10 ist vollständig von einem 32-Bit-Hash belegt.

Seite 11 ist leer. Dieser Datenbereich wird vollständig auf die verbleibenden 4 Seiten (von 12 bis 15) repliziert. Es stellt sich heraus, dass im Normalbetrieb diese beiden Regionen immer die gleichen Daten enthalten. Getrennt ist es notwendig, über die Verwendung des OTP-Zonensystems zu sprechen. Es wird für die allmähliche "Ausbrennen" des Tickets mit jeder Reise (VESB Tickets gelten nicht) verwendet. Die beiden niederwertigsten Bits werden ausgegeben, wenn das Ticket storniert oder storniert wird (auf dem Stoppbogen). Das abgesagte Ticket unterliegt nicht der Erholung. Nur 30 Bits bleiben zum Ausbrennen. Diese Zone wird durch das System als 100% der Reisen dargestellt. Bei jeder neuen Reise wird eine bestimmte Anzahl von Bits gesetzt (von Junior bis Senior), entsprechend, wie viel pro Fahrt dauert. Zum Beispiel für ein 5-Personen-Ticket mit jeder neuen Reise, wird es bei 6 Bits ausgebrannt, und für eine 60-Wege-Ticket - ein halbes Stück (aufgerundet). Es ist erwähnenswert, dass die Wiederverwendung von Tickets "Ultralight" nicht nur wegen des "Brennens" von OTP unmöglich ist, sondern auch, weil bei der Kasse bei der Ausgabe eines Tickets (und vielleicht sogar, wenn es gemacht wird) fast alle Seiten zum Überschreiben gesperrt sind . So wird weder "recharge" noch ändern die Art von Ticket zu einem anderen nicht funktionieren.

Beispiele für gebrauchte Untergrundkartenkennungen

Alle Zahlen sind in dezimaler Notation!

Anwendungs-IDs:

  • 262 - Ticket für die Moskauer Metro.
  • 264 - Ticket für Landtransport in Moskau
  • 266 - Die Gesellschaft von Moskau und Moskau.
  • 270 - Ticket "Light Metro".

Identifikatoren der Art der Tickets "Ultralight":

  • 120 - eine Reise.
  • 121 - Zwei Ausflüge.
  • 126 - Fünf Fahrten.
  • "Zehn Ausflüge".
  • "Zwanzig Reisen".
  • 129 sechzig Reisen.
  • 130 - Gepäck + Durchgang.
  • 131 - Nur Gepäck.
  • 149 - Single "Ultralight" (70 Fahrten).
  • 150 - WESB.

Mifare Classic

Ich habe auch auf die unglückselige Mifare Classic 1K in meiner Forschung aufmerksam gemacht. Wie du verstehst, war das wichtigste Hindernis auf dem Weg zum "Classic" die Hardware-Tasten A und B. Mit einem Glücksfall waren diese Tasten in einem der Module des Programms in einer offenen Form (an die Entwickler!) Und ich hatte keine Schwierigkeiten, ein kleines Programm zu schreiben Arbeiten Sie mit dem Inhalt dieser Karten, mit den empfangenen Tasten. Im Laufe der Experimente wurden einige interessante Merkmale aufgedeckt, wie zum Beispiel: die Metro benutzte den ersten Sektor der Karte für die Lagerung des Tickets und der Bodentransport benutzte den vierten; kein Schutz, außer für Hardware-Schlüssel (die, in die Software in dieser Form geschrieben werden, höchstwahrscheinlich, niemals geändert von dem Moment der Inbetriebnahme des Systems) auf diesen Tickets nicht existiert.

Stattdessen wird am Ende jedes Blocks der CRC-16 angezeigt, nur um die Daten vor Korruption zu schützen. Darüber hinaus werden auf Social-Cards, zusätzlich zu Tickets, viele vielfältigere und interessante Informationen aufgezeichnet. Zum Beispiel sind im 13. und 14. Sektor der Social Cards der Nachname, Name und Patronym des Besitzers angegeben. Diese (und einige andere) Daten können mit dem öffentlichen Schlüssel 0xA0A1A2A3A4A5 gelesen werden. Während der Experimente war es möglich, den Schüler-SCM komplett zu klonen, sowie mehrere Tickets für reine Classic-Karten.

Aber das Klonensystem, wie sich herausstellte, wird durch das Stop-Loss-System bemerkenswert gespeichert - dieses Ticket kann für nicht mehr als zwei Tage genutzt werden, dann wird es abgesagt (im Gegensatz zum "Ultralight" kann die "Classic" -Karte nach der Stornierung wiederhergestellt werden, aber aus der Stopp-Liste es wird nicht sparen). Da kein Schutz auf den Classic-Karten verwendet wurde, wurden sie schnell uninteressant für mich, und ich beschloss, mich auf die Ultralight-Studie zu konzentrieren.

Das Ende, oder zusammenfassen

Metro-Systeme, insbesondere neue Tickets "Ultralight", im Gegensatz zu den Meinungen und Vermutungen, waren gut geschützt. Sehr erfreut, dass die Entwickler eine zuverlässige und bewährte GOST benutzten und das Rad nicht neu erfinden. Mit solchem ​​Schutz, um ein Ticket "Ultralight" zu schmieden, ohne Zugang zu vertraulichen Daten (Schlüsselinformationen) zu haben, ist es einfach unmöglich. Bemerkenswert durchdacht und das System der Ersatzschlüssel und der Mechanismus der Stoppblätter. Natürlich gab es Mängel und Fehler. Die größte von ihnen ist Software, die in keiner Weise geschützt ist.

Es war genug, um den Einsatz von runtime-bpl aufzugeben, und das würde die Analyse zehnmal komplizieren! Als Option, - Verarbeitung von kritischen Teilen des Programms AsProtect'om oder ExeCryptor'om, gefolgt von zakkovkoy alle Dateien MoleBox'om würde die Möglichkeit der Analyse fast auf Null reduzieren. Toolkit etwas preiswertes. Und die Verwendung von guten (vorzugsweise wenig bekannten oder maßgeschneiderten) Schutz dieser Art, aber mit Hardware-Tasten würde das Parsing des Programms völlig unmöglich machen. Natürlich ist der Metropolitan ein Regime-Unternehmen, aber vergessen Sie nicht den menschlichen Faktor. Immerhin sagte Kevin Mitnick (und nicht nur gesagt, sondern auch durch sein eigenes Beispiel demonstriert, für das er sich hinsetzte), dass man manchmal das Ziel erreichen kann, ist es einfacher und effektiver, "Social Engineering" zu benutzen, anstatt zu versuchen, die undurchdringliche Verteidigung zu brechen. Nun, auf dieser Anmerkung werde ich meine Erzählung beenden. Und für Sie, den Leser, wünsche ich mir mehr interessante und erfolgreiche Forschung!








Beschreibung des kryptographischen Transformationsalgorithmus gemäß GOST 28147-89

Diese Norm stellt einen einzigen kryptographischen Transformationsalgorithmus für Informationsverarbeitungssysteme in Netzwerken von elektronischen Computern (Computern), einzelnen Computerkomplexen und Computern her, die die Regeln für die Datenverschlüsselung und Entwicklung von imitovki bestimmen.

Der kryptographische Transformationsalgorithmus ist für die Hardware- oder Softwareimplementierung gedacht, erfüllt kryptographische Anforderungen und beschränkt nicht den Grad der Geheimhaltung der geschützten Informationen.

Der Standard ist für Organisationen, Unternehmen und Institutionen zwingend vorgeschrieben, die einen kryptographischen Schutz von gespeicherten und übermittelten Daten in Computernetzwerken, in getrennten Computersystemen oder in Computern anwenden.

Strukturdiagramm des kryptographischen Transformationsalgorithmus

Das Blockdiagramm des in Fig. 1 gezeigten Kryptographie-Transformations- (Kryptosystem-) Algorithmus enthält:

  • - 256-Bit-Schlüsselspeichervorrichtung bestehend aus acht 32-Bit-Laufwerken (X 0 , X 1 , X 2 , X 3 , X 4 , X 5 , X 6 , X 7 );
  • - vier 32-Bit-Speichergeräte (N 1 , N 2 , N 3 , N 4 );
  • - zwei 32-Bit-Speicher (N 5 , N 6 ) mit den darin aufgenommenen Füllkonstanten C 2 , C 1 ;
  • - zwei 32-Bit-Addierer modulo 2 32 (CM 1 , CM 3 );
  • - 32-Bit-Addierer der bitweisen Summation modulo 2 (CM 2 );
  • - 32-Bit-Addierer modulo (2 32 -1) (SM 4 );
  • - addder modulo 2 (CM 5 ), wird die Beschränkung der Kapazität des Addierers CM 5 nicht überlagert;
  • - Substitutionseinheit (K);
  • - das Register der zyklischen Verschiebung um elf Schritte zur höchsten Entladung (R).

Abbildung 1

Der K-Substitutionsblock besteht aus acht Ersatzknoten K 1 , K 2 , K 3 , K 4 , K 5 , K 6 , K 7 , K 8 mit jeweils einem Speicher von jeweils 64 Bits. Der am Substitutionsblock ankommende 32-Bit-Vektor wird in acht aufeinanderfolgende 4-Bit-Vektoren aufgeteilt, die jeweils durch den entsprechenden Ersatzknoten in einen 4-Bit-Vektor umgewandelt werden, der eine Tabelle von sechzehn Zeilen mit vier Füllbits pro Zeile ist. Der Eingangsvektor definiert die Adresse der Zeile in der Tabelle, die Füllung dieser Zeile ist ein ausgehender Vektor. Die 4-Bit-Ausgangsvektoren werden dann sequentiell zu einem 32-Bit-Vektor kombiniert.

Wenn die Binärvektoren addiert und zyklisch verschoben werden, sind die oberen Bits Bits großer Zahlen.

Beim Schreiben einer Taste (W 1 , W 2 , ..., W 256 ), W q Є {0,1}, q = i ÷ 256, â wird der Wert W 1 in die 1. Stelle des Akkumulators X 0 eingetragen , der Wert W 2 wird eingegeben in der 2. Stelle des Akkumulators X 0 , ... wird der Wert W 32 in die 32. Stelle des Akkumulators X 0 eingegeben; wird der Wert W 33 in die erste Ziffer des Akkumulators X 1 eingegeben, der Wert W 34 wird in die 2. Stelle des Akkumulators X 1 , ... eingegeben, der Wert W 64 wird in das 32. Bit des Akkumulators X 1 eingegeben; wird der Wert W 65 in die erste Ziffer des Akkumulators X 2 usw. eingegeben. Der Wert von W 256 wird in das 32. Bit des Akkumulators X 7 eingegeben.

Beim Überschreiben von Informationen wird der Inhalt der p- ten Ziffer eines Akkumulators (Addierers) in die erste Ziffer eines anderen Akkumulators (Addierer) umgeschrieben.

Der Wert der Füllkonstante C 1 (konstant) des Akkumulators N 6 ist in Tabelle 1 angegeben.

Tabelle 1

Entladung des Akkumulators N 6

32

31

30

29

28

27

26

25

24

23

22

21

20

19

18

17

Der Wert der Ziffer

0

0

0

0

0

0

0

1

0

0

0

0

0

0

0

1

Entladung des Akkumulators N 6

16

15

14

13

12

11.

10

9

8

7

6.

5

4

3

2

1

Der Wert der Ziffer

0

0

0

0

0

0

0

1

0

0

0

0

0

1

0

0

Der Wert der Füllkonstante C 2 (konstant) des Akkumulators N 5 ist in Tabelle 2 angegeben.

Tabelle 2

Entladung des Akkumulators N 5

32

31

30

29

28

27

26

25

24

23

22

21

20

19

18

17

Der Wert der Ziffer

0

0

0

0

0

0

0

1

0

0

0

0

0

0

0

1

Entladung des Akkumulators N 5

16

15

14

13

12

11.

10

9

8

7

6.

5

4

3

2

1

Der Wert der Ziffer

0

0

0

0

0

0

0

1

0

0

0

0

0

0

0

1

Die Schlüssel, die das Füllen der CMU und die Tabellen der K-Substitutionsbox definieren, sind geheime Elemente und werden in der etablierten Reihenfolge ausgeliefert.

Das Ausfüllen der Tabellen der K-Ersetzungsbox ist ein langfristiges Schlüsselelement, das dem Computernetz gemeinsam ist.

Die Organisation verschiedener Kommunikationsarten wird durch den Aufbau eines geeigneten Schlüsselsystems erreicht. In diesem Fall ist es möglich, die Möglichkeit zu nutzen, Schlüssel (Einfüllen des RAM) in einem einfachen Wiedereinbau-Modus zu erzeugen und sie in einem einfachen Ersatzmodus zu verschlüsseln, wobei der Nachahmungsschutz für die Übertragung über Kommunikationskanäle oder Speicher im Computerspeicher vorgesehen ist.

Es gibt vier Arten von Arbeit in der kryptographischen Schaltung:

  • - Verschlüsselung (Entschlüsselung) von Daten in einem einfachen Ersatzmodus;
  • - Verschlüsselung (Entschlüsselung) von Daten im Gamma-Modus;
  • - Verschlüsselung (Entschlüsselung) von Daten im Modus der Gummierung mit Rückmeldung;
  • - Entwicklungsweise der Nachahmung.

Verschlüsselung im einfachen Ersatzmodus

Verschlüsselung von offenen Daten im einfachen Ersatzmodus

Ein Kryptogramm, das den Verschlüsselungsalgorithmus im einfachen Ersatzmodus implementiert, sollte die in Abbildung 2 gezeigte Form haben.


Abbildung 2

Die zu verschlüsselnden öffentlichen Daten werden in Blöcke mit jeweils 64 Bits aufgeteilt. Die Eingabe eines beliebigen Blocks T 0 = (a 1 (0), a 2 (0), ..., a 32 (0), b 1 (0), b 2 (0), ..., b 32 (0)) der binären Information in werden die Akkumulatoren N & sub1; und N & sub2; so hergestellt, daß der Wert a & sub1; (0) in das erste Bit N & sub1; eingeführt wird, der Wert a & sub2; (0) in das zweite Bit N & sub1; usw. eingeführt wird, wobei der Wert a & 0) in das 32-te Bit N 1 eingeführt wird ; der Wert b 1 (0) in das 1. Bit N 2 eingegeben wird, wird der Wert b 2 (0) in das 2. Bit N 2 usw. eingegeben, der Wert b 32 (0) wird in das 32-te Bit N 2 eingegeben. Als Ergebnis wird der Zustand (a 32 (0), a 31 (0), ..., a 2 (0), a 1 (0)) des Speicherringes N 1 und der Zustand (b 32 (0), b 31 (0), ... , b 2 (0), b 1 (0)) des Speicherringes N 2 .

In der CMU werden 256 Bits des Schlüssels eingetragen. Der Inhalt der acht 32-Bit-Antriebe X 0 , X 1 , ..., X 7 sind:

  • X 0 = (W 32 , W 31 , ..., W 2 , W 1 )
  • X 1 = (W 64 , W 63 , ..., W 34 , W 33 )
  • . . . . . . . . . . . . .
  • X 7 = (W 256 , W 255 , ..., W 226 , W 225 )

Der Algorithmus der Verschlüsselung eines 64-Bit-Blocks von offenen Daten im einfachen Ersatzmodus besteht aus 32 Zyklen.

Im ersten Zyklus wird die anfängliche Füllung des Akkumulators N 1 im Addierer CM 1 mit dem Füllen des Akkumulators X 0 modulo 2 32 summiert, während die Speicherung des Akkumulators N 1 beibehalten wird.

Das Ergebnis der Summation wird in den Substitutionsblock K umgewandelt und der resultierende Vektor wird dem Eingang des Registers R zugeführt, wo er zyklisch um elf Schritte zu den höherwertigen Bits verschoben wird. Das Ergebnis der Verschiebung wird bitweise modulo 2 im CM 2 -Adder mit einer 32-Bit-Füllung des N 2 -Speicherrings summiert. Das in CM 2 erhaltene Ergebnis wird in N 1 geschrieben , während der alte Wert von N 1 in N 2 umgeschrieben wird. Der erste Zyklus endet.

Nachfolgende Zyklen werden in gleicher Weise durchgeführt, während im zweiten Zyklus die Füllung X 1 aus dem FEC gelesen wird, im 3. Zyklus die Füllung X 2 aus der FEC usw. gelesen wird, wird die Füllung X 7 aus dem CCD im 8. Zyklus gelesen. In den Zyklen vom 9. bis 16. sowie in den Zyklen vom 17. bis 24. werden die Füllungen aus dem QCD in der gleichen Reihenfolge gelesen: X 0 , X 1 , X 2 , X 3 , X 4 , X 5 , X 6 , X 7

In den letzten acht Zyklen vom 25. bis zum 32. ist die Reihenfolge des Lesens der Füllungen des CCD umgekehrt: X 7 , X 6 , X 5 , X 4 , X 3 , X 2 , X 1 , X 0 .

Bei der Verschlüsselung in 32 Zyklen wird also die folgende Reihenfolge verwendet, um den Inhalt der Laufwerke auszuwählen:

  • X 0 , X 1 , X 2 , X 3 , X 4 , X 5 , X 6 , X 7 , X 0 , X 1 , X 2 , X 3 , X 4 , X 5 , X 6 , X 7 ,
  • X 0 , X 1 , X 2 , X 3 , X 4 , X 5 , X 6 , X 7 , X 7 , X 6 , X 5 , X 4 , X 3 , X 2 , X 1 , X 0 .

Im 32. Zyklus wird das Ergebnis des CM 2 Addierers in den N 2 Akkumulator eingefügt und die alte Füllung wird im Speicher N 1 gespeichert.

Die Verschlüsselung der nach dem 32. Verschlüsselungszyklus empfangenen N 1 - und N 2 -Akkumulatoren ist ein Block von verschlüsselten Daten, die dem offenen Datenblock entsprechen.

Entschlüsseln von verschlüsselten Daten in einem einfachen Wiederherstellungsmodus

Ein Kryptogramm, das den Entschlüsselungsalgorithmus im einfachen Ersatzmodus implementiert, hat die gleiche Form (siehe Abbildung 2) wie im Fall der Verschlüsselung. Im ROM werden 256 Bits der gleichen Taste eingegeben, auf der die Verschlüsselung durchgeführt wurde. Die zu entschlüsselnden verschlüsselten Daten werden in Blöcke mit jeweils 64 Bits aufgeteilt. Die Eingabe eines beliebigen Blocks ist T = (a 1 (32) und 2 (32), ... und 32 (32), b 1 (32), b 2 (32), ..., b 32 (32) 1 und N 2 erfolgt, so dass der Wert eines 1 (32) in das 1. Bit N 1 eingetragen wird , der Wert eines 2 (32) in das 2. Bit N 1 usw. eingetragen wird, wobei der Wert eines 32 (32) wird in das 32-te Bit N & sub1; eingeführt; wird der Wert b & sub1; (32) in das erste Bit N & sub2; eingeführt, der Wert b & sub2; (32) wird in das zweite Bit N & sub2; usw. eingeführt. Der Wert b & sub3; & sub2; (32) wird dem 32-ten Bit N & sub2;

Die Entschlüsselung erfolgt nach dem gleichen Algorithmus wie die Verschlüsselung der offenen Daten mit der Änderung, dass die Befüllung der Speichereinheiten X 0 , X 1 , ..., X 7 aus der CPU in den Entschlüsselungszyklen in folgender Reihenfolge ausgelesen wird:

  • X 0 , X 3 , X 2 , X 3 , X 4 , X 5 , X 6 , X 7 , X 7 , X 6 , X 5 , X 4 , X 3 , X 2 , X 1 , X 0 ,
  • X, X, X, X, X, X, X, X, X, X X

Nach 32 Betriebszyklen empfangen, besteht das Füllen der Akkumulatoren N 1 und N 2 aus einem offenen Datenblock.

T 0 = (a 1 (0), a 2 (0), ..., a 32 (0), b 1 (0), b 2 (0), ..., b 32 (0)), die dem Block von verschlüsselten Daten entsprechen, der Wert a 1 (0) des Blocks T 0 entspricht dem Inhalt der ersten Ziffer N 1 , der Wert a 2 (0) entspricht dem Inhalt der 2. Stelle N 1 usw. Der Wert a 32 (0) entspricht dem Inhalt des 32- th Ziffer N 1 ; der Wert b 1 (0) entspricht dem Inhalt der ersten Ziffer N 2 , der Wert b 2 (0) entspricht dem Inhalt der 2. Stelle N 2 usw. Der Wert b 32 (0) entspricht dem Inhalt des 32. Bits N 2 .

Ähnlich werden die verbleibenden Blöcke von verschlüsselten Daten entschlüsselt.

Gamma-Modus

Verschlüsselung von offenen Daten im Gamma-Modus

Ein Kryptogramm, das den Verschlüsselungsalgorithmus im Gamma-Modus implementiert, muss die in Abbildung 3 dargestellte Form aufweisen.


Abbildung 3

Die in den 64-Bit-Blöcken T 0(1) , T 0(2) , ..., T 0(M-1) , T 0(M) aufgeteilten Daten werden im Gamma-Modus durch Bit-Summationsmodulo 2 im CM-Addierer verschlüsselt 5 mit Gamma der Chiffre G, die durch Blöcke von 64 Bits erzeugt wird, d.h.

(1) , Γω(Σ) , ..., Γ, (Μ-1) , Γω(Μ) ),

wobei M durch die Menge der verschlüsselten Daten bestimmt wird.

(I) ist der i-te 64-Bit-Block, i = 1 ÷ Ì, die Anzahl der Bits im Block T 0(M) kann kleiner als 64 sein, während der Teil der Chiffrenskala aus dem Block F m(M) für die Verschlüsselung nicht verwendet wird, verworfen

In der CMU werden 256 Bits des Schlüssels eingetragen. In den Antrieben N 1 , N 2 wird eine 64-Bit-Binärfolge (Synchronisation) S = (S 1 , S 2 , ..., S 64 ) eingeführt, die die anfängliche Füllung dieser Antriebe für die nachfolgende Erzeugung von M Blöcken der Chiffregamma ist. Die Synchronisation wird in N 1 und N 2 eingeführt, so daß der Wert von S 1 in das erste Bit N 1 eingegeben wird, der Wert S 2 in das zweite Bit N 1 eingegeben wird, der Wert von S 32 in das 32-Bit eingegeben wird N 1 ; wird der Wert S 33 in das erste Bit N 2 eingegeben, der Wert S 34 wird in das 2. Bit N 2 usw. eingegeben, der Wert S 64 wird in das 32-Bit N 2 eingegeben.

Die Erstbefüllung der Antriebe N 1 und N 2 (synchrones Senden S) wird im einfachen Ersatzmodus gemäß den Anforderungen von Absatz 1.3.1 verschlüsselt. Das Ergebnis der Verschlüsselung wird in 32-Bit-Akkumulatoren N 3 und N 4 umgeschrieben, so dass die Füllung N 1 in N 3 umgeschrieben wird und die Füllung N 2 in N 4 umgeschrieben wird.

Das Füllen des Akkumulators N 4 wird in dem Addierer SM 4 mit dem 32-Bit-Konstanten С 1 aus dem Akkumulator N 6 summiert (2 32 -1), das Ergebnis wird in N 4 geschrieben .

Das Füllen des Akkumulators N 3 wird im Addierer SM 3 mit einer 32-Bit-Konstante C 2 aus dem Akkumulator N 5 summiert, das Ergebnis wird in N 3 geschrieben .

Die Füllung von N 3 wird in N 1 umgeschrieben und die Füllung von N 4 wird in N 2 umgeschrieben, während die Füllung von N 3 , N 4 erhalten bleibt.

Das Füllen von N 1 und N 2 wird im einfachen Austauschmodus gemäß den Anforderungen von Abschnitt 3.1 verschlüsselt. Die durch Verschlüsselung erhaltene Füllung von N 1 , N 2 bildet den ersten 64-Bit-Block des Chiffregamma G r (1) , der im Addierer CM 5 mit dem ersten 64-Bit-offenen Datenblock T 0(1) = (t ) summiert wird 1(1) , t 2(1) , ..., t 63(1) , t 64(1) ). Als Ergebnis der Summierung wird ein 64-Bit-Block mit verschlüsselten Daten erhalten: Tw(1) = (τ 1(1) , τ 2(1) , ..., τ 63(1) , τ 64(1) ).

Значение τ 1(1) блока Т ш(1) является результатом суммирования по модулю 2 в СМ 5 значения t 1(1) из блока Т 0(1) со значением 1-го разряда N 1 , значение τ 2(1) блока Т ш(1) является результатом суммирования по модулю 2 в СМ 5 значения t 2(1) из блока Т 0(1) со значением 2-го разряда N 1 и т.д., значение τ 64(1) блока Т ш(1) является результатом суммирования по модулю 2 в СМ 5 значения t 64(1) из блока Т 0(1) со значением 32-го разряда N 2 .

Для получения следующего 64-разрядного блока гаммы шифра Г ш(2) заполнение N 4 суммируется по модулю (2 32 -1) в сумматоре СМ 4 с константой С 1 из N 6 , заполнение N 3 суммируется по модулю 2 32 в сумматоре СМ 3 с константой С 2 из N 5 . Новое заполнение N 3 переписывается в N 1 , а новое заполнение N 4 переписывается в N 2 , при этом заполнение N 3 и N 4 сохраняется.

Заполнение N 1 и N 2 зашифровывается в режиме простой замены в соответствии с требованиями пункта 3.1. Полученное в результате зашифрования заполнение N 1 , N 2 образует второй 64-разрядный блок гаммы шифра Г ш(2) , который суммируется поразрядно по модулю 2 в сумматоре СМ 5 со вторым блоком открытых данных Т 0(2) . Аналогично вырабатываются блоки гаммы шифра Г ш(3) , Г ш(4) …, Г ш(М) и зашифровываются блоки открытых данных Т 0(3) , Т 0(4) …, Т 0(М) . Если длина последнего М-го блока открытых данных Т 0(М) меньше 64 бит, то из последнего М-го блока гаммы шифра Г ш(М) для зашифрования используется только соответствующее число разрядов гаммы шифра, остальные разряды отбрасываются.

В канал связи или память ЭВМ передаются синхропосылка S и блоки зашифрованных данных Т ш(1) , Т ш(2) …, Т ш(М) .

Расшифрование зашифрованных данных в режиме гаммирования

При расшифровании криптосхема имеет тот же вид, что и при зашифровании (см. рисунок 3). В КЗУ вводятся 256 бит ключа, с помощью которого осуществлялось зашифрование данных Т 0(1) , Т 0(2) …, Т 0(М) при этом Т 0(М) может содержать меньше 64 разрядов.

Режим гаммирования с обратной связью

Зашифрование открытых данных в режиме гаммирования с обратной связью

Криптосхема, реализующая режим гаммирования с обратной связью, должна иметь вид, приведенный на рисунке 4.


Abbildung 4

Открытые данные, разбитые на 64-разрядные блоки Т 0(1) , …, Т 0(М) , зашифровываются в режиме гаммирования с обратной связью путем поразрядного суммирования по модулю 2 в сумматоре СМ 5 с гаммой шифра Г ш , которая вырабатывается блоками по 64 бита, т.е. Г ш =(Г ш(1) , Г ш(2) , …, Г ш(М) ), где М – определяется объемом шифруемых данных, Г ш(i) – i-й 64-разрядный блок, i=1÷Ì. Число двоичных разрядов в блоке Т 0(М) может быть меньше 64.

В КЗУ вводятся 256 бит ключа. В накопители N 1 , N 2 вводится 64-разрядная двоичная последовательность (синхропосылка) S=(S 1 , S 2 , …, S 64 ). Синхропосылка вводится в N 1 и N 2 так, что значение S 1 вводится в 1-й разряд N 1 , значение S 2 вводится во 2-й разряд N 1 , и т.д., значение S 32 вводится в 32-й разряд N 1 ; значение S 33 вводится в 1-й разряд N 2 , значение S 34 вводится во 2-й разряд N 2 и т.д., значение S 64 вводится в 32-й разряд N 2 .

Исходное заполнение накопителей N 1 и N 2 зашифровывается в режиме простой замены в соответствии с требованиями пункта 3.1. Полученное в результате зашифрования заполнение N 1 и N 2 образует первый 64-разрядный блок гаммы шифра Г ш(1) , который суммируется поразрядно по модулю 2 в сумматоре СМ 5 с первым 64-разрядным блоком открытых данных Т 0(1) =(t 1(1) , t 2(1) , …, t 63(1) , t 64(1) ).

В результате суммирования получается 64-разрядный блок зашифрованных данных Т ш(1) =(τ 1(1) , τ 2(1) , …, τ 63(1) , τ 64(1) ).

Der Block der verschlüsselten Daten Tm(1) ist gleichzeitig auch der Anfangszustand N 1 , N 2 zur Erzeugung des zweiten Blocks der Chiffrierenskala G r (2) und wird durch Rückkopplung auf die spezifizierten Antriebe zurückgeschrieben. In diesem Fall wird der Wert von τ 1(1) in das erste Bit N 1 eingefügt, der Wert von τ 2(1) wird in das 2. Bit N 1 usw. eingegeben. Der Wert von τ 32(1) wird in das 32-te Bit N eingegeben 1 ; Der Wert von τ 33(1) wird in das erste Bit N 2 eingefügt, der Wert von τ 34(1) wird in das 2. Bit N 2 usw. eingegeben. Der Wert von τ 64(1) wird in das 32-te Bit N 2 eingegeben.

Das Füllen von N 1 , N 2 wird im einfachen Austauschmodus gemäß den Anforderungen von Abschnitt 3.1 verschlüsselt. Die als Ergebnis der Verschlüsselung erhaltene Füllung N 1 , N 2 bildet den zweiten 64-Bit-Block des Chiffriergammas Gw (2) , der im Addierer CM 5 mit dem zweiten Block der offenen Daten T 0(2) digital modulo 2 summiert wird.

Die Erzeugung nachfolgender Blöcke der Chiffrierwaage G w(i) und die Verschlüsselung der entsprechenden Blöcke der offenen Daten T 0(i) (i = 3 ÷ Ì) erfolgt analog. Wenn die Länge des letzten M-ten Blocks der offenen Daten T 0(M) kleiner als 64 Bits ist, wird nur die entsprechende Anzahl von Ziffern des Chiffrierbereichs aus dem G r (M) verwendet , die verbleibenden Bits werden verworfen.

Die Synchronisation S und die Blöcke der verschlüsselten Daten Т ш(1) , Т ш(2) ..., Т ш(М) werden an den Kommunikationskanal oder den Computerspeicher übertragen.

Entschlüsselung von verschlüsselten Daten im Gummiermodus mit Rückmeldung

Beim Entschlüsseln hat die kryptographische Schaltung die gleiche Form wie bei der Verschlüsselung (siehe Abbildung 4). In der CMU werden 256 Bits derselben Taste eingegeben, auf denen T 0(1) , T 0(2) ..., T 0(M) verschlüsselt wurden. Die Synchronisation wird in N & sub1 ;, N & sub2; eingeführt, so daß der Wert von S & sub1; in das erste Bit N & sub1; eingeführt wird, der Wert S & sub2; in das zweite Bit N & sub1; usw. eingegeben wird. Der Wert von S & sub3; & sub2; wird in das 32-te Bit eingegeben N 1 ; wird der Wert S 33 in das erste Bit N 2 eingegeben, der Wert S 34 wird in das 2. Bit N 2 usw. eingegeben, der Wert S 64 wird in das 32-Bit N 2 eingegeben.

Die anfängliche Befüllung der Antriebe N 1 und N 2 (Synchronisation S) wird im einfachen Ersatzmodus gemäß den Anforderungen der Ziffer 3.1 verschlüsselt. Die resultierende Füllung N 1 , N 2 bildet den ersten 64-Bit-Block des Chiffre Gamma Gw (1) , der im Addierer CM 5 mit dem verschlüsselten Datenblock T w(1) digital modulo 2 summiert wird. Als Ergebnis wird der erste Block der offenen Daten T & sub0;(1) erhalten.

Der Block der verschlüsselten Daten Т ш(1) ist die Anfangsfüllung N 1 , N 2 zur Erzeugung des zweiten Blocks der Chiffrierenskala Гш (2) . Der Block T w(1) wird in N 1 , N 2 geschrieben . In diesem Fall wird der Wert von τ 1(1) in das erste Bit N 1 eingefügt, der Wert von τ 2(1) wird in das 2. Bit N 1 usw. eingegeben. Der Wert von τ 32(1) wird in das 32-te Bit N eingegeben 1 ; Der Wert von τ 33(1) wird in das erste Bit N 2 eingefügt, der Wert von τ 34(1) wird in das 2. Bit N 2 usw. eingegeben. Der Wert von τ 64(1) wird in das 32-te Bit N 2 eingegeben. Die empfangene Füllung N 1 , N 2 wird im einfachen Austauschmodus gemäß den Anforderungen von Ziffer 3.1 verschlüsselt, der resultierende Block G r (2) wird im Addierer CM 5 mit dem zweiten Block der verschlüsselten Daten T w(2) bitweise Bit modulo 2 summiert. Als Ergebnis wird ein offener Datenblock T 0(2) erhalten.

Ähnlich werden in den Blöcken N & sub1; , N & sub2 ; Blöcke von verschlüsselten Daten Ti(2) , Ts(3) ..., Ts(M-1) sequentiell aufgezeichnet, aus denen im einfachen Ersetzungsmodus Gamma-Codes der Chiffre Fm(3)(4) , ..., Γω(Μ) . Die Blöcke der Chiffrier-Skala werden im Addierer CM 5 mit den Blöcken der verschlüsselten Daten T w(3) , T w(4) ..., T w(M) summiert, was zu Blöcken von offenen Daten T 0(3) , T 0( 4) , ..., T 0(M) , während die Länge des letzten Blocks der offenen Daten T 0(M) weniger als 64 Bits enthalten kann.

Simulationsmodus

Zur Bereitstellung eines Nachahmeschutzes von offenen Daten, bestehend aus M 64-Bit-Blöcken T 0(1) , T 0(2) , ..., T 0(M) , M ≥ 2 wird ein zusätzlicher Block von l Bits erzeugt (Nachahmung I l ). Der Simulationsvorgang ist für alle Verschlüsselungsmodi einheitlich.

Der erste Block der offenen Daten ist T 0(1) = (t 1(1) , t 2(1) , ..., t 64(1) ) = (a 1(1) (0), a 2(1) (0) (0), b 2(1) (0), ..., b 32(1) (0)) in die Speicherringe N 1 und N 2 geschrieben , wird in das 1. Bit N 1 der Wert t 1(1) = a 1(1) (0) eingegeben, der Wert t 2(1) = a 2(1) (0) wird in das 2. Bit N 1 eingeführt , usw. In dem 32-ten Bit N 1 wird der Wert von t 32(1) = a 32(1) (0) eingegeben; Der Wert t 33(1) = b 1(1) (0) wird in das 1. Bit N 2 usw. eingetragen. In die 32. Ziffer wird der Wert t 34(1) = b 32(1) (0) eingegeben N 2

Das Füllen von N 1 und N 2 erfährt eine Umwandlung entsprechend den ersten 16 Zyklen des Verschlüsselungsalgorithmus im einfachen Ersetzungsmodus gemäß den Anforderungen von Abschnitt 3.1. In der CMU wird die gleiche Taste verwendet, um die Blöcke der offenen Daten T 0(1) , T 0(2) , ..., T 0(M) in die entsprechenden Blöcke der verschlüsselten Daten T w(1) , T w(2) , ..., Tm(M) .

Die nach 16 Arbeitszyklen erhaltene Füllung von N 1 und N 2 mit der Form ( 1 1(1) (16), a 2(1) (16), ..., a 32(1) (16), b 1(1) ( 16), b2 (1) (16), ..., b32 (1) (16)) wird in CM 5 modulo 2 mit dem zweiten Block T 0(2) = (t 1(2) , t 2( 2) , ..., t 64(2) ). Das Summationsergebnis wird in N 1 und N 2 aufgezeichnet und einer Umwandlung entsprechend den ersten 16 Zyklen des Verschlüsselungsalgorithmus im einfachen Ersetzungsmodus unterworfen.

Die resultierende Füllung N 1 und N 2 wird in CM 5 modulo 2 mit dem dritten Block T 0(3) summiert, der letzte Block T 0(M) = (t 1(M) , t 2(M) , ... , t 64(M) ), wahlweise mit einem 64-Bit-Block auf Null gefüllt, wird in CM 5 modulo 2 mit der Füllung N 1 , a 1(M-1) (16) und 2(M-1) ( (M-1) (16), b 1(M-1) (16), b 2(M-1 ) . Das Summationsergebnis wird in N 1 , N 2 gespeichert und im einfachen Ersatzmodus für die ersten 16 Zyklen des Algorithmusvorgangs verschlüsselt. Aus der erhaltenen Füllung der Speicherringe N 1 und N 2 wählen wir das Segment I l = [a 32-l + 1(M) (16) und 32-l + 1(M) (16), ..., a 32(M) (16 )].

Imitovlyavka UND l wird über den Kommunikationskanal oder den Computerspeicher am Ende der verschlüsselten Daten übertragen, d.h. Tm(1) , Tm(2) , ..., Tm(M) und l .

Die empfangenen verschlüsselten Daten T w(1) , T w(2) , ..., T w(M) werden entschlüsselt, aus den erhaltenen Blöcken der offenen Daten T 0(1) , T 0(2) , ..., T 0(M) Und 'l , die dann mit der Nachahmung I1 verglichen wird, die zusammen mit den verschlüsselten Daten aus dem Kommunikationskanal oder dem Computerspeicher erhalten wird. Im Falle einer Nichtübereinstimmung von Nachahmungen werden die erhaltenen Blöcke der offenen Daten T 0(1) , T 0(2) , ..., T 0(M) als falsch betrachtet.

Der Wert des Parameters l (die Anzahl der Bits im Imitativ) wird durch die aktuellen kryptographischen Anforderungen bestimmt, wobei zu berücksichtigen ist, dass die Wahrscheinlichkeit, falsche Daten aufzugeben, 2 - l ist .