Franz Scheerer, Fritz-Philippi-Stra&szig;e 34, scheerer.software@gmail.com, Telefon 0611 168 93 98
Rabin Signatur

Die perfekte Stromchiffre

Link Spritz-Cipher

Die perfekte Hashfunktion

Link MD7-Hash
Download
>>> f=open("MD.py",'r')
>>> m=f.read()
>>> h(m)
'3AC65C70484C014F7541E74C42E902EB14D376FE5D8CBA215BC834EDE2BEDB7F'
>>> 



Buch: One-Time-Pad-Verschlüsselung


Bei Amazon bestellen ISBN-13: 978-3737539296

RC4-Grundidee: Die Bytewerte 0 bis 255 werden „gemischt”, so ähnlich wie beim Kartenspiel. Zwei Zeiger i,j werden neu berechnet, dort zwei „Karten” gezogen und vertauscht und aus den Kartenwerten die Position einer neuen Karte errechnet. Der Wert der neuen Karte ergibt den Schlüsselwert K. Dieser wird zum Verschlüsseln eines Zeichens benutzt. Varianten wie die neue, verbesserte Variante Spritz verwenden nicht nur zwei, sondern sogar bis zu vier Karten i,j,k und z, um daraus die Position der Schlüsselkarte zu berechnen.

Eine ganz andere Methode

Wir teilen eine Zahl durch zwei, wenn es eine gerade Zahl ist, sonst multiplizieren wir mit drei und addieren eins. Vermutlich enden alle solche Zahlenfolgen mit den sich ständig wiederholenden Zahlen 1, 4, 2, 1, ...
Diese Zahlenfolge ist nach dem Mathematiker Collatz benannt. Wir generieren mit diesen Zahlen eine Zufallsfolge.



Zwei Zeiger und 256 vertauschte Karten

Eine Uhr mit zwei Zeigern. Ein Zeiger wird immer um eins weitergedreht, der andere Zeiger um den Wert auf der Karte, auf die der Erste zeigt. Die Karten, auf die beide Zeiger zeigen, werden vertauscht und die Karten somit ständig neu gemischt. Der zweite Zeiger springt scheinbar zufällig herum. Die Position dieses Zeigers oder der Wert auf den er zeigt, könnte als One-Time-Pad genutzt werden. Die Zahl der möglichen Vertauschungen der 256 Karten und Zeigerstellungen ist giantisch (256!)*(256*256). Selbst alle Computer dieser Erde können nicht annähernd alle durchtesten.

WARNUNG

Ein Problem gibt es doch! Wenn der zweite Zeiger um genau eine Position weitergedreht ist, im Vergleich zum ersten Zeiger und auf die Eins, den Wert 1, zeigt. Was passiert dann?

Der erste Zeiger wird weitergedreht, zeigt dann ebenfalls auf die Eins. Der zweite Zeiger wird dann einen Schritt weitergedreht (Die Eins!). Die Karten werden getauscht und was ist passiert? Der zweite Zeiger ist wieder genau eine Position weitergedreht und zeigt auch erneut auf die Eins. Uups - daran ändert sich jetzt nichts mehr. Nach nur N x (N-1) Schritten, wenn wir N Karten haben, wiederholt sich alles.

Fazit

RC4 ist doch ein Bisschen zu simpel. Mindestens sollte noch eine Substitution erfolgen wie bei VMPC.

Mit Zufallszeiger

Wir können RC4 noch perfektionieren, indem wir den ersten Zeiger nicht regelmäßig umlaufen lassen sondern dafür sorgen, dass bereits der erste Zeiger scheinbar völlig regellos umherspringt. Ja, wir bauen einen zweistufigen RC4. Wir benutzen den RC4-Algorithmus also zunächst nur dazu, um scheinbar völlig zufällig erscheinende Position des ersten Zeigers i zu berechnen. Dieser zweistufige RC4 ist endgültig unknackbar.

VMPC sollte reichen

Aber auch bereits mit einer winzigen Änderung kann der RC4-Algorithmus wesentlich verbesset werden. Mit einer zusätzlichen Vertauschung. Wir drehen den zweiten Zeiger jetzt erneut und zwar auf die Position, auf die er nach der Drehung zeigt (j = s[j]). Dank dieser kleinen Änderung, können die kurzen Zyklen nicht mehr auftreten. Dieser abgeänderte Algorithmus ist als VMPC bekannt. Wenn wir mit beiden Zeigern in der gleichen Position starten, zum Beispiel beide null, ist auch RC4 kaum noch knackbar. Aber bei VMPC können wir, mit völlig beliebigen zufällig gewählten Positionen der Zeiger starten. Wie das scheinbar zufällige One-Time-Pad aus den Zeigerposition und den Werten auf die sie zeigen berechnet wird, ist nicht entscheidend. Wir könnten auch ganz schlicht die Position des zweiten Zeigers verwenden. Mein Tipp, wir nehmen RC4, besser noch VMPC mit der zusätzlichen Vertauschung als Vorlage und machen es noch ein winziges Bisschen komplizierter - fertig ist die perfekte Chiffre. Tatsächlich unknackbar, wenn das Passwort nicht mehrfach verwendet wird. Wenn Details des Verfahrens unbekannt sind, kann die Chiffre auch mit noch so viel Rechenpower niemals geknackt werden.

