doppelt hält besser^^
ich dachte mir, dass man "a.501" auch auf einem unsicherem wege übermitteln kann, da es schwer zu knacken ist, weil das ergebnis ja unkenntlich ist, sprich: der, der das versucht zu encrypten, wird als ergebnis jede menge sch***e erhalten. Das soll das ganze noch ein wenig erschweren, wenn man dann schonmal die datei "a.501" hat.
One-time-pad-Crypter
Dann ist es aber trotzdem kein One Time Pad, denn ein One Time Pad zeichnet sich aus, das es mathematisch absolut unknackbar ist. Und das wäre es nicht mehr, wenn jem. die Datei in die Finger bekommt.murph hat geschrieben:doppelt hält besser^^
ich dachte mir, dass man "a.501" auch auf einem unsicherem wege übermitteln kann, da es schwer zu knacken ist, weil das ergebnis ja unkenntlich ist, sprich: der, der das versucht zu encrypten, wird als ergebnis jede menge sch***e erhalten. Das soll das ganze noch ein wenig erschweren, wenn man dann schonmal die datei "a.501" hat.
mfg
Thomas :-)
Thomas :-)
du weißt, dass du dir selbst widersprichst? wenn etwas mathematisch unknackbar ist, du aber die Lösung hast, ist es immer noch mathematisch unknackbar, aber es is trotzdem machbar, an den inhalt zu kommen!!!
Da wiedersprichst du dich ein bischen. Wenn ich die Lösung habe, sprich ich habe es entschlüsselt, dann ist die Verschlüsselung nicht länger unknackbar. Wie dem auch sei, trotzdem ist es kein One Time Pad, so wie du das machst.murph hat geschrieben:du weißt, dass du dir selbst widersprichst? wenn etwas mathematisch unknackbar ist, du aber die Lösung hast, ist es immer noch mathematisch unknackbar, aber es is trotzdem machbar, an den inhalt zu kommen!!!
Gruß Thomas
mfg
Thomas :-)
Thomas :-)
du hast ungenau gelesen: wenn man eine lösung hat, heißt das nicht, dass man die sich erhackt hat!
die betonung lag auf _mathematisch_. Nochmal lesen und glücklich sein
die betonung lag auf _mathematisch_. Nochmal lesen und glücklich sein
Wenn man die "a.501" hat, dann hängt es nur noch am Passwort. Wie Python Master schrieb: One Time Pad ist unknackbar wenn man die Pad-Daten nicht in die Finger bekommt. Die müssen auf einem sicheren Weg übertragen werden. Sonst ist das ganze einfach kein One-Time-Pad mehr.murph hat geschrieben:ich dachte mir, dass man "a.501" auch auf einem unsicherem wege übermitteln kann, da es schwer zu knacken ist, weil das ergebnis ja unkenntlich ist, sprich: der, der das versucht zu encrypten, wird als ergebnis jede menge sch***e erhalten. Das soll das ganze noch ein wenig erschweren, wenn man dann schonmal die datei "a.501" hat.
One-Time-Pad sieht so aus:
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""One Time Pad."""
from __future__ import division
import os
import sys
from itertools import izip
from mmap import mmap, ACCESS_READ
from optparse import OptionParser
__author__ = "Marc 'BlackJack' Rintsch"
__version__ = '0.0.1'
__date__ = '$Date: 2006-05-27 22:08:57 +0200 (Sat, 27 May 2006) $'
__revision__ = '$Rev: 857 $'
BLOCK_SIZE = 1024 * 1024 # 1 Mib
def write_random_bytes(count, fileobj, block_size=BLOCK_SIZE):
"""Write cryptographically secure random data."""
while count > 0:
fileobj.write(os.urandom(min(block_size, count)))
count -= block_size
def crypt(in_data, out_file, pad_data):
"""Encrypt `in_data` with `pad_data` and write to `out_file`."""
for in_byte, pad_byte in izip(in_data, pad_data):
out_file.write(chr(ord(in_byte) ^ ord(pad_byte)))
def crypt_file(in_name, out_name, pad_name, offset):
"""Encrypt a file.
The three names are paths to the file to be processed, the file where the
processed data should be written to and the file with the one time pad data.
Additionally the `offset` into the one time pad file has to be given. The
return value is the `offset` plus the length of the processed data.
The function maps the unencrypted file and the one time pad data into
memory so both together must fit into virtual memory.
"""
size = os.path.getsize(in_name)
pad_size = os.path.getsize(pad_name)
in_file = open(in_name, 'rb')
out_file = open(out_name, 'wb')
pad_file = open(pad_name, 'rb')
in_data = mmap(in_file.fileno(), size, access=ACCESS_READ)
pad_data = buffer(mmap(pad_file.fileno(), pad_size, access=ACCESS_READ),
offset)
crypt(in_data, out_file, pad_data)
for fileobj in (in_file, out_file, pad_file):
fileobj.close()
return size + offset
def cmd_generate_pad(options, args):
"""Implements the one time pad generation command."""
if len(args) == 0:
out_file = sys.stdout
else:
out_file = open(args[0], 'wb')
write_random_bytes(options.pad_size * 1000000, out_file)
def cmd_crypt(options, args):
"""Implements the crypt command."""
if len(args) != 3:
sys.exit('need in-, out- and pad-filename')
offset = options.offset
print crypt_file(args[0], args[1], args[2], offset)
def main():
"""Main function."""
usage = '%prog [options] command'
parser = OptionParser(usage=usage, version=__version__)
parser.add_option('-s', '--pad-size', type='int', default=1,
metavar='SIZE',
help='generate pad data with SIZE MB (%default)')
parser.add_option('-o', '--offset', type='int', default=0,
help='offset into one time pad data')
commands = { 'generate': cmd_generate_pad,
'crypt': cmd_crypt }
(options, args) = parser.parse_args()
if len(args) == 0:
parser.error('Need at least one command %r' % commands.keys())
try:
command = commands[args[0]]
except KeyError:
parser.error('Unknown command %r' % args[0])
command(options, args[1:])
if __name__ == '__main__':
main()
Nehmen wir einmal an, Alice möchte Bob Nachrichten schicken. Als erstes müssen Zufallsdaten erzeugt werden. Alice nennt diese Datei bob.pad, damit sie weiss, dass sie diese Datei zum Verschlüsseln von Nachrichten an Bob verwenden muss.
Code: Alles auswählen
alice> onetimepad.py generate --pad-size 650 bob.pad
Dann kann Alice eine Nachricht verschlüssen:
Code: Alles auswählen
alice> onetimepad.py crypt --offset 0 klartext.txt verschluesselt-0.msg bob.pad
42
Code: Alles auswählen
alice> onetimepad.py crypt --offset 42 nachtrag.txt verschluesselt-42.msg bob.pad
656
Code: Alles auswählen
bob> onetimepad.py crypt --offset 42 verschluesselt-42.msg von_alice.txt bob.pad
656
Aber es ist ja auch nur als einfaches Beispiel gedacht. Auf jeden Fall kann kein Angreifer eine abgefangene verschlüsselte Nachricht knacken. Die kann man ansonsten völlig ungesichert übertragen, die sind mathematisch unknackbar. Sogar wenn der Angreifer eine Plaintext Nachricht kennt oder sogar selber erzeugen darf, erlaubt ihm die verschlüsselte Nachricht keine Rückschlüsse auf den Inhalt folgender Nachrichten.
Es ist aber nicht 100% sicher. Die Zufallsdaten müssen absolut unabhängig sein und dürfen in keiner Abhängigkeit stehen. Sie müssten z.B. durch thermisches Rauschen.BlackJack hat geschrieben:Auf jeden Fall kann kein Angreifer eine abgefangene verschlüsselte Nachricht knacken. Die kann man ansonsten völlig ungesichert übertragen, die sind mathematisch unknackbar. Sogar wenn der Angreifer eine Plaintext Nachricht kennt oder sogar selber erzeugen darf, erlaubt ihm die verschlüsselte Nachricht keine Rückschlüsse auf den Inhalt folgender Nachrichten.
mfg
Thomas :-)
Thomas :-)
ich habe mich auch einmal damit auseinandergestzt, und am besten ist dafür radioaktives material...krebs lässt grüßen
aber vllt ein lauter transistor oder so ist fälhig genug, dass das nicht nachher ermittelt werden kann...
aber vllt ein lauter transistor oder so ist fälhig genug, dass das nicht nachher ermittelt werden kann...
Also mal ein kleines Beispiel:
Ich habe mir 1 Gb zufallsdaten genertiert. Ich verschlüssel damit jetzt sagen wir mal ein Film z.b. Ghostship. Jetzt will die NSA es wieder entschlüsseln und wir gehen mal davon aus, dass sie Genügend Geld hätten um sich genügend rechner zu kaufen. So jetzt starten sie eine Bruteforce Atacke um rauszubekommen welchen Schlüssel ich bentutzt habe. Ich habe die Zufallsdaten nochmal durch XOR laufen lassen. So jetzt bekommen die wieder die Zufallsdaten aber Sie haben keine Chance herauszubekommen was verschlüsselt wurde, weil die 1 GB daten alles sein können z.B. James Bond oder 1000 Alben Musik oder Ein Programm wie Office oder oder oder. Und eben alles mit GLEICHER Wahrscheinlichkeit.
Das kann aber nur sein, wenn die Zufallsdaten absolut unabhängig generiert wurden z.B. thermisches Rauschen
Ich habe mir 1 Gb zufallsdaten genertiert. Ich verschlüssel damit jetzt sagen wir mal ein Film z.b. Ghostship. Jetzt will die NSA es wieder entschlüsseln und wir gehen mal davon aus, dass sie Genügend Geld hätten um sich genügend rechner zu kaufen. So jetzt starten sie eine Bruteforce Atacke um rauszubekommen welchen Schlüssel ich bentutzt habe. Ich habe die Zufallsdaten nochmal durch XOR laufen lassen. So jetzt bekommen die wieder die Zufallsdaten aber Sie haben keine Chance herauszubekommen was verschlüsselt wurde, weil die 1 GB daten alles sein können z.B. James Bond oder 1000 Alben Musik oder Ein Programm wie Office oder oder oder. Und eben alles mit GLEICHER Wahrscheinlichkeit.
Das kann aber nur sein, wenn die Zufallsdaten absolut unabhängig generiert wurden z.B. thermisches Rauschen
mfg
Thomas :-)
Thomas :-)
- STiGMaTa_ch
- User
- Beiträge: 32
- Registriert: Sonntag 14. Mai 2006, 22:58
- Wohnort: Rueti ZH, Schweiz
Könnte man da auch Akustische Aufnahmen nehmen? Also z.B. ein billigst Mikrofon hinstellen und einfach einige Zeit die Umgebung aufnehmen?Python Master 47 hat geschrieben:[...]Das kann aber nur sein, wenn die Zufallsdaten absolut unabhängig generiert wurden z.B. thermisches Rauschen
Das ist doch auch völlig Zufällig was da aufgenommen wird und nicht reproduzierbar...
Lieber Gruss
STiGMaTa
EDV-Systeme verarbeiten, womit sie gefüttert werden. Kommt Mist rein, kommt Mist raus. (André Kostolany)
also wenn du den schlüssel schon geheim überreichen kannst, musst du den nicht auch noch verschlüsseln!
nur wenn die überreichung unsicher ist, hat das noch sinn, wenn auch nur geringfügig^^
außerdem sollte man das noch immer auffüllen, genaue dateigrößen sinf auch schon verräterisch!
nur wenn die überreichung unsicher ist, hat das noch sinn, wenn auch nur geringfügig^^
außerdem sollte man das noch immer auffüllen, genaue dateigrößen sinf auch schon verräterisch!
welchen part sollte ich nicht verstehen?
solange eine feste regel gilt, aus wie vielen zeichen wie viele werden,
kannst du diese größe ausrechnen und hast dann die länge der datei!
genau gleich lang sind kaum dateien, (fast) immer sind es bei der gleichen länge die gleiche datei!
das war abert ein exkurs, wie man verhindert, das zu encrypten, wenn man eine kleine auswahl hat.
solange eine feste regel gilt, aus wie vielen zeichen wie viele werden,
kannst du diese größe ausrechnen und hast dann die länge der datei!
genau gleich lang sind kaum dateien, (fast) immer sind es bei der gleichen länge die gleiche datei!
das war abert ein exkurs, wie man verhindert, das zu encrypten, wenn man eine kleine auswahl hat.
Du verstehst es wirklich nicht.
Wenn die Zufallsdaten ABSOLUT zufällig sind, dann kann alles mit gleicher Wahrscheinlichkeit in der Datei sein.
Man hat z.B. die Größe von 1GB, dann kann alles in der Datei sein, was 1 GB groß ist, z.B. ein komprmierter Film James Bond oder Gozilla oder XMen3 oder Friedhof der Kuscheltiere oder Enemy at the Gates oder The Ring1 oder ein 1 GB großés Programm oder ein 1Gb großes Rainbowtable oder 1 GB lange Wordlist oder Moto GP 3 oder Mafia oder oder oder. Da gibt es 1000 te Möglichkeiten, woher willst du wissen was es nun ist?
Noch ein Beispiel:
Größe 20 Bytes
Das kann sein:
Hallo wie geht es dir
HeuteistSonnigerTag!!!
aabbccddeeffgghhiijj
lollollollollollollola
Pythonistabsolutgeil
Was ist One Time Pad
Wie heiß ich nochmal
usw.
Sonst wäre One Time Pad unter den Bedingungen, dass die Zufallsdaten sicher übergeben werden, nie 2 mal benutzt werden und absolut zufällig ohne jede Abhängigkeit sind, nicht unknackbar.
Wenn die Zufallsdaten ABSOLUT zufällig sind, dann kann alles mit gleicher Wahrscheinlichkeit in der Datei sein.
Man hat z.B. die Größe von 1GB, dann kann alles in der Datei sein, was 1 GB groß ist, z.B. ein komprmierter Film James Bond oder Gozilla oder XMen3 oder Friedhof der Kuscheltiere oder Enemy at the Gates oder The Ring1 oder ein 1 GB großés Programm oder ein 1Gb großes Rainbowtable oder 1 GB lange Wordlist oder Moto GP 3 oder Mafia oder oder oder. Da gibt es 1000 te Möglichkeiten, woher willst du wissen was es nun ist?
Noch ein Beispiel:
Größe 20 Bytes
Das kann sein:
Hallo wie geht es dir
HeuteistSonnigerTag!!!
aabbccddeeffgghhiijj
lollollollollollollola
Pythonistabsolutgeil
Was ist One Time Pad
Wie heiß ich nochmal
usw.
Sonst wäre One Time Pad unter den Bedingungen, dass die Zufallsdaten sicher übergeben werden, nie 2 mal benutzt werden und absolut zufällig ohne jede Abhängigkeit sind, nicht unknackbar.
mfg
Thomas :-)
Thomas :-)
- STiGMaTa_ch
- User
- Beiträge: 32
- Registriert: Sonntag 14. Mai 2006, 22:58
- Wohnort: Rueti ZH, Schweiz
@murph
Beim durchlesen deiner Posts habe ich auch das Gefühl bekommen, dass du nicht verstanden hast wie ein One-Time Pad funktioniert.
In einem früheren Post schreibst du, dass wenn es eine feste Regel zum verschlüsseln gibt und man die Verschlüsselung hat, man den Ursprungstext auch mathematisch knacken kann.
Dann machen wir doch mal folgendes Experiment:
Python Master 47 und ich haben uns kurz getroffen. Dabei habe ich ihm einen 4 Byte grossen Schlüssel übergeben, welcher aus einer absolut zufälligen Sequenz besteht.
Weiterhin habe ich ihm gesagt, dass ich ihm hier im Forum mitteilen werde, was er mir einkaufen soll.
Das werde ich hiermit tun:
Python Master 47, kaufe mir den Gegenstand: Turm
Deine Aufgabe lieber murph ist es nun, zu sagen was ich anstelle Turm gemeint habe.
Und damit du möglichst viele Anhaltspunkte hast um das Rätsel zu knacken, hier mal eine Auflistung was du alles weisst (oder gleich erfährst):
- Das Objekt das ich haben möchte hat genau 4 Buchstaben.
- Zufälligerweise ergibt mein gewünschtes Objekt verschlüsselt mit dem ausgetauschten Schlüssel genau Turm, Es hätte aber auch Xgh8 sein können oder sonstwas.
- Den Verschlüsselungsmechanismus lege ich offen:
Für jeden Buchstaben verwende ich dessen Ascii Code. Genau so verfahre ich auch mit dem Schlüssel, welchen ich vorab ausgetauscht habe. Dann verwende ich jeweils ein xor und aus der erhaltenen Zahl mache ich wieder einen Ascii Wert. Hier ein Codebeispiel:
- Und als Non-Plus-Ultra liefere ich dir sogar noch den Unverschlüsselten Text. Allerdings musst du herausfinden welcher der Drei Worte nun das gewünschte Objekt ist und welche davon hinzugedichtet sind: Buch, Bett, Bank.
Du hast also von mir Eine Gruppe von Wörtern, von denen EINES mein gewünschtes Objekt darstellt. Du hast den Verschlüsselungsmechanismus (ein XOR kehrt man mit einem XNOR um) und du weisst wie der verschlüsselte Text lautet.
Somit hast du eigentlich alles bis auf den zufällig erstellten Verschlüsselungs Text. Und trotzdem wirst du es nicht schaffen sagen zu können, was mir der Python Master 47 denn nun besorgen soll.
Lieber Gruss
STiGMaTa
Beim durchlesen deiner Posts habe ich auch das Gefühl bekommen, dass du nicht verstanden hast wie ein One-Time Pad funktioniert.
In einem früheren Post schreibst du, dass wenn es eine feste Regel zum verschlüsseln gibt und man die Verschlüsselung hat, man den Ursprungstext auch mathematisch knacken kann.
Dann machen wir doch mal folgendes Experiment:
Python Master 47 und ich haben uns kurz getroffen. Dabei habe ich ihm einen 4 Byte grossen Schlüssel übergeben, welcher aus einer absolut zufälligen Sequenz besteht.
Weiterhin habe ich ihm gesagt, dass ich ihm hier im Forum mitteilen werde, was er mir einkaufen soll.
Das werde ich hiermit tun:
Python Master 47, kaufe mir den Gegenstand: Turm
Deine Aufgabe lieber murph ist es nun, zu sagen was ich anstelle Turm gemeint habe.
Und damit du möglichst viele Anhaltspunkte hast um das Rätsel zu knacken, hier mal eine Auflistung was du alles weisst (oder gleich erfährst):
- Das Objekt das ich haben möchte hat genau 4 Buchstaben.
- Zufälligerweise ergibt mein gewünschtes Objekt verschlüsselt mit dem ausgetauschten Schlüssel genau Turm, Es hätte aber auch Xgh8 sein können oder sonstwas.
- Den Verschlüsselungsmechanismus lege ich offen:
Für jeden Buchstaben verwende ich dessen Ascii Code. Genau so verfahre ich auch mit dem Schlüssel, welchen ich vorab ausgetauscht habe. Dann verwende ich jeweils ein xor und aus der erhaltenen Zahl mache ich wieder einen Ascii Wert. Hier ein Codebeispiel:
Code: Alles auswählen
#!/usr/bin/python
import operator
cleartext = ['G','e','k','n','a','c','k','t']
ciphertxt = ['R','a','M','l','p','o','e','B']
for a in range(len(cleartext)):
print chr(operator.xor(ord(cleartext[a]), ord(ciphertxt[a]))),
Du hast also von mir Eine Gruppe von Wörtern, von denen EINES mein gewünschtes Objekt darstellt. Du hast den Verschlüsselungsmechanismus (ein XOR kehrt man mit einem XNOR um) und du weisst wie der verschlüsselte Text lautet.
Somit hast du eigentlich alles bis auf den zufällig erstellten Verschlüsselungs Text. Und trotzdem wirst du es nicht schaffen sagen zu können, was mir der Python Master 47 denn nun besorgen soll.
Lieber Gruss
STiGMaTa
EDV-Systeme verarbeiten, womit sie gefüttert werden. Kommt Mist rein, kommt Mist raus. (André Kostolany)
Da warst du aber sehr freundlich Sigma!
Nur um das nochmal zu ergänzen:
Murph:
Du hast alles 3 und wirste es nicht rausbekommen(Unter der Vorraussetzung, das die Zufallsdaten wirklich zufällig sind) du könntest nur raten.
Jetzt könntest du ja folgendes sagen:
Ja und ist mir doch egal, ich kann zwar nicht das richtige Wort rausbekommen, aber ich nehme einfach alle 3 Möglichkeiten.
Dazu muss man folgendes sagen. Du wirst nie soviel Infos bekommen sprich die Ausgangsworte etc. Du bekommst in der Realität nur die Verschlüsselte Nachricht. Das heißt es kann nicht nur Bett, Bank und Buch sein sondern auch Ball, Keks, Tuch, Hemd, Hose, Bild, Saft, Band, Dvds, Geld etc.
Da gibt es 1000 te Möglichkeiten und alle sind gleich Wahrscheinlich.
Nur um das nochmal zu ergänzen:
Murph:
Du hast alles 3 und wirste es nicht rausbekommen(Unter der Vorraussetzung, das die Zufallsdaten wirklich zufällig sind) du könntest nur raten.
Jetzt könntest du ja folgendes sagen:
Ja und ist mir doch egal, ich kann zwar nicht das richtige Wort rausbekommen, aber ich nehme einfach alle 3 Möglichkeiten.
Dazu muss man folgendes sagen. Du wirst nie soviel Infos bekommen sprich die Ausgangsworte etc. Du bekommst in der Realität nur die Verschlüsselte Nachricht. Das heißt es kann nicht nur Bett, Bank und Buch sein sondern auch Ball, Keks, Tuch, Hemd, Hose, Bild, Saft, Band, Dvds, Geld etc.
Da gibt es 1000 te Möglichkeiten und alle sind gleich Wahrscheinlich.
mfg
Thomas :-)
Thomas :-)
naja, das ist aber auch eine möglichkeit, dateien zusammzufassen.
wer sich schon einmal kaza, sheraza, xmule uä angekuckt hat, wird sehen, dass die lieder nur dadurch zusammengefasst werden, dass sie die gleiche länge haben. der name ist egal, solange jedes lied 3,258,561 bytes lang ist...
also filme, deren qualität man kennt, kann man entschlüsseln.
das war aber auch nur ein gedankenspiel ohne realer anwendung, da wenn man weiß, was es ist, man es nicht mehr zu entschlüsseln bbrauch (mit dem passwort kann man ja auch nichts anfangen )
wer sich schon einmal kaza, sheraza, xmule uä angekuckt hat, wird sehen, dass die lieder nur dadurch zusammengefasst werden, dass sie die gleiche länge haben. der name ist egal, solange jedes lied 3,258,561 bytes lang ist...
also filme, deren qualität man kennt, kann man entschlüsseln.
das war aber auch nur ein gedankenspiel ohne realer anwendung, da wenn man weiß, was es ist, man es nicht mehr zu entschlüsseln bbrauch (mit dem passwort kann man ja auch nichts anfangen )
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Falsch: xMule ist ein eDonkey-Client, der Dateien anhand eines Hashes identifiziert, dieser wird aus dem Inhalt der Datei generiert, nicht aus ihrer Länge. Shareaza unterstützt ebenso das eDonkey-Protokoll und auch das BitTorrent-Protokoll, welches die Datei in Chunks teilt und diese Chunks haben selbst nochmal Hashes.murph hat geschrieben:wer sich schon einmal kaza, sheraza, xmule uä angekuckt hat, wird sehen, dass die lieder nur dadurch zusammengefasst werden, dass sie die gleiche länge haben. der name ist egal, solange jedes lied 3,258,561 bytes lang ist...
Davon abgesehen hat das mit One-Time-Pad nichts zu tun.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice