Skip to content

Commit

Permalink
Create proposal
Browse files Browse the repository at this point in the history
  • Loading branch information
Johennes committed Jan 10, 2025
1 parent 597c982 commit 245e36e
Showing 1 changed file with 347 additions and 0 deletions.
347 changes: 347 additions & 0 deletions proposals/XXXX-loeschkonzept-v2.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,347 @@
# Löschkonzept v2

Das aktuelle Konzept zum Löschen von Räumen und Inhalten in [TI-M Basis] wird in
Kommentierungsworkshops und Supportanfragen regelmäßig hinterfragt und
kritisiert. Dabei fallen insbesondere die folgenden Probleme auf:

- Das Konzept ist fragmentiert. Anforderungen tauchen in verschiedenen Kapiteln
und ohne übergreifende Erläuterung auf. Das Konzept und dessen Motivation
holistisch zu verstehen ist daher sehr schwierig.
- Die einzelnen Anforderungen sind teilweise überlappend oder lassen zu viel
Spielraum für Interpretationen. Beispielsweise sind etwaige Wechselwirkung
zwischen client- und serverseitigem Löschen oder die Auswirkungen des Löschens
auf die Föderation nicht klar benannt. Unterschiedliche Interpretationen
können zu unterschiedlichen Implementierungen und im schlimmsten Fall zu
Inkompatibilitäten führen.
- Die Anforderungen entsprechen teilweise nicht den Bedürfnissen und Erwartungen
von Nutzern, Organisationen und Anbietern. Rückmeldungen aus der
TI-Modellregion Hamburg z. B. haben ergeben, dass Nutzer nicht verstehen warum
sie regelmäßig gefragt werden ob sie Räume, die älter als 6 Monate sind
löschen möchten und ob diese Löschung Auswirkungen auf andere Raumteilnehmer
hat.

Im hier vorliegenden Proposal wird ausgehend von User Stories ein Vorschlag für
ein verständliches, sinnvolles und begründetes Löschkonzept präsentiert, das
obige Probleme löst.

## Änderungsvorschlag

Zur Erarbeitung eines Änderungsvorschlags wurden zunächst die Bedürfnisse von
Nutzern, Organisationen und Anbietern durch gezielte Nachfragen bei
Industriepartnern zusammengetragen. Aus diesen Bedürfnissen wurden im nächsten
Schritt User Stories abgeleitet und gruppiert. Im Folgenden werden die
gruppierten User Stories und die daraus abgeleiteten Änderungsvorschläge
vorgestellt.

Ausgangspunkt der Vorschläge ist, dass alle aktuellen Anforderung zum Löschen
entfallen. Diese Anforderungen sind der Vollständigkeit halber im nachfolgenden
Abschnitt "Aktuelle Löschanforderungen" aufgelistet. Des Weiteren sind die neuen
Anforderungen als grobe Vorschläge zu verstehen, die nicht zwingend mit
identischem Wortlaut in die Spezifikation übernommen werden sollen.

### Serverseitiges Löschen

**Story 1**

- Als Anbieter
- möchte ich nicht mehr benötigte Räume und deren Inhalte löschen
- damit ich die Speicherkosten meines Homeservers reduzieren kann.

**Story 2**

- Als Anbieter
- möchte ich meinen Nutzern verschiedene Preismodelle für die Haltung ihrer
historischen Kommunikation anbieten
- damit ich meine Speicherkosten an sie weiterreichen kann.

**Story 3**

- Als Organisation im Gesundheitswesen
- möchte ich zentral vorgeben wann die Chats meiner Mitarbeiter gelöscht werden
- damit ich die Kontrolle über die Daten meiner Nutzer behalte.

Um diese Nutzungsszenarien zu realisieren ist es notwendig, dass Homeserver eine
konfigurierbare Funktion zum serverseitigen Löschen von Rauminhalten anbieten.
Da die Löschung in erster Linie der Wahrung der individuellen Wirtschaftlichkeit
und Datenhoheit dient, sind Voreinstellungen und Defaultwerte nicht erforderlich
sondern können dem Markt überlassen werden. Anbieter dürfen dabei im Rahmen
ihrer Preisgestaltung auch die Grenzen der Konfigurierbarkeit für Organisationen
festlegen.

