Programm zum Verschlüsseln von Dateien
-
Hallo,
ich würde gerne ein Programm schreiben das sensible Dateien verschlüsselt. Da ich Informatik studiere traue ich mir das zu. Auch haben wir schon im studium mit der Bash dateien verschlüsselt. War aber einfache Monoalphabetische Substitution, was nicht so sicher sei. Ich denke aktuell an eine Zufällige verschlüsselungsmethode. Meine Frage ist welcher ist derzeitig der sicherste Algorithmus und ist das mit dem aufwand verglichen lohnenswert? Wie gesagt ich möchte kleine Dateien verschlüsseln aber mich schon seriös damit beschäftigen also es soll am ende sicher sein. Das Thema interessiert mich auch persönlich.
Und deswegen gebe ich die Frage weiter an die Erfahrenen von euch.
-
Regel 1: Nichts selbst ausdenken.
Regel 2: Nicht wirklich sensible Daten mit einem eigenen kaum getesten Programm verschlüsseln.
Joa, AES ist wohl relativ gut dokumentiert und leicht zu implementieren. Aber da hätte man irgendwie auch von alleine drauf kommen können wenn man Informatik studiert. oO
-
gast51 schrieb:
Monoalphabetische Substitution, was nicht so sicher sei.
Also sowas wie Caesar und Vigenere? Ja, die sind nicht so sicher und allgemein sind symmetrische Verschlüsselungsverfahren nicht so sicher.
Sicher bist du, wenn du ein asymmetrisches Verschlüsselungsverfahren mit Einwegfunktion (mit Falltür) benutzt, z.B. RSA oder PGP.
-
Kommt drauf an, wie sensibel die Daten sind. Wenn du nicht gerade Regierungs-Dokumente hast dürfte theoretisch schon eine XOR-Verschlüsselung reichen. Die ist relativ einfach zu implementieren. Im Prinzip liest du die Datei Byte-Weise aus, "xorst" das Byte mit einem Verschlüsselungs-Byte und schreibst das "gexorte" Byte wieder zurück.
Ist halt nicht sehr sicher; es gibt nur 256 Schlüssel.
Um mehr Sicherheit zu gewinnen kannst du die XOR-Verschlüsselung so ausbauen, dass du ein Passwort einliest und dann die einzelnen Bytes fortlaufend immer als das Verschlüsselungsbyte benutzt://Dateien öffnen usw. wäre hier //... std::string password; std::cin >> password; int pwpos = 0; char byte; while(dateiin.good()) //dateiin sei eine std::ifstream-Instanz { byte = dateiin.get(); byte ^= password[pwpos]; dateiout.put(byte); //dateiout sei eine std::ofstream-Instanz ++pwpos; if(pwpos > password.length()) pwpos = 0; }
Gibt schon etwas mehr Sicherheit ist aber, je nach Schlüssellänge auch einfach zu knacken.
Um eine feste Schlüssellänge zu bekommen könntest du theoretisch einen SHA2-Algorithmus verwenden, SHA512 erzeugt dir zum Beispiel einen 64 Byte langen Schlüssel. Wird dadurch aber nicht wirklich sicherer; auch ein 64 Byte langer Schlüssel lässt sich mit heutigen Computer binnen Sekunden Brute-Forcen. SHA512 kann man sich selber implementieren, aber es gibt auch genug fertige Varianten im Internet.Wenn du wirklich vertrauliche Daten hast, würde ich aber zu AES tendieren.
-
Jonas OSDever schrieb:
Um mehr Sicherheit zu gewinnen kannst du die XOR-Verschlüsselung so ausbauen, dass du ein Passwort einliest und dann die einzelnen Bytes fortlaufend immer als das Verschlüsselungsbyte benutzt.
Nennt sich Stromverschlüsselung.
Jonas OSDever schrieb:
auch ein 64 Byte langer Schlüssel lässt sich mit heutigen Computer binnen Sekunden Brute-Forcen. SHA512 kann man sich selber implementieren, aber es gibt auch genug fertige Varianten im Internet.
Hmm, wenn du 2^512 mögliche Kombinationen hast und du zum Testen einer Kombination angenommen 1µs brauchst, dann brauchst du doch etliche Jahre, um den Schlüssel zu entziffern.
-
Jonas OSDever schrieb:
auch ein 64 Byte langer Schlüssel lässt sich mit heutigen Computer binnen Sekunden Brute-Forcen.
64 Byte sind 8^64 oder 2^192 Bits. Mit Sekunden ist da schon lange nichts mehr. Das Problem beim XOR ist vielmehr, dass dann jedes 64. Zeichen mit dem gleichen Schlüssel verschlüsselt wird und es eine direkte Beziehung von Text-, Schlüssel- und Geheimtextbyte gibt, womit man je nach Text relativ schnell auf den Schlüssel kommt. XOR eignet sich nur, um Dateien unkenntlich zu machen, so dass man mit einem Texteditor nicht sofort die Daten sehen kann.
@TE: Nimm AES, das ist ein geprüfter, anerkannter Algorithmus. Du musst blos stark aufpassen, dass du keine Fehler beim Implementieren machst. Bei wirklich sensiblen Daten sollte man die Verschlüsselungssoftware nicht selbst schreiben.
-
Das PGP finde ich sehr interessant. Es gibt auch ein Kommando dafür in Unix gpg. Da werde ich mich einarbeiten. Oder sollte ich das AES-Verfahren vorziehen?
Ich weiss schon wie man sichere Anwendungen schreibt. Und außerdem fühlt man sich auch sicherer wenn mann weiss das es sein eigenes, selbst geschriebenes Programm ist und genau weis was es tut. Ich werde es natürlich auch ausgewogen testen es geht ja hier um meine Daten. Ich bin mir da schon sicher in dem was ich tue, ich mache keine halben sachen
.
Ich mache das ja eher weil ich mich für das Thema interessiere und nicht weil ich ein Verschlüsselung-Programm brauche nur später könnte es auch nützlich werden meinte ich.
-
gast51 schrieb:
genau weis was es tut.
Dies hier ist der Knackpunkt.
Das PGP finde ich sehr interessant. Es gibt auch ein Kommando dafür in Unix gpg. Da werde ich mich einarbeiten. Oder sollte ich das AES-Verfahren vorziehen?
Du kannst nicht einmal Implementierungen und Algorithmen unterscheiden. Wie willst du dann selber eine sichere Implementierung schreiben? Lass es. Nimm eine der fertigen Lösungen.
-
Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C++ (auch C++0x und C++11) in das Forum Themen rund um die IT verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.