# Wie funktioniert das Klausur-Namespace-System?

Eine umfassende Erklaerung des BYOEH-Systems -- von der Anonymisierung bis zur sicheren KI-Korrektur.

---

## 1. Was ist das Namespace-System?

Das **BYOEH-System** (Bring Your Own Expectation Horizon) ist eine Datenschutz-Architektur, die es Lehrern ermoeglicht, Klausuren **anonym und verschluesselt** von einer KI korrigieren zu lassen -- ohne dass jemals der Name eines Schuelers den Rechner des Lehrers verlaesst.

> *"Die Klausuren gehen anonym in die Cloud, werden dort von KI korrigiert, und kommen korrigiert zurueck. Nur der Lehrer kann die Ergebnisse wieder den Schuelern zuordnen -- denn nur seine Hardware hat den Schluessel dafuer."*

Das System loest ein grundlegendes Problem: Klausurkorrektur mit KI-Unterstuetzung **ohne Datenschutzrisiko**. Die Loesung besteht aus vier Bausteinen:

1. **Pseudonymisierung:** Namen werden durch zufaellige Codes ersetzt. Niemand ausser dem Lehrer kennt die Zuordnung.
2. **Verschluesselung:** Alles wird *im Browser des Lehrers* verschluesselt, bevor es den Rechner verlaesst. Der Server sieht nur unlesbaren Datensalat.
3. **Namespace-Isolation:** Jeder Lehrer hat einen eigenen, abgeschotteten Bereich (Namespace). Kein Lehrer kann auf die Daten eines anderen zugreifen.
4. **KI-Korrektur:** Die KI arbeitet mit den verschluesselten Daten und dem Erwartungshorizont (EH) des Lehrers. Korrekturvorschlaege gehen zurueck an den Lehrer.

!!! info "Kern-Designprinzip: Operator Blindness"
    **Breakpilot kann die Klausuren nicht lesen.** Der Server sieht nur verschluesselte Daten und einen Schluessel-Hash (nicht den Schluessel selbst). Die Passphrase zum Entschluesseln existiert *nur* im Browser des Lehrers und wird niemals uebertragen. Selbst ein Angriff auf den Server wuerde keine Klausurtexte preisgeben.

---

## 2. Der komplette Ablauf im Ueberblick

Der Prozess laesst sich in sieben Schritte unterteilen. Stellen Sie sich vor, der Lehrer sitzt an seinem Rechner und hat einen Stapel gescannter Klausuren:

```text title="Der komplette Workflow: Von der Klausur zur KI-Korrektur"
SCHRITT 1: KLAUSUREN SCANNEN & HOCHLADEN
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Lehrer scannt Klausuren ein (PDF oder Bild)
  → System erkennt automatisch den Kopfbereich mit Namen
  → Kopfbereich wird permanent entfernt (Header-Redaction)
  → Jede Klausur erhaelt einen zufaelligen Code (doc_token)

SCHRITT 2: VERSCHLUESSELUNG IM BROWSER
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Lehrer gibt eine Passphrase ein (z.B. "MeinGeheimesPasswort2025!")
  → Browser leitet daraus einen 256-Bit-Schluessel ab (PBKDF2)
  → Klausur wird mit AES-256-GCM verschluesselt
  → Nur der Hash des Schluessels wird an den Server gesendet
  → Passphrase und Schluessel verlassen NIEMALS den Browser

SCHRITT 3: IDENTITAETS-MAP SICHERN
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Die Zuordnung "doc_token → Schuelername" wird verschluesselt:
  → Tabelle: "a7f3c2d1... = Max Mustermann, b9e4a1f8... = Anna Schmidt"
  → Diese Tabelle wird mit dem gleichen Schluessel verschluesselt
  → Ohne Passphrase kann niemand die Zuordnung wiederherstellen

SCHRITT 4: UPLOAD IN DEN NAMESPACE
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Die verschluesselten Dateien gehen in den persoenlichen Namespace:
  → Jeder Lehrer hat eine eigene tenant_id
  → Daten werden in MinIO (verschluesselt) + Qdrant (Vektoren) gespeichert
  → Server sieht: verschluesselter Blob + Schluessel-Hash + Salt

SCHRITT 5: KI-KORREKTUR
━━━━━━━━━━━━━━━━━━━━━━━
Der Lehrer startet die KI-Korrektur:
  → RAG-System durchsucht den Erwartungshorizont (EH)
  → KI generiert Korrekturvorschlaege pro Kriterium
  → Vorschlaege basieren auf dem EH, nicht auf Halluzinationen

SCHRITT 6: ERGEBNISSE ZURUECK
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Korrekturvorschlaege gehen an den Lehrer:
  → Lehrer gibt Passphrase ein
  → Browser entschluesselt die Ergebnisse
  → Lehrer sieht: Vorschlaege pro Kriterium + Gesamtnote

SCHRITT 7: ZUORDNUNG & FINALISIERUNG
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Lehrer ordnet Ergebnisse den Schuelern zu:
  → Identitaets-Map wird entschluesselt
  → doc_token wird wieder dem echten Namen zugeordnet
  → Lehrer ueberprueft/korrigiert KI-Vorschlaege
  → Fertige Korrektur + Gutachten koennen exportiert werden
```