Die Löschoperation selbst darf nur server-lokal und ohne direkte Auswirkung auf
die Föderation erfolgen, da ansonsten Löschkonfigurationen auf unterschiedlichen
Servern kollidieren könnten. Diese server-lokale Löschung schließt also z. B.
die Verwendung von Redactions oder das Kicken der Nutzer anderer Homeserver aus.

Für die konkrete technische Implementierung gibt es verschiedene Möglichkeiten.
So könnten z. B. Nutzer des eigenen Homeservers aus Räumen entfernt werden und
diese Räume samt der zugehörigen Events und Medien dann aus der Datenbank des
Servers gelöscht werden. Alternativ wäre auch ein fortlaufendes Löschen von
veralteten Events und Medien aus der Datenbank des Servers möglich wobei der
Raum selbst bestehen bleibt. Homeserver wie Synapse beispielsweise bieten
hierfür konfigurierbare [Message Retention Policies] an.

**A_1 - Serverseitige Löschfunktion**

Matrix-Homeserver MÜSSEN eine Funktion anbieten, durch die Rauminhalte und mit
einzelnen Räumen assoziierte Daten wie z. B. versendete Dateien nach einem
festgelegten Zeitraum seit letzter Aktivität im Raum gelöscht werden. Die
Löschung MUSS server-lokal und ohne direkten Einfluss auf die Föderation
erfolgen. **\[\<=\]**

### Clientseitiges Löschen

**Story 4**

- Als Endnutzer
- möchte ich selbst entscheiden wann meine Unterhaltungen gelöscht werden
- damit ich mir wichtige Inhalte nicht überraschend verliere.

**Story 5**

- Als Mitarbeiter im Gesundheitswesen
- möchte ich Chats, die ich in ein Drittsystem archiviert habe, löschen
- um Doppeldokumentation zu vermeiden.

**Story 6**

- Als Endnutzer
- möchte ich, dass abgeschlossene Chats gelöscht werden
- damit meine Chatliste übersichtlich bleibt.

Die serverseitige Löschung von Rauminhalten propagiert allerspätestens dann wenn
der Nutzer das Gerät wechselt auch auf den Client. Der Nutzerwunsch über die
Löschung der eigenen Daten zu bestimmen kann daher mit dem Anbieter- und
Organisationswunsch Speicher zur Steigerung der Wirtschaftlichkeit freizugeben
kollidieren. Anbieter müssen ihre Nutzer deswegen über etwaige serverseitige
Löschungen informieren damit Daten nicht unerwartet verloren gehen. Die konkrete
Form der Information bleibt dabei dem Anbieter überlassen. So könnte der
Anbieter z. B. über [Server Notices] konkrete Räumlöschungen vorankündigen.
Alternativ wäre es auch denkbar, dass nur einmalig über feste Löschintervalle
informiert wird.

**A_2 - Information über serverseitige Löschung**

Anbieter MÜSSEN ihre Nutzer vorab über die serverseitige Löschung von Räumen und
Rauminhalten informieren. **\[\<=\]**

Weiterhin müssen Nutzer für die Organisation ihrer Unterhaltungen in die Lage
versetzt werden Räume selbstständig zu verlassen und vom Client zu entfernen.
Hierbei ist zu beachten, dass Räume nach erfolgreichem [`/leave`] weiterhin in
der [`/sync`]-Response auftauchen und dort erst durch ein explizites [`/forget`]
verschwinden. Clients steht es frei diese beiden Operationen zu kombinieren oder
zu trennen. Werden sie getrennt, entsteht dadurch gewissermaßen eine
Zwischenablage für historische Räume.

**A_3 - Verlassen von Räumen**

Clients MÜSSEN Nutzern erlauben Räume über die Nutzung der APIs [`/leave`] und
[`/forget`] vom Client zu löschen. **\[\<=\]**

Eine regelmäßige Erinnerung an das clientseitige Löschen von Räumen ist nicht
erforderlich. Zum Einen ist der überwiegende Teil der Kommunikation in TI-M
Ende-zu-Ende verschlüsselt. Zum Anderen lässt sich bei mehreren Raumteilnehmern
von verschiedenen Homeservern vom Client ohnehin kein tatsächliches Löschen der
Daten auf dem Server durchsetzen. Gleichzeitig steht es Herstellern aber frei
intelligente Systeme zur Erkennung abgeschlossener Unterhaltungen zu entwickeln
und diese dem Nutzer zur Löschung anzubieten.

