Verschlüsselungssoftware JRCryptor

Im Mai 2016 fand eine Codecompetition im Auftrag der IT-Talents.de statt. Im Folgenden stehen die Einzelheiten zu dem Sinn und Zweck der Competition und im Anschluss ein paar Erläuterungen zu meiner Projektumsetzung.

Über
Vor dem Hintergrund von Kriminalität, Spionage und Geheimdienstaffären ist die Sicherheit persönlicher Daten wieder stark in den Fokus gerückt.
Und wie kann der Vorteil der Verfügbarkeit von Daten und einem verteilten Backup mit Datensicherheit vereinbart werden? Richtig, mit einer vertrauenswürdigen Verschlüsselung!

Input
Deine Aufgabe ist es, ein Programm zu realisieren, mit dessen Hilfe es möglich ist, ausgewählte Dateien (und Verzeichnisse?) zu verschlüsseln und später wieder zu entschlüsseln.
Ein passender Use Case wäre hier z.B., dass ein Nutzer seine persönlichen Daten auf einem Cloudspeicher sichern möchte, aber die Möglichkeit ausschließen will, dass der Cloudbetreiber die Daten lesen kann.

Anforderungen an die Software:

  • Verschlüsselung von Daten über die Konsole oder ein GUI
  • Implementierung eines Verschlüsselungsalgorithmus (gerne auch ein eigens entwickelter Algorithmus!)
  • Entschlüsselung der Daten über gleiches Programm

Bewertungskriterien:

  • Funktionalität: Lässt sich das Programm ausführen? Tut es, was es soll?
  • Code-Qualität: Ist der Code sinnvoll strukturiert und effizient?
  • Code-Lesbarkeit: Lässt sich der Quellcode nachvollziehen?
  • Dokumentation: Verstehen wir die Bedienung des Programms? Ist der Code kommentiert?
  • Zusätzliche Features: Auch sinnvolle Zusatzfeatures fließen etwas mit in die Wertung ein 😉

Im Folgenden erläutere ich die grundlegende Funktionalität meines Verschlüsselungsprogramms JRCryptor.

Schnell stand für mich fest, dass das ganze Projekt auf Java basieren sollte, da ich damit momentan am meisten Erfahrung habe.
Zu beginn informierte ich mich über unterschiedliche Verschlüsselungsverfahren und deren Implementierung in Programmabläufen.
Hier sagte mir das Konzept von AES mittels Cipher am ehesten zu. Einige Probleme hinsichtlich der Passwortlänge konnte ich, ohne Austausch der Java Policy Datei bewerkstelligen. Dazu wird ein Passwort vom Benutzer abgefragt, das einigen Sicherheitsanforderungen gerecht werden muss. Im Anschluss wird dieses mit einer Salt-Phrase erweitert, SHA-512 gehasht und als Resultat die ersten 16 Byte des Schlüssels für die Verschlüsselung genutzt.


Verschlüsselung

Das Verschlüsselungsverfahren ist modular aufgebaut, sodass es für die Verschlüsselung oder Entschlüsselung nur einen Zweizeiler Code benötigt.

Das Grundgerüst der Verschlüsselung von Daten stand daher schon mal auf einem stabilen Gerüst. Nun lautete die Vorgabe, dass Verzeichnisse auch verschlüsselt werden müssen. Dazu erwartet das Programm einen validen Verzeichnispfad, welcher zuerst in eine .zip Datei komprimiert wird und im Anschluss den bereits bekannten Verschlüsselungsweg durchläuft.

Screenshot JRCryptor

Das obige Bild zeigt ein Screenshot vom aktuellen Entwicklungsstand der Version 1.0.
Hier kann die Verschlüsselungsart eingetragen werden (Datei-, oder Verzeichnisverschlüsselung).
Im Anschluss wird das Passwort für die Verschlüsselung abgefragt. Es wird zudem die Stärke der Passphrase ermittelt.
Erst ab einer gewissen Güte des Passworts, darf verschlüsselt werden.
Weiterhin gibt es ein Dialogauswahlfenster für die Bestimmung von Öffnungs- und Speicherpfaden.

Einstellungen JR Cryptor

Dieser Screenshot zeigt die Einstellungsseite. Dort können Parameter für die Standardverzeichnisse hinterlegt werden.
Weiterhin können Dateinamenerweiterungen in Form des aktuellen Datums oder des jeweiligen angemeldeten Systembenutzers
beigefügt werden. Dies kann gerade für Backups enorm hilfreich sein.

Wer sich keine sicheren Passwörter ausdenken mag, hat auch auf dieser Seite die Möglichkeit ein Passwort der Länge 16 Byte zu generieren.
Sämtliche Einstellungen können in eine config Datei abgespeichert und auch wieder ausgelesen werden.

Großer Vorteil an dieser Lösung ist durch die Verwendung von Java die Plattformunabhängigkeit. Unter Windows programmiert und unter Ubuntu als executable deklariert und schon ausführbar gewesen. Natürlich muss auf jedem Zielsystem eine Java Runtime > Version 6 installiert sein.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Time limit is exhausted. Please reload the CAPTCHA.