- Standardansicht: Klassische Darstellung mit Standardmodulen.
- ColorBlocks-Ansicht: Darstellung mit runden und farbigen Modulen für moderne Looks.
Dieses Projekt zeigt ein vollständiges, modernes QR-Code-System, bestehend aus:
-
Generator
Zeigt kontinuierlich wechselnde QR-Codes an, die ein Token in mehrere Teile aufspalten.
So können lange oder dynamische Daten über mehrere Frames verteilt werden, die ein Scanner nacheinander einliest. -
Scanner
Nutzt eine Kamera (z. B. Smartphone oder Laptop) zum Einlesen der QR-Codes, rekonstruiert automatisch das vollständige Token und meldet den Fortschritt an den Server. -
Admin-Dashboard
Bietet einen Überblick über alle aktiven Sessions, deren Scan-Fortschritte und erlaubt die Live-Konfiguration (z. B. wie viele Teile ein Token hat oder wie viele Tokens insgesamt benötigt werden).
- QR-Codes sind normalerweise statisch – hier sind sie dynamisch und transportieren Daten über mehrere Frames.
- Sessions und WebSocket-Livefeedback ermöglichen interaktive Anwendungen:
- Live sehen, wie ein Scanner gerade Teile sammelt.
- Automatische Validierung, sobald genug Daten eingelesen wurden.
- Konfigurierbar (z. B. mehrere Tokens pro Prozess oder "Single-Client-only"-Modus).
- Sicherheitsaspekt:
- Daten werden signiert (PublicKey-Prüfung im Client).
- Ein zentraler Secret-Key bleibt nur auf dem Server.
- Dockerbereit → schnell lokal startbar, oder als Demo im eigenen Netzwerk.
-
Generator erzeugt Tokens (zufällige Zeichenketten) und teilt sie in mehrere Teile auf (z. B. 5 Teile).
Jeder Frame zeigt nur ein Teil an, sodass der Scanner mehrere Frames braucht, um den vollständigen Token zu erhalten. -
Scanner:
- liest nacheinander die QR-Codes ein,
- prüft jedes Teil (HMAC-Prüfung mit einem PublicKey),
- setzt die Teile zusammen und sendet das fertige Token an den Server.
-
Server:
- verwaltet Sessions (pro Scanner-Client),
- prüft die empfangenen Tokens (keine Doppelverwendung),
- meldet Fortschritt und Validierung per WebSocket an alle verbundenen Clients (z. B. auch an das Admin-Dashboard).
-
Admin-Dashboard:
- zeigt aktive Sessions, wie viele Tokens bereits gescannt wurden,
- erlaubt es, Konfigurationen live zu ändern (z. B. Anzahl der Token-Teile).
- Event-Ticket-Validierung
→ Besucher scannen ein sich kontinuierlich änderndes QR-Bild, und der Server prüft es. - Sichere Logins oder Pairing
→ Ein Gerät (Generator) zeigt ein zeitlich begrenztes Token an, das nur vor Ort scannbar ist. - Schulungs- oder Spiele-Anwendungen
→ QR-Codes als interaktive „Level-Daten“ oder Aufgaben, die nur in Reihenfolge eingelesen werden können. - Gamification
→ Teile des QR-Codes sind über Zeit oder Ort verteilt, Scanner müssen alle sammeln.
- Zeigt QR-Codes mit dynamischen Daten an.
- Visualisiert den Scanprozess (Scanbalken, Validierungsanzeige).
- Zeigt an, wie viele Teile gerade angezeigt werden und wie viele Tokens insgesamt benötigt werden.
- Nutzt die Kamera des Geräts.
- Erkennt automatisch, welche Teile bereits gelesen wurden.
- Sendet Fortschritts-Updates an den Server.
- Meldet vollständige Tokens, sobald alle Teile eines Tokens eingelesen wurden.
- Zeigt visuelles Feedback (Badge, Fortschrittsübersicht).
- Zeigt alle aktiven Sessions mit deren Fortschritt.
- Zeigt Live-Logs (Events vom Server).
- Bietet ein Formular zur Änderung der Konfiguration.
Das Backend gibt bei jedem Aufruf von /api/config folgende Felder zurück:
| Feld | Typ | Beschreibung |
|---|---|---|
partsCount |
Zahl | Wie viele Teile ein einzelnes Token hat. Beispiel: 5 bedeutet, dass der Scanner 5 verschiedene QR-Frames benötigt, um ein Token zu vervollständigen. |
requiredTokens |
Zahl | Wie viele vollständige Tokens benötigt werden, bevor der Prozess als abgeschlossen gilt. Beispiel: 2 bedeutet: zwei komplette Token müssen gescannt werden. |
singleClientOnly |
Bool | Wenn true, darf ein Token nur von einer einzigen Session verwendet werden (z. B. Schutz gegen mehrfaches Scannen desselben Tokens durch verschiedene Geräte). |
wsUrl |
String | Dynamische WebSocket-URL (automatisch ermittelt). Wird vom Frontend für Live-Kommunikation genutzt. |
apiBase |
String | Basis-URL für REST-API-Aufrufe. |
publicKey |
String | Öffentlicher Schlüssel für Client-seitige Integritätsprüfungen. |
POST /api/config
{
"partsCount": 5,
"requiredTokens": 1,
"singleClientOnly": false
}→ broadcastet automatisch ein config-update Event an alle WebSocket-Clients.
-
Schnelle Integration
→ Alles basiert auf Standard-Webtechnologien (HTML, JavaScript, WebSocket, REST). -
Live Feedback
→ Administratoren sehen sofort, wie weit ein Scanner ist. -
Token-Splitting
→ Lange Daten oder Sicherheits-Tokens können aufgeteilt werden, wodurch das Fälschen oder Abfotografieren schwieriger wird. -
Skalierbarkeit
→ Mehrere Scanner und Generatoren können parallel arbeiten.
→ Durch Sessions wird jede Verbindung isoliert verwaltet. -
Sicherheit
→ Signaturen verhindern Manipulationen.
→ SecretKey bleibt nur auf dem Server. -
Docker-ready
→ Mit einem Befehl in jeder Umgebung startbar.
- Node.js >= 20
- npm
- (optional) Docker
cd server
npm install
npm start→ Standard: http://localhost:8080
docker build -t SecureQR ./server
docker run -p 8080:8080 SecureQRpublic/generator.htmlöffnen → QR-Codes werden angezeigt.public/scanner.htmlöffnen → QR-Codes scannen.public/admin.htmlöffnen → Sessions und Konfiguration ansehen.
- Zeigt moderne Echtzeit-Webtechnologien (WebSocket, dynamische QR-Codes).
- Beispiel für sichere Tokenübertragung über QR – etwas, das in der Praxis oft gebraucht wird (Pairing, Authentifizierung, Ticketing).
- Einfach erweiterbar:
- Mehr Konfigurationsoptionen (z. B. Ablaufzeiten, Benutzerrechte)
- Integration in bestehende Systeme (z. B. Datenbanken, Auth-Server)
- Open Source, kostenlos, edukativ – ideal, um etwas über WebSockets, QR-Codes und Echtzeitkommunikation zu lernen.
Dieses Projekt ist nicht nur ein technisches Demo, sondern bringt auch sicherheitsrelevante Ansätze mit:
- Token-Splitting und zeitbasierte Darstellung erschweren das einfache Abfotografieren und spätere Missbrauchen von QR-Codes.
- Signierte Nutzlasten (HMAC) stellen sicher, dass die gescannten Daten nicht manipuliert werden können.
- Session-Management mit Timeout verhindert ungenutzte oder abgebrochene Scans und erhöht so die Robustheit.
Die Architektur macht SecureQR interessant für Branchen, in denen temporäre und dynamische QR-Codes benötigt werden:
- Banken und Finanzdienstleister (z. B. für temporäre Anmeldungen oder TAN-Prozesse)
- Zutritts- und Besuchersysteme (z. B. für Firmengebäude oder Events)
- Sicheres Gerätepaaring (z. B. IoT-Geräte, Kassen-Terminals, Smart-Home-Geräte)
Durch die Kombination von dynamischen QR-Codes, Signaturen und Live-Validierung bietet dieses Projekt eine Basis, die auch in sicherheitskritischen Umgebungen eingesetzt werden könnte.
SecureQR kann auch als Human-Verification-System dienen, ähnlich wie Google reCAPTCHA – jedoch ohne externe Abhängigkeiten:
-
Anwendungsfall:
- Ein Nutzer soll beweisen, dass er ein echter Mensch ist.
- Statt eine Checkbox oder Bilderrätsel zu lösen, scannt er einen dynamischen QR-Code.
-
Ablauf:
- Ein dynamischer, zeitlich begrenzter QR-Code wird im Web-Frontend angezeigt.
- Der Nutzer scannt ihn mit einem Smartphone oder einer anderen Kamera.
- Das Smartphone oder ein eigener App-Scanner sendet das vollständige, rekonstruierte Token an den Server zurück.
- Der Server prüft das Token (HMAC & Zeitlimit) und markiert den Nutzer als validiert.
-
Sicherheitsvorteile:
- Tokens sind nur kurz gültig.
- Die Daten sind auf mehrere Frames verteilt (erschwertes automatisches Ablesen).
- Der Client benötigt echte Hardware (Kamera), was Bot-Angriffe deutlich erschwert.
- Vollständig selbst gehostet – keine externen Dienste wie Google reCAPTCHA erforderlich.
- Die Sicherheit kann dynamisch angepasst werden: Bei verdächtigen oder problematischen Clients lassen sich sowohl die Token-Sequenz als auch die Anzahl der zu scannenden Tokens flexibel erhöhen.
Das folgende Diagramm zeigt den Ablauf der Human Verification mit SecureQR:
sequenceDiagram
participant Browser as Browser (Frontend)
participant SecureQR as SecureQR Generator
participant Smartphone as Smartphone Scanner
participant Server as Backend
Browser->>SecureQR: Zeigt dynamischen QR-Code an
Smartphone->>SecureQR: Liest mehrere QR-Frames (Token-Teile)
Smartphone->>Server: Sendet vollständiges Token
Server->>Server: Prüft HMAC-Signatur & Zeitfenster
Server-->>Browser: Validierung erfolgreich (Human Verified)
MIT License – frei nutzbar, keine Gewährleistung.
Dieses Projekt ist nicht kommerziell gedacht, sondern ein Open-Source-Beitrag für die Community.