---

## 3. Pseudonymisierung: Wie Namen verschwinden

Pseudonymisierung bedeutet: personenbezogene Daten werden durch **zufaellige Codes** ersetzt, sodass ohne Zusatzinformation kein Rueckschluss auf die Person moeglich ist. Im BYOEH-System passiert das auf zwei Ebenen:

### 3.1 Der doc_token: Ein zufaelliger Ausweis

Jede Klausur erhaelt einen **doc_token** -- einen 128-Bit-Zufallscode im UUID4-Format (z.B. `a7f3c2d1-4e9b-4a5f-8c7d-6b2e1f0a9d3c`). Dieser Code:

- Ist **kryptographisch zufaellig** -- es gibt keinen Zusammenhang zwischen Token und Schueler
- Kann **nicht zurueckgerechnet** werden -- auch mit Kenntnis des Algorithmus ist kein Rueckschluss moeglich
- Wird **auf der Klausur aufgedruckt** (als QR-Code), damit die physische Klausur spaeter wieder zugeordnet werden kann

### 3.2 Header-Redaction: Der Name wird entfernt

Bevor eine Klausur verarbeitet wird, entfernt das System den **Kopfbereich** der gescannten Seite -- dort, wo typischerweise Name, Klasse und Datum stehen. Diese Entfernung ist **permanent**: Die Originaldaten werden nicht gespeichert.

| Methode | Wie es funktioniert | Wann verwendet |
|---------|---------------------|----------------|
| **Einfache Redaction** | Obere ~2,5 cm der Seite werden weiss ueberschrieben | Standard bei allen Uploads |
| **Smarte Redaction** | OpenCV erkennt Textbereiche und entfernt gezielt den Kopf, verschont aber QR-Codes | Wenn QR-Codes auf der Klausur sind |

### 3.3 Die Identitaets-Map: Nur der Lehrer kennt die Zuordnung

Die Zuordnung *doc_token → Schuelername* wird als **verschluesselte Tabelle** gespeichert:

```text title="Datenbank: ExamSession (vereinfacht)"
ExamSession
├── teacher_id            = "lehrer-uuid-123"     ← Pflichtfeld (Isolation)
├── encrypted_identity_map = [verschluesselte Bytes]  ← Nur mit Passphrase lesbar
├── identity_map_iv       = "a3f2c1..."           ← Initialisierungsvektor (fuer AES)
│
└── PseudonymizedDocument (pro Klausur)
    ├── doc_token          = "a7f3c2d1-..."       ← Zufaelliger Code (Primary Key)
    ├── exam_session_id    = [Referenz]
    └── (Kein Name, keine Klasse, kein persoenliches Datum)
```

!!! success "DSGVO Art. 4 Nr. 5 konform"
    Die Pseudonymisierung erfuellt die Definition aus der DSGVO: Die personenbezogenen Daten (Schuelernamen) koennen **ohne Hinzuziehung zusaetzlicher Informationen** (der verschluesselten Identitaets-Map + der Passphrase des Lehrers) nicht mehr einer bestimmten Person zugeordnet werden.

---

## 4. Verschluesselung: Wie Daten geschuetzt werden

Die Verschluesselung ist das Herzstueck des Datenschutzes. Sie findet **vollstaendig im Browser** statt -- der Server bekommt nur verschluesselte Daten zu sehen.

### 4.1 Der Verschluesselungsvorgang

Wenn der Lehrer eine Klausur oder einen Erwartungshorizont hochlaedt, passiert im Browser folgendes:

