Weboberflaeche: self-contained, client-side, CLI-kompatibel

Eine einzelne index.html ohne Framework/CDN. Krypto + LSB-Steganografie
laufen komplett im Browser (iOS-tauglich). Format-identisch zum CLI;
Byte-Interop in beide Richtungen per Node-Test gegen das Python-CLI
abgesichert (laedt den Krypto-Kern direkt aus der ausgelieferten index.html).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-07-14 21:18:14 +00:00
parent d5e7c979d8
commit ad0b309acf
5 changed files with 496 additions and 0 deletions

View File

@@ -96,6 +96,41 @@ Vor der LSB-Einbettung wird ein kleiner Header vorangestellt:
Die Bits werden linear (MSB zuerst) in die LSBs der R/G/B-Kanäle geschrieben.
## Weboberfläche (`web/index.html`)
Eine **einzige, self-contained HTML-Datei** — kein Framework, kein CDN, kein
Build. Verschlüsselung und Steganografie laufen zu 100 % im Browser
(client-side): Pad, Klartext und Nachricht verlassen das Gerät nie. Ein Server,
der die Datei ausliefert, ist ein reiner „dummer" Fileserver und sieht nichts.
* **Überall erreichbar, iOS inklusive.** Nutzt nur Safari-Standard-APIs
(Canvas, FileReader, `crypto.getRandomValues`).
* **Format-kompatibel zum CLI.** Am Terminal verstecken, am Handy im Browser
aufdecken — und umgekehrt. Byte-Interop ist per Test abgesichert
(`web/_interop_test.mjs` lädt exakt den Krypto-Kern aus der ausgelieferten
`index.html` und prüft beide Richtungen gegen das Python-CLI).
* **Offset-Tracking** merkt sich pro Pad (via `localStorage`) den nächsten
freien Offset. Achtung: Der Zähler ist pro Browser/Gerät. Wer abwechselnd über
mehrere Instanzen sendet, muss den Offset manuell synchron halten — sonst
droht Pad-Wiederverwendung.
### Deployment
Es ist eine statische Datei — einfach irgendwo hinlegen:
```bash
# lokal testen
python3 -m http.server -d web 8000 # -> http://localhost:8000
# produktiv: web/index.html hinter einen beliebigen Webserver / Static-Host
```
### ⚠️ iOS-Eigenheit
Stego-Bild über **„In Dateien sichern"** ablegen und als **Datei** teilen —
nicht in „Fotos" speichern. iOS re-komprimiert Bilder aus der Fotos-Mediathek
und würde die Nachricht zerstören.
## Grenzen / Hinweise
- **Steganografie versteckt, authentifiziert aber nicht.** Ein Angreifer, der