Skip to content

Ephemeral Real-Time Communication ProtocolArchitektur für eine persistenzfreie, zustandslose 1:1 Kommunikationsinfrastruktur

License

Notifications You must be signed in to change notification settings

DEVmatrose/ZPMS---Zero-Persistence-Messaging-System

Repository files navigation

🌐 ZPMS - Zero-Persistence Messaging System

Ephemeral Chat Architecture

Leitbild

Die Architektur des digitalen Vergessens

License: MIT Node.js Socket.io E2EE

Ein Echtzeit-Kommunikationssystem, das physikalisch nicht in der Lage ist, Daten zu speichern.

⚠️ Hinweis: Dieses Projekt dient ausschließlich zu Trainings- und Vorführungszwecken.
Es demonstriert Zero-Persistence Architektur-Konzepte und soll als Lernressource für sichere Kommunikationssysteme verwendet werden.

📖 Dokumentation🚀 Quickstart💬 Live Demo


🎯 Was ist ZPMS?

ZPMS (Zero-Persistence Messaging System) - auch bekannt als Ephemeral Chat - ist eine sichere Chat-Plattform für 1:1-Kommunikation, die auf drei fundamentalen Prinzipien basiert:

RAM-Only Architecture

🧠 RAM-Only Architektur
Keine Datenbanken, keine Festplatten.
Daten existieren nur als Energiestrom im Arbeitsspeicher.
E2E Encryption

🔐 End-to-End Verschlüsselung
Server als blinder Relay.
Kann verschlüsselte Inhalte nicht lesen.
Immediate Disposal

🗑️ Immediate Disposal
Disconnect = Sofortige Datenlöschung.
Keine Spuren, keine Wiederherstellung.

✨ Features

🛡️ Absolute Privatsphäre

  • Zero Logging - Keine Server-Logs mit Nachrichteninhalten
  • No Database - Physikalisch unmöglich, Daten persistent zu speichern
  • Stateless Server - Server kennt nur aktive Verbindungen, keine Historie
  • Client-Side Encryption - WebCrypto API (ECDH + AES-GCM-256)

⚡ Echtzeit-Kommunikation

  • 🔌 WebSocket Full-Duplex - Bidirektionale, persistente Verbindungen
  • 🚀 Instant Message Relay - Nachrichten werden nur durchgeleitet, nie gespeichert
  • 👥 Session-Based Pairing - 1:1 Verbindungen mit temporären Session-IDs
  • 📱 Multi-Device Ready - Responsive Design für Desktop & Mobile

🔒 Sicherheit

  • 🛡️ Rate Limiting - 100 Nachrichten pro Minute pro Client
  • ⏱️ Session Timeout - Automatischer Disconnect nach 30 Minuten Inaktivität
  • 📦 Payload Limit - Maximale Nachrichtengröße: 1MB
  • 🚨 Error Isolation - Fehler-Logs ohne sensitiven Kontext

🏗️ Architektur

graph LR
    A[Client A<br/>Browser] -->|WSS Encrypted| B[Stateless Server<br/>RAM-Only]
    B -->|WSS Encrypted| C[Client B<br/>Browser]
    
    A -->|1. Generate Keys| A
    C -->|1. Generate Keys| C
    
    A -->|2. Exchange Public Keys| B
    B -->|2. Exchange Public Keys| C
    
    A -->|3. Encrypt with Shared Secret| A
    C -->|4. Decrypt with Shared Secret| C
    
    B -->|No Storage| D[❌ No Database<br/>❌ No HDD<br/>❌ No Logs]
    
    style B fill:#6366f1,color:#fff
    style D fill:#ef4444,color:#fff
Loading

🔄 Verbindungs-Lebenszyklus

  1. Initialisierung - Client A öffnet WebSocket zum Server
  2. Token-Generierung - Server generiert temporäre Session-ID (UUID)
  3. Waiting State - Client A wartet auf Partner
  4. Join Event - Client B verbindet sich mit Session-ID
  5. E2EE Handshake - Diffie-Hellman Key Exchange über Server
  6. Pipe Established - Server verknüpft Socket A ↔ Socket B im RAM
  7. Message Flow - Verschlüsselte Nachrichten fließen durch den Server
  8. Termination - Disconnect → Session-Objekt wird aus RAM gelöscht

🚀 Quickstart

Voraussetzungen

  • Node.js 18+
  • npm oder yarn

Installation

# Repository klonen
git clone https://github.com/DEVmatrose/ZPMS---Zero-Persistence-Messaging-System.git
cd ZPMS---Zero-Persistence-Messaging-System

# Dependencies installieren
npm install

# Umgebungsvariablen konfigurieren
cp .env.example .env

# Server starten
npm start