```text title="Client-seitige Verschluesselung (im Browser)"
┌─────────────────────────────────────────────────────────────────┐
│                    Browser des Lehrers                           │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│  1. Lehrer gibt Passphrase ein (z.B. "MeinGeheimesPasswort!")   │
│     │           ↑                                               │
│     │           │ Passphrase bleibt hier -- wird NIE gesendet   │
│     ▼                                                           │
│  2. Schluessel-Ableitung:                                       │
│     PBKDF2-SHA256(Passphrase, zufaelliger Salt, 100.000 Runden) │
│     │                                                           │
│     │  → Ergebnis: 256-Bit-Schluessel (32 Bytes)                │
│     │  → Selbst bei Kenntnis des Salts sind 100.000 Runden      │
│     │    noetig, um den Schluessel zu erraten                    │
│     ▼                                                           │
│  3. Verschluesselung:                                           │
│     AES-256-GCM(Schluessel, zufaelliger IV, Datei-Inhalt)       │
│     │                                                           │
│     │  → AES-256: Militaerstandard, 2^256 moegliche Schluessel  │
│     │  → GCM: Garantiert Integritaet (Manipulation erkennbar)   │
│     ▼                                                           │
│  4. Schluessel-Hash:                                            │
│     SHA-256(abgeleiteter Schluessel) → Hash fuer Verifikation   │
│     │                                                           │
│     │  → Der Server speichert nur diesen Hash                   │
│     │  → Damit kann geprueft werden ob die Passphrase stimmt    │
│     │  → Vom Hash kann der Schluessel NICHT zurueckgerechnet    │
│     │    werden                                                 │
│     ▼                                                           │
│  5. Upload: Nur diese Daten gehen an den Server:                │
│     • Verschluesselter Blob (unlesbar ohne Schluessel)          │
│     • Salt (zufaellige Bytes, harmlos)                          │
│     • IV (Initialisierungsvektor, harmlos)                      │
│     • Schluessel-Hash (zur Verifikation, nicht umkehrbar)       │
│                                                                 │
│     Was NICHT an den Server geht:                               │
│     ✗ Passphrase                                                │
│     ✗ Abgeleiteter Schluessel                                   │
│     ✗ Unverschluesselter Klartext                               │
└─────────────────────────────────────────────────────────────────┘
```

### 4.2 Warum ist das sicher?

| Angriffsszenario | Was der Angreifer sieht | Ergebnis |
|------------------|-------------------------|----------|
| **Server wird gehackt** | Verschluesselte Blobs + Hashes | Keine lesbaren Klausuren |
| **Datenbank wird geleakt** | encrypted_identity_map (verschluesselt) | Keine Schuelernamen |
| **Netzwerkverkehr abgefangen** | Verschluesselte Daten (HTTPS + AES) | Doppelt verschluesselt |
| **Betreiber will mitlesen** | Verschluesselte Blobs, kein Schluessel | Operator Blindness |
| **Anderer Lehrer versucht Zugriff** | Nichts (Tenant-Isolation) | Namespace blockiert |

---

## 5. Namespace-Isolation: Jeder Lehrer hat seinen eigenen Bereich

Ein **Namespace** (auch "Tenant" genannt) ist ein abgeschotteter Bereich im System. Man kann es sich wie **separate Schliessfaecher** in einer Bank vorstellen: Jeder Lehrer hat sein eigenes Fach, und kein Schluessel passt in ein anderes Fach.

### 5.1 Wie die Isolation funktioniert

Jeder Lehrer erhaelt beim ersten Login eine eindeutige `tenant_id`. Diese ID wird bei **jeder einzelnen Datenbankabfrage** als Pflichtfilter mitgefuehrt:

```text title="Tenant-Isolation in der Vektordatenbank (Qdrant)"
Lehrer A (tenant_id: "school-A-lehrer-1")
├── Klausur 1 (verschluesselt)
├── Klausur 2 (verschluesselt)
└── Erwartungshorizont Deutsch LK 2025

Lehrer B (tenant_id: "school-B-lehrer-2")
├── Klausur 1 (verschluesselt)
└── Erwartungshorizont Mathe GK 2025

Suchanfrage von Lehrer A:
  "Wie soll die Einleitung strukturiert sein?"
  → Suche NUR in tenant_id = "school-A-lehrer-1"
  → Lehrer B's Daten sind UNSICHTBAR

Es gibt KEINE Abfrage ohne tenant_id-Filter.
```

### 5.2 Drei Ebenen der Isolation

