Unknackbare Verschlüsselung mit dem MPR in ein paar Zeilen selbst implementieren

Moderator: MVogt

Post Reply
User avatar
Theo_Gottwald
Posts: 367
Joined: 03. Oct 2009, 08:57
Location: Herrenstr.11 * 76706 Dettenheim
Contact:

Unknackbare Verschlüsselung mit dem MPR in ein paar Zeilen selbst implementieren

Post by Theo_Gottwald » 06. Apr 2019, 19:44

Wie kann heutzutage jemand behaupten, dass ein Verschlüsselung unknackbar ist, "heute und in Zukunft"?
Jede Verschlüsselung ist bisher noch geknackt worden oder?
Und was ist mit Quantencomputern?

Nun das sogenannte OTP (One-Time-Pad) ist mathematisch gesehen unknackbar.
Man kann sich das vorstellen wie einen Haufen Knete, die eine bestimmte Form annimmt wenn man eine Maske darauf presst.
Aber je nach dem welche Maske man darauf presst kann die Knete Jede Form annehmen!
Wie soll man dann erraten, welche Form die Knete zuvor mal hatte?

Wieso sollte es unknackbar sein? "Heute und in Zukunft"?

Der Grund ist, dass man auf diese Weise - also mit XOR -alle 256 ASC-Codes erzeugen kann, je nach verwendetem
Verschlüsselungs-PAD. Das bedeutet im Umkehrschluss dass man aus jedem Text jedes beliebige Ergebnis erzeugen kann!
Je nachdem welchen Schlüssel man zum Entschlüsseln verwendet ist jedes denkbare Ergebnis möglich.
Das macht die Verschlüsselung unangreifbar.

Das ist der Grund warum das OTP - richtig angewendet - weder durch statistische Verfahren noch durch Brute-Force knackbar ist.
Denn wenn man das Ergebnis nicht kennt kann man durch probieren jedes Ergebnis damit erzeugen und weiss nicht ob es der Originaltext ist.

Wir werden unten eine Beispiel-Verschlüsselung nach diesem Prinzip mit dem MPR in ein paar Zeilen codieren.

Ausnahmen gibt es wenn man ein zu kleines PAD verwendet, das PAD mehrfach verwendet UND wenn dann Teile des Klartextes schon bekannt waren. Aber deswegen nennt man es auch "One Time Pad".

So eine OTP-Verschlüsselung ist dabei ganz einfach. Sie ist einfacher als viele komplexe Verschlüsselungen.
Trotzdem kann man die Verschlüsselung mehrfach - beliebig oft mit unterschiedlichen Pads - auf einen Quelletext anwenden.
Richtig angewendet ergibt sich dadurch aber kein Sicherheitsvorteil mehr.
Ein auf einem korrekt erstellten Pad basierendes OTP ist sofort nach einer Anwendung UNKNACKBAR.
Außer man hat das korrekte Pad zur Entschlüsselung.

Warum ist es gut wenn man die Verschlüsselung selbst implementiert?
Wenn man eine Verschlüsselung selbst implementiert weiss man genau was da passiert.
Man versteht was man getan hat und man kennt alle Schwachstellen.
Verwendet man gekaufte Verschlüsselungen weiss man nicht wie es funktioniert, welche Schwachstellen und Hintertüren
ggf. dort implementiert worden sind und man hat auch keine Idee, wie weit diese gekaufte/komplexere Verschlüsselung
in der Zukunft (mit Quantencomputern?) noch sicher sein wird.
Kurz: Mit dem MPR behält man die Kontrolle bis zum letzten Bit.

Im Folgenden sehen wir die entsprechende Implementierung von zwei solchen Algo's mit dem MPR.
Das Erste ist eine einfache XOR-Verschlüsselung mit nur einem Buchstaben als Verschlüsselungscode.
Das ist natürlich leicht zu knacken. Aber es zeigt prinzipiell wie das geht.

Das Zweite Unterprogramm ist nun schon die Pad-Verschlüsselung implementiert,
das Pad wird hier allerdings als Text in $$COD angegeben.

Das Pad wird so oft wiederholt, bis eben zum Ende des Quelltextes.
Bedeutet, wenn der Quelltext 1000 Byte lang ist und das Pad 10 Bytes dann wird das Pad eben 100 Mal wiederholt.
Ist das Pad 10 kb groß wird das Pad nicht wiederholt sondern es werden die ersten 1000 Byte verwendet (eben die Länge des Quelltextes).

Das ist kryptographisch nun nicht ganz korrekt da das Pad ja wiederholt wird.
Das ist dann ein Problem wenn Teile des Quelltextes einem Angreifer bekannt sind.
Dann kann er Teile des Pads ermitteln und damit alles entschlüsseln.

Das liegt aber nicht am Skript denn das Skript funktioniert mit beliebig großen Pads,
man kann also einfach ein längeres Pad nehmen.