Entwicklungsmodus

# Server mit Auto-Reload
npm run dev

# Client öffnen
# Navigiere zu http://localhost:3000/client.html

Erste Session erstellen

  1. Tab 1 - Öffne http://localhost:3000/client.html
  2. Klicke auf "Create Session"
  3. Kopiere die generierte Session-ID
  4. Tab 2 - Öffne erneut http://localhost:3000/client.html
  5. Füge die Session-ID ein und klicke auf "Join Session"
  6. 🎉 Sichere E2E-verschlüsselte Kommunikation!

📦 Tech Stack

Backend

  • Node.js - JavaScript Runtime
  • Express - Minimal Web Framework
  • Socket.io 4.6 - WebSocket Implementierung
  • UUID 9.0 - Session-ID Generierung

Frontend

  • Vanilla JavaScript - Keine Framework-Abhängigkeiten
  • WebCrypto API - Native Browser-Verschlüsselung (ECDH + AES-GCM)
  • Tailwind CSS - Utility-First Styling
  • Socket.io-client - WebSocket Client

Verschlüsselung

  • ECDH (P-256) - Elliptic Curve Diffie-Hellman Key Exchange
  • AES-GCM-256 - Authenticated Encryption
  • HKDF (SHA-256) - Key Derivation Function
  • Random IV (96-bit) - Initialization Vector pro Nachricht

📁 Projektstruktur

ZPMS/
├── 📄 server.js                 # Backend (Node.js + Socket.io)
├── 📄 app.js                    # Frontend Logic (Encryption + WebSocket)
├── 📄 client.html               # Chat Interface
├── 📄 index.html                # Whitepaper Viewer
├── 📄 package.json              # Dependencies
├── 📄 .env.example              # Environment Template
├── 📁 images/                   # Visual Assets
│   ├── leitbild.png
│   ├── bild1.png (RAM-Only)
│   ├── bild2.png (E2E Flow)
│   └── bild3.png (Lifecycle)
├── 📄 BACKEND-WHITEPAPER.md     # Server Architektur
├── 📄 CLIENT-WHITEPAPER.md      # Client Architektur
├── 📄 WORKSESSION.md            # Entwicklungsdokumentation
└── 📄 QUICKSTART.md             # Setup-Guide

🔐 Sicherheitskonzept

End-to-End Verschlüsselung (E2EE)

┌─────────────┐                  ┌──────────────┐                  ┌─────────────┐
│  Client A   │                  │    Server    │                  │  Client B   │
│             │                  │  (RAM-Only)  │                  │             │
├─────────────┤                  ├──────────────┤                  ├─────────────┤
│             │                  │              │                  │             │
│ 1. Generate │                  │              │                  │ 1. Generate │
│    ECDH     │─────────────────▶│              │◀─────────────────│    ECDH     │
│    Keys     │  Public Key A    │              │  Public Key B    │    Keys     │
│             │                  │              │                  │             │
│ 2. Compute  │                  │   Forwards   │                  │ 2. Compute  │
│    Shared   │                  │   Public     │                  │    Shared   │
│    Secret   │                  │   Keys Only  │                  │    Secret   │
│             │                  │              │                  │             │
│ 3. Encrypt  │                  │   ┌────────┐ │                  │ 4. Decrypt  │
│    Message  │─────────────────▶│   │  Can't │ │─────────────────▶│    Message  │
│  (AES-GCM)  │  Ciphertext      │   │  Read  │ │  Ciphertext      │  (AES-GCM)  │
│             │                  │   └────────┘ │                  │             │
│ Plaintext:  │                  │              │                  │ Plaintext:  │
│ "Hello!"    │                  │  [Encrypted] │                  │ "Hello!"    │
└─────────────┘                  └──────────────┘                  └─────────────┘

Zero-Persistence Garantie

Der Server nutzt keine persistenten Datenstrukturen:

// ✅ Erlaubt - Flüchtiger RAM
const sessions = new Map(); // Nur im Arbeitsspeicher

// ❌ Verboten - Persistente Speicherung
// const db = new Database();
// fs.writeFileSync('messages.txt', data);
// localStorage.setItem('chat', messages);

Bei einem Disconnect-Event wird das Session-Objekt sofort aus dem RAM entfernt:

socket.on('disconnect', () => {
  const session = sessions.get(sessionId);
  sessions.delete(sessionId); // Sofortige Löschung
  // Garbage Collector überschreibt Speicher
});

⚖️ Vorteile vs. Einschränkungen

✅ Vorteile