| Ebene | System | Isolation |
|-------|--------|-----------|
| **Dateisystem** | MinIO (S3-Storage) | Eigener Ordner pro Lehrer: `/tenant-id/eh-id/encrypted.bin` |
| **Vektordatenbank** | Qdrant | Pflichtfilter `tenant_id` bei jeder Suche |
| **Metadaten-DB** | PostgreSQL | Jede Tabelle hat `teacher_id` als Pflichtfeld |

!!! warning "Kein Training mit Lehrerdaten"
    Auf allen Vektoren in Qdrant ist das Flag `training_allowed: false` gesetzt. Das bedeutet: Die Inhalte der Lehrer werden **ausschliesslich fuer RAG-Suchen** (Abruf relevanter Textpassagen) verwendet und **niemals zum Trainieren** eines KI-Modells eingesetzt.

---

## 6. Der Erwartungshorizont: Die Grundlage fuer KI-Korrektur

Ein **Erwartungshorizont** (EH) ist das Dokument, das beschreibt, was in einer Klausur erwartet wird: welche Inhalte in welcher Qualitaet vorkommen sollen. Im BYOEH-System laedt der Lehrer seinen eigenen EH hoch, und die KI nutzt ihn als Referenz fuer Korrekturvorschlaege.

### 6.1 Upload-Wizard (5 Schritte)

| Schritt | Was passiert | Warum |
|---------|--------------|-------|
| **1. Datei waehlen** | PDF per Drag & Drop hochladen | Der EH als digitales Dokument |
| **2. Metadaten** | Titel, Fach, Niveau (eA/gA), Jahr | Fuer Filterung und Organisation |
| **3. Rechtebestaetigung** | Checkbox: "Ich bin berechtigt" | Rechtliche Absicherung (Urheberrecht) |
| **4. Verschluesselung** | Passphrase eingeben (2x bestaetigen) | Schluessel fuer Ende-zu-Ende-Verschluesselung |
| **5. Zusammenfassung** | Pruefen und bestaetigen | Letzte Kontrolle vor dem Upload |

### 6.2 RAG-Pipeline: Wie der EH fuer die KI nutzbar wird

Nach dem Upload wird der EH fuer die KI-Suche vorbereitet. Dieser Vorgang heisst **Indexierung** und funktioniert wie das Erstellen eines Stichwortverzeichnisses fuer ein Buch:

```text title="Indexierung: Vom PDF zum durchsuchbaren EH"
Erwartungshorizont (verschluesselt auf Server)
     |
     v
┌────────────────────────────────┐
│  1. Passphrase-Verifikation    │  ← Lehrer gibt Passphrase ein
│     Hash pruefen               │     Server vergleicht mit gespeichertem Hash
└──────────┬─────────────────────┘
           |
           v
┌────────────────────────────────┐
│  2. Entschluesselung           │  ← Temporaer im Arbeitsspeicher
│     AES-256-GCM Decrypt        │     (wird nach Verarbeitung geloescht)
└──────────┬─────────────────────┘
           |
           v
┌────────────────────────────────┐
│  3. Text-Extraktion            │  ← PDF → Klartext
│     Tabellen, Listen erkennen  │
└──────────┬─────────────────────┘
           |
           v
┌────────────────────────────────┐
│  4. Chunking                   │  ← Text in 1.000-Zeichen-Abschnitte zerlegen
│     Ueberlappung: 200 Zeichen  │     (mit Ueberlappung fuer Kontext)
└──────────┬─────────────────────┘
           |
           v
┌────────────────────────────────┐
│  5. Embedding                  │  ← Jeder Abschnitt wird in einen
│     Text → 1.536 Zahlen        │     Bedeutungsvektor umgewandelt
└──────────┬─────────────────────┘
           |
           v
┌────────────────────────────────┐
│  6. Re-Encryption              │  ← Jeder Chunk wird ERNEUT verschluesselt
│     AES-256-GCM pro Chunk      │     bevor er gespeichert wird
└──────────┬─────────────────────┘
           |
           v
┌────────────────────────────────┐
│  7. Qdrant-Indexierung          │  ← Vektor + verschluesselter Chunk
│     tenant_id: "lehrer-123"    │     werden mit Tenant-Filter gespeichert
│     training_allowed: false    │
└────────────────────────────────┘
```

### 6.3 Wie die KI den EH nutzt (RAG-Query)

Wenn der Lehrer bei der Korrektur einen Vorschlag anfordert, passiert folgendes:

