Faszinierende Kryptographie oder Forschung zur reversiblen Verschlüsselung in PHP

Eine der Hauptwahrheiten der Kryptographie ist, dass Sie in diesem Bereich nichts erfinden sollten, wenn Sie kein Profi sind. Dies ist teilweise richtig, weil das Beste seit Jahrzehnten auf dem Gebiet der Informationstechnologie erfunden, gelitten und seit Jahrzehnten verwendet wird. Die andere Seite der Wahrheit ist, dass die Entwicklung eines bestimmten Wissensbereichs nur mit einem ständigen Zustrom frischer Ideen und origineller Lösungen erfolgt.

Aus offensichtlichen Gründen werden wir uns nicht mit Giganten der industriellen Kryptographie wie AES betrügen, sondern sozusagen mit Blackjack und Freuden in unsere eigenen kryptografischen Umfragen eintauchen.

Teilweise, weil es interessant ist, teils, weil Sie beim Modellieren von etwas Eigenem und beim Vergleichen mit anerkannten Standards den Kontrast, die effektiven Lösungen und die offenen Auslassungen klar erkennen und verstehen, wonach Sie streben können, um die Effizienz zu steigern.

Aber schon ganz Wasser.

Nehmen wir an, unsere Webanwendung ist in PHP geschrieben, benötigt eine reversible Verschlüsselung und wir glauben, dass wir unser eigenes Verschlüsselungssystem schreiben können.

Wir werden also unser eigenes System der reversiblen Verschlüsselung mit einem privaten und einem öffentlichen Schlüssel schreiben, der die folgenden Merkmale eines etwas sichereren kryptografischen Algorithmus aufweist:

  1. Das Vorhandensein von Rauschzeichen in der resultierenden Chiffre.
  2. Informationen in jedem Kanal des Absender-Ziels werden mit einem privaten Schlüssel verschlüsselt, und die Korrespondenzfunktion ist für jeden Schlüssel eindeutig.
  3. Jede Nachricht erhält einen Digest-Code - einen eindeutigen Code, der eine Funktion des privaten Schlüssels und der ursprünglichen Nachricht ist. Dies ist erforderlich, um die Eindeutigkeit der Korrespondenzfunktion "Quellzeichen <=> codiertes Zeichen" nicht nur für den Kanal "Absender-Ziel", sondern auch für jede einzelne Nachricht zu erreichen.

    Selbst wenn wir uns vorstellen, dass bekannt wurde, dass die codierten und ursprünglichen Zeichen durch die Verwendung einer kryptografischen Analyse, beispielsweise einer Frequenzanalyse, für eine bestimmte Nachricht übereinstimmen, gibt dies keine Präferenzen bei der Untersuchung einer anderen Nachricht.
  4. Um die Frequenzanalyse zu erschweren, werden wir jedes Quellnachrichtensymbol mit zwei Chiffrensymbolen codieren.

Also, was ist passiert?

Tatsächlich können Sie das Endergebnis hier sehen.

SymCoder-

Klasse Die SymCoder- Klasse enthält Verschlüsselungs- und Entschlüsselungsmethoden.

Die Verschlüsselung erfolgt mit der Methode code (), die die ursprüngliche Nachricht am Eingang empfängt.

Hier erstellt die Nachricht in der generierten Korrespondenztabelle in tab_coded eine verschlüsselte Nachricht, die an den Rändern und im Inneren mit Rauschsymbolen verdünnt ist.

Rauschsymbole sind übrigens für jeden Absender-Ziel-Kanal eindeutig, da sie mit dem Kanalschlüssel generiert werden, jedoch nicht nur für Nachrichten. Die für die Verschlüsselung in code_symbols verwendeten Zeichen sind einige Satzzeichen und Zeichen wie%, @ usw.

Für jedes codierte Zeichen gibt es aus offensichtlichen Gründen zwei Zeichen aus code_symbols, von denen es ein Vielfaches weniger als codierte Zeichen gibt.

Die übereinstimmende Tabelle create_tab_coded wird unter Verwendung der Übersetzung des Nachrichtenschlüssel-Hash in ein Array erstellt, dessen Anzahl der Elemente der Anzahl der Elemente im Codezeichen-Array entspricht. Die Position des Beginns der Umgehung von zweistelligen Codes ist ebenfalls immer unterschiedlich und mit der Kanalschlüssel verknüpft. Auf diese Weise kann sichergestellt werden, dass der Algorithmus zum Umgehen codierter Zeichen und deren Entsprechung zu Codezeichen immer (gut oder garantiert oft) unterschiedlich ist.

Zum Beispiel sieht die Nachricht "Hallo Welt", die verschlüsselt wird, folgendermaßen aus:

Digest-a00bf11d-&?==&!&?.@.@=!=-.?&1.#&?=:.:.1%!&-%@&@%~&1^#=?%%.!%+.?.~=?..&?%&&:%~.#%@&1&1&#.#=?.#.?.!&#&1==&=.-=!

Aber dieselbe Nachricht wird erneut verschlüsselt:

Digest-a00bf11d-=:.?=:&!.?.1&-&#=:=?.?.=.?.!&=%!=-%@=!%~.=^#.1%%.!%+=:.~.@..==%&&1%~.1%@=?.@.!&=.!&@=:&1.==:=!.1&#&:

Es ist ersichtlich, dass der Digest derselben Nachricht derselbe ist, aber die Verschlüsselung wird unterschiedlich - Rauschsymbole werden durch willkürliche Übereinstimmung und in zufälliger Reihenfolge für jede neue Verschlüsselung hinzugefügt.

Nachrichten haben eine Redundanz, die mit zunehmendem Nachrichtenvolumen abnimmt und bis zu 10% des Rauschens im Grenzbereich erreicht (bei den kürzesten Nachrichten erreicht das Rauschen 90% und mehr Prozent). Die Mindestlänge einer verschlüsselten Nachricht beträgt 116 Zeichen. Einer der wenigen Nachteile dieser Verschlüsselungsmethode ist eine doppelte Zunahme der codierten Nachrichten.

Die Dekodierung ist die umgekehrte Übersetzung der Form „Codesymbol“ - das ursprüngliche Symbol mit dem aus der Nachricht ausgeschnittenen Rauschen. Was könnte der Schlüssel sein? Im Prinzip jede Zeichenfolge, die für jedes Paar des Ziel-Empfänger-Typs eindeutig ist.

Wenn Sie beispielsweise einen Messenger mit Nachrichtenverschlüsselung erstellen, kann in diesem Fall die einfachste Version des privaten Schlüssels md5 ($ user_id_1. $ Salt. $ User_id_2) sein. Der Schlüssel ist dann für jeden Nachrichtenkanal eindeutig.

Jetzt auch beliebt: