Unbreakable Encryption implementieren

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
consuli
User
Beiträge: 52
Registriert: Sonntag 26. Juli 2015, 22:10

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
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!
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”.
__deets__
User
Beiträge: 14480
Registriert: Mittwoch 14. Oktober 2015, 14:29

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.
consuli
User
Beiträge: 52
Registriert: Sonntag 26. Juli 2015, 22:10

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
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!
__deets__
User
Beiträge: 14480
Registriert: Mittwoch 14. Oktober 2015, 14:29

Das darf darauf keinen Einfluss haben. Read liest Bytes. Es interpretiert die nicht. Damit kann das Problem nicht an irgendwelchen Headern liegen.
Benutzeravatar
snafu
User
Beiträge: 6731
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

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?
consuli
User
Beiträge: 52
Registriert: Sonntag 26. Juli 2015, 22:10

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. :oops: Da hat es wohl default gemacht, oder so.
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!
consuli
User
Beiträge: 52
Registriert: Sonntag 26. Juli 2015, 22:10

__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
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!
consuli
User
Beiträge: 52
Registriert: Sonntag 26. Juli 2015, 22:10

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
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!
Benutzeravatar
snafu
User
Beiträge: 6731
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

__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.
__deets__
User
Beiträge: 14480
Registriert: Mittwoch 14. Oktober 2015, 14:29

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...
consuli
User
Beiträge: 52
Registriert: Sonntag 26. Juli 2015, 22:10

__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
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!
__deets__
User
Beiträge: 14480
Registriert: Mittwoch 14. Oktober 2015, 14:29

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/
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

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.
Benutzeravatar
kbr
User
Beiträge: 1487
Registriert: Mittwoch 15. Oktober 2008, 09:27

Zu dem Thema Sicherheit und Verschlüsseldung gerade ganz aktuell:
https://ccc.de/system/uploads/230/origi ... ht_CCC.pdf
consuli
User
Beiträge: 52
Registriert: Sonntag 26. Juli 2015, 22:10

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.
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!
consuli
User
Beiträge: 52
Registriert: Sonntag 26. Juli 2015, 22:10

__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 .
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!
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

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?
__deets__
User
Beiträge: 14480
Registriert: Mittwoch 14. Oktober 2015, 14:29

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.
consuli
User
Beiträge: 52
Registriert: Sonntag 26. Juli 2015, 22:10

__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.
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!
Antworten