1. **Frage formulieren:** Das System erstellt eine Suchanfrage aus dem Klausurtext und dem aktuellen Bewertungskriterium.
2. **Semantische Suche:** Die Anfrage wird in einen Vektor umgewandelt und gegen die EH-Vektoren in Qdrant gesucht -- *nur im Namespace des Lehrers*.
3. **Entschluesselung:** Die gefundenen Chunks werden mit der Passphrase des Lehrers entschluesselt.
4. **KI-Antwort:** Die entschluesselten EH-Passagen werden als Kontext an die KI uebergeben, die daraus einen Korrekturvorschlag generiert.

---

## 7. Key Sharing: Zweitkorrektur ermoeglichen

Bei Abiturklausuren muss eine **Zweitkorrektur** durch einen anderen Lehrer erfolgen. Das Key-Sharing-System ermoeglicht es dem Erstpruefer, seinen Erwartungshorizont sicher mit dem Zweitpruefer zu teilen -- ohne die Verschluesselung aufzugeben.

### 7.1 Einladungs-Workflow

```text title="Key Sharing: Sicheres Teilen zwischen Pruefern"
Erstpruefer                        Server                     Zweitpruefer
     │                                │                             │
     │  1. Einladung senden            │                             │
     │     (E-Mail + Rolle + Klausur)  │                             │
     │─────────────────────────────────▶                             │
     │                                │                             │
     │                                │  2. Einladung erstellt       │
     │                                │     (14 Tage gueltig)        │
     │                                │                             │
     │                                │  3. Benachrichtigung ──────▶│
     │                                │                             │
     │                                │                      4. Annehmen
     │                                │◀─────────────────────────────│
     │                                │                             │
     │                                │  5. Key-Share erstellt       │
     │                                │                             │
     │                                │  6. Zweitpruefer kann ──────▶│
     │                                │     RAG-Queries ausfuehren   │
     │                                │                             │
     │  7. Zugriff widerrufen          │                             │
     │     (jederzeit moeglich)       │                             │
     │─────────────────────────────────▶                             │
```

### 7.2 Rollen beim Key-Sharing

| Rolle | Wer | Rechte |
|-------|-----|--------|
| **Erstpruefer (EK)** | Kurslehrer | Vollzugriff, kann teilen & widerrufen |
| **Zweitpruefer (ZK)** | Anderer Fachlehrer | Nur Lesen, RAG-Queries, eigene Annotations |
| **Drittpruefer (DK)** | Bei Differenz ≥ 4 Punkte | Nur Lesen, RAG-Queries |
| **Fachvorsitz** | Fachbereichsleitung | Nur Lesen (Aufsichtsfunktion) |

---

## 8. KI-gestuetzte Bewertung: Wie die Korrektur funktioniert

Die KI bewertet jede Klausur anhand von **fuenf Kriterien**, die zusammen 100% ergeben:

| Kriterium | Gewichtung | Was geprueft wird |
|-----------|------------|-------------------|
| Rechtschreibung | 15% | Orthographie, Zeichensetzung |
| Grammatik | 15% | Satzbau, Kongruenz, Tempus |
| **Inhalt** | **40%** | Bezug zum EH, Vollstaendigkeit, Argumentation |
| Struktur | 15% | Gliederung, Einleitung/Schluss, roter Faden |
| Stil | 15% | Ausdruck, Wortwahl, Fachsprache |

Die Bewertung folgt dem **15-Punkte-System** (0-15 Notenpunkte) der gymnasialen Oberstufe.

!!! info "KI schlaegt vor, Lehrer entscheidet"
    Alle KI-Bewertungen sind **Vorschlaege**. Der Lehrer hat bei jedem Kriterium die volle Kontrolle: Er kann den Vorschlag annehmen, aendern oder komplett ueberschreiben. Die finale Note setzt immer der Lehrer.

---

## 9. Audit-Trail: Alles wird protokolliert

Jede Aktion im System wird revisionssicher im **Audit-Log** gespeichert. Das ist wichtig fuer die Nachvollziehbarkeit und fuer den Fall, dass Schueler oder Eltern eine Korrektur anfechten.

| Aktion | Was protokolliert wird |
|--------|------------------------|
| `upload` | EH hochgeladen (Dateigroesse, Metadaten, Zeitstempel) |
| `index` | EH fuer RAG indexiert (Anzahl Chunks, Dauer) |
| `rag_query` | RAG-Suchanfrage ausgefuehrt (Query-Hash, Anzahl Ergebnisse, Score) |
| `share` | EH mit anderem Pruefer geteilt (Empfaenger, Rolle) |
| `revoke_share` | Zugriff widerrufen (wer, wann) |
| `link_klausur` | EH mit Klausur verknuepft |
| `delete` | EH geloescht (Soft Delete, bleibt in Logs) |

