Seite 1 von 1
Unbreakable Encryption implementieren
Verfasst: Montag 28. August 2017, 12:37
von consuli
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
Re: Unbreakable Encryption implementieren
Verfasst: Montag 28. August 2017, 13:33
von BlackJack
@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”.
Re: Unbreakable Encryption implementieren
Verfasst: Montag 28. August 2017, 14:25
von __deets__
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.
Re: Unbreakable Encryption implementieren
Verfasst: Mittwoch 30. August 2017, 18:20
von consuli
BlackJack hat geschrieben:@consuli: Was heisst „lässt sich […] später nicht mehr einlesen“?
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.
Könnte auch durchaus sein, dass ich da was falsch mache.
Consuli
Re: Unbreakable Encryption implementieren
Verfasst: Mittwoch 30. August 2017, 18:23
von __deets__
Das darf darauf keinen Einfluss haben. Read liest Bytes. Es interpretiert die nicht. Damit kann das Problem nicht an irgendwelchen Headern liegen.
Re: Unbreakable Encryption implementieren
Verfasst: Mittwoch 30. August 2017, 18:33
von snafu
consuli hat geschrieben:Das heißt, ich kann sie nicht mehr mit read im byteformat einlesen.
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?
Re: Unbreakable Encryption implementieren
Verfasst: Montag 4. September 2017, 14:12
von consuli
snafu hat geschrieben:consuli hat geschrieben:Das heißt, ich kann sie nicht mehr mit read im byteformat einlesen.
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?
Yo, das wars. Ich hatte read() gar nichts angegeben.

Da hat es wohl default gemacht, oder so.
Re: Unbreakable Encryption implementieren
Verfasst: Montag 4. September 2017, 14:22
von consuli
__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.
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.
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
Re: Unbreakable Encryption implementieren
Verfasst: Montag 4. September 2017, 14:24
von consuli
consuli hat geschrieben:__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.
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.
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
Re: Unbreakable Encryption implementieren
Verfasst: Montag 4. September 2017, 15:19
von snafu
__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.
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.
Re: Unbreakable Encryption implementieren
Verfasst: Dienstag 5. September 2017, 10:42
von __deets__
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...
Re: Unbreakable Encryption implementieren
Verfasst: Mittwoch 6. September 2017, 12:02
von consuli
__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.
Auch wenn man den Algorithmus in Cython programmiert? Ich versteh ja schon den maschinennahen C-Code nicht mehr.
Consuli
Re: Unbreakable Encryption implementieren
Verfasst: Mittwoch 6. September 2017, 12:45
von __deets__
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/
Re: Unbreakable Encryption implementieren
Verfasst: Mittwoch 6. September 2017, 20:12
von DasIch
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".
Nein, kann man offensichtlich nicht.
Das OTP sollte zufällig sein, damit ist es nicht komprimierbar. Dies trifft zwangsläufig auch auf die verschlüsselte Datei zu.
Ich bin kein Kryptologe.
Merkt man.
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.
Re: Unbreakable Encryption implementieren
Verfasst: Donnerstag 7. September 2017, 10:57
von kbr
Zu dem Thema Sicherheit und Verschlüsseldung gerade ganz aktuell:
https://ccc.de/system/uploads/230/origi ... ht_CCC.pdf
Re: Unbreakable Encryption implementieren
Verfasst: Donnerstag 7. September 2017, 20:25
von consuli
DasIch hat geschrieben: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".
Nein, kann man offensichtlich nicht.
Das OTP sollte zufällig sein, damit ist es nicht komprimierbar. Dies trifft zwangsläufig auch auf die verschlüsselte Datei zu.
Ich gehe ja von meinem Offline-Dateiablage Anwendungsfall aus. Ich muss dann nur den kürzeren moderaten Schlüssel irgendwo lagern.
Das man auf diese Weise noch keine verschlüsselte (Maschinen-)Kommunikation zu Stande bringt, ist eine andere Sache.
Re: Unbreakable Encryption implementieren
Verfasst: Donnerstag 7. September 2017, 20:34
von consuli
__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.
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 .
Re: Unbreakable Encryption implementieren
Verfasst: Donnerstag 7. September 2017, 21:31
von DasIch
consuli hat geschrieben:Ich gehe ja von meinem Offline-Dateiablage Anwendungsfall aus. Ich muss dann nur den kürzeren moderaten Schlüssel irgendwo lagern.
Bei einem OTP hast du eine zufälligen Schlüssel der genauso groß ist wie die Datei die du verschlüsseln willst.
Wo soll dieser "kürzere moderate Schlüssel" herkommen?
Re: Unbreakable Encryption implementieren
Verfasst: Freitag 8. September 2017, 10:07
von __deets__
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 .
Es ist jetzt nicht unbedingt meine Staerke, aber einen Versuch wuerde ich da eher unternehmen, als zB einen Schluessel zu knacken.
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.
Re: Unbreakable Encryption implementieren
Verfasst: Montag 11. September 2017, 17:15
von consuli
__deets__ hat geschrieben: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 .
Es ist jetzt nicht unbedingt meine Staerke, aber einen Versuch wuerde ich da eher unternehmen, als zB einen Schluessel zu knacken.
Wenn ich Zeit habe, werde ich Dir mal was reinstellen.