Linux/c

#include <stdio.h>
#include <string.h>

#define N 256

main(int argn, char **argv){
  int s[N];
  int klen,t,i,j=0;
  int w=3, c;

  if (argn != 2){
    fprintf(stderr, "usage: cat file | ./a.out password\n");
    return 0;
  }
  klen = strlen(argv[1]);
  for (i=0;i < N; i++) s[i] = (i + klen) % N;
  for (i=0;i < N; i++){
    j = (j + s[i] + argv[1][i % klen]) % N;
    t = s[i] + s[j];
    s[i] = t - s[i];
    s[j] = t - s[j];
  }
  i = s[0];
  j = s[0] + s[1];
  while ((c = fgetc(stdin)) != -1){
    i = (i + w) % N;
    j = (j + s[i]) % N;
    j = s[j];
    if (i == 3)
       w = (w + 2) % N;
    t = s[i]; s[i] = s[j]; s[j] = t;
    printf("%c", c ^ t);
  }
}


#include <stdio.h>
#include <string.h>

#define N 256
#define ROUNDS 13

main(int argn, char **argv){
  int s[N];
  int klen,t,i,j=0;
  int r,c;

  if (argn != 2){
    fprintf(stderr, "usage: cat file | ./a.out password\n");
    return 0;
  }
  klen = strlen(argv[1]);
  for (i=0;i < N; i++) s[i] = (i + klen) % N;
  for (r=0; r < ROUNDS; r++)
  {
    for (i=0;i<N; i++){
      j = (j + s[i] + argv[1][i % klen]) % N;
      t = s[i] + s[j];
      s[i] = t - s[i];
      s[j] = t - s[j];
    }
  }
  i = s[0];
  j = s[0];
  while ((c = fgetc(stdin)) != -1){
    i = (i + 1) % N;
    j = s[(j + s[i]) % N];
    t = s[i] + s[j];
    s[i] = t - s[i];
    s[j] = t - s[j];
    printf("%c", c ^ s[t % N]);
  }
}

Mit Prüfsumme

Meine Tankstelle
Quelldatei 5.c

Kombiniert mit der ENIGMA

Wir können einen deterministischen Pseudo-Zufallsgenerator auch benutzen zufällige, jedenfalls zufällig erscheinende, Substituition zu berechnen.

Wir können auch die Verkablung in Rotormaschinen wie der bekannten ENIGMA auch durch einen solchen Zufallsgenerator bestimmen, ebenso die Rotorstellungen. Damit erhalten wir eine wahrhaft extrem sichere Verschlüsselung, sogar mit Prüfsumme.

Javascript - Download im Internet

Mit Javascript wird auf dem eigenen Endgerät, zum Beispiel Smartphone, ver- und wieder entschlüsselt. Perfekt - Ende-zu-Ende - was dazwischen passiert ist egal, weil die Nachricht nicht entschlüsselt werden kann.

Einfach irgendwo im Internet herunterladen, leicht modifizieren, fertig ist die perfekte Chiffre, die keiner knackt. Nein - die NSA schon gar nicht, wenn jeder seine eigene Variante von RC4/Spritz benutzt.



Sichere Verschüsselung - One-Time-Pad-like

Es ist möglich. Die Grundidee ist das One-Time-Pad (OTP) mit einmaligem, geheimen Schlüssel ebenso lang wie der „Klartext”. Ein solches, sehr einfaches Verschlüsselungsverfahren (Stromchiffre) heißt Spritz.

Das One-Time-Pad ist eine Zufallsfolge und wird aus einem nur einmalig zu verwendenden Schlüssel erzeugt. Der „Klartext“ wird Zeichen für Zeichen mit der Zufallsfolge verknüpft, um die Daten zu verschlüsseln.

Das Verfahren berechnet eine zufällig gewählte Vertauschung der Reihenfolge oder Substitution der Zahlen 0 bis 255. Diese „S-Box” wird in einem ersten Schritt aus dem geheimen Schlüssel berechnet und anschließend zur Berechnung der Zufallsfolge verwendet. Nach jedem Berechnungsschritt werden zwei Werte der „S-Box” vertauscht. Für die Besetzung der „S-Box” und die Werte zweier weiterer Variablen gibt es praktisch unbegrenzt viele Möglichkeiten etwa zwei hoch eintausendsiebenhundert, weit mehr Möglichkeiten als wir uns überhaupt vorstellen können, mehr als es Atome im Sonnensystem gibt.

Das Passwort kann aus der gesamten Nachricht und der Zeit in Sekunden, zur Vereinfachung auch Stunden oder Tage, seit einem festen Zeitpunkt berechnet weren. Dazu könnte eine Hashfunktion benutzt werden, aufzurufen auf der Linux-Console mit sha1sum. Wird RC4 oder Spritz mit diesem einmaligen Passwort als Schlüssel benutzt, ist das Verfahren entsprechend bekannter Analysen absolut sicher. Es gibt auch noch quasi beliebig viele Möglichkeiten noch Details an dem Verfahren zu variieren. Die Sicherheit wird dadurch keinesfalls negativ beeinflusst, vorausgesetzt die Chiffre ist NICHT komprmierbar. Bei Geheimhaltung der im Einzelfall benutzen Variante bleibt das Verfahren sogar dann sicher, wenn das Passwort dem Hacker bekannt ist.

Wie funktioniert Spritz?

Wie WWWCrypt 2.0 basiert Spritz auf einer Variante des oben beschriebenen Algorithmus. In WWWCrypt 2.0 gibt es zusätzlich eine Rückkopplung, selbst synchronisierende Chiffre, auch Autokey genannt. Die bereits berechneten verschlüsselten Zeichen verändern also die Berechnung der weiteren Schlüsselzeichen, so dass eine vollkommen veränderte Chiffre, ab dem ersten abweichenden Zeichen, resultiert. Die Initialisierung wird wiederholt durchlaufen und die ersten Werte der Zufallsfolge werden ausgelassen. Das grundlegende Prinzip des Verfahren wird mit der Abbildung aus Wikipedia erläutert. Eine Vertauschung der Reihenfolge, mathematisch Permutation oder Substitution (S-Box) der 256 Bytewerte (0-255) und zwei Zeiger i,j sind Grundlage zur Berechnung des Schlüssels K (für englisch Key). K ist ein Wert der Zufallsfolge, die im OTP-Verfahren zur Anwendung kommt.

Datensicherheit durch Verschlüsselung mit Passwort

Daten, das heißt beliebige Texte, Bilder und Dokumente, also Dateien, einfach alles was im Computer gespeichert werden kann, können durch ein Verschlüsselungsverfahren gegen unberechtigtes Lesen und Kopieren und zugleich gegen Manipulationen zuverlässig geschützt werden. Die Daten werden dabei mittels eines Passworts in eine nicht lesbare Form konvertiert, also verschlüsselt (encrypt). Entschlüsselt (decrypt), also wieder lesbar gemacht werden können die Dokumente nur bei Kenntnis des Passworts. Die einzige Möglichkeit die Dokumente zu lesen, ohne Kenntnis des Passworts, ist dieses zu erraten. Bei einem hinreichend langem, zufälligem Passwort ist dies praktisch unmöglich.

Sie glauben es nicht?

Jede Chiffre kann doch geknackt werden. Vergessen Sie es! Eine WWWCrypt 2.0-Variante ist faktisch sicher, solange das Passwort geheim bleibt und nicht mehrfach benutzt wird. Wenn sogar die Software, weder im Quellcode noch als ausführbare Datei, veröffentlicht wird und geheim bleibt, gilt dies allemal.

Ubuntu und Knoppix

Durch Verschlüsselung können die Daten im Internet preiswert und einfach gespeichert werden ohne die Datensicherheit zu gefährden, obgleich die von vermeintlichen Experten oft in Abrede gestellt wird. Die Festplatte des Rechners wird damit gar nicht mehr zwingend benötigt. Der flüchtige Arbeitsspeicher, der beim Ausschalten des Rechners automatisch gelöscht wird, reicht vollkommen aus. Ideal sind Linux-Systeme (Ubuntu oder Knoppix), die von der nicht beschreibaren CD oder DVD gestartet werden. 

Es wird häufig bezweifelt, dass es wirklich sichere Verschlüsselung möglich sei und besondere Spezialprogramme erfordere. Eindeutig Unsinn - das Einmalblock- oder One-Time-Pad-Verfahren ist sogar absolut mathematisch beweisbar sicher. Bei diesem Verfahren wird ein einmaliger und rein zufälliger geheimer Schlüssel ebenso lang wie die Nachricht verwendet. Dieser eventuell sehr lange Schlüssel, eine Zufallsfolge, kann aus einem wesentlich kürzeren Passwort berechnet werden. Zur Berechnung der Zufallsfolge können relativ einfache WWWCrypt 2.0-Varianten benutzt werden. Wird das Passwort nur einmalig benutzt und bleibt geheim, ist ein solches Verfahren wirklich sicher.

Rückwirkung der Nachricht auf die Zufallsfolge