---

## 10. API-Endpunkte (Technische Referenz)

Alle Endpunkte laufen ueber den **klausur-service** auf Port 8086.

### 10.1 Erwartungshorizont-Verwaltung

| Methode | Endpunkt | Beschreibung |
|---------|----------|--------------|
| `POST` | `/api/v1/eh/upload` | Verschluesselten EH hochladen |
| `GET` | `/api/v1/eh` | Eigene EHs auflisten |
| `GET` | `/api/v1/eh/{id}` | Einzelnen EH abrufen |
| `DELETE` | `/api/v1/eh/{id}` | EH loeschen (Soft Delete) |
| `POST` | `/api/v1/eh/{id}/index` | EH fuer RAG indexieren |
| `POST` | `/api/v1/eh/rag-query` | RAG-Suchanfrage ausfuehren |

### 10.2 Key Sharing

| Methode | Endpunkt | Beschreibung |
|---------|----------|--------------|
| `POST` | `/api/v1/eh/{id}/share` | EH mit Pruefer teilen |
| `GET` | `/api/v1/eh/{id}/shares` | Geteilte Zugriffe auflisten |
| `DELETE` | `/api/v1/eh/{id}/shares/{shareId}` | Zugriff widerrufen |
| `GET` | `/api/v1/eh/shared-with-me` | Mit mir geteilte EHs |

### 10.3 Klausur-Integration

| Methode | Endpunkt | Beschreibung |
|---------|----------|--------------|
| `POST` | `/api/v1/eh/{id}/link-klausur` | EH mit Klausur verknuepfen |
| `DELETE` | `/api/v1/eh/{id}/link-klausur/{klausurId}` | Verknuepfung loesen |
| `GET` | `/api/v1/klausuren/{id}/linked-eh` | Verknuepften EH abrufen |

---

## 11. Dateistruktur im Code

```text title="Relevante Dateien im Repository"
klausur-service/
├── backend/
│   ├── main.py                 # API-Endpunkte + Datenmodelle
│   ├── qdrant_service.py       # Vektordatenbank-Operationen (Tenant-Filter)
│   └── eh_pipeline.py          # Chunking, Embedding, Verschluesselung
│
├── frontend/
│   └── src/
│       ├── components/
│       │   └── EHUploadWizard.tsx    # 5-Schritt-Upload-Wizard
│       └── services/
│           ├── api.ts                # API-Client
│           └── encryption.ts         # Client-seitige Kryptographie
│
└── docs/
    ├── BYOEH-Architecture.md         # Technische Architektur
    └── BYOEH-Developer-Guide.md      # Entwickler-Handbuch

backend/klausur/
├── db_models.py                # ExamSession, PseudonymizedDocument
└── services/
    └── pseudonymizer.py        # QR-Codes, Header-Redaction, doc_tokens
```

---

## 12. Zusammenfassung: Die Sicherheitsgarantien

| Garantie | Wie umgesetzt | Regelwerk |
|----------|---------------|-----------|
| **Kein Name verlaesst den Rechner** | Header-Redaction + verschluesselte Identity-Map | DSGVO Art. 4 Nr. 5 |
| **Betreiber kann nicht mitlesen** | Client-seitige AES-256-GCM Verschluesselung | DSGVO Art. 32 |
| **Kein Zugriff durch andere Lehrer** | Tenant-Isolation (Namespace) auf allen 3 Ebenen | DSGVO Art. 25 |
| **Kein KI-Training mit Schuelerdaten** | `training_allowed: false` auf allen Vektoren | AI Act Art. 10 |
| **Alles nachvollziehbar** | Vollstaendiger Audit-Trail aller Aktionen | DSGVO Art. 5 Abs. 2 |
| **Lehrer behaelt volle Kontrolle** | KI-Vorschlaege, keine KI-Entscheidungen + jederzeitiger Widerruf | DSGVO Art. 22 |

!!! success "Das Wichtigste in einem Satz"
    Das BYOEH-System ermoeglicht KI-gestuetzte Klausurkorrektur, bei der **kein Schuelername den Rechner des Lehrers verlaesst**, alle Daten **Ende-zu-Ende verschluesselt** sind, jeder Lehrer seinen **eigenen abgeschotteten Namespace** hat, und die KI **nur Vorschlaege macht** -- die finale Bewertung trifft immer der Lehrer.
