# 🔐 PasswortBox v1.0
### Sicherer Passwort-Manager mit AES-256 Client-seitiger Verschlüsselung
PasswortBox ist ein selbst gehosteter Passwort-Manager mit Zero-Knowledge-Architektur.
Alle Passwörter werden **ausschließlich im Browser** verschlüsselt – der Server sieht
niemals Ihre echten Daten. Einmalige Zahlung, kein Abo, läuft auf Ihrem eigenen Server.
---
## ✨ Features
| Feature | Beschreibung |
|---|---|
| 🔒 **AES-256-GCM** | Militärgrade-Verschlüsselung direkt im Browser |
| 🧠 **Zero-Knowledge** | Server speichert nur Ciphertext – niemals Klartext |
| 🔑 **Mastercode** | 64-stelliger Schlüssel, nur du kennst ihn |
| 📋 **Unbegrenzte Einträge** | Bezeichnung, Username, Passwort, Notiz – alles verschlüsselt |
| 🔍 **Client-seitige Suche** | Suche läuft komplett im Browser, ohne Server-Anfrage |
| ⭐ **Favoriten & Kategorien** | Einträge organisieren und filtern |
| 🔧 **Passwort-Generator** | Sicher, zufällig, 8–64 Zeichen konfigurierbar |
| 📊 **Passwortstärke** | Echtzeit-Anzeige beim Eingeben |
| 📥 **Backup-Export** | Verschlüsselter JSON-Export aller Einträge |
| 💳 **PayPal-Zahlung** | Einmalig 24,99 € – keine Folgekosten |
| 👤 **Admin-Bereich** | Nutzer verwalten, Zahlungen einsehen |
---
## 🛡 Sicherheitsarchitektur
```
Mastercode (64 Zeichen)
↓ PBKDF2 (100.000 Iterationen, SHA-256)
AES-256-GCM Schlüssel
↓ Verschlüsselung im Browser (Web Crypto API)
Ciphertext + IV → Server/Datenbank
```
**Was der Server NICHT sieht:**
- Mastercode (wird niemals übertragen)
- Entschlüsselte Passwörter, Benutzernamen, Notizen
- Den AES-Schlüssel
**Was der Server speichert:**
- Ciphertext (unlesbarer Datenmüll ohne Mastercode)
- IV (Initialisierungsvektor – nicht geheim, für Entschlüsselung nötig)
- Mastercode-Hash (SHA-256, nur zur Validierung beim Entsperren)
---
## 🚀 Installation
### 1. Voraussetzungen
| Anforderung | Details |
|---|---|
| PHP | 8.0 oder höher |
| PDO SQLite | Pflicht |
| SMTP-Zugang | Für E-Mail-Verifizierung |
| HTTPS | **Zwingend erforderlich** (Web Crypto API braucht HTTPS) |
| Schreibrechte | Datenbankordner muss schreibbar sein |
### 2. Dateien hochladen
```
https://ihre-domain.de/passwortbox/
```
### 3. config.php anpassen
```php
// Datenbank
define('DB_PATH', __DIR__ . '/storage/passwortbox.db');
// PayPal
define('PAYPAL_EMAIL', 'ihre@email.de');
define('PAYPAL_SANDBOX', true); // false für Live-Betrieb
define('PRICE', 24.99);
// SMTP (für Verifizierungs-E-Mails)
define('SMTP_HOST', 'mail.ihre-domain.de');
define('SMTP_PORT', 587);
define('SMTP_USER', 'ihre@email.de');
define('SMTP_PASS', 'IhrPasswort');
define('SMTP_FROM', 'ihre@email.de');
define('SMTP_NAME', 'PasswortBox');
// Admin
define('ADMIN_EMAIL', 'admin@ihre-domain.de');
// Basis-URL
define('BASE_URL', 'https://ihre-domain.de/passwortbox');
```
### 4. Datenbank installieren
```
https://ihre-domain.de/passwortbox/install.php
```
Erstellt alle Tabellen und den Admin-Account.
**Danach `install.php` löschen!**
### 5. Admin-Passwort ändern
```
Login: E-Mail aus ADMIN_EMAIL in config.php
Passwort: admin123
```
**Sofort nach der Installation ändern!**
### 6. PayPal konfigurieren
Im PayPal-Konto unter **Kontoeinstellungen → Sofortige Zahlungsbenachrichtigung (IPN)**:
```
IPN-URL: https://ihre-domain.de/passwortbox/paypal-ipn.php
```
Zum Testen: `PAYPAL_SANDBOX` auf `true` lassen und PayPal Sandbox nutzen.
Für Live-Betrieb: `PAYPAL_SANDBOX` auf `false` setzen.
---
## 📁 Dateistruktur
```
passwortbox/
├── config.php ← Konfiguration (DB, PayPal, SMTP)
├── functions.php ← Hilfsfunktionen
├── install.php ← Einmalige Installation (danach löschen!)
│
├── register.php ← Registrierung (2 Schritte inkl. Mastercode)
├── login.php ← Login
├── logout.php ← Abmelden
├── verify.php ← E-Mail-Verifizierung
│
├── dashboard.php ← Passwort-Tresor (Hauptseite)
├── eintrag-neu.php ← Neuen Eintrag erstellen / bearbeiten
├── eintrag-save.php ← Eintrag speichern (AJAX)
├── eintrag-delete.php ← Eintrag löschen (AJAX)
├── export.php ← Verschlüsselter Backup-Export
│
├── kaufen.php ← Kaufseite mit PayPal-Button
├── paypal-ipn.php ← PayPal IPN Handler
├── zahlung-erfolg.php ← Erfolgsseite nach Zahlung
│
├── konto.php ← Kontoeinstellungen & Aktivitätslog
│
├── admin/
│ ├── index.php ← Admin-Dashboard (Nutzer, Umsatz, Stats)
│ └── user-edit.php ← Nutzer bearbeiten
│
├── includes/
│ ├── header.php ← Design & Navigation
│ └── footer.php ← Footer
│
└── storage/
└── passwortbox.db ← SQLite Datenbank (auto-erstellt)
```
---
## 🗄 Datenbank-Schema
```sql
-- Benutzer
users:
id, email, username, password, mastercode_hash,
role, status, paid, paid_at, paypal_txn,
verify_token, reset_token, reset_expires,
created_at, last_login
-- Verschlüsselte Einträge
entries:
id, user_id,
label_enc, username_enc, password_enc, note_enc, ← alles AES-256
iv, category, is_fav,
created_at, updated_at
-- Zahlungen
payments:
id, user_id, txn_id, amount, status, paypal_data, created_at
-- Aktivitätslog
logs:
id, user_id, action, detail, ip, created_at
```
---
## 🔑 Der Mastercode – das Wichtigste
Der Mastercode ist ein **64-stelliger zufälliger Schlüssel** der beim Registrieren
einmalig generiert und angezeigt wird.
**Eigenschaften:**
- Wird **niemals** auf dem Server gespeichert (nur ein Hash zur Validierung)
- Ohne Mastercode sind alle gespeicherten Daten **nicht wiederherstellbar**
- Wird nur im `sessionStorage` des Browsers gehalten (nur aktuelle Session)
- Beim Schließen des Browsers muss er beim nächsten Besuch neu eingegeben werden
**Empfohlene Aufbewahrung (den Nutzern mitteilen):**
- 🖨 Ausdrucken und sicher aufbewahren
- 💾 Auf USB-Stick speichern (verschlüsselt)
- 📓 In ein physisches Notizbuch schreiben
- 🔒 In einem zweiten Passwort-Manager speichern
**⚠️ Verlust des Mastercodes = alle Passwörter unwiederbringlich verloren.**
Es gibt keine Passwort-Reset-Funktion für den Mastercode – das ist by Design so.
---
## 💳 Zahlungsablauf
```
1. Nutzer registriert sich (kostenlos)
2. Nutzer sieht Kaufseite (kaufen.php)
3. Nutzer zahlt 24,99 € via PayPal
4. PayPal sendet IPN an paypal-ipn.php
5. IPN wird verifiziert → Nutzer wird freigeschaltet (paid=1)
6. Bestätigungs-E-Mail wird gesendet
7. Nutzer hat Zugriff auf den vollen Tresor
```
**Manuell freischalten** (Admin):
```
Admin → Nutzerverwaltung → Nutzer bearbeiten → Bezahlstatus: Bezahlt
```
---
## 👤 Admin-Bereich
```
https://ihre-domain.de/passwortbox/admin/
Login: ADMIN_EMAIL aus config.php
```
**Dashboard zeigt:**
- Nutzer gesamt / bezahlt / aktiv heute
- Anzahl verschlüsselter Einträge
- Gesamtumsatz
- Letzte Registrierungen und Zahlungen
**Nutzerverwaltung:**
- Status ändern: aktiv / ausstehend / gesperrt
- Bezahlstatus manuell setzen
- Anzahl der Einträge pro Nutzer einsehen
---
## 🔧 Konfigurationsreferenz
```php
// Datenbank
define('DB_PATH', __DIR__ . '/storage/passwortbox.db');
// PayPal
define('PAYPAL_EMAIL', 'shop@ihre-domain.de');
define('PAYPAL_SANDBOX', false); // true = Testmodus
define('PRICE', 24.99); // Preis in Euro
// SMTP
define('SMTP_HOST', 'mail.ihre-domain.de');
define('SMTP_PORT', 587); // 587 (STARTTLS) oder 465 (SSL)
define('SMTP_USER', 'ihre@email.de');
define('SMTP_PASS', 'passwort');
define('SMTP_FROM', 'ihre@email.de');
define('SMTP_NAME', 'PasswortBox');
// URLs
define('BASE_URL', 'https://ihre-domain.de/passwortbox');
define('ADMIN_EMAIL', 'admin@ihre-domain.de');
```
---
## 🔒 Sicherheitshinweise
- **HTTPS ist Pflicht** – die Web Crypto API funktioniert nur über HTTPS
- `config.php` per `.htaccess` schützen oder außerhalb des Webroots ablegen
- `storage/` Ordner per `.htaccess` vor Direktzugriff schützen
- `install.php` nach Installation sofort löschen
- Admin-Passwort `admin123` sofort nach Installation ändern
- PayPal IPN immer verifizieren (ist bereits implementiert)
- Regelmäßige Backups der `passwortbox.db` empfohlen
**.htaccess Empfehlung:**
```apache
<Files "config.php">
Order allow,deny
Deny from all
</Files>
```
---
## ❓ Häufige Fragen
**Kann ich meinen Mastercode zurücksetzen?**
Nein – das ist technisch nicht möglich ohne alle Daten zu verlieren.
Der Mastercode ist der einzige Schlüssel zu deinen Daten.
**Was passiert wenn ich den Browser schließe?**
Der Mastercode wird aus dem sessionStorage gelöscht. Beim nächsten Login
muss er erneut eingegeben werden. Die verschlüsselten Daten bleiben erhalten.
**Kann der Server-Admin meine Passwörter lesen?**
Nein. Der Server speichert nur AES-256-verschlüsselte Daten.
Ohne den Mastercode sind diese Daten wertlos.
**Funktioniert PasswortBox ohne HTTPS?**
Nein. Die Web Crypto API (für AES-256) ist aus Sicherheitsgründen
nur über HTTPS verfügbar. Lokale Entwicklung auf `localhost` funktioniert.
**Wie exportiere ich meine Daten?**
Unter **Konto → Backup herunterladen** – die exportierte JSON-Datei ist
ebenfalls AES-256-verschlüsselt mit deinem Mastercode.
**Kann ich PasswortBox für mehrere Nutzer betreiben?**
Ja – jeder Nutzer hat seinen eigenen Mastercode und eigene verschlüsselte Einträge.
Die Daten sind vollständig voneinander getrennt.
---
## 🗺 Geplante Erweiterungen (Roadmap)
> Diese Features sind noch nicht implementiert und können in einer späteren Version
> hinzugefügt werden.
- **Browser-Extension** – Passwörter direkt im Browser automatisch ausfüllen
- **TOTP / 2FA** – Zwei-Faktor-Authentifizierung (Google Authenticator)
- **Passwort-Teilen** – Einträge sicher mit anderen Nutzern teilen
- **Ablaufdatum** – Erinnerung wenn Passwörter zu alt werden
- **Passwort-Audit** – Schwache oder doppelte Passwörter erkennen
- **Import** – CSV-Import aus anderen Passwort-Managern (LastPass, Bitwarden)
- **Mobile App** – PWA für Smartphone-Nutzung
---
## 📄 Lizenz
MIT Einzelplatz - License – frei verwendbar, anpassbar und weitervertreibbar.
Bei Weitergabe bitte diese README beilegen.
---
*PasswortBox v1.0 · PHP 8.0+ · SQLite · AES-256-GCM · Web Crypto API · PayPal IPN*