🛒 scripte-pay.de

PasswortBox Sicherer Passwort-Manager mit AES-256 Client-seitiger Verschlüsselung

PasswortBox Sicherer Passwort-Manager mit AES-256 Client-seitiger Verschlüsselung

# 🔐 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*

🔗 Unsere Partner

Scriptworld.de Zahnzusatzversicherung_Fullsize