### Redactions

**Story 7**

- Als Organisation im Gesundheitswesen
- möchte ich zentral vorgeben ob meine Nutzer einzelne Nachrichten per Redaction
löschen dürfen
- damit ich die medizinische Dokumentation sicherstellen kann.

Die Matrix-Spezifikation ermöglicht die (Selbst-)Moderation von Events mittels
[Redactions]. Redactions sind eine invasive Form des Löschens da sie über die
Föderation propagieren und letztendlich zu einer irreversiblen Löschung von
Inhalten auf allen beteiligten Servern und Clients führen. Der sinnvollen
Nutzung von Redactions zur Moderation gegenüber steht also das Problem des
unerwarteten Verlusts von Nachrichten für alle Gesprächsteilnehmer. Da letzteres
schwerwiegender erscheint müssen TI-M Fachdienste Redactions grundsätzlich
unterbinden.

Unabhängig davon können TI-M Clients bei Bedarf visuelles Löschen für z. B.
`m.room.message` Events auch über [Event Replacements] implementieren. Diese
Form des Löschens ist reversibel und transparent da Replacements separate Events
sind und die gesamte Historie von Events erhalten bleibt. Story 7 wird somit
gegenstandslos, da es bei dieser Art des "Löschens" keinen Grund für
Organisationen gibt die Nutzung einzuschränken.

**A_4 - Verbot von Redactions**

Homeserver müssen Requests am Endpunkt
[`/_matrix/client/v3/rooms/{roomId}/redact/{eventId}/{txnId}`] mit einer HTTP
403 Response und dem Fehlercode `M_FORBIDDEN` quittieren. **\[\<=\]**

### DSGVO & Datenschutz

**Story 8**

- Als Endnutzer
- möchte ich mein Recht auf Löschung nach DSGVO wahrnehmen
- damit ich die Kontrolle über meine Daten behalte.

TI-M Clients und Fachdienste müssen DSGVO konform sein. Dies gilt ganz
unabhängig von der TI-M Spezifikation und Bedarf an dieser Stelle eigentlich
keiner weiteren Regelung. Insbesondere kann das Recht auf Löschung der eigenen
Daten auch durch einen Supportprozess außerhalb des Clients implementiert
werden.

Da die Matrix-Spezifikation zwischen [`/leave`] und [`/forget`] unterscheidet
und dies nicht selten zu Verwirrung führt erscheinen einige explizite Regelungen
dennoch sinnvoll.

Zum einen müssen private Räume, die von allen Teilnehmern eines Homeservers
verlassen und per [`/forget`] clientseitig entfernt wurden auch serverseitig
gelöscht werden. Dies folgt direkt aus dem DSGVO-Prinzip der Datensparsamkeit
und der Tatsache, dass Nutzer diese Räume nicht mehr betreten können und auch
auf ihren Geräten zur Löschung freigegeben haben.

Zum anderen dürfen private Räume, die zwar von allen Teilnehmern eines
Homeservers verlassen aber nicht per [`/forget`] zur Löschung freigegeben
wurden, erst nach einer gewissen Karenzzeit auf dem Homeserver gelöscht werden.
Dies ergibt sich insbesondere daraus, dass das Verlassen eines Raumes nach
[A_26348] und [A_26463] nicht zwingend vom Nutzer selbst initiert wird. Die
Karenzzeit dient daher dazu die Wahrscheinlichkeit eines unerwarteten Verlustes
von Rauminhalten für den Nutzer zu reduzieren.

**A_5 - Serverseitiges Löschen nach `/forget`**

Homeserver MÜSSEN einen Raum und dessen Inhalte lokal löschen, wenn:

- der Raum privat ist und
- keiner der Nutzer des Homservers im Raum die Membership `invite` oder `join`
hat und
- alle Nutzer des Homeservers, deren Membership im Raum `leave` oder `ban` ist,
den Raum per [`/forget`] von ihren Clients entfernt haben.

Diese Löschung MUSS innerhalb von 7 Tagen ab letztem [`/forget`] erfolgen.
**\[\<=\]**

**A_6 - Serverseitiges Löschen ohne `/forget`**

