Lastenheft EncroShare - timoxd7/encroshare GitHub Wiki

Einleitung

Die gewünschte Anwendung soll das Problem lösen, eine sichere, asynchrone und ortsunabhängige Kommunikation von Notizen und Daten zu ermöglichen. Ein Beispiel hierfür wäre eine Arzt-Patienten-Kommunikation, welche eine Kommunikation im Zero-Knowledge-Prinzip sicherstellen soll, dabei auch der Austausch der Daten ohne räumliche Nähe ermöglicht und dennoch die Daten auf keinem Server lesbar für Dritte ablegt oder während der Übertragung der Daten über eine geeignete Übertragungsmethode Informationen sowie Metadaten ausgelesen werden können.

Übersicht

Spezifisch sollen folgende Punkte erfüllt werden:

  • Ich möchte eine Notiz vom Server laden
  • Ich möchte eine Notiz in einem eigenen Dateiformat enkodieren
  • Ich möchte eine Notiz entschlüsseln
  • Ich möchte eine Notiz auf dem Server speichern, ohne dass der Inhalt dem Server bekannt ist
  • Ich möchte ein Chat-Fenster haben und verschlüsselt mit anderen Nutzern chatten, ohne dass der Server das mitbekommt
  • Ich möchte eine Notiz (teilweise) verschlüsseln
  • Ich möchte eine Notiz bearbeiten
  • Ich möchte Dateien auf dem Server speichern, ohne dass der Inhalt dem Server bekannt ist
  • Ich möchte Dateien verschlüsseln
  • Ich möchte Dateien entschlüsseln
  • Ich möchte Dateien und Notizen einfach teilen
  • Ich möchte teile von Notizen einfach teilen
  • Ich möchte eine Cross-Platform-Anwendung auf Desktop und Smartphone (Android, iOS, Windows, Mac OS, Linux)
  • Ich möchte die Dateien und Notizen auch optional offline verfügbar haben
  • Ich möchte eine Rescue-Strategie, falls ich ein Gerät oder Schlüssel verliere
  • Ich möchte geteilte Dokumente mit anderen Personen synchronisieren, ohne diese erneut zu teilen
  • Ich möchte einen eigenen Server hosten, um zu wissen, wo meine Daten sind
  • Ich möchte andere Storage-Anbieter verwenden können (Google Drive, Nextcloud ...) um günstig oder kostenlos Daten speichern zu können
  • Ich möchte öffentliche Links erstellen können, um Dateien und Notizen teilen zu können, jedoch nur mit dem Link zugriff auf die Daten haben (somit Server weiterhin kein Knowledge über Daten)
  • Ich möchte eine hohe Performance der Anwendung und für die Ver- und Entschlüsselung nur eine bis wenige Sekunden warten müssen
  • Ich möchte gute Verschlüsselungsalgorithmen verwenden, welche mit vertretbaren Aufwand nicht ohne Schlüssel entschlüsselt werden können
  • Ich möchte eine modulare Softwarearchitektur, um die Software in Zukunft möglichst einfach auf auf weitere Anwendungsfälle erweitern zu können
  • Ich möchte eine intuitive Benutzeroberfläche, welche auch fachfremden Personen ermöglicht, die App sinnvoll zu nutzen, ohne mit Verschlüsselungsalgorithmen bereits vertraut zu sein
  • Ich möchte beim Hosting meiner Anwendung nicht an einen Cloud-Provider gebunden sein
  • Ich möchte die Daten problemlos mit einer modernen Internetverbindung auf maximaler Auslastung meiner Bandbreite laden können, ähnlich anderer Cloud-Storage provider ohne Geschwindigkeitsbegrenzung
  • Ich möchte die Services ohne Umwege (VPN, TOR, ...) im Clear-Web erreichen können
  • Ich möchte den Service immer erreichen können (ein Großteil meiner Anfragen soll korrekt behandelt und beantwortet werden)
  • Ich möchte einen Dark-Mode in meiner Anwendung

Umzusetzende Software

Die Software soll eine Smartphone-App und optional auch eine Anwendung für Desktop-Computer umfassen und über einen externen Server angebunden sein. Die Wahl der verwendeten Frameworks sind uneingeschränkt, sollen aber dem Anwendungsfall entsprechend sinnvoll eingesetzt werden und speziell auf im Bezug auf die Verschlüsselung und Zero-Knowledge-Prinzip angemessen sein.

Aufbau

Die Softwarelösung soll wie dargestellt einen Server umfassen, auf welchem die Daten ausschließlich verschlüsselt abgelegt werden sollen. Dazu kann eine Chat-Funktion zur direkten Kommunikation zwischen Teilnehmen implementiert werden, welche die Daten durch Direktverbindung austauscht. Die Direktverbindung muss nicht Offline funktionieren, d.h. kann davon ausgegangen werden, dass beide Teilnehmer simultan das Gerät bedienen und dabei die Funktion nutzen.

⚠️ **GitHub.com Fallback** ⚠️