mirror of
https://github.com/Shik3i/KoalaSync.git
synced 2026-07-26 12:08:15 +00:00
docs(privacy): document encrypted room chat
This commit is contained in:
@@ -16,6 +16,8 @@ const siteAccessHelpPage = fs.readFileSync(path.join(repoRoot, 'website', 'site-
|
||||
const websiteBuild = fs.readFileSync(path.join(repoRoot, 'website', 'build.cjs'), 'utf8');
|
||||
const imprintPage = fs.readFileSync(path.join(repoRoot, 'website', 'imprint.html'), 'utf8');
|
||||
const germanImprintPage = fs.readFileSync(path.join(repoRoot, 'website', 'impressum-de.html'), 'utf8');
|
||||
const privacyPage = fs.readFileSync(path.join(repoRoot, 'website', 'privacy.html'), 'utf8');
|
||||
const germanPrivacyPage = fs.readFileSync(path.join(repoRoot, 'website', 'datenschutz-de.html'), 'utf8');
|
||||
const alternativesIndex = fs.readFileSync(path.join(repoRoot, 'website', 'alternatives', 'index.html'), 'utf8');
|
||||
const alternativesCss = fs.readFileSync(path.join(repoRoot, 'website', 'styles', 'alternatives.css'), 'utf8');
|
||||
const llmsText = fs.readFileSync(path.join(repoRoot, 'website', 'llms.txt'), 'utf8');
|
||||
@@ -28,6 +30,32 @@ if (mockupStart === -1 || mockupEnd === -1) {
|
||||
}
|
||||
|
||||
const mockup = template.slice(mockupStart, mockupEnd);
|
||||
|
||||
const privacyChatContracts = [
|
||||
[privacyPage, 'English', [
|
||||
'end-to-end encrypted in the browser extension before transmission',
|
||||
'256-bit AES-GCM key',
|
||||
'the relay does not receive the chat secret',
|
||||
'does not create a server-side chat history',
|
||||
'maximum of 200 visible message or activity entries',
|
||||
"browser's notification API"
|
||||
]],
|
||||
[germanPrivacyPage, 'German', [
|
||||
'vor der Übertragung Ende-zu-Ende verschlüsselt',
|
||||
'256-Bit-Schlüssel für AES-GCM',
|
||||
'der Relay das Chat-Secret nicht erhält',
|
||||
'keine serverseitige Chat-Historie',
|
||||
'höchstens 200 Nachrichten- oder Aktivitätseinträge',
|
||||
'Benachrichtigungs-API des Browsers'
|
||||
]]
|
||||
];
|
||||
for (const [page, language, statements] of privacyChatContracts) {
|
||||
for (const statement of statements) {
|
||||
if (!page.includes(statement)) {
|
||||
throw new Error(`${language} privacy policy is missing encrypted-chat disclosure: ${statement}`);
|
||||
}
|
||||
}
|
||||
}
|
||||
const themeSensitiveControls = [
|
||||
['video selector', /<select[^>]+id="demo-video-select"[^>]+>/],
|
||||
['sync target', /<div[^>]+class="mock-input"[^>]+title="Choose sync target"[^>]*>/],
|
||||
|
||||
@@ -207,6 +207,15 @@
|
||||
<p style="margin-top: 0.5rem;">
|
||||
Zur Bereitstellung der Raumfunktion verarbeitet der Relay Raum- und Synchronisationsdaten temporär im Arbeitsspeicher, solange ein Raum aktiv ist. Dazu können Room-ID, Peer-ID, Anzeigename, Wiedergabestatus, Sync-Events und – abhängig von den Titel-Privatsphäre-Einstellungen – Tab-/Medientitel gehören. Diese Daten werden nur an Teilnehmer desselben Raums weitergeleitet und aus dem Arbeitsspeicher entfernt, wenn der Raum abläuft oder geschlossen wird.
|
||||
</p>
|
||||
<p style="margin-top: 0.5rem;">
|
||||
Der Inhalt von Raum-Chatnachrichten wird bereits in der Browser-Erweiterung vor der Übertragung Ende-zu-Ende verschlüsselt. KoalaSync leitet lokal aus der Room-ID und einem zufällig erzeugten Chat-Secret einen 256-Bit-Schlüssel für AES-GCM ab. Das Chat-Secret wird über den Einladungslink geteilt und von der Erweiterung lokal gespeichert; es ist nicht Bestandteil der an den Relay gesendeten Chat-Nutzdaten.
|
||||
</p>
|
||||
<p style="margin-top: 0.5rem;">
|
||||
Der Relay erhält ausschließlich den verschlüsselten Nachrichteninhalt sowie die für die Live-Zustellung erforderlichen technischen Metadaten, beispielsweise Absender-ID, Nachrichten-ID und Zeitstempel. Da der Relay das Chat-Secret nicht erhält, kann er den Nachrichtentext nicht entschlüsseln oder lesen. Er leitet den verschlüsselten Inhalt an die aktuell verbundenen Teilnehmer desselben Raums weiter und erstellt keine serverseitige Chat-Historie, schreibt keine Nachrichten auf Festplatte und bewahrt sie nach der Live-Weiterleitung nicht auf.
|
||||
</p>
|
||||
<p style="margin-top: 0.5rem;">
|
||||
Wer einen gültigen Einladungslink einschließlich Chat-Secret erhält, kann Nachrichten dieses Raums möglicherweise entschlüsseln. Einladungslinks sollten daher ausschließlich mit den vorgesehenen Teilnehmern geteilt werden.
|
||||
</p>
|
||||
<p style="margin-top: 0.5rem;">
|
||||
Rechtsgrundlage: Art. 6 Abs. 1 lit. f DSGVO, berechtigtes Interesse an der Bereitstellung der gewünschten Synchronisationsfunktion, Sicherheit und Missbrauchsprävention.
|
||||
</p>
|
||||
@@ -221,7 +230,13 @@
|
||||
Zur Synchronisierung der Wiedergabe zwischen Teilnehmern desselben Raums erfasst die KoalaSync Browser-Erweiterung temporär Daten des aktuell aktiven Video-Tabs (z. B. Tab-Titel, Medien-Metadaten wie den Videotitel sowie den Wiedergabestatus). Tab- oder Medientitel können je nach Inhalt potenziell personenbezogen sein. Sie werden nur für die Synchronisationsfunktion verarbeitet, können über die Privatsphäre-Einstellungen der Erweiterung eingeschränkt oder deaktiviert werden, werden nur an Teilnehmer desselben Raums weitergeleitet und vom Relay nicht protokolliert oder dauerhaft gespeichert.
|
||||
</p>
|
||||
<p style="margin-top: 0.5rem;">
|
||||
Die Erweiterung speichert nur für den Betrieb erforderliche Einstellungen lokal im Browser, z. B. Anzeigename, Server-URL, aktuelle Raumdaten, Sprache, Titel-Privatsphäre-Einstellungen, Benachrichtigungseinstellungen und Audio-Processing-Einstellungen. KoalaSync speichert keinen allgemeinen Browserverlauf und keinen persistenten Wiedergabeverlauf.
|
||||
Die Erweiterung speichert nur für den Betrieb erforderliche Einstellungen lokal im Browser, z. B. Anzeigename, Server-URL, aktuelle Raumdaten einschließlich Chat-Secret, Sprache, Titel-Privatsphäre-Einstellungen, Benachrichtigungseinstellungen und Audio-Processing-Einstellungen. KoalaSync speichert keinen allgemeinen Browserverlauf und keinen persistenten Wiedergabeverlauf.
|
||||
</p>
|
||||
<p style="margin-top: 0.5rem;">
|
||||
Entschlüsselte Chatnachrichten werden ausschließlich im Arbeitsspeicher des Overlays im aktuellen Video-Tab gehalten; sichtbar bleiben höchstens 200 Nachrichten- oder Aktivitätseinträge. Sie werden nicht in den Browser-Speicher geschrieben und verschwinden, wenn der Chat zurückgesetzt oder entfernt, die Seite neu geladen oder die Raumsitzung beendet wird. Im Chat angezeigte Wiedergabe- und Anwesenheitseinträge werden lokal aus bereits vorhandenen Raum-Events erzeugt und erstellen keine separate serverseitige Historie.
|
||||
</p>
|
||||
<p style="margin-top: 0.5rem;">
|
||||
Wenn Chat-Benachrichtigungen aktiviert sind, werden der entschlüsselte Anzeigename und Nachrichtentext an die Benachrichtigungs-API des Browsers übergeben und können entsprechend den Einstellungen des Browsers oder Betriebssystems angezeigt oder dort vorgehalten werden. Chat-Benachrichtigungen können in den Einstellungen der Erweiterung deaktiviert werden.
|
||||
</p>
|
||||
<p style="margin-top: 0.5rem;">
|
||||
Die Erweiterung verbindet sich nur mit dem Relay-Server, während Sie sich aktiv in einem Raum befinden. Es wird keine dauerhafte Hintergrundverbindung aufrechterhalten, sodass Ihre IP-Adresse dem Server nicht offengelegt wird, wenn Sie die Erweiterung nicht nutzen.
|
||||
@@ -254,14 +269,14 @@
|
||||
<section>
|
||||
<h2>8. Empfänger & Dritte</h2>
|
||||
<p>
|
||||
Technische Hosting- und Verbindungsdaten können durch Hetzner als Hosting-Anbieter im Auftrag des Betreibers verarbeitet werden. Raum-Synchronisationsdaten werden nur an Teilnehmer desselben Raums weitergeleitet. KoalaSync verwendet keine Analytics-Anbieter, Werbenetzwerke oder Tracking-Dienste.
|
||||
Technische Hosting- und Verbindungsdaten können durch Hetzner als Hosting-Anbieter im Auftrag des Betreibers verarbeitet werden. Raum-Synchronisationsdaten werden nur an Teilnehmer desselben Raums weitergeleitet. Verschlüsselte Raum-Chat-Nutzdaten und deren Zustellungsmetadaten werden ebenfalls nur innerhalb des Raums weitergeleitet; lesbarer Nachrichteninhalt steht nur Teilnehmern zur Verfügung, die das Chat-Secret besitzen. KoalaSync verwendet keine Analytics-Anbieter, Werbenetzwerke oder Tracking-Dienste.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<h2>9. Erforderliche & optionale Daten</h2>
|
||||
<p>
|
||||
Die Bereitstellung technischer Verbindungsdaten ist erforderlich, um die Website aufzurufen und den Relay zu nutzen. Raumdaten und Sync-Events sind erforderlich, um die Raumsynchronisation zu verwenden. Das Teilen von Tab-/Medientitel ist optional und kann über die Privatsphäre-Einstellungen der Erweiterung eingeschränkt werden.
|
||||
Die Bereitstellung technischer Verbindungsdaten ist erforderlich, um die Website aufzurufen und den Relay zu nutzen. Raumdaten und Sync-Events sind erforderlich, um die Raumsynchronisation zu verwenden. Der Text-Chat ist optional; bei seiner Nutzung sind verschlüsselte Nachrichten-Nutzdaten und Zustellungsmetadaten für die Live-Zustellung erforderlich. Das Teilen von Tab-/Medientiteln und Browser-Benachrichtigungen sind optional und können über die Privatsphäre-Einstellungen der Erweiterung gesteuert werden.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
|
||||
+18
-3
@@ -207,6 +207,15 @@
|
||||
<p style="margin-top: 0.5rem;">
|
||||
To provide the room feature, the relay temporarily processes room and synchronization data in memory while a room is active. This can include room ID, peer ID, display name, playback state, sync events, and, depending on title privacy settings, tab/media titles. This data is only forwarded to participants in the same room and is removed from memory when the room expires or is closed.
|
||||
</p>
|
||||
<p style="margin-top: 0.5rem;">
|
||||
Room-chat message content is end-to-end encrypted in the browser extension before transmission. KoalaSync derives a 256-bit AES-GCM key locally from the room ID and a randomly generated chat secret. The chat secret is shared through the invite link and stored locally by the extension; it is not included in chat payloads sent to the relay.
|
||||
</p>
|
||||
<p style="margin-top: 0.5rem;">
|
||||
The relay receives only encrypted message content together with the technical metadata required for live delivery, such as sender ID, message ID and timestamp. Because the relay does not receive the chat secret, it cannot decrypt or read the message text. It forwards the encrypted payload to current participants in the same room and does not create a server-side chat history, write messages to disk or retain them after live forwarding.
|
||||
</p>
|
||||
<p style="margin-top: 0.5rem;">
|
||||
Anyone who obtains a valid invite link and its chat secret may be able to decrypt messages in that room. Invite links should therefore be shared only with intended participants.
|
||||
</p>
|
||||
<p style="margin-top: 0.5rem;">
|
||||
Legal basis: Art. 6(1)(f) GDPR, legitimate interest in providing the requested synchronization functionality, maintaining security, and preventing abuse.
|
||||
</p>
|
||||
@@ -221,7 +230,13 @@
|
||||
To synchronize playback between participants in the same room, the KoalaSync browser extension temporarily captures data from the currently active video tab (e.g., tab title, media metadata like the video title, and playback state). Tab or media titles can potentially be personal depending on content. They are only processed for the synchronization feature, can be limited or disabled through title privacy settings in the extension, are forwarded only to room participants, and are not logged or stored persistently by the relay.
|
||||
</p>
|
||||
<p style="margin-top: 0.5rem;">
|
||||
The extension stores only settings required for operation locally in the browser, such as username, server URL, current room credentials, language, title privacy settings, notification preferences and audio-processing settings. KoalaSync does not store general browsing history or a persistent watch history.
|
||||
The extension stores only settings required for operation locally in the browser, such as username, server URL, current room credentials (including the chat secret), language, title privacy settings, notification preferences and audio-processing settings. KoalaSync does not store general browsing history or a persistent watch history.
|
||||
</p>
|
||||
<p style="margin-top: 0.5rem;">
|
||||
Decrypted chat messages are kept only in the memory of the current video-tab overlay, with a maximum of 200 visible message or activity entries. They are not written to browser storage and disappear when the chat is reset or destroyed, the page is reloaded, or the room session ends. Playback and presence entries shown inside the chat are generated locally from existing room events and do not create a separate server-side history.
|
||||
</p>
|
||||
<p style="margin-top: 0.5rem;">
|
||||
If chat notifications are enabled, the decrypted sender name and message text are passed to the browser's notification API and may be displayed or retained by the browser or operating system according to its own notification settings. Chat notifications can be disabled in the extension settings.
|
||||
</p>
|
||||
<p style="margin-top: 0.5rem;">
|
||||
The extension only connects to the relay server while you are actively in a room. No persistent background connection is maintained, so your IP address is not exposed to the server when you are not using the extension.
|
||||
@@ -254,14 +269,14 @@
|
||||
<section>
|
||||
<h2>8. Recipients & Third Parties</h2>
|
||||
<p>
|
||||
Technical hosting and connection data may be processed by Hetzner as hosting provider on behalf of the operator. Room sync data is forwarded only to participants in the same room. KoalaSync does not use analytics providers, advertising networks, or tracking services.
|
||||
Technical hosting and connection data may be processed by Hetzner as hosting provider on behalf of the operator. Room sync data is forwarded only to participants in the same room. Encrypted room-chat payloads and their delivery metadata are likewise forwarded only within the room; readable message content is available only to participants who possess the chat secret. KoalaSync does not use analytics providers, advertising networks, or tracking services.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<h2>9. Required & Optional Data</h2>
|
||||
<p>
|
||||
Providing technical connection data is necessary to access the website and use the relay. Room credentials and sync events are necessary to use room synchronization. Sharing tab/media titles is optional and can be limited through the extension’s privacy settings.
|
||||
Providing technical connection data is necessary to access the website and use the relay. Room credentials and sync events are necessary to use room synchronization. Text chat is optional; when used, encrypted message payloads and delivery metadata are required for live delivery. Sharing tab/media titles and enabling browser notifications are optional and can be controlled through the extension’s privacy settings.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user