Man kann das Pad auch als Datei laden, hier habe ich das PAD einfach "inline" rein geschrieben.

WICHTIG:
Das Skript muss neben einer Datei "Klartext.txt" liegen.
Diese Datei muss da sein, denn diese wird dann ver- und entschlüsselt!

Code: Select all

KRM\2
VAR\$$INF=$ev4$\Klartext.txt
VAR\$$OUF=$ev4$\Cryptext.txt
VAR\$$COD=F
GSB\XorFile

VAR\$$INF=$ev4$\Cryptext.txt
VAR\$$OUF=$ev4$\DeCryptext.txt
VAR\$$COD=F
GSB\XorFile

VAR\$$INF=$ev4$\Klartext.txt
VAR\$$OUF=$ev4$\CryptPadtext.txt
VAR\$$COD=Padtext
GSB\XorFilePad

VAR\$$INF=$ev4$\CryptPadtext.txt
VAR\$$OUF=$ev4$\DeCryptPadText.txt
VAR\$$COD=Padtext
GSB\XorFilePad
@

'--------------------------------
' File Single Byte XOR
:XorFile
CFF\$$INF>$$FIL
GSL\$$FIL>$$LEN
ASC\$$COD>$$COI
VAR\$$ERG=
FOR\$$LOP|1|$$LEN
   GSS\$$LOP,$$LOP|$$FIL>$$LEA   
   ASC\$$LEA>$$LEB   
   BIT\xor|$$LEB|$$COI>$$RES
   CHR\$$RES>$$REA
   VAR\$$ERG=$$REA$$ERG
NXT\
CTF\$$OUF<$$ERG
RET\
'--------------------------------
' File XOR using PAD
:XorFilePad
CFF\$$INF>$$FIL
GSL\$$FIL>$$LEN
GSL\$$COD>$$PAL
VAR\$$ERG=
' Pad  Counter
VAR\$$PAI=1
FOR\$$LOP|1|$$LEN
   ' Pad Byte holen
   GSS\$$PAL,$$PAL|$$COD>$$COF
   ASC\$$COF>$$COI
   ' Byte aus Quelldatei holen
   GSS\$$LOP,$$LOP|$$FIL>$$LEA
   ASC\$$LEA>$$LEB   
   ' Ver- ode Entschlüsseln
   BIT\xor|$$LEB|$$COI>$$RES
   CHR\$$RES>$$REA
   ' AN Ergebnis anhängen
   VAR\$$ERG=$$REA$$ERG
   ' Pad-Counter je nach Pad-Länge zurücksetzen auf 1
   VIC\$$PAI   
   IVV\$$PAI>$$PAL
      VAR\$$PAI=1
   EVV\
NXT\
CTF\$$OUF<$$ERG
RET\
'--------------------------------
Details zu PADs:
Am besten verwendet man eine Reihe zufällig generierter Zahlen von 0-255 als Pad. Die Länge ist im Optimalfall mindestens so lange wie der zu verschlüsselnde Klartext. Im professionellen Bereich kommen dafür spezielle
CRNG's (Kryptographische Zufallsgeneratoren) zum Einsatz.
Der nächste Level bei der PAD Erzeugung ist dann nur noch mit dedizierter Hardware.
Sinnvollerweise sind PC's die PADs erzeugen gar nicht im Netzwerk so dass dort auch keiner aus der Ferne zugreifen kann.

PAD's mit dem MPR erzeugen?
Der MPR hat derzeit keinen CRNG eingebaut deswegen kann man damit nur "Normal sichere" Pads ohne Weiteres erzeugen.
Mit dem MPR kann man sich jedoch behelfen in dem man mehrere zufällige Pads erzeugt und diese miteinander zum finalen Pad verschlüsselt. Das kann man sehr komplex machen und so einen hohen Grad an Sicherheit erreichen.

Wer sich für Verschlüsselungen interessiert kann Details in diesem Video hier sehen:
https://youtu.be/I58ZxIRN4h8

HINT für SPR-Anwender:
Der SPR hat bereits fix und fertig eingebaute OTP-Verschlüsselungen die maschinencode-optimiert sind.
Im SPR sind auch echte CRNG's implementiert.
Ab dem nächsten Update bekommt der SPR dazu auch noch umfangreichere BIT-Befehle die direkt Value oder Binary verstehen von 8 bis 64 Bit. Zudem kann der SPR schon immer Binärzahlen direkt verstehen wenn man das "&B" davor schreibt. Also zum Beispiel: "&B10101".
Apropos SPR: Wer viele solche Dinge tun will dem ist daher der SPR zu empfehlen, weil der ein "Krypto-Construction Set" mit "Crypto-View"-Tool beinhaltet. Dazu der Hinweis, dass jeder der geschäftlich eine MPR Lizenz hat, für privat kostenfrei eine SPR Lizenz bei mir anfordern kann.

Post Reply

Return to “Package Robot”

Who is online

Users browsing this forum: No registered users and 2 guests