Hallo!
Ich möchte wichtige Geschäftsdaten verschlüsseln. Es handeln sich um eine Art neuen Regressionsalgorithmus.
Die Rechnenleistungen steigen stetig an. Deshalb lassen sich viele informatische Verschlüsselungsverfahren, nach ein ein paar Jahren per brute force entschlüsseln.
Nicht so die unbreakable encryption. Intern basieren ja alle Zeichen auf Zahlen (Unicode usw.). Bei der unbreakable enncryption wird nun auf jedes bit eine zufallszahl addiert. Der Schlüssel ist immer genauso lang wie die zu verschlüsselnde Datei. Weshalb er sich nicht per brute force entschlüsseln lässt, weil alle Kombinaionen stets gleich wahrscheinlich sind.
Wenn ich nun mit Python 3 unter Windoof 10 Dateien im byte format einlese und da stumpf drauf addiere und speichere, lässt sich die verschlüsselte Datei später nicht mehr einlesen.
Muss ich den Header der Datei unverändert lassen?
Consuli
Unbreakable Encryption implementieren
@consuli: Was heisst „lässt sich […] später nicht mehr einlesen“? Um die Datei später wieder mit einem Programm zu lesen welches für das entsprechende Dateiformat gedacht ist, musst Du die Datei vorher natürlich wieder entschlüsseln.
Und auf jedes Bit eine Zufallszahl addieren meint praktisch dann wohl eher eine bitweise „exklusiv oder“-Verknüpfung mit Zufallsbits und das Verfahren ist unter dem Namen „one time pad“ wesentlich geläufiger als ”Unbreakable Encryption”.
Und auf jedes Bit eine Zufallszahl addieren meint praktisch dann wohl eher eine bitweise „exklusiv oder“-Verknüpfung mit Zufallsbits und das Verfahren ist unter dem Namen „one time pad“ wesentlich geläufiger als ”Unbreakable Encryption”.
Wenn du ernsthaft one-time-pad-encryption implementieren willst, hast du jetzt *zwei* statt ein Problem.
Den zusaetzlich zu deiner Verschluesselten Datei musst du das OTP aufbewahren. Das sollte tunlichst nicht an der gleichen Stelle sein wie die verschluesselte Datei. Und du kannst es dir (anders als ein Passwort) auch nicht merken. Wenn du dann mal entschluesseln willst (sonst kannst du dein Programm auch einfach loeschen...), muss es aber auch leicht verfuegbar sein, das widerspricht der ersten Bedingung.
Ich wuerde deine Grundannahme in Frage stellen: auch wenn die Rechenleistung ansteigt gibt es diverse Verfahren, die immer noch ziemlich solide sind. Wenn in 5-10 Jahren dein Geheimnis entschuesselt werden *kann*, stellt sich die Frage, wieviel das Geheimnis dann noch wert ist. Vor allem, wenn du es in der zwischenzeit auch irgendwie genutzt hast, und dazu muss es ja irgendwo lauffaehig vorhanden sein.
Alles in allem: ich halte das fuer eine ziemlich unausgegorene Idee.
Den zusaetzlich zu deiner Verschluesselten Datei musst du das OTP aufbewahren. Das sollte tunlichst nicht an der gleichen Stelle sein wie die verschluesselte Datei. Und du kannst es dir (anders als ein Passwort) auch nicht merken. Wenn du dann mal entschluesseln willst (sonst kannst du dein Programm auch einfach loeschen...), muss es aber auch leicht verfuegbar sein, das widerspricht der ersten Bedingung.
Ich wuerde deine Grundannahme in Frage stellen: auch wenn die Rechenleistung ansteigt gibt es diverse Verfahren, die immer noch ziemlich solide sind. Wenn in 5-10 Jahren dein Geheimnis entschuesselt werden *kann*, stellt sich die Frage, wieviel das Geheimnis dann noch wert ist. Vor allem, wenn du es in der zwischenzeit auch irgendwie genutzt hast, und dazu muss es ja irgendwo lauffaehig vorhanden sein.
Alles in allem: ich halte das fuer eine ziemlich unausgegorene Idee.
Das heißt, ich kann sie nicht mehr mit read im byteformat einlesen. Tschuldigung, hätte ich natürlich auch gleich deutlicher schreiben können.BlackJack hat geschrieben:@consuli: Was heisst „lässt sich […] später nicht mehr einlesen“?
Könnte auch durchaus sein, dass ich da was falsch mache.
Consuli
Who controls the British crown? Who keeps the metric system down? We do! We do!
Who leaves Atlantis off the maps? Who keeps the Marsians under wraps? We do! We do!
Who leaves Atlantis off the maps? Who keeps the Marsians under wraps? We do! We do!
Das kann nicht sein (zumindest nicht so wie du es beschrieben hast). Bytes sind einfach nur Bytes. read() ist es beim binären Lesen total egal, was es da liest. Möglicherweise benutzt du read() im Textmodus oder dein Dateisystem ist beschädigt (was ich eher nicht glaube). Welche Fehlermeldung erhälst du denn? Und bist du sicher, dass es bei read() passiert oder vielleicht doch erst bei der Verarbeitung der gelieferten Bytes?consuli hat geschrieben:Das heißt, ich kann sie nicht mehr mit read im byteformat einlesen.
Yo, das wars. Ich hatte read() gar nichts angegeben. Da hat es wohl default gemacht, oder so.snafu hat geschrieben:Das kann nicht sein (zumindest nicht so wie du es beschrieben hast). Bytes sind einfach nur Bytes. read() ist es beim binären Lesen total egal, was es da liest. Möglicherweise benutzt du read() im Textmodus oder dein Dateisystem ist beschädigt (was ich eher nicht glaube). Welche Fehlermeldung erhälst du denn? Und bist du sicher, dass es bei read() passiert oder vielleicht doch erst bei der Verarbeitung der gelieferten Bytes?consuli hat geschrieben:Das heißt, ich kann sie nicht mehr mit read im byteformat einlesen.
Who controls the British crown? Who keeps the metric system down? We do! We do!
Who leaves Atlantis off the maps? Who keeps the Marsians under wraps? We do! We do!
Who leaves Atlantis off the maps? Who keeps the Marsians under wraps? We do! We do!
Für meine elektronische Dokumentenaufbewahrung reicht das aus. Wenn ich einen Rechner ohne Internetzugang benutze, und die verschlüsselte Datei und das OTP an verschiedenen Orten aufbewahre, ist das doppelte Sicherheit.__deets__ hat geschrieben:Wenn du ernsthaft one-time-pad-encryption implementieren willst, hast du jetzt *zwei* statt ein Problem.
Den zusaetzlich zu deiner Verschluesselten Datei musst du das OTP aufbewahren. Das sollte tunlichst nicht an der gleichen Stelle sein wie die verschluesselte Datei. Und du kannst es dir (anders als ein Passwort) auch nicht merken. Wenn du dann mal entschluesseln willst (sonst kannst du dein Programm auch einfach loeschen...), muss es aber auch leicht verfuegbar sein, das widerspricht der ersten Bedingung.
Out of scope meines Problems kannst Du die verschlüsselte Datei oder das OTP ja nochmal mit einer normalen Verschlüsselung "komprimieren". Ich bin kein Kryptologe. Aber ein Brute Force Angriff auf einen Schlüssel muss sich ja auch auf irgendwas abstützen, auf unterschiedliche Häufigkeiten von Buchstaben oder bekannte Worten aus einem Wörterbuch zum Beispiel. Wenn aber die Entschlüsselung eine Zufallsfolgeneigenschaften hat, dürfte das schwierig werden.
Consuli
Who controls the British crown? Who keeps the metric system down? We do! We do!
Who leaves Atlantis off the maps? Who keeps the Marsians under wraps? We do! We do!
Who leaves Atlantis off the maps? Who keeps the Marsians under wraps? We do! We do!
consuli hat geschrieben:Für meine elektronische Dokumentenaufbewahrung reicht das aus. Wenn ich einen Rechner ohne Internetzugang benutze, und die verschlüsselte Datei und das OTP an verschiedenen Orten aufbewahre, ist das doppelte Sicherheit.__deets__ hat geschrieben:Wenn du ernsthaft one-time-pad-encryption implementieren willst, hast du jetzt *zwei* statt ein Problem.
Den zusaetzlich zu deiner Verschluesselten Datei musst du das OTP aufbewahren. Das sollte tunlichst nicht an der gleichen Stelle sein wie die verschluesselte Datei. Und du kannst es dir (anders als ein Passwort) auch nicht merken. Wenn du dann mal entschluesseln willst (sonst kannst du dein Programm auch einfach loeschen...), muss es aber auch leicht verfuegbar sein, das widerspricht der ersten Bedingung.
Out of scope meines Problems kannst Du die verschlüsselte Datei oder das OTP ja nochmal mit einer normalen Verschlüsselung "komprimieren". Ich bin kein Kryptologe. Aber ein Brute Force Angriff auf einen Schlüssel muss sich ja auch auf irgendwas abstützen, auf unterschiedliche Häufigkeiten von Buchstaben oder bekannte Worten aus einem Wörterbuch zum Beispiel. Wenn aber die entschlüsselte Version Zufallsfolgeneigenschaften hat, dürfte das schwierig werden.
Consuli
Who controls the British crown? Who keeps the metric system down? We do! We do!
Who leaves Atlantis off the maps? Who keeps the Marsians under wraps? We do! We do!
Who leaves Atlantis off the maps? Who keeps the Marsians under wraps? We do! We do!
Wobei die leichte Verfügbarkeit IMHO nicht zwingend gegeben sein muss. Wenn man so ein Verfahren anwenden möchte, dann sollte man halt wissen, worauf man sich einlässt.__deets__ hat geschrieben:Wenn du dann mal entschluesseln willst (sonst kannst du dein Programm auch einfach loeschen...), muss es aber auch leicht verfuegbar sein, das widerspricht der ersten Bedingung.
Man kann sich auch jeden Tag in die Wohnung einmauern und am naechsten Morgen wieder das Stemmeisen bemuehen. Eine Risikoanalyse gehoert normalerweise dazu, und da es sich laut Aussage des OP um eine Software handelt, bei der man ja davon ausgehen sollte das sie auch irgendwo verwendet wird - da greife ich dann halt das System an. Was interessiert mich da irgendein verschluesseltes Ding?
Der Aufwand den Algorithmus zu reverse engineeren aus einem laufenden System ist um Groessenordnungen geringer als eine Entschluesselung. Nicht zuletzt weil ich ja eh lernen will/muss, wie das Ding funktioniert, wenn ich es klauen und benutzen will.
Aber wenn's scheee macht...
Der Aufwand den Algorithmus zu reverse engineeren aus einem laufenden System ist um Groessenordnungen geringer als eine Entschluesselung. Nicht zuletzt weil ich ja eh lernen will/muss, wie das Ding funktioniert, wenn ich es klauen und benutzen will.
Aber wenn's scheee macht...
Auch wenn man den Algorithmus in Cython programmiert? Ich versteh ja schon den maschinennahen C-Code nicht mehr.__deets__ hat geschrieben: Der Aufwand den Algorithmus zu reverse engineeren aus einem laufenden System ist um Groessenordnungen geringer als eine Entschluesselung. Nicht zuletzt weil ich ja eh lernen will/muss, wie das Ding funktioniert, wenn ich es klauen und benutzen will.
Consuli
Who controls the British crown? Who keeps the metric system down? We do! We do!
Who leaves Atlantis off the maps? Who keeps the Marsians under wraps? We do! We do!
Who leaves Atlantis off the maps? Who keeps the Marsians under wraps? We do! We do!
Natuerlich. Mit IDA-Pro knacken Experten eh alles, selbst die mehrfach verschnoerkelten Code-nach-lade-Techniken die zB Skype angewandt hat.
Und Cython macht die Sache noch etwas einfacher als "normaler" C/C++-Code, weil es mehr Strukturen gibt, auf die man sich verlassen kann.
Nur weil *du* das nicht kannst (du kannst auch keine Kryptographie Und das ist nicht despektierlich gemeint. Ich kann das auch nicht, das ist eines der haertesten Themen ueberhaupt. Weswegen man sie nicht selbst macht.), heisst das nicht, das andere Leute das nicht koennen.
https://researchcenter.paloaltonetworks ... er-part-1/
Und Cython macht die Sache noch etwas einfacher als "normaler" C/C++-Code, weil es mehr Strukturen gibt, auf die man sich verlassen kann.
Nur weil *du* das nicht kannst (du kannst auch keine Kryptographie Und das ist nicht despektierlich gemeint. Ich kann das auch nicht, das ist eines der haertesten Themen ueberhaupt. Weswegen man sie nicht selbst macht.), heisst das nicht, das andere Leute das nicht koennen.
https://researchcenter.paloaltonetworks ... er-part-1/
Nein, kann man offensichtlich nicht.consuli hat geschrieben:Out of scope meines Problems kannst Du die verschlüsselte Datei oder das OTP ja nochmal mit einer normalen Verschlüsselung "komprimieren".
Das OTP sollte zufällig sein, damit ist es nicht komprimierbar. Dies trifft zwangsläufig auch auf die verschlüsselte Datei zu.
Merkt man.Ich bin kein Kryptologe.
Wenn die Daten wirklich wichtig sind, sollte dein erster Schritt sein jemanden mit dem Problem zu beschäftigen der auch tatsächlich in der Lage ist eine gute Lösung zu finden. Davon bist du gerade sehr weit entfernt.
Zu dem Thema Sicherheit und Verschlüsseldung gerade ganz aktuell:
https://ccc.de/system/uploads/230/origi ... ht_CCC.pdf
https://ccc.de/system/uploads/230/origi ... ht_CCC.pdf
Ich gehe ja von meinem Offline-Dateiablage Anwendungsfall aus. Ich muss dann nur den kürzeren moderaten Schlüssel irgendwo lagern.DasIch hat geschrieben:Nein, kann man offensichtlich nicht.consuli hat geschrieben:Out of scope meines Problems kannst Du die verschlüsselte Datei oder das OTP ja nochmal mit einer normalen Verschlüsselung "komprimieren".
Das OTP sollte zufällig sein, damit ist es nicht komprimierbar. Dies trifft zwangsläufig auch auf die verschlüsselte Datei zu.
Das man auf diese Weise noch keine verschlüsselte (Maschinen-)Kommunikation zu Stande bringt, ist eine andere Sache.
Zuletzt geändert von consuli am Donnerstag 7. September 2017, 20:35, insgesamt 1-mal geändert.
Who controls the British crown? Who keeps the metric system down? We do! We do!
Who leaves Atlantis off the maps? Who keeps the Marsians under wraps? We do! We do!
Who leaves Atlantis off the maps? Who keeps the Marsians under wraps? We do! We do!
Das wäre mal interessant.__deets__ hat geschrieben:Natuerlich. Mit IDA-Pro knacken Experten eh alles, selbst die mehrfach verschnoerkelten Code-nach-lade-Techniken die zB Skype angewandt hat.
Und Cython macht die Sache noch etwas einfacher als "normaler" C/C++-Code, weil es mehr Strukturen gibt, auf die man sich verlassen kann.
Nur weil *du* das nicht kannst, (...) heisst das nicht, das andere Leute das nicht koennen.
Ich programmiere in Cython von hinten durch brust (in einer unpopulären Notation) eine bekannte statistische Kennzahl nach, und Du errätst die dann aus dem C-Code, den der Cython Compiler dafür erstellt .
Who controls the British crown? Who keeps the metric system down? We do! We do!
Who leaves Atlantis off the maps? Who keeps the Marsians under wraps? We do! We do!
Who leaves Atlantis off the maps? Who keeps the Marsians under wraps? We do! We do!
Bei einem OTP hast du eine zufälligen Schlüssel der genauso groß ist wie die Datei die du verschlüsseln willst.consuli hat geschrieben:Ich gehe ja von meinem Offline-Dateiablage Anwendungsfall aus. Ich muss dann nur den kürzeren moderaten Schlüssel irgendwo lagern.
Wo soll dieser "kürzere moderate Schlüssel" herkommen?
Es ist jetzt nicht unbedingt meine Staerke, aber einen Versuch wuerde ich da eher unternehmen, als zB einen Schluessel zu knacken.consuli hat geschrieben: Das wäre mal interessant.
Ich programmiere in Cython von hinten durch brust (in einer unpopulären Notation) eine bekannte statistische Kennzahl nach, und Du errätst die dann aus dem C-Code, den der Cython Compiler dafür erstellt .
Allerdings ist die Aufgabenstellung ja nicht so richtig realistisch: natuerlich kannst du versuchen, obfuscated Code zu schreiben. Aber ich bezweifele doch mal stark, dass du so arbeitest. Du moechtest doch eigentlich deinen Algorithmus "normal" schreiben, und durch Compilation quasi automatisch unkenntlich machen. Darum waere eigentlich die Frage, wie sieht denn normaler Python Code in Cython aus, bis hin zu starken C-Anteilen zwecks Verschnellerung.
Wenn ich Zeit habe, werde ich Dir mal was reinstellen.__deets__ hat geschrieben:Es ist jetzt nicht unbedingt meine Staerke, aber einen Versuch wuerde ich da eher unternehmen, als zB einen Schluessel zu knacken.consuli hat geschrieben: Das wäre mal interessant.
Ich programmiere in Cython von hinten durch brust (in einer unpopulären Notation) eine bekannte statistische Kennzahl nach, und Du errätst die dann aus dem C-Code, den der Cython Compiler dafür erstellt .
Who controls the British crown? Who keeps the metric system down? We do! We do!
Who leaves Atlantis off the maps? Who keeps the Marsians under wraps? We do! We do!
Who leaves Atlantis off the maps? Who keeps the Marsians under wraps? We do! We do!