Eine wesentliche Verbesserung und Vereinfachung wird erreicht, wenn die Nachricht auch in die Berechnung der Zufallsfolge mit einfließt. In diesem Fall kann das gleiche Passwort mehrfach genutzt werden und eine Prüfsumme ist nicht zwingend erforderlich. Durch die Abhängigkeit der Zufallsfolge von den Daten werden auch Manipulationen am Text weitgehend ausgeschlossen, die sonst möglich wären. Mit höchster Sicherheit werden Manipulationen ausgeschlossen, wenn die Daten mit einer Software wie gzip vor der Verschlüsselung komprimiert werden, da dabei immer auch eine Prüfsumme berechnet wird. Mit der Software tar können die Daten aus einem ganzen Verzeichnis in einer Datei zusammengefasst werden, die mit gzip komprimiert und anschließend verschlüsselt werden kann.

Beispielhafte Implementierung einer WWWCrypt 2.0-Variante

Im Vergleich zum Standard-WWWCrypt 2.0 wird die Initialisierung mehrfach (hier 11 mal) durchlaufen. Die Zustands-Variablen i und j beginnen hier mit dem Startwert 7, statt 0 in Standard-WWWCrypt 2.0. Die ersten 1023 Zufallswerte werden übersprungen. Die zufällig besetzte Variable j wird um den verschlüsselten Bytewert erhöht.

Trotz seiner Einfachheit kann diese Software kaum noch wesentlich verbessert werden. Die Berechnung ist auf jeder Hardware extrem schnell, meist wesentlich schneller als die Datenübertragung. Die Zufallswerte ändern sich mit der Nachricht. Ein Passwort könnte sogar mehrfach verwendet werden. Maximale Sicherheit wird mit einer individuellen, in wenigen Details modifizierten, Software erreicht, wenn diese Details geheim bleiben. Mit einer solchen Software kann durch Ende-zu-Ende-Verschlüsselung maximale Sicherheit erreicht werden zu sehr geringen Kosten.


Die Software (Quellcode) kann mit praktisch jeden C-Compiler auf praktisch jedem Rechner, insbesondere mit dem GNU C-Comiler gcc unter Linux, übersetzt werden. Die Implementierung basiert auf Wikipedia.

Download: Quellcode

Textverschlüsselung

Mit der folgenden Variante rc47.c können Texte verschlüsselt werden. Es werden nur 96 Zeichen beginnend mit dem Leerzeichen (ASCII-Code 20h) und dem Zeichen für einen Zeilenumbruch (ASCII-Code 0Ah) verarbeitet.

Download: Quellcode


Testlauf mit Ubuntu

ubuntu@ubuntu:~$ sha1sum arc4.c
aa4e0edec3ad925cd5c75be71ffb8f6d025b350c  rc4.c
ubuntu@ubuntu:~$ gcc arc4.c
ubuntu@ubuntu:~$ cat arc4.c | ./a.out pw123 > r
ubuntu@ubuntu:~$ cat r | ./a.out pw123 D > arc4.copy
ubuntu@ubuntu:~$ diff arc4.c arc4.copy
ubuntu@ubuntu:~$ gzip arc4.copy
ubuntu@ubuntu:~$ ls -l arc4.c*
-rw-r--r-- 1 ubuntu ubuntu 1590 2011-03-15 15:53 arc4.c
-rw-r--r-- 1 ubuntu ubuntu  692 2011-03-17 17:58 arc4.copy.gz
ubuntu@ubuntu:~$ gzip r
ubuntu@ubuntu:~$ ls -l r.gz
-rw-r--r-- 1 ubuntu ubuntu 1615 2011-03-17 17:58 r.gz

Externe Links
Externer Link (Javascript)


Verschlüsselung ein Kinderspiel


NEU: Collatz-Zahlen zur Verschlüsselung


Da ist die Software:
ubuntu@ubuntu:~$ sha1sum Collatz.py 9ab1f6af067a92ebe7ccea52cac9925171d38500 Collatz.py

NEU: One-Time-Pad zur Verschlüsselung


Da ist die Software: (spritz.c - 17. Dezember 2014)
ubuntu@ubuntu:~$ ubuntu@ubuntu:~$ sha1sum
08bd1e342c0cec060052125d590b24d2ab07d9bb spritz.c
ubuntu@ubuntu:~$
Die Theorie (Ron Rivest) Enigma-Simulator Facebook

NEU: Verschlüsselung mit Tablet und Smartphone


Das Crypto-Phone

Franz Scheerer (Iaktueller.de) übernimmt keine Haftung für externe Links.
Adresse: Fritz-Philippi-Straße 34, 65195 Wiesbaden, Tel. 0611 168 93 98, scheerer.software@gmail.com

externe Links

Challenge-Response authentication system


Enigma


Enigma 158 Millionen mal Millionen mal Millionen