Homeserver MÜSSEN einen Raum und dessen Inhalte für mindestens 7 Tage vorhalten,
wenn:

- der Raum privat ist und
- keiner der Nutzer des Homservers im Raum die Membership `invite` oder `join`
hat und
- es Nutzer des Homeservers gibt, deren Membership im Raum `leave` oder `ban`
ist, die den Raum aber *nicht* per [`/forget`] von ihren Clients entfernt
haben.

Nach Ablauf dieser Karenzzeit, ist eine serverseite Löschung erlaubt.
**\[\<=\]**

## Aktuelle Löschanforderungen

Da das aktuelle Löschkonzept wie eingangs erwähnt fragmentiert ist, werden der
Vollständigkeit halber im Folgenden die momentan existierenden Anforderungen aus
[TI-M Basis] aufgelistet. Die Anforderungen sind dabei zum besseren Verständnis
in dieselben Kategorien wie im vorigen Abschnitt "Änderungsvorschlag" gruppiert.

### Serverseitiges Löschen

> **[A_25318] - Löschfunktion für Matrix-Homeserver**
>
> Matrix-Homeserver MÜSSEN eine Funktion anbieten, durch die Events,
> Gesprächsinhalte und mit einzelnen Gesprächen assoziierte Daten (z. B.
> versandte Dateien) nach einem festgelegten Zeitraum seit letzter Aktivität in
> einem Raum gelöscht werden. **\[\<=\]**
> **[A_25319] - Zeitraum zur Auslösung der Löschfunktion für Matrix-Homeserver**
>
> Die Löschfunktion für Matrix-Homeserver MUSS auf sechs Monate voreingestellt
> und durch einen Akteur in der Rolle "Org-Admin" konfigurierbar sein.
> **\[\<=\]**
>
> Hinweis: Die Löschfunktion für Matrix-Homeserver kann derart realisiert
> werden, dass nach Verstreichen des festgelegten Zeitraums die Teilnehmer einen
> Gesprächsraum verlassen - bspw. indem sie vom Homeserver aus diesem entfernt
> werden - und der Raum nach Verlassen aller Teilnehmer automatisch gelöscht
> wird.
>
> Hinweis: Die Löschfunktion für Matrix-Homeserver kann per Opt-Out durch den
> Akteur in der Rolle "Org-Admin" deaktivierbar sein.
### Clientseitiges Löschen

> **[A_25609] - Konfigurierbare Frist zur Erinnerung an Löschung**
>
> TI-M Clients MÜSSEN über eine konfigurierbare Frist zur Erinnerung an die
> Löschung von Räumen und Rauminhalten verfügen, welche die Löschung aller
> Daten, die älter als die konfigurierte Frist sind, anbietet. **\[\<=\]**
> **[A_25610] - Voreinstellung zur Erinnerung an Löschung**
>
> Die konfigurierbare Frist in TI-M Clients zur Erinnerung an die Löschung von
> Räumen und Rauminhalten MUSS auf sechs Monate voreingestellt sein und bezieht
> sich auf den Zeitstempel der Erstellung der letzten Nachricht in einem Raum.
> **\[\<=\]**
> **[A_25611] - Durchführung der Löschung**
>
> Ist die im TI-M Client konfigurierte Frist zur Erinnerung an die Löschung von
> Räumen und Rauminhalten verstrichen, so MUSS der Client den Nutzer darauf
> hinweisen und die Löschung des Raumes und dessen Inhalten empfehlen. Stimmt
> der Nutzer zu, so wird er aus dem Raum entfernt, was auch zu einer
> Benachrichtigung des Servers führt. **\[\<=\]**
> **[A_25492] - Löschfunktion des Clients[^1]**
>
> Der TI-M Client MUSS Löschfunktionen implementieren, die es dem Akteur
> ermöglichen, Daten sowohl lokal auf dem Client zu löschen, bspw. durch
> Verlassen eines Raumes, bei dem der gesamte Raum samt Inhalt vom Client
> entfernt wird, als auch server-seitig, wenn es sich dabei um Daten handelt,
> die der Nutzer selbst eingebracht hat, bspw. indem er eine von ihm verfasste
> Nachricht in einem Chat-Raum löscht ("redact"). **\[\<=\]**
### Redactions

