A previous `git pull --rebase origin main` dropped 177 local commits,
losing 3400+ files across admin-v2, backend, studio-v2, website,
klausur-service, and many other services. The partial restore attempt
(660295e2) only recovered some files.
This commit restores all missing files from pre-rebase ref 98933f5e
while preserving post-rebase additions (night-scheduler, night-mode UI,
NightModeWidget dashboard integration).
Restored features include:
- AI Module Sidebar (FAB), OCR Labeling, OCR Compare
- GPU Dashboard, RAG Pipeline, Magic Help
- Klausur-Korrektur (8 files), Abitur-Archiv (5+ files)
- Companion, Zeugnisse-Crawler, Screen Flow
- Full backend, studio-v2, website, klausur-service
- All compliance SDKs, agent-core, voice-service
- CI/CD configs, documentation, scripts
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1145 lines
36 KiB
YAML
1145 lines
36 KiB
YAML
# =============================================================================
|
|
# Breakpilot Use-Case Compliance & Feasibility Policy
|
|
# Version: 1.0
|
|
# Jurisdiction: EU (DSGVO + AI Act)
|
|
# =============================================================================
|
|
#
|
|
# GRUNDSATZ:
|
|
# - Diese Regeln sind DETERMINISTISCH und laufen OHNE LLM
|
|
# - LLM darf Hard-Blocks NICHT überschreiben
|
|
# - Bei Unsicherheit → Escalation an DSB
|
|
#
|
|
# SEVERITY LEVELS:
|
|
# INFO = Hinweis, kein Risiko
|
|
# WARN = Risiko, aber lösbar
|
|
# BLOCK = Nicht zulässig ohne grundlegende Änderung
|
|
#
|
|
# =============================================================================
|
|
|
|
policy:
|
|
name: Breakpilot Use-Case Compliance & Feasibility Policy
|
|
version: "1.0.0"
|
|
jurisdiction: EU
|
|
basis:
|
|
- GDPR
|
|
- AI_Act
|
|
- BDSG
|
|
default_feasibility: YES
|
|
default_risk_score: 0
|
|
|
|
# =============================================================================
|
|
# Schwellenwerte
|
|
# =============================================================================
|
|
|
|
thresholds:
|
|
risk:
|
|
minimal: 0 # 0-19
|
|
low: 20 # 20-39
|
|
medium: 40 # 40-59
|
|
high: 60 # 60-79
|
|
unacceptable: 80 # 80+
|
|
|
|
escalation:
|
|
- art9_data
|
|
- minor_data_with_profiling
|
|
- fully_automated_decisions
|
|
- conflicting_evidence
|
|
|
|
# =============================================================================
|
|
# Architektur-Patterns (Lösungsvorschläge)
|
|
# =============================================================================
|
|
|
|
patterns:
|
|
P_RAG_ONLY:
|
|
id: P_RAG_ONLY
|
|
title: "RAG statt Training"
|
|
description: "Retrieval-Augmented Generation ohne Modell-Training"
|
|
benefit: "Daten bleiben in Vektordatenbank, fließen nicht ins Modell"
|
|
effort: low
|
|
risk_reduction: 20
|
|
|
|
P_PRE_ANON:
|
|
id: P_PRE_ANON
|
|
title: "Vor-Anonymisierung"
|
|
description: "Irreversible Anonymisierung vor Speicherung/Verarbeitung"
|
|
benefit: "Keine personenbezogenen Daten mehr → DSGVO nicht anwendbar"
|
|
effort: medium
|
|
risk_reduction: 30
|
|
|
|
P_PIXELIZATION:
|
|
id: P_PIXELIZATION
|
|
title: "Verpixelung/Unkenntlichmachung"
|
|
description: "Identifizierende Merkmale automatisch unkenntlich machen"
|
|
benefit: "Gesichter, Kennzeichen etc. nicht mehr erkennbar"
|
|
effort: medium
|
|
risk_reduction: 25
|
|
|
|
P_HITL_ENFORCED:
|
|
id: P_HITL_ENFORCED
|
|
title: "Human-in-the-Loop erzwingen"
|
|
description: "Technisch erzwungene menschliche Überprüfung"
|
|
benefit: "Keine vollautomatisierten Entscheidungen → Art. 22 nicht anwendbar"
|
|
effort: low
|
|
risk_reduction: 20
|
|
|
|
P_RETENTION_CAP:
|
|
id: P_RETENTION_CAP
|
|
title: "Kurze Aufbewahrung"
|
|
description: "Automatische Löschung nach max. 72 Stunden"
|
|
benefit: "Minimiert Risiko durch kurze Speicherdauer"
|
|
effort: low
|
|
risk_reduction: 10
|
|
|
|
P_NAMESPACE_ISOLATION:
|
|
id: P_NAMESPACE_ISOLATION
|
|
title: "Mandantentrennung"
|
|
description: "Strikte Trennung der Daten nach Mandanten"
|
|
benefit: "Kein Datenzugriff zwischen Mandanten möglich"
|
|
effort: medium
|
|
risk_reduction: 15
|
|
|
|
P_CONSENT_FLOW:
|
|
id: P_CONSENT_FLOW
|
|
title: "Einwilligungs-Workflow"
|
|
description: "Implementierung eines rechtskonformen Einwilligungsprozesses"
|
|
benefit: "Gültige Rechtsgrundlage nach Art. 6(1)(a) / Art. 9(2)(a)"
|
|
effort: medium
|
|
risk_reduction: 20
|
|
|
|
P_EU_HOSTING:
|
|
id: P_EU_HOSTING
|
|
title: "EU-Hosting"
|
|
description: "Wechsel zu einem Anbieter mit EU-Rechenzentren"
|
|
benefit: "Kein Drittlandtransfer → Art. 44ff nicht anwendbar"
|
|
effort: medium
|
|
risk_reduction: 15
|
|
|
|
# =============================================================================
|
|
# Erforderliche Kontrollen
|
|
# =============================================================================
|
|
|
|
controls:
|
|
C_EXPLICIT_CONSENT:
|
|
id: C_EXPLICIT_CONSENT
|
|
title: "Ausdrückliche Einwilligung"
|
|
description: "Opt-in mit klarer Information über Verarbeitungszweck"
|
|
gdpr_ref: "Art. 6(1)(a), Art. 9(2)(a) DSGVO"
|
|
effort: medium
|
|
|
|
C_PARENTAL_CONSENT:
|
|
id: C_PARENTAL_CONSENT
|
|
title: "Einwilligung der Erziehungsberechtigten"
|
|
description: "Bei Minderjährigen unter 16: Elterneinwilligung erforderlich"
|
|
gdpr_ref: "Art. 8 DSGVO"
|
|
effort: high
|
|
|
|
C_DSFA:
|
|
id: C_DSFA
|
|
title: "Datenschutz-Folgenabschätzung"
|
|
description: "Formale DSFA nach Art. 35 DSGVO durchführen"
|
|
gdpr_ref: "Art. 35 DSGVO"
|
|
effort: high
|
|
|
|
C_TRANSPARENCY:
|
|
id: C_TRANSPARENCY
|
|
title: "KI-Transparenz-Hinweis"
|
|
description: "Nutzer informieren dass sie mit KI interagieren"
|
|
gdpr_ref: "Art. 13/14 DSGVO, Art. 52 AI Act"
|
|
effort: low
|
|
|
|
C_CONTESTATION:
|
|
id: C_CONTESTATION
|
|
title: "Anfechtungsrecht"
|
|
description: "Betroffene können automatisierte Entscheidungen anfechten"
|
|
gdpr_ref: "Art. 22(3) DSGVO"
|
|
effort: medium
|
|
|
|
C_ACCESS_LOGGING:
|
|
id: C_ACCESS_LOGGING
|
|
title: "Zugriffs-Protokollierung"
|
|
description: "Alle Datenzugriffe revisionssicher protokollieren"
|
|
gdpr_ref: "Art. 5(2) DSGVO"
|
|
effort: low
|
|
|
|
C_ENCRYPTION:
|
|
id: C_ENCRYPTION
|
|
title: "Verschlüsselung"
|
|
description: "Daten bei Übertragung und Speicherung verschlüsseln"
|
|
gdpr_ref: "Art. 32 DSGVO"
|
|
effort: low
|
|
|
|
C_RETENTION_POLICY:
|
|
id: C_RETENTION_POLICY
|
|
title: "Löschkonzept"
|
|
description: "Definierte Aufbewahrungsfristen mit automatischer Löschung"
|
|
gdpr_ref: "Art. 5(1)(e) DSGVO"
|
|
effort: medium
|
|
|
|
C_SCC:
|
|
id: C_SCC
|
|
title: "Standardvertragsklauseln"
|
|
description: "EU-SCC mit Drittland-Anbieter abschließen"
|
|
gdpr_ref: "Art. 46(2)(c) DSGVO"
|
|
effort: medium
|
|
|
|
C_TIA:
|
|
id: C_TIA
|
|
title: "Transfer Impact Assessment"
|
|
description: "Bewertung der Risiken bei Drittlandtransfer"
|
|
gdpr_ref: "Schrems II Urteil"
|
|
effort: high
|
|
|
|
C_SCC_NEW:
|
|
id: C_SCC_NEW
|
|
title: "Neue Standardvertragsklauseln (2021)"
|
|
description: "Verwendung der aktuellen SCC-Version seit Juni 2021"
|
|
gdpr_ref: "Art. 46(2)(c) DSGVO, EU 2021/914"
|
|
effort: medium
|
|
when_applicable: "Drittlandtransfer ohne Angemessenheitsbeschluss"
|
|
what_to_do: |
|
|
1. Korrektes SCC-Modul wählen (C2C, C2P, P2P, P2C)
|
|
2. Annex I (Datenexporteur/Importeur) ausfüllen
|
|
3. Annex II (Technische Maßnahmen) dokumentieren
|
|
4. Von beiden Parteien unterzeichnen lassen
|
|
evidence_needed:
|
|
- "Unterzeichnete SCC (PDF)"
|
|
- "Ausgefüllte Annexe I und II"
|
|
- "Dokumentation des gewählten Moduls"
|
|
|
|
C_SCC_DPF_CHECK:
|
|
id: C_SCC_DPF_CHECK
|
|
title: "DPF-Zertifizierungsprüfung"
|
|
description: "Prüfung ob US-Anbieter unter Data Privacy Framework zertifiziert ist"
|
|
gdpr_ref: "EU-US Data Privacy Framework Beschluss 2023"
|
|
effort: low
|
|
when_applicable: "Übermittlung an US-Empfänger"
|
|
what_to_do: |
|
|
1. DPF-Liste auf dataprivacyframework.gov prüfen
|
|
2. Zertifizierungsstatus dokumentieren
|
|
3. Bei Zertifizierung: SCC optional (aber empfohlen als Backup)
|
|
4. Ohne Zertifizierung: SCC zwingend erforderlich
|
|
evidence_needed:
|
|
- "Screenshot DPF-Zertifizierungsstatus"
|
|
- "Dokumentation Prüfdatum"
|
|
|
|
C_SUBPROCESSOR_SCC:
|
|
id: C_SUBPROCESSOR_SCC
|
|
title: "SCC für Unterauftragsverarbeiter"
|
|
description: "SCC-Kette zu Unterauftragsverarbeitern im Drittland"
|
|
gdpr_ref: "Art. 28(4), Art. 46 DSGVO"
|
|
effort: medium
|
|
when_applicable: "Subprozessoren im Drittland"
|
|
what_to_do: |
|
|
1. Liste aller Subprozessoren mit Standorten einholen
|
|
2. Für jeden Drittland-Subprozessor: SCC oder Angemessenheit prüfen
|
|
3. Vertragliche Weitergabe der Pflichten sicherstellen
|
|
evidence_needed:
|
|
- "Subprocessor-Liste mit Standorten"
|
|
- "SCC-Nachweis für Drittland-Subprozessoren"
|
|
|
|
C_TECHNICAL_SUPPLEMENTARY:
|
|
id: C_TECHNICAL_SUPPLEMENTARY
|
|
title: "Technische Zusatzmaßnahmen"
|
|
description: "Ergänzende technische Schutzmaßnahmen bei Drittlandtransfer"
|
|
gdpr_ref: "EDPB Recommendations 01/2020"
|
|
effort: high
|
|
when_applicable: "TIA zeigt unzureichendes Schutzniveau"
|
|
what_to_do: |
|
|
1. Ende-zu-Ende-Verschlüsselung implementieren (Schlüssel nur bei Exporteur)
|
|
2. Pseudonymisierung mit Mapping-Tabelle im EWR
|
|
3. Logging aller Drittland-Zugriffe
|
|
evidence_needed:
|
|
- "Verschlüsselungskonzept"
|
|
- "Pseudonymisierungskonzept"
|
|
- "Zugriffsprotokollierung"
|
|
|
|
# =============================================================================
|
|
# REGELN - Kategorie A: Datenklassifikation
|
|
# =============================================================================
|
|
|
|
rules:
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# A. Datenklassifikation
|
|
# ---------------------------------------------------------------------------
|
|
|
|
- id: R-A001
|
|
category: "A. Datenklassifikation"
|
|
title: "Personenbezogene Daten vorhanden"
|
|
description: "Es werden personenbezogene Daten verarbeitet"
|
|
condition:
|
|
field: data_types.personal_data
|
|
operator: equals
|
|
value: true
|
|
effect:
|
|
risk_add: 10
|
|
controls_add: [C_TRANSPARENCY]
|
|
severity: INFO
|
|
gdpr_ref: "Art. 4(1), Art. 6 DSGVO"
|
|
rationale: "Personenbezogene Daten erfordern Rechtsgrundlage nach Art. 6"
|
|
|
|
- id: R-A002
|
|
category: "A. Datenklassifikation"
|
|
title: "Besondere Kategorien (Art. 9)"
|
|
description: "Gesundheitsdaten, Religion, politische Meinung etc."
|
|
condition:
|
|
field: data_types.article_9_data
|
|
operator: equals
|
|
value: true
|
|
effect:
|
|
risk_add: 25
|
|
feasibility: CONDITIONAL
|
|
controls_add: [C_EXPLICIT_CONSENT, C_DSFA, C_ENCRYPTION]
|
|
escalation: true
|
|
severity: WARN
|
|
gdpr_ref: "Art. 9 DSGVO"
|
|
rationale: "Besondere Kategorien sind grundsätzlich verboten, Ausnahmen nur nach Art. 9(2)"
|
|
|
|
- id: R-A003
|
|
category: "A. Datenklassifikation"
|
|
title: "Daten von Minderjährigen"
|
|
description: "Es werden Daten von Personen unter 18 Jahren verarbeitet"
|
|
condition:
|
|
field: data_types.minor_data
|
|
operator: equals
|
|
value: true
|
|
effect:
|
|
risk_add: 20
|
|
training_allowed: false
|
|
controls_add: [C_PARENTAL_CONSENT, C_DSFA]
|
|
severity: WARN
|
|
gdpr_ref: "Art. 8 DSGVO, ErwGr. 38"
|
|
rationale: "Kinder verdienen besonderen Schutz"
|
|
|
|
- id: R-A004
|
|
category: "A. Datenklassifikation"
|
|
title: "KFZ-Kennzeichen"
|
|
description: "Fahrzeugkennzeichen werden verarbeitet"
|
|
condition:
|
|
field: data_types.license_plates
|
|
operator: equals
|
|
value: true
|
|
effect:
|
|
risk_add: 15
|
|
controls_add: [C_RETENTION_POLICY]
|
|
suggested_patterns: [P_PIXELIZATION, P_PRE_ANON]
|
|
severity: WARN
|
|
gdpr_ref: "Art. 4(1) DSGVO"
|
|
rationale: "Kennzeichen ermöglichen Identifikation des Halters"
|
|
|
|
- id: R-A005
|
|
category: "A. Datenklassifikation"
|
|
title: "Biometrische Daten"
|
|
description: "Fingerabdrücke, Gesichtserkennung oder andere biometrische Merkmale"
|
|
condition:
|
|
field: data_types.biometric_data
|
|
operator: equals
|
|
value: true
|
|
effect:
|
|
risk_add: 30
|
|
feasibility: CONDITIONAL
|
|
controls_add: [C_EXPLICIT_CONSENT, C_DSFA, C_ENCRYPTION, C_ACCESS_LOGGING]
|
|
suggested_patterns: [P_PIXELIZATION]
|
|
escalation: true
|
|
severity: WARN
|
|
gdpr_ref: "Art. 9(1), Art. 4(14) DSGVO"
|
|
rationale: "Biometrische Daten zur Identifikation sind besondere Kategorien"
|
|
|
|
- id: R-A006
|
|
category: "A. Datenklassifikation"
|
|
title: "Standortdaten"
|
|
description: "GPS, Bewegungsprofile oder Aufenthaltsorte"
|
|
condition:
|
|
field: data_types.location_data
|
|
operator: equals
|
|
value: true
|
|
effect:
|
|
risk_add: 15
|
|
controls_add: [C_EXPLICIT_CONSENT, C_RETENTION_POLICY]
|
|
severity: WARN
|
|
gdpr_ref: "Art. 4(1) DSGVO, ErwGr. 75"
|
|
rationale: "Standortdaten ermöglichen detaillierte Bewegungsprofile"
|
|
|
|
- id: R-A007
|
|
category: "A. Datenklassifikation"
|
|
title: "Nur öffentliche/anonyme Daten"
|
|
description: "Keine personenbezogenen Daten"
|
|
condition:
|
|
field: data_types.public_data
|
|
operator: equals
|
|
value: true
|
|
effect:
|
|
risk_add: 0
|
|
severity: INFO
|
|
gdpr_ref: "ErwGr. 26 DSGVO"
|
|
rationale: "Anonyme Daten fallen nicht unter die DSGVO"
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# B. Zweck & Rechtsgrundlage
|
|
# ---------------------------------------------------------------------------
|
|
|
|
- id: R-B001
|
|
category: "B. Zweck & Rechtsgrundlage"
|
|
title: "Kundenservice"
|
|
description: "Verarbeitung zum Zweck des Kundenservice"
|
|
condition:
|
|
field: purpose.customer_support
|
|
operator: equals
|
|
value: true
|
|
effect:
|
|
risk_add: 5
|
|
legal_basis: "Art. 6(1)(b) DSGVO"
|
|
severity: INFO
|
|
rationale: "Kundenservice kann auf Vertragserfüllung gestützt werden"
|
|
|
|
- id: R-B002
|
|
category: "B. Zweck & Rechtsgrundlage"
|
|
title: "Bewertung/Scoring von Personen"
|
|
description: "Personen werden bewertet, eingestuft oder gerankt"
|
|
condition:
|
|
field: purpose.evaluation_scoring
|
|
operator: equals
|
|
value: true
|
|
effect:
|
|
risk_add: 20
|
|
controls_add: [C_TRANSPARENCY, C_CONTESTATION, C_DSFA]
|
|
severity: WARN
|
|
gdpr_ref: "Art. 22, § 31 BDSG"
|
|
rationale: "Scoring erfordert besondere Transparenz und Anfechtbarkeit"
|
|
|
|
- id: R-B003
|
|
category: "B. Zweck & Rechtsgrundlage"
|
|
title: "Profiling"
|
|
description: "Automatisierte Analyse persönlicher Aspekte"
|
|
condition:
|
|
field: purpose.profiling
|
|
operator: equals
|
|
value: true
|
|
effect:
|
|
risk_add: 20
|
|
controls_add: [C_TRANSPARENCY, C_DSFA]
|
|
severity: WARN
|
|
gdpr_ref: "Art. 4(4), Art. 22 DSGVO"
|
|
rationale: "Profiling erfordert erhöhte Transparenz"
|
|
|
|
- id: R-B004
|
|
category: "B. Zweck & Rechtsgrundlage"
|
|
title: "Marketing mit personenbezogenen Daten"
|
|
description: "Werbung unter Verwendung personenbezogener Daten"
|
|
condition:
|
|
all_of:
|
|
- field: purpose.marketing
|
|
operator: equals
|
|
value: true
|
|
- field: data_types.personal_data
|
|
operator: equals
|
|
value: true
|
|
effect:
|
|
risk_add: 10
|
|
feasibility: CONDITIONAL
|
|
controls_add: [C_EXPLICIT_CONSENT]
|
|
severity: WARN
|
|
gdpr_ref: "Art. 6(1)(a), § 7 UWG"
|
|
rationale: "E-Mail-Marketing erfordert i.d.R. Einwilligung"
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# C. Automatisierung & Entscheidungen
|
|
# ---------------------------------------------------------------------------
|
|
|
|
- id: R-C001
|
|
category: "C. Automatisierung"
|
|
title: "Assistive KI-Nutzung"
|
|
description: "KI macht Vorschläge, Mensch entscheidet"
|
|
condition:
|
|
field: automation
|
|
operator: equals
|
|
value: assistive
|
|
effect:
|
|
risk_add: 0
|
|
severity: INFO
|
|
rationale: "Human-in-the-loop garantiert → geringes Risiko"
|
|
|
|
- id: R-C002
|
|
category: "C. Automatisierung"
|
|
title: "Teilautomatisierung"
|
|
description: "KI trifft Vorentscheidungen, Mensch prüft"
|
|
condition:
|
|
field: automation
|
|
operator: equals
|
|
value: semi_automated
|
|
effect:
|
|
risk_add: 10
|
|
controls_add: [C_TRANSPARENCY]
|
|
severity: INFO
|
|
rationale: "Human-on-the-loop reduziert Risiko"
|
|
|
|
- id: R-C003
|
|
category: "C. Automatisierung"
|
|
title: "Vollautomatisierte Verarbeitung"
|
|
description: "KI entscheidet ohne menschliche Prüfung"
|
|
condition:
|
|
field: automation
|
|
operator: equals
|
|
value: fully_automated
|
|
effect:
|
|
risk_add: 25
|
|
art22_risk: true
|
|
controls_add: [C_CONTESTATION, C_TRANSPARENCY]
|
|
suggested_patterns: [P_HITL_ENFORCED]
|
|
severity: WARN
|
|
gdpr_ref: "Art. 22 DSGVO"
|
|
rationale: "Vollautomatisierte Entscheidungen sind nach Art. 22 grundsätzlich verboten"
|
|
|
|
- id: R-C004
|
|
category: "C. Automatisierung"
|
|
title: "Entscheidungen mit rechtlicher Wirkung"
|
|
description: "Automatisierte Entscheidungen mit rechtlichen Konsequenzen"
|
|
condition:
|
|
all_of:
|
|
- field: automation
|
|
operator: equals
|
|
value: fully_automated
|
|
- field: outputs.legal_effects
|
|
operator: equals
|
|
value: true
|
|
effect:
|
|
feasibility: NO
|
|
severity: BLOCK
|
|
gdpr_ref: "Art. 22(1) DSGVO"
|
|
rationale: "Vollautomatisierte Entscheidungen mit rechtlicher Wirkung sind verboten"
|
|
|
|
- id: R-C005
|
|
category: "C. Automatisierung"
|
|
title: "HR-Kontext mit vollautomatisiertem Scoring"
|
|
description: "Mitarbeiterbewertung durch vollautomatisierte KI"
|
|
condition:
|
|
all_of:
|
|
- field: domain
|
|
operator: in
|
|
value: [hr, recruiting]
|
|
- field: purpose.evaluation_scoring
|
|
operator: equals
|
|
value: true
|
|
- field: automation
|
|
operator: equals
|
|
value: fully_automated
|
|
effect:
|
|
feasibility: NO
|
|
severity: BLOCK
|
|
gdpr_ref: "Art. 22 DSGVO, § 26 BDSG"
|
|
rationale: "Vollautomatisiertes HR-Scoring ist unzulässig"
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# D. Training & Modell-Nutzung
|
|
# ---------------------------------------------------------------------------
|
|
|
|
- id: R-D001
|
|
category: "D. Training & Modell"
|
|
title: "RAG ohne Training"
|
|
description: "Nur Dokumentensuche, kein Modell-Training"
|
|
condition:
|
|
all_of:
|
|
- field: model_usage.rag
|
|
operator: equals
|
|
value: true
|
|
- field: model_usage.training
|
|
operator: equals
|
|
value: false
|
|
effect:
|
|
risk_add: 0
|
|
suggested_patterns: [P_RAG_ONLY]
|
|
severity: INFO
|
|
rationale: "RAG ist datenschutzfreundlich - Daten fließen nicht ins Modell"
|
|
|
|
- id: R-D002
|
|
category: "D. Training & Modell"
|
|
title: "Training mit personenbezogenen Daten"
|
|
description: "KI-Training unter Verwendung personenbezogener Daten"
|
|
condition:
|
|
all_of:
|
|
- field: model_usage.training
|
|
operator: equals
|
|
value: true
|
|
- field: data_types.personal_data
|
|
operator: equals
|
|
value: true
|
|
effect:
|
|
risk_add: 25
|
|
feasibility: CONDITIONAL
|
|
training_allowed: false
|
|
suggested_patterns: [P_RAG_ONLY, P_PRE_ANON]
|
|
controls_add: [C_EXPLICIT_CONSENT, C_DSFA]
|
|
severity: WARN
|
|
gdpr_ref: "Art. 5(1)(b), Art. 6 DSGVO"
|
|
rationale: "Training ist eigenständiger Verarbeitungszweck"
|
|
|
|
- id: R-D003
|
|
category: "D. Training & Modell"
|
|
title: "Training mit Daten Minderjähriger"
|
|
description: "KI-Training mit Daten von Kindern/Jugendlichen"
|
|
condition:
|
|
all_of:
|
|
- field: model_usage.training
|
|
operator: equals
|
|
value: true
|
|
- field: data_types.minor_data
|
|
operator: equals
|
|
value: true
|
|
effect:
|
|
feasibility: NO
|
|
severity: BLOCK
|
|
gdpr_ref: "Art. 8 DSGVO"
|
|
rationale: "Training mit Daten Minderjähriger ist nicht zulässig"
|
|
|
|
- id: R-D004
|
|
category: "D. Training & Modell"
|
|
title: "Fine-Tuning mit Kundengesprächen"
|
|
description: "Modell-Anpassung mit realen Kundeninteraktionen"
|
|
condition:
|
|
all_of:
|
|
- field: model_usage.finetune
|
|
operator: equals
|
|
value: true
|
|
- field: data_types.customer_data
|
|
operator: equals
|
|
value: true
|
|
effect:
|
|
risk_add: 15
|
|
feasibility: CONDITIONAL
|
|
suggested_patterns: [P_PRE_ANON, P_RAG_ONLY]
|
|
controls_add: [C_EXPLICIT_CONSENT]
|
|
severity: WARN
|
|
rationale: "Fine-Tuning nur mit anonymisierten Daten oder Einwilligung"
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# E. Hosting & Drittlandtransfer
|
|
# ---------------------------------------------------------------------------
|
|
|
|
- id: R-E001
|
|
category: "E. Hosting"
|
|
title: "EU-Hosting"
|
|
description: "Daten werden in der EU/EWR verarbeitet"
|
|
condition:
|
|
field: hosting.region
|
|
operator: equals
|
|
value: eu
|
|
effect:
|
|
risk_add: 0
|
|
severity: INFO
|
|
rationale: "EU-Hosting vermeidet Drittlandtransfer-Problematik"
|
|
|
|
- id: R-E002
|
|
category: "E. Hosting"
|
|
title: "Drittland-Hosting"
|
|
description: "Daten werden außerhalb der EU verarbeitet"
|
|
condition:
|
|
field: hosting.region
|
|
operator: equals
|
|
value: third_country
|
|
effect:
|
|
risk_add: 15
|
|
controls_add: [C_SCC, C_TIA, C_ENCRYPTION]
|
|
suggested_patterns: [P_EU_HOSTING]
|
|
severity: WARN
|
|
gdpr_ref: "Art. 44ff DSGVO"
|
|
rationale: "Drittlandtransfer erfordert zusätzliche Garantien"
|
|
|
|
- id: R-E003
|
|
category: "E. Hosting"
|
|
title: "Drittland mit sensiblen Daten"
|
|
description: "Sensible Daten außerhalb der EU"
|
|
condition:
|
|
all_of:
|
|
- field: hosting.region
|
|
operator: equals
|
|
value: third_country
|
|
- any_of:
|
|
- field: data_types.article_9_data
|
|
operator: equals
|
|
value: true
|
|
- field: data_types.biometric_data
|
|
operator: equals
|
|
value: true
|
|
- field: data_types.minor_data
|
|
operator: equals
|
|
value: true
|
|
effect:
|
|
risk_add: 25
|
|
feasibility: CONDITIONAL
|
|
escalation: true
|
|
suggested_patterns: [P_EU_HOSTING]
|
|
severity: WARN
|
|
gdpr_ref: "Art. 44, Art. 9 DSGVO"
|
|
rationale: "Sensible Daten im Drittland erfordern umfangreiche Schutzmaßnahmen"
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# E2. Standardvertragsklauseln (SCC)
|
|
# ---------------------------------------------------------------------------
|
|
|
|
- id: R-E004
|
|
category: "E. Transfer"
|
|
title: "SCC vorhanden bei Drittlandtransfer"
|
|
description: "Standardvertragsklauseln mit Drittland-Provider abgeschlossen"
|
|
condition:
|
|
all_of:
|
|
- field: provider.location
|
|
operator: in
|
|
value: [us, non_eu, third_country]
|
|
- field: contracts.scc.present
|
|
operator: equals
|
|
value: true
|
|
effect:
|
|
risk_add: 5
|
|
controls_add: [C_TIA]
|
|
severity: INFO
|
|
gdpr_ref: "Art. 46(2)(c) DSGVO"
|
|
rationale: "SCC bieten rechtliche Grundlage, TIA zur Validierung erforderlich"
|
|
|
|
- id: R-E005
|
|
category: "E. Transfer"
|
|
title: "Alte SCC-Version verwendet"
|
|
description: "SCC vorhanden, aber nicht die aktuelle Version (2021)"
|
|
condition:
|
|
all_of:
|
|
- field: contracts.scc.present
|
|
operator: equals
|
|
value: true
|
|
- field: contracts.scc.version
|
|
operator: not_equals
|
|
value: new_scc_2021
|
|
effect:
|
|
risk_add: 10
|
|
controls_add: [C_SCC_NEW]
|
|
flags: ["SCC_VERSION_OUTDATED"]
|
|
severity: WARN
|
|
gdpr_ref: "EU 2021/914"
|
|
rationale: "Alte SCC-Versionen sind seit Ende 2022 nicht mehr gültig"
|
|
|
|
- id: R-E006
|
|
category: "E. Transfer"
|
|
title: "USA-Transfer mit DPF-Zertifizierung"
|
|
description: "US-Provider ist unter Data Privacy Framework zertifiziert"
|
|
condition:
|
|
all_of:
|
|
- field: provider.location
|
|
operator: equals
|
|
value: us
|
|
- field: provider.dpf_certified
|
|
operator: equals
|
|
value: true
|
|
effect:
|
|
risk_add: 0
|
|
severity: INFO
|
|
gdpr_ref: "EU-US DPF Beschluss 2023"
|
|
rationale: "DPF-Zertifizierung ermöglicht Transfer ohne zusätzliche SCC"
|
|
|
|
- id: R-E007
|
|
category: "E. Transfer"
|
|
title: "USA-Transfer ohne DPF-Zertifizierung"
|
|
description: "US-Provider ist NICHT unter DPF zertifiziert"
|
|
condition:
|
|
all_of:
|
|
- field: provider.location
|
|
operator: equals
|
|
value: us
|
|
- field: provider.dpf_certified
|
|
operator: equals
|
|
value: false
|
|
effect:
|
|
risk_add: 15
|
|
controls_add: [C_SCC, C_TIA, C_SCC_DPF_CHECK]
|
|
flags: ["US_NO_DPF"]
|
|
severity: WARN
|
|
gdpr_ref: "DSGVO Art. 44ff, Schrems II"
|
|
rationale: "Ohne DPF sind SCC + TIA zwingend erforderlich"
|
|
|
|
- id: R-E008
|
|
category: "E. Transfer"
|
|
title: "Lokales Hosting ohne Drittlandzugriff"
|
|
description: "Vollständig lokale Verarbeitung im EWR ohne externen Zugriff"
|
|
condition:
|
|
all_of:
|
|
- field: hosting.type
|
|
operator: equals
|
|
value: on_premises
|
|
- field: hosting.region
|
|
operator: equals
|
|
value: eu
|
|
- field: provider.remote_access
|
|
operator: equals
|
|
value: false
|
|
effect:
|
|
risk_add: 0
|
|
flags: ["NO_TRANSFER_REQUIRED"]
|
|
severity: INFO
|
|
rationale: "Rein lokale Verarbeitung erfordert keine SCC"
|
|
|
|
- id: R-E009
|
|
category: "E. Transfer"
|
|
title: "Support-Zugriff aus Drittland"
|
|
description: "Provider-Support kann von Drittland aus auf Daten zugreifen"
|
|
condition:
|
|
all_of:
|
|
- field: provider.support_location
|
|
operator: in
|
|
value: [us, non_eu, third_country, global]
|
|
- field: data_types.personal_data
|
|
operator: equals
|
|
value: true
|
|
effect:
|
|
risk_add: 10
|
|
controls_add: [C_SCC, C_TIA]
|
|
flags: ["SUPPORT_TRANSFER_RISK"]
|
|
severity: WARN
|
|
gdpr_ref: "Art. 44 DSGVO"
|
|
rationale: "Remote-Zugriff auf EU-Daten von Drittland = Transfer"
|
|
|
|
- id: R-E010
|
|
category: "E. Transfer"
|
|
title: "Unterauftragsverarbeiter im Drittland"
|
|
description: "Provider nutzt Subprozessoren außerhalb des EWR"
|
|
condition:
|
|
all_of:
|
|
- field: provider.subprocessors.third_country
|
|
operator: equals
|
|
value: true
|
|
effect:
|
|
risk_add: 10
|
|
controls_add: [C_SUBPROCESSOR_SCC, C_TIA]
|
|
flags: ["SUBPROCESSOR_TRANSFER"]
|
|
severity: WARN
|
|
gdpr_ref: "Art. 28(4) DSGVO"
|
|
rationale: "SCC-Kette zu Drittland-Subprozessoren erforderlich"
|
|
|
|
- id: R-E011
|
|
category: "E. Transfer"
|
|
title: "TIA zeigt unzureichendes Schutzniveau"
|
|
description: "Transfer Impact Assessment ergibt Defizite"
|
|
condition:
|
|
all_of:
|
|
- field: contracts.tia.present
|
|
operator: equals
|
|
value: true
|
|
- field: contracts.tia.result
|
|
operator: equals
|
|
value: inadequate
|
|
effect:
|
|
risk_add: 20
|
|
controls_add: [C_TECHNICAL_SUPPLEMENTARY]
|
|
flags: ["TIA_INADEQUATE"]
|
|
escalation: true
|
|
severity: WARN
|
|
gdpr_ref: "EDPB Recommendations 01/2020"
|
|
rationale: "Zusätzliche technische Maßnahmen erforderlich"
|
|
|
|
- id: R-E012
|
|
category: "E. Transfer"
|
|
title: "TIA zeigt Transfer nicht möglich"
|
|
description: "Transfer Impact Assessment ergibt: kein angemessenes Niveau erreichbar"
|
|
condition:
|
|
all_of:
|
|
- field: contracts.tia.present
|
|
operator: equals
|
|
value: true
|
|
- field: contracts.tia.result
|
|
operator: equals
|
|
value: not_feasible
|
|
effect:
|
|
feasibility: NO
|
|
flags: ["TRANSFER_BLOCKED"]
|
|
severity: BLOCK
|
|
gdpr_ref: "Art. 44 DSGVO"
|
|
rationale: "Transfer ohne angemessenes Schutzniveau ist unzulässig"
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# F. Domain-spezifische Regeln
|
|
# ---------------------------------------------------------------------------
|
|
|
|
- id: R-F001
|
|
category: "F. Domain-spezifisch"
|
|
title: "Bildung + automatisiertes Scoring"
|
|
description: "Automatisierte Bewertung von Schülern/Studenten"
|
|
condition:
|
|
all_of:
|
|
- field: domain
|
|
operator: in
|
|
value: [education, higher_education, vocational_training]
|
|
- field: purpose.evaluation_scoring
|
|
operator: equals
|
|
value: true
|
|
- field: automation
|
|
operator: equals
|
|
value: fully_automated
|
|
effect:
|
|
feasibility: NO
|
|
severity: BLOCK
|
|
rationale: "Vollautomatisiertes Scoring im Bildungsbereich nicht zulässig"
|
|
|
|
- id: R-F002
|
|
category: "F. Domain-spezifisch"
|
|
title: "Stadtwerke Chatbot (Standard)"
|
|
description: "Kundenservice-Chatbot für Versorgungsunternehmen"
|
|
condition:
|
|
all_of:
|
|
- field: domain
|
|
operator: equals
|
|
value: utilities
|
|
- field: purpose.customer_support
|
|
operator: equals
|
|
value: true
|
|
- field: model_usage.rag
|
|
operator: equals
|
|
value: true
|
|
- field: model_usage.training
|
|
operator: equals
|
|
value: false
|
|
effect:
|
|
feasibility: YES
|
|
risk_add: 0
|
|
severity: INFO
|
|
rationale: "Standard-Anwendungsfall mit geringem Risiko"
|
|
|
|
- id: R-F003
|
|
category: "F. Domain-spezifisch"
|
|
title: "Parkhaus mit Kennzeichen-Training"
|
|
description: "KI-Training mit KFZ-Kennzeichen"
|
|
condition:
|
|
all_of:
|
|
- field: domain
|
|
operator: equals
|
|
value: real_estate
|
|
- field: data_types.license_plates
|
|
operator: equals
|
|
value: true
|
|
- field: model_usage.training
|
|
operator: equals
|
|
value: true
|
|
effect:
|
|
feasibility: NO
|
|
suggested_patterns: [P_PIXELIZATION]
|
|
severity: BLOCK
|
|
rationale: "Training mit Kennzeichen ohne Einwilligung nicht zulässig"
|
|
|
|
- id: R-F004
|
|
category: "F. Domain-spezifisch"
|
|
title: "Gesundheitswesen mit Art.9-Daten"
|
|
description: "KI im Gesundheitsbereich mit Patientendaten"
|
|
condition:
|
|
all_of:
|
|
- field: domain
|
|
operator: in
|
|
value: [healthcare, medical_devices, pharma, elderly_care]
|
|
- field: data_types.article_9_data
|
|
operator: equals
|
|
value: true
|
|
effect:
|
|
risk_add: 20
|
|
feasibility: CONDITIONAL
|
|
controls_add: [C_DSFA, C_ENCRYPTION, C_ACCESS_LOGGING]
|
|
escalation: true
|
|
severity: WARN
|
|
gdpr_ref: "Art. 9(2)(h) DSGVO"
|
|
rationale: "Gesundheitsdaten nur mit besonderen Schutzmaßnahmen"
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# G. Aggregation & Ergebnis
|
|
# ---------------------------------------------------------------------------
|
|
|
|
- id: R-G001
|
|
category: "G. Aggregation"
|
|
title: "BLOCK-Regel greift"
|
|
description: "Mindestens eine blockierende Regel wurde ausgelöst"
|
|
condition:
|
|
aggregate: any_block
|
|
effect:
|
|
feasibility: NO
|
|
severity: BLOCK
|
|
rationale: "Hard-Block kann nicht überschrieben werden"
|
|
|
|
- id: R-G002
|
|
category: "G. Aggregation"
|
|
title: "Hoher Risikoscore"
|
|
description: "Aggregierter Risikoscore über Schwellenwert"
|
|
condition:
|
|
aggregate: risk_score_gte
|
|
value: 60
|
|
effect:
|
|
feasibility: CONDITIONAL
|
|
controls_add: [C_DSFA]
|
|
escalation: true
|
|
severity: WARN
|
|
rationale: "Hohe Risiko-Aggregation erfordert DSFA"
|
|
|
|
- id: R-G003
|
|
category: "G. Aggregation"
|
|
title: "Nur INFO-Regeln"
|
|
description: "Keine WARN oder BLOCK Regeln ausgelöst"
|
|
condition:
|
|
aggregate: only_info
|
|
effect:
|
|
feasibility: YES
|
|
severity: INFO
|
|
rationale: "Geringes Risiko bei nur informativen Regeln"
|
|
|
|
# =============================================================================
|
|
# Problem-Lösungs-Mappings (für LLM-Prompt-Generierung)
|
|
# =============================================================================
|
|
|
|
problem_solutions:
|
|
|
|
- problem_id: "license_plates_no_consent"
|
|
title: "KFZ-Kennzeichen ohne Rechtsgrundlage"
|
|
triggers:
|
|
- rule: R-A004
|
|
without_control: C_EXPLICIT_CONSENT
|
|
solutions:
|
|
- id: "pixelize"
|
|
title: "Kennzeichen verpixeln"
|
|
pattern: P_PIXELIZATION
|
|
removes_problem: true
|
|
team_question: "Funktioniert das Projekt auch mit verpixelten (nicht lesbaren) Kennzeichen?"
|
|
- id: "consent"
|
|
title: "Einwilligung einholen"
|
|
control: C_EXPLICIT_CONSENT
|
|
removes_problem: true
|
|
team_question: "Können Sie die Einwilligung aller Fahrzeughalter sicherstellen?"
|
|
|
|
- problem_id: "biometrics_no_consent"
|
|
title: "Biometrische Daten ohne Einwilligung"
|
|
triggers:
|
|
- rule: R-A005
|
|
without_control: C_EXPLICIT_CONSENT
|
|
solutions:
|
|
- id: "anonymize_faces"
|
|
title: "Gesichter anonymisieren"
|
|
pattern: P_PIXELIZATION
|
|
removes_problem: true
|
|
team_question: "Funktioniert das Projekt auch ohne erkennbare Gesichter?"
|
|
- id: "explicit_consent"
|
|
title: "Ausdrückliche Einwilligung"
|
|
control: C_EXPLICIT_CONSENT
|
|
removes_problem: true
|
|
team_question: "Können Sie eine ausdrückliche Einwilligung aller Betroffenen sicherstellen?"
|
|
|
|
- problem_id: "training_with_pii"
|
|
title: "KI-Training mit personenbezogenen Daten"
|
|
triggers:
|
|
- rule: R-D002
|
|
solutions:
|
|
- id: "use_rag"
|
|
title: "RAG statt Training"
|
|
pattern: P_RAG_ONLY
|
|
removes_problem: true
|
|
team_question: "Reicht es, wenn die KI Ihre Dokumente durchsuchen kann statt daraus zu lernen?"
|
|
- id: "anonymize_first"
|
|
title: "Trainingsdaten anonymisieren"
|
|
pattern: P_PRE_ANON
|
|
removes_problem: true
|
|
team_question: "Können die Daten vor dem Training vollständig anonymisiert werden?"
|
|
|
|
- problem_id: "fully_automated_decisions"
|
|
title: "Vollautomatisierte Entscheidungen"
|
|
triggers:
|
|
- rule: R-C003
|
|
solutions:
|
|
- id: "add_hitl"
|
|
title: "Menschliche Überprüfung einführen"
|
|
pattern: P_HITL_ENFORCED
|
|
removes_problem: true
|
|
team_question: "Kann ein Mensch jede Entscheidung vor Wirksamkeit prüfen?"
|
|
|
|
- problem_id: "third_country_no_scc"
|
|
title: "Drittlandtransfer ohne SCC"
|
|
triggers:
|
|
- rule: R-E002
|
|
without_control: C_SCC
|
|
solutions:
|
|
- id: "add_scc"
|
|
title: "SCC mit Provider abschließen"
|
|
control: C_SCC_NEW
|
|
removes_problem: true
|
|
team_question: "Kann der Provider die neuen EU-Standardvertragsklauseln unterzeichnen?"
|
|
- id: "switch_eu"
|
|
title: "Zu EU-Anbieter wechseln"
|
|
pattern: P_EU_HOSTING
|
|
removes_problem: true
|
|
team_question: "Gibt es eine EU-Alternative für diesen Dienst?"
|
|
- id: "local_hosting"
|
|
title: "Lokales Hosting nutzen"
|
|
removes_problem: true
|
|
team_question: "Kann die Verarbeitung vollständig lokal im EWR erfolgen?"
|
|
|
|
- problem_id: "us_provider_no_dpf"
|
|
title: "US-Provider ohne DPF-Zertifizierung"
|
|
triggers:
|
|
- rule: R-E007
|
|
solutions:
|
|
- id: "check_dpf"
|
|
title: "DPF-Status prüfen"
|
|
control: C_SCC_DPF_CHECK
|
|
removes_problem: false
|
|
team_question: "Wurde geprüft ob der Provider mittlerweile DPF-zertifiziert ist?"
|
|
- id: "add_scc_tia"
|
|
title: "SCC + TIA implementieren"
|
|
controls: [C_SCC_NEW, C_TIA]
|
|
removes_problem: true
|
|
team_question: "Hat der Provider die neuen SCC unterzeichnet und wurde ein TIA durchgeführt?"
|
|
|
|
- problem_id: "outdated_scc"
|
|
title: "Veraltete SCC-Version"
|
|
triggers:
|
|
- rule: R-E005
|
|
solutions:
|
|
- id: "update_scc"
|
|
title: "SCC auf Version 2021 aktualisieren"
|
|
control: C_SCC_NEW
|
|
removes_problem: true
|
|
team_question: "Kann der bestehende SCC-Vertrag auf die neue Version aktualisiert werden?"
|
|
|
|
- problem_id: "support_from_third_country"
|
|
title: "Support-Zugriff aus Drittland"
|
|
triggers:
|
|
- rule: R-E009
|
|
solutions:
|
|
- id: "restrict_access"
|
|
title: "Zugriff auf EU-Support beschränken"
|
|
removes_problem: true
|
|
team_question: "Kann der Support auf EU-basiertes Personal beschränkt werden?"
|
|
- id: "add_scc_support"
|
|
title: "SCC für Support-Zugriffe"
|
|
control: C_SCC
|
|
removes_problem: true
|
|
team_question: "Können SCC den Support-Zugriff aus dem Drittland abdecken?"
|
|
|
|
- problem_id: "tia_inadequate"
|
|
title: "TIA zeigt Defizite"
|
|
triggers:
|
|
- rule: R-E011
|
|
solutions:
|
|
- id: "add_technical_measures"
|
|
title: "Technische Zusatzmaßnahmen implementieren"
|
|
control: C_TECHNICAL_SUPPLEMENTARY
|
|
removes_problem: true
|
|
team_question: "Können Ende-zu-Ende-Verschlüsselung und Pseudonymisierung implementiert werden?"
|
|
- id: "switch_provider"
|
|
title: "Provider wechseln"
|
|
pattern: P_EU_HOSTING
|
|
removes_problem: true
|
|
team_question: "Gibt es einen alternativen Provider mit besserem Schutzniveau?"
|
|
|
|
# =============================================================================
|
|
# Escalation-Triggers (wann DSB einschalten)
|
|
# =============================================================================
|
|
|
|
escalation_triggers:
|
|
- condition: "Art. 9 Daten vorhanden"
|
|
reason: "Besondere Kategorien erfordern DSB-Freigabe"
|
|
- condition: "Minderjährige + Profiling/Scoring"
|
|
reason: "Besonderer Schutz für Kinder"
|
|
- condition: "Vollautomatisierte Entscheidungen mit Rechtswirkung"
|
|
reason: "Art. 22 DSGVO Prüfung erforderlich"
|
|
- condition: "Widersprüchliche Legal-RAG Ergebnisse"
|
|
reason: "Juristische Klärung erforderlich"
|
|
- condition: "Risikoscore >= 80"
|
|
reason: "Sehr hohes aggregiertes Risiko"
|