Verschlüsseln ganz einfach Bit für Bit

Avatar von OlbersD OlbersD - 23.07.12 19:16 Tatsächlich ist Verschlüsselung mit dem Computer ganz einfach. Der Grund dafür ist die Tatsache, dass im Computer Bilder, Text, Musik, einfach alles als eine Folge von Nullen und Einsen betrachtet werden kann.

Daher genügt letztlich ein Verfahren, dass ein Bit, eine Null oder eine Eins, verschlüsseln kann. Es gibt offenbar nur zwei Möglichkeiten. Das Bit bleibt unverändert oder in den anderen Wert (0->1, 1->0) verwandelt. Zum Verschlüsseln genügt also ein Bit. Eins heißt verändern, Null heißt bleibt unverändert. Wenn jetzt Bit für Bit mit zufällig gewählten Bits verschlüsselt wird, haben wir das One-Time-Pad, dass bekanntlich unknackbar ist.

Damit ist das Problem der Verschlüsselung auf die Erzeugung einer Folge von Zufallsbits zurückgeführt. Wenn Sender und Empfänger mit einer Software die gleiche Zufallsfolge erzeugen können, dann können sie sich geheime Botschaften austauschen.

Es bleibt nur das Problem, die Software zur Erzeugung der Zufallsfolgen auszutauschen. Dies ist auch kein großes Problem, da eine solche Software zum Beispiel auf einer Mirco SD Karte, nicht größer als ein Fingernagel, ausgetauscht werden kann.
mehr bei yigg.de

Die News gefällt Dir? Gib ihr ein yigg!

4

Kommentare: (17)

  • von OlbersD - 23.07.12 19:23 Genau, nicht (nur) ein Passwort wird geheimgehalten, sondern am besten die gesamte Software zur Erzeugung der Zufallsfolge. Es gibt nämlich quasi unendlich viele Möglichkeiten eine zufällig erscheinende Bitfolge zu berechen, wobei die Bitfolge ohne Kenntnis des Algorithmus der Berechnung praktisch nicht von einer durch Münzwurf erzeugten Zufallsfolge unterschieden werden kann.

  • von OlbersD - 23.07.12 19:36 Es gibt auch eine sehr zuverlässige und einfache Methode, die Güte des Zufallsgenerators zu prüfen. Diese beruht auf der Tatsache, dass sich zufällig Bitfolgen nicht komprimieren lassen. Mit einem guten Zufallsgenerator erzeugt Zufallsfolgen können daher mit einer Standardsoftware wie gzip nicht komprimiert werden.

  • von OlbersD - 23.07.12 19:44 Bereits mit einem total simplen Verfahren wie RC4, auch ARC4 oder Arcfour genannt, lassen sich Bitfolgen erster Güte prduzieren. Diese Verfahren können auch in vielen Details variirt werden, so dass die Zahl der Algorithmen, die zu völlig unterschiedlichen Bitfolgen führen, quasi unbegrenzt ist.

  • von OlbersD - 23.07.12 19:45 Die Brute Force Methode, das ausprobieren aller möglcihen Schlüssel, ist damit praktisch ausgeschlossen.

  • von phantadu - 23.07.12 20:53 Genial. Aber das wäre der Tod für zig Tausend Arbeitsplätze und der Staat hätte keine Kontrolle über uns. Drum bin ich ziemlich sicher, dass es immer Lücken geben wird...

  • von meinefinanzanlagen - 23.07.12 22:16 Das würde aber bedeuten, dass der "Schlüssel" genauso groß ist wie das Datum selbst.

    Willst Du 50MB verschlüsseln muss Deine Festplatte min. 100MB groß sein.

  • von OlbersD - 24.07.12 10:24 100 MB ist ja gar nichts, eine Festplatte hat die hundert bis tausendfache Kapazität. Auch auf ein SD Karte für den Fotoapparat ist genug Platz. Die Daten können auch unmittelbar nach der Verschlüsselung jedes einzelnen Bits auf einen externen Speicher geschrieben werden Dann ist auf der Festplatte kein zusätzlicher Speicher erforderlich.

  • von meinefinanzanlagen - 24.07.12 10:36 Aber so ist doch der Aufwand viel zu groß, wenn der Schlüssel genauso groß ist wie die eigentlichen Daten sind.
    Völlig an der Praxis vorbei. Gehen tut das natürlich, sicher ist es auch, aber sehr unpraktisch.

  • von OlbersD - 24.07.12 11:41 Nein, der Aufwand ist nicht zu groß. Der Schlüssel wird mittels der Software und einem Passwort erzeugt. Dies kann von einem Rechner ebenso wie die Verschlüsselung per XOR blitzschnell ausgeführt werden, schneller als die Datenübertragung im Internet.

  • von OlbersD - 24.07.12 12:06 Als Ausgangspunkt kann die folgende Software aus dem Internet dienen.

    #!/usr/bin/env python
    #
    # RC4, ARC4, ARCFOUR algorithm
    #
    # Copyright (c) 2009 joonis new media
    # Author: Thimo Kraemer
    #
    # This program is free software; you can redistribute it and/or modify
    # it under the terms of the GNU General Public License as published by
    # the Free Software Foundation; either version 2 of the License, or
    # (at your option) any later version.
    #
    # This program is distributed in the hope that it will be useful,
    # but WITHOUT ANY WARRANTY; without even the implied warranty of
    # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
    # GNU General Public License for more details.
    #
    # You should have received a copy of the GNU General Public License
    # along with this program; if not, write to the Free Software
    # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
    # MA 02110-1301, USA.
    #

    def rc4crypt(data, key):
    x = 0
    box = range(256)
    for i in range(256):
    x = (x + box[i] + ord(key[i % len(key)])) % 256
    box[i], box[x] = box[x], box[i]
    x = 0
    y = 0
    out = []
    for char in data:
    x = (x + 1) % 256
    y = (y + box[x]) % 256
    box[x], box[y] = box[y], box[x]
    out.append(chr(ord(char) ^ box[(box[x] + box[y]) % 256]))

    return ''.join(out)

  • von OlbersD - 24.07.12 12:25 Die Daten können aus einer Datei (fnam) gelesen werden und in einer Datei (fnamo) gespeichert werden.

    def efile(fnam, fnamo, key):
    f = open(fnam, 'rb')
    f.seek(0,2)
    flen = f.tell()

    f.seek(0)
    fo = open(fnamo, 'wb')

    cnt = 0
    while cnt < flen:
    buf = f.read(1000)
    cnt = cnt + len(buf)
    fo.write( rc4crypt(buf, key) )
    fo.close()
    f.close()
    return 'ALLES IN BUTTER'

  • von meinefinanzanlagen - 24.07.12 12:38 Ja natürlich funktioniert das, ist aber mehr als unpraktisch.

    Was hast Du gegen Festplattenverschlüsselungen wie Truecrypt oder Microsoft BItlocker?

  • von OlbersD - 24.07.12 15:53 Was ist daran unpraktisch? Ein Backup ist ohnehin sinnvoll. Nicht von der gesamten Festplatte mit der Standard-Software, die ohnehin auf CD/DVD verliegt, aber von den eigenen Dateien. Die Daten können in einer Datei komprimiert werden und das Verschlüsseln ist nur geringer Zusatzaufwand. Das Backup kann natürlich auch im Internet (Cloud) gespeichert werden.

  • von OlbersD - 25.07.12 10:26 Uups, schwerer Fehler durch wiederholte Anwendung des gleichen Schlüssels. Wenn der folgende Code mehrfach hintereinander aufgerufen wird (siehe efile), dann darf natürlich nicht immer die gleiche Schlüsselfolge erzeugt werden. Die Zustandsvariablen x,y und box dürfen nicht erneut initialisiert werden.

    def rc4crypt(data, key):
    x = 0
    box = range(256)
    for i in range(256):
    x = (x + box[i] + ord(key[i % len(key)])) % 256
    box[i], box[x] = box[x], box[i]
    x = 0
    y = 0
    out = []
    for char in data:
    x = (x + 1) % 256
    y = (y + box[x]) % 256
    box[x], box[y] = box[y], box[x]
    out.append(chr(ord(char) ^ box[(box[x] + box[y]) % 256]))

    return ''.join(out)

  • von OlbersD - 25.07.12 10:44 Der Fehler kann mit dem Komprimierungstest erkannt werden, wenn die Dateigröße ein Vielfaches der Blockgröße von 1000 Byte beträgt.

    Das Fehler wird behoben wenn die Zeile

    box = range(256)

    mit der die S-Box initialisiert wird, vor die Funktion

    box = range(256)
    def rc4crypt(data, key):
    ....


    geschrieben wird.

  • von OlbersD - 25.07.12 10:50 Um den Kardinalfehler, dass sich die Schlüsselfolge wiederholt zu vermeiden, müssen unterschiedliche Datein immer mit einem unterschiedlichen Wert für die Variable key verschlüsselt werden.

    Dies Problematik wird vermieden, wenn die Zufallsfolge von den Daten abhänget. Dies wird zum Beispiel mit dem modifizierten Code erreicht.

    box = range(256)

    def rc4encrypt(data, key):
    x = 0
    for i in range(256):
    x = (x + box[i] + ord(key[i % len(key)])) % 256
    box[i], box[x] = box[x], box[i]
    x = 0
    y = 0
    out = []
    for char in data:
    x = (x + 1) % 256
    y = (y + box[x]) % 256
    box[x], box[y] = box[y], box[x]
    cx = ord(char) ^ box[(box[x] + box[y]) % 256]
    out.append(chr(cx))
    y = y + cx
    return ''.join(out)

    def rc4decrypt(data, key):
    x = 0
    for i in range(256):
    x = (x + box[i] + ord(key[i % len(key)])) % 256
    box[i], box[x] = box[x], box[i]
    x = 0
    y = 0
    out = []
    for char in data:
    x = (x + 1) % 256
    y = (y + box[x]) % 256
    box[x], box[y] = box[y], box[x]
    out.append(chr(ord(char) ^ box[(box[x] + box[y]) % 256]))
    y = y + ord(char)

    return ''.join(out)

  • von OlbersD - 25.07.12 10:52 Stimmt, die Variablen x und y werden erneut initialisiert, es genügt aber, dass die S-Box nicht erneut initialisiert wird.

Teile die News mit Deinen Freunden!
atom-feed icon

Anzeige

Letzte YiGGs von

  • Profil von randolfo besuchen
  • Profil von marketing besuchen
  • Profil von phantadu besuchen
  • Profil von OlbersD besuchen

Anzeige