> **[A_25575] - Löschung von Nachrichten**
>
> TI-M Clients MÜSSEN über eine nachrichtenbasierte Löschfunktion verfügen, die
> es Akteuren erlaubt, ihre eigenen Nachrichten gemäß \[Client-Server
> API/#redactions\] zu löschen. **\[\<=\]**
> **[A_25576] - Lokales Löschen bei Entfernung von Nachrichten aus dem Room
> State**
>
> Wurde eine Nachricht durch einen anderen Akteur gemäß \[Client-Server
> API/#redactions\] gelöscht, so MÜSSEN TI-M Clients, die sich im selben Raum
> befinden, die entsprechende Nachricht auch lokal löschen und kennzeichnen.
> **\[\<=\]**
> **[A_25577] - Kennzeichnung gelöschter Nachrichten**
>
> TI-M Clients MÜSSEN im Rahmen der Kennzeichnung gelöschter Nachrichten den
> löschenden Akteur, das Datum und die Uhrzeit der Löschung enthalten.
> **\[\<=\]**
[^1]: Der zweite Teil dieser Anforderung ist redundant zu [A_25575] und gehört
daher eigentlich auch in die Kategorie "Redactions".

[TI-M Basis]: https://gemspec.gematik.de/docs/gemSpec/gemSpec_TI-M_Basis/gemSpec_TI-M_Basis_V1.1.1
[Message Retention Policies]: https://element-hq.github.io/synapse/latest/message_retention_policies.html
[Server Notices]: https://spec.matrix.org/v1.13/client-server-api/#server-notices
[`/leave`]: https://spec.matrix.org/v1.13/client-server-api/#post_matrixclientv3roomsroomidleave
[`/sync`]: https://spec.matrix.org/v1.13/client-server-api/#get_matrixclientv3sync
[`/forget`]: https://spec.matrix.org/v1.13/client-server-api/#post_matrixclientv3roomsroomidforget
[Redactions]: https://spec.matrix.org/v1.13/client-server-api/#redactions
[Event Replacements]: https://spec.matrix.org/v1.13/client-server-api/#event-replacements
[`/_matrix/client/v3/rooms/{roomId}/redact/{eventId}/{txnId}`]: https://spec.matrix.org/v1.13/client-server-api/#put_matrixclientv3roomsroomidredacteventidtxnid
[A_26348]: https://gemspec.gematik.de/docs/gemSpec/gemSpec_TI-M_ePA/latest/#A_26348
[A_26463]: https://gemspec.gematik.de/docs/gemSpec/gemSpec_TI-M_Pro/latest/#A_26463
[A_25318]: https://gemspec.gematik.de/docs/gemSpec/gemSpec_TI-M_Basis/gemSpec_TI-M_Basis_V1.1.1/#A_25318
[A_25319]: https://gemspec.gematik.de/docs/gemSpec/gemSpec_TI-M_Basis/gemSpec_TI-M_Basis_V1.1.1/#A_25319
[A_25609]: https://gemspec.gematik.de/docs/gemSpec/gemSpec_TI-M_Basis/gemSpec_TI-M_Basis_V1.1.1/#A_25609
[A_25610]: https://gemspec.gematik.de/docs/gemSpec/gemSpec_TI-M_Basis/gemSpec_TI-M_Basis_V1.1.1/#A_25610
[A_25611]: https://gemspec.gematik.de/docs/gemSpec/gemSpec_TI-M_Basis/gemSpec_TI-M_Basis_V1.1.1/#A_25611
[A_25492]: https://gemspec.gematik.de/docs/gemSpec/gemSpec_TI-M_Basis/gemSpec_TI-M_Basis_V1.1.1/#A_25492
[A_25575]: https://gemspec.gematik.de/docs/gemSpec/gemSpec_TI-M_Basis/gemSpec_TI-M_Basis_V1.1.1/#A_25575
[A_25576]: https://gemspec.gematik.de/docs/gemSpec/gemSpec_TI-M_Basis/gemSpec_TI-M_Basis_V1.1.1/#A_25576
[A_25577]: https://gemspec.gematik.de/docs/gemSpec/gemSpec_TI-M_Basis/gemSpec_TI-M_Basis_V1.1.1/#A_25577

0 comments on commit 245e36e

Please sign in to comment.