Feature Beschreibung
🔒 Absolute Privatsphäre Keine Daten können später kompromittiert werden
📜 DSGVO-Konform Datenlöschung ist garantiert durch Design
🎯 Keine Angriffsfläche Keine Datenbank = Kein Ziel für Hacker
🏗️ Simple Infrastruktur Kein Backup-System, keine DB-Wartung
🕵️ Whistleblower-Schutz Perfekt für sensible Kommunikation

⚠️ Einschränkungen

Limitierung Beschreibung
📜 Kein Chat-Verlauf Nachrichten verschwinden bei Browser-Schließung
👥 Beide online Keine asynchrone Kommunikation möglich
📷 Keine Medienspeicherung Bilder/Dateien können nicht persistent geteilt werden
⚠️ Single Point of Failure Server-Absturz = Alle Sessions verloren
📋 Keine Beweissicherung Nicht für rechtliche Dokumentation geeignet

🎯 Anwendungsfälle

✅ Ideal für:

  • 📰 Journalisten ↔ Quellen - Whistleblower-Schutz ohne digitale Spuren
  • 🏥 Medizinische Erstberatung - Ohne Dokumentationspflicht
  • 💼 Unternehmensberatung - Sensible Strategiegespräche
  • 🧠 Therapeutische Gespräche - Ad-hoc Beratung ohne Archivierung
  • 🔐 Privacy-bewusste Nutzer - Private Konversationen ohne Überwachung

❌ Nicht geeignet für:

  • 📱 Standard-Messaging - Nutzer erwarten Chat-Historie
  • 📁 Dateifreigabe - Keine persistente Medienspeicherung
  • 👥 Gruppen-Chats - Aktuell nur 1:1 unterstützt
  • 📜 Rechtsverbindliche Kommunikation - Keine Nachweismöglichkeit

🛠️ Development

Tests ausführen

# Unit Tests
npm test

# Integration Tests
npm run test:integration

# Coverage Report
npm run coverage

Code-Qualität

# ESLint
npm run lint

# Prettier
npm run format

# Type Checking
npm run typecheck

📚 Dokumentation


🤝 Contributing

Beiträge sind willkommen! Bitte beachte folgende Richtlinien:

  1. 🍴 Fork das Repository
  2. 🌿 Erstelle einen Feature-Branch (git checkout -b feature/AmazingFeature)
  3. 💾 Committe deine Änderungen (git commit -m 'Add AmazingFeature')
  4. 📤 Push zum Branch (git push origin feature/AmazingFeature)
  5. 🔀 Öffne einen Pull Request

Code-Standards

  • ✅ ESLint-konforme Code-Formatierung
  • ✅ Aussagekräftige Commit-Messages
  • ✅ Tests für neue Features
  • ✅ Dokumentation für API-Änderungen

⚠️ Haftungsausschluss

Dieses Projekt wurde zu Trainings- und Vorführungszwecken entwickelt und dient als:

  • 📚 Lernressource für Zero-Persistence Architektur-Konzepte
  • 🎓 Bildungsmaterial für sichere Kommunikationssysteme
  • 🔬 Proof-of-Concept für ephemere Messaging-Technologien
  • 🎯 Demonstration von E2E-Verschlüsselung und WebSocket-Kommunikation

Wichtige Hinweise

⚠️ Nicht für Produktionsumgebungen:

  • Keine Garantie für absolute Sicherheit in kritischen Anwendungen
  • Keine professionelle Sicherheitsaudit durchgeführt
  • Dient primär didaktischen und demonstrativen Zwecken

⚠️ Verwendung auf eigene Verantwortung:

  • Der Code wird "AS IS" bereitgestellt
  • Keine Haftung für Datenverlust oder Sicherheitsvorfälle
  • Für sensible/kritische Kommunikation professionelle Lösungen verwenden

Ideal für:

  • Technische Workshops und Präsentationen
  • Universitätskurse über sichere Systeme
  • Prototyping und Konzept-Validierung
  • Persönliche Lernprojekte

📄 License

Dieses Projekt ist unter der MIT License lizenziert - siehe LICENSE für Details.


🙏 Acknowledgments

  • Socket.io Team - Für die exzellente WebSocket-Implementierung
  • Web Crypto API - Native Browser-Verschlüsselung ohne externe Abhängigkeiten
  • Tailwind CSS - Utility-First CSS Framework für das moderne UI-Design

📞 Kontakt

Organisation: DEVmatrose

Projektlink: ZPMS Repository

Dokumentation: GitHub Pages


Made with ❤️ for Privacy

"In einer Welt der ewigen Daten, ist Vergessen ein Feature, kein Bug."

Star dieses Repo, wenn es dir gefällt!

About

Ephemeral Real-Time Communication ProtocolArchitektur für eine persistenzfreie, zustandslose 1:1 Kommunikationsinfrastruktur

Resources

License

Contributing

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published