Blog · · von Florian van der Galiën

Verschlüsselt gespeichert: wie kontura dein Archiv und deine Firmendaten schützt

PDF und XML ausgestellter Rechnungen, Prüfberichte und Firmendaten liegen bei kontura verschlüsselt in der Datenbank, mit eigenem Schlüssel je Organisation.

Vor ein paar Tagen haben wir beschrieben, wie wir die Datenbank sichern. Die Sicherungen sind verschlüsselt, die Datenbank selbst war es bisher nicht. Wer einen Abzug davon in die Hände bekam, konnte deine Rechnungsdokumente und deine Firmendaten lesen. Seit Version 0.3.0 verschlüsselt kontura einen ersten Teil dieser Daten innerhalb der Datenbank, jede Organisation mit einem eigenen Schlüssel. Sicherungen aus der Zeit davor enthalten sie noch unverschlüsselt; die laufen spätestens nach 35 Tagen ab. Dieser Beitrag erklärt, was genau verschlüsselt ist, wie das funktioniert und was noch offen ist.

Was verschlüsselt ist

Verschlüsselt sind die Daten, die kontura immer als Ganzes liest und nie durchsucht:

  • PDF und XML jeder ausgestellten Rechnung im Archiv
  • der Prüfbericht, der bei der Ausstellung entsteht
  • deine Firmendaten in den Einstellungen, also Name, Anschrift, Steuernummer und Bankverbindung, samt der Historie früherer Fassungen

In der Datenbank steht an diesen Stellen nur noch ein Chiffrat. Aus ihm lässt sich ablesen, wie groß ein Dokument ungefähr ist und wann es entstanden ist, aber nicht, was drinsteht.

Drei Ebenen von Schlüsseln

Wir verwenden das übliche Verfahren für solche Fälle, Umschlagverschlüsselung. Ein Schlüssel verschlüsselt den nächsten.

Ganz oben steht ein Hauptschlüssel. Er liegt nur in der Umgebung des Servers, in der kontura läuft, und offline an zwei getrennten Orten. In der Datenbank steht er nie, auch nicht in den Sicherungen.

Darunter hat jede Organisation einen eigenen Schlüssel. Der liegt in der Datenbank, aber selbst verschlüsselt mit dem Hauptschlüssel. Die Anwendung darf diese Schlüssel lesen und neue anlegen, aber nicht ändern oder löschen; das erzwingt die Datenbank selbst, unabhängig vom Programmcode.

Ganz unten liegen deine Daten, verschlüsselt mit dem Schlüssel deiner Organisation. Jeder Wert bekommt dabei eine eigene Zufallszahl, und das Chiffrat ist an Organisation, Spalte und Datensatz gebunden. Ein PDF, das jemand in den Datensatz einer anderen Organisation kopiert, lässt sich dort nicht entschlüsseln. Als Verfahren setzen wir AES-256-GCM ein, das auch erkennt, wenn jemand am Chiffrat herumgeändert hat.

Drei Ebenen: Der Hauptschlüssel liegt nur in der Umgebung des Servers und offline an zwei Orten, nie in der Datenbank. Er verschlüsselt den Schlüssel jeder Organisation, der verschlüsselt in der Datenbank liegt. Dieser Schlüssel verschlüsselt die Daten: PDF und XML ausgestellter Rechnungen, Prüfberichte und die Firmendaten mit Historie. Ein gestohlener Datenbankabzug enthält nur die verschlüsselten Daten und die verschlüsselten Organisationsschlüssel, aber nicht den Hauptschlüssel.

Vom Hauptschlüssel bis zum einzelnen Dokument, und was in einem gestohlenen Abzug fehlt

Wogegen das schützt

Gegen eine gestohlene Kopie der Datenbank: einen Abzug, das Datenbank-Volume oder eine Sicherungsdatei. Darin stecken die verschlüsselten Dokumente und die verschlüsselten Organisationsschlüssel, aber nicht der Hauptschlüssel. Ohne ihn lässt sich kein Organisationsschlüssel öffnen und damit kein Dokument. Ein vollständiges Abbild des Servers schützt das nicht, denn dort liegt auch der Hauptschlüssel.

Die Sicherungen bleiben zusätzlich mit age verschlüsselt. Beide Schichten sind unabhängig voneinander: Wer eine Sicherungsdatei stiehlt, braucht erst den privaten age-Schlüssel und dann noch den Hauptschlüssel.

Wogegen es nicht schützt

Das sollte man genauso klar sagen. Der Server hält die Schlüssel und entschlüsselt bei jedem berechtigten Zugriff: wenn du eine Rechnung öffnest, das Archiv exportierst, eine E-Mail verschickst oder dein KI-Assistent eine Rechnung abruft. Wer den laufenden Server übernimmt, kann mitlesen. Wer dein Konto übernimmt, sieht, was dein Konto sieht. Und wir als Betreiber können deine Daten lesen, weil wir die Schlüssel haben. kontura ist keine Anwendung, bei der der Anbieter selbst ausgesperrt ist. Das wäre mit einem Server, der Rechnungen prüft, PDFs erzeugt und E-Mails verschickt, auch nicht zu machen.

Was noch lesbar ist

Die Rechnungs- und Kundendatensätze selbst sind noch nicht verschlüsselt. Die Rechnungsliste, die Suche, die Sortierung, der Zahlungsstatus und die Umsatzgrenze für Kleinunternehmer laufen als Abfragen direkt auf diesen Daten. Das Gleiche gilt für Zahlungen und das Ereignisprotokoll. Bevor wir diese Spalten verschlüsseln, müssen wir festlegen, welche Felder für Listen und Suche lesbar bleiben und wie die Suche dann arbeitet.

Dazu gehört ein Punkt, der unangenehm ist: Jede ausgestellte Rechnung enthält eine Kopie deiner Firmendaten, so wie sie bei der Ausstellung galten. Diese Kopie liegt im Rechnungsdatensatz und ist damit lesbar, inklusive IBAN. Die verschlüsselten Firmendaten in den Einstellungen schützen deine Bankverbindung also noch nicht vollständig. Das steht so auch in unseren technischen und organisatorischen Maßnahmen im AVV, und es ist der nächste Schritt.

Schlüssel wechseln

Beide Schlüsselebenen lassen sich austauschen, ohne dass sich an deinen Daten etwas ändert. Der Hauptschlüssel kann durch einen neuen ersetzt werden; dann werden alle Organisationsschlüssel mit dem neuen umverschlüsselt, der alte bleibt nur noch so lange gültig, bis die letzte Sicherung mit ihm abgelaufen ist. Auch der Schlüssel einer einzelnen Organisation kann erneuert werden, etwa nach einem Verdacht; dabei werden alle ihre verschlüsselten Werte in einem Schritt mit dem neuen Schlüssel umverschlüsselt.

Keiner dieser Schlüssel hängt an deinem Passwort, deinen Passkeys oder deinem Gerät. Wenn du dein Passwort zurücksetzt, verlierst du keine Daten.

Was das für dich bedeutet

In der Bedienung ändert sich nichts. Der Export aus „Archiv & Export“ liefert dieselben PDF- und XML-Dateien wie vorher, und die Hash-Kette über deine Rechnungen bleibt unverändert, weil sie über die entschlüsselten Dokumente gebildet wird. Eine Rechnung, die du vor der Umstellung ausgestellt hast, ist beim Export dieselbe wie danach.

Fehlt dem Server der Hauptschlüssel oder passt ein Chiffrat nicht zu seinem Datensatz, startet die Anwendung nicht beziehungsweise bricht den Vorgang ab, statt auf unverschlüsselte Daten zurückzufallen. Dir wird dann eine Fehlermeldung angezeigt, und in unserem Protokoll steht, welche Organisation und welche Spalte betroffen war, nie der Inhalt.

Quellen

Häufige Fragen

Kann kontura meine Rechnungen lesen?

Ja. Der Server entschlüsselt die Daten, sobald du eine Rechnung öffnest, exportierst oder per E-Mail verschickst. Dafür hält er die Schlüssel. Die Verschlüsselung schützt gegen eine gestohlene Kopie der Datenbank, nicht gegen uns als Betreiber.

Verliere ich Daten, wenn ich mein Passwort vergesse?

Nein. Die Schlüssel für deine Daten hängen nicht an deinem Passwort, deinen Passkeys oder deinem Gerät. Du setzt dein Passwort zurück und arbeitest weiter.

Sind damit alle meine Daten verschlüsselt?

Noch nicht. Verschlüsselt sind PDF und XML ausgestellter Rechnungen, die Prüfberichte und deine Firmendaten samt Historie. Rechnungs- und Kundendatensätze, Zahlungen und das Ereignisprotokoll liegen noch lesbar in der Datenbank, weil Listen, Suche und Sortierung direkt darauf arbeiten.