---
title: Mechanismen der Datensicherheit
description: Einheitliche Authentifizierung und Autorisierung, Verschlüsselung und Hashing von Daten sowie Subsysteme für Auditierung und Überwachung, die Daten plattformweit schützen.
section: Concepts
weight: 2
related:
  - security/security-mechanisms
  - security
  - rest-api
  - eu-compliance
---

## Einheitliches System für Authentifizierung und Autorisierung

Das einheitliche System für Authentifizierung und Autorisierung ist eine zentrale Komponente des Datenschutzes und gewährleistet den sicheren Zugriff auf Systemressourcen. Damit lassen sich Benutzer, ihre Berechtigungen und der Zugriff auf Daten systemweit verwalten.

Zur Erinnerung:

- **Authentifizierung** ist der Vorgang, mit dem die Identität eines Benutzers überprüft wird (zum Beispiel anhand von Benutzername und Passwort).
- **Autorisierung** ist der Vorgang, mit dem die Berechtigungen eines Benutzers zur Ausführung bestimmter Aktionen überprüft werden (zum Beispiel der Zugriff auf Daten oder Systemfunktionen).

### Systemkomponenten

#### Authentifizierung

- **Benutzername und Passwort**: das traditionelle Authentifizierungsverfahren. Bei der Anmeldung muss sich der Benutzer zunächst mit Benutzername und Passwort identifizieren.
- **Mehrfaktor-Authentifizierung** (MFA): die Verwendung mehrerer Faktoren (zum Beispiel ein dynamisch aktualisiertes Software-Token für die Web-API).

Die tokenbasierte Authentifizierung vereinfacht den Vorgang für bereits angemeldete Benutzer. Zu Beginn sendet der Benutzer eine Anfrage mit Benutzername und Passwort an den Server. Der Server gleicht sie mit den in seiner Identitätsdatenbank hinterlegten Werten ab. Wird die Identität bestätigt, gibt der Server ein Authentifizierungs-Token zurück (das ebenfalls in der Datenbank gespeichert wird).

Fordert derselbe Benutzer später Zugriff auf geschützte Ressourcen an, können diese Anfragen mit dem Authentifizierungs-Token statt mit Benutzername und Passwort autorisiert werden. Der Server gleicht das Token mit dem in der Datenbank hinterlegten ab und gewährt den Zugriff.

#### Autorisierung

- **Rollen und Berechtigungen**: Benutzern werden Rollen zugewiesen (zum Beispiel Zugriffsadministrator, Benutzer), die ihre Berechtigungen festlegen.
- **ACL** (Access Control Lists): Listen, die festlegen, wer auf welche Ressourcen zugreifen darf.
- **RBAC** (Role-Based Access Control): rollenbasierte Zugriffssteuerung.
- **ABAC** (Attribute-Based Access Control): attributbasierte Zugriffssteuerung (zum Beispiel nach Tageszeit oder Standort).

#### Speicherung der Benutzerdaten

- **Benutzerdatenbank**: speichert Informationen über Benutzer, ihre Rollen und Berechtigungen in einer einzigen Datenbank.

#### Sicherheit

- **Verschlüsselung**: schützt Daten während der Übertragung und Speicherung.
- **Zugriffstoken**: dynamisch aktualisierte Software-Token zur Sitzungsverwaltung.
- **Auditierung**: Protokollierung aller Benutzeraktionen zur späteren Auswertung.

### Systemumsetzung

Die Plattform nutzt einen tokenbasierten Authentifizierungsablauf. Der Benutzer meldet sich mit Benutzername und Passwort an, das System überprüft sie und gibt ein Zugriffstoken zurück; dieses Token wird anschließend mit jeder weiteren Anfrage gesendet, um den Zugriff auf geschützte Ressourcen zu autorisieren. Als Benutzername dient die E-Mail-Adresse des Benutzers.

Beispiel einer Anfrage im `Curl`-Format:

```bash title="Request example"
curl -i --header "Content-Type: application/json" \
--request POST \
--data '{"email":"api@local.net","password":"Str0ngPas$"}'\
https://server123/api/v1/auth/sign_in
```

Als Antwort erhalten wir folgende Nachricht:

```bash title="Response example"
HTTP/1.1 200 OK
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1; mode=block X-Content-Type-Options: nosniff X-Download-Options: noopen X-Permitted-Cross-Domain-Policies: none Referrer-Policy: strict-origin-when-cross-origin Content-Type: application/json; charset=utf-8 access-token: tgervk9_9xicJYpmSsnnNA
token-type: Bearer
client: D-Uv3ER53873olhnNLjL9w
expiry: 1615227012
uid: api@local.net
ETag: W/"5b9bcc76f7223b72b79d9f2d31ff0fd5"
Cache-Control: max-age=0, private, must-revalidate
X-Request-Id: c18e06b4-e5bd-40b5-875d-7ac958e2fbb5
X-Runtime: 0.391069
Transfer-Encoding: chunked
{"data":{"id":6,"email":"api@local.
net","provider":"email","uid":"api@local.net","name":"API user"}}
```

In dieser Antwort interessiert uns der Parameter `access_token`. Der Wert dieses Headers wird als Passwort für jede Anfrage verwendet und ändert sich mit jeder Anfrage.

Hier ein Beispiel einer Anfrage, die das Token aus der vorherigen Antwort verwendet:

```bash title="Request example with token"
curl -i --header "access-token: tgervk9_9xicJYpmSsnnNA" \
--header "token-type: Bearer" \
--header "client: D-Uv3ER53873olhnNLjL9w" \
--header "uid: api@local.net" \
--request GET \
--header "Content-Type: application/json" \
--data '{"page":"2"}' \
https://server123/api/v1/stations
```

Als Antwort erhalten wir folgende Nachricht:

```bash title="Response example"
HTTP/1.1 200 OK
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1; mode=block
X-Content-Type-Options: nosniff
X-Download-Options: noopen
X-Permitted-Cross-Domain-Policies: none
Referrer-Policy: strict-origin-when-cross-origin
Content-Type: application/json; charset=utf-8
access-token: Bmh2GVrxr6aW0Hngor4gPw
token-type: Bearer
client: D-Uv3ER53873olhnNLjL9w
expiry: 1615311367
uid: api@local.net
ETag: W/"ba0df406b647bd92f0bf3a18916714c1"
Cache-Control: max-age=0, private, must-revalidate
X-Request-Id: 35a26441-ae78-48fa-8b2e-e92d2605133b
X-Runtime: 0.167748
Transfer-Encoding: chunked
{"data": [
{"id":1,"name":"865293041101853","equipment_brand_name":"Corrector
BK","phone":"","equipment_id":1},...
],
"total_pages":7,
"current_page":2
}
```

Um die Sitzung zu beenden, können Sie die Prozedur `SignOut` verwenden oder die erforderlichen Header aus der letzten Anfrage speichern und beim nächsten Mal wiederverwenden, sofern das Token noch nicht abgelaufen ist. Beachten Sie, dass das letzte Token ohne Beendigung der Sitzung noch eine gewisse Zeit gültig bleibt, abhängig von den Systemeinstellungen des Servers.

### Vorteile des Systems

Ein einheitliches System für Authentifizierung und Autorisierung ist ein leistungsfähiges Werkzeug für Datenschutz und Zugriffssteuerung. Es bietet folgende Vorteile:

- **Zentrale Verwaltung**: vereinfacht die Verwaltung von Benutzern und ihren Berechtigungen.
- **Sicherheit**: schützt Daten vor unbefugtem Zugriff.
- **Einheitlichkeit**: alle Anwendungen und Systeme nutzen denselben Authentifizierungs- und Autorisierungsmechanismus.
- **Skalierbarkeit**: ermöglicht das einfache Hinzufügen neuer Anwendungen und Benutzer.

## Datenverschlüsselung

Zum Schutz kritischer Informationen setzt das System Verschlüsselung (die Umwandlung von Informationen in eine Form, die ohne den passenden Schlüssel nicht gelesen werden kann) und Hashing (die Umwandlung von Daten in eine eindeutige Zeichenfolge fester Länge – einen Hash) ein. Dies ist einer der zentralen Datenschutzmechanismen und gewährleistet die Vertraulichkeit, Integrität und Sicherheit von Informationen sowohl bei der Speicherung als auch bei der Übertragung.

Das System verwendet verschiedene Algorithmen zur Verschlüsselung und zum Hashing von Daten.

### Einsatz der Verschlüsselung im System

#### Verschlüsselung bei der Speicherung

- **Datenbanken**: Verschlüsselung einzelner Datenbankfelder.
- **Dateien**: Verschlüsselung von Dateien vor dem Speichern auf dem Datenträger.

#### Verschlüsselung von Daten bei der Übertragung

- **HTTPS**: Einsatz von SSL/TLS zur Verschlüsselung von Daten bei der Netzwerkübertragung.
- **VPN**: Aufbau eines sicheren Tunnels für die Datenübertragung.

#### Passwortverschlüsselung

Speicherung von Passwort-Hashes anstelle der Passwörter selbst.

### Beispiele für die Ver- und Entschlüsselung von Daten

Betrachten wir Beispiele für die Ver- und Entschlüsselung von Systemkonfigurationsdateien.

#### Datenverschlüsselung

```ruby title="example.config"
mkdir_p(encrypted_dir_path)
encrypted = Rails.application.encrypted(encrypted_file_path, key_path: 'config/system.key')
encrypted.write(File.read(decrypted_file_path))
File.delete(decrypted_file_path)
```

#### Datenentschlüsselung

```ruby title="example.config"
mkdir_p(decrypted_dir_path)
File.write(decrypted_file_path,
  Rails.application.encrypted(encrypted_file_path, key_path: 'config/system.key').read
)
```

### Vorteile der Datenverschlüsselung

- **Vertraulichkeit**: Schutz der Daten vor unbefugtem Zugriff.
- **Integrität**: Sicherstellung, dass die Daten nicht verändert wurden.
- **Authentizität**: Bestätigung der Herkunft der Daten.
- **Compliance-Anforderungen**: Erfüllung gesetzlicher Vorgaben.

## Auditierung und Überwachung

Mehrere Subsysteme überwachen die Aktivität von Benutzern und System, erkennen verdächtiges Verhalten und stellen die Einhaltung der Sicherheitsanforderungen sicher. Gemeinsam:

- erfassen, analysieren und speichern sie Informationen über die Aktivität von Benutzern und System, um Nachvollziehbarkeit und Compliance zu gewährleisten;
- überwachen sie System und Geräte kontinuierlich in Echtzeit, um Vorfälle zu erkennen und darauf zu reagieren.

### Ziele

- **Nachvollziehbarkeit**: Sicherstellung, dass jede Aktivität von Benutzern und System aufgezeichnet wird.
- **Sicherheit**: Erkennung und Verhinderung unbefugter Aktivitäten.
- **Problemerkennung**: Identifizierung von Hardwareproblemen und Anomalien sowie Einleitung von Korrekturmaßnahmen.
- **Leistungsoptimierung**: Analyse der Systemleistung und Aufspüren von Engpässen, die einer Optimierung bedürfen.
- **Prognose und Planung**: Erfassung von Daten zur Vorhersage künftiger Lasten und zur Ressourcenplanung.
- **Compliance**: Sicherstellung der Einhaltung gesetzlicher Vorgaben.
- **Vorfallanalyse**: Auswertung eingetretener Vorfälle, um künftige zu verhindern.

### Komponenten von Auditierung und Überwachung

#### Datenerfassung

- **Protokolle**: Aufzeichnungen von Benutzer- und Systemaktionen auf allen Ebenen.
- **Metriken**: Daten zur Systemleistung (zum Beispiel CPU-Auslastung, Speicherverbrauch).

#### Datenspeicherung

- **Protokollspeicherung**: Erfassung von Daten aus verschiedenen Quellen, mit verteilter Speicherung von Protokollen und Metriken nach Themenbereichen gegliedert.
- **Protokollrotation**: automatisches Löschen alter Protokolle zur Einsparung von Speicherplatz.

#### Datenanalyse

- **Suche und Filterung**: die Möglichkeit, Protokolle nach verschiedenen Kriterien zu durchsuchen und zu filtern.
- **Analytik**: Einsatz von Werkzeugen zur Datenanalyse (zum Beispiel Zabbix).

#### Benachrichtigungen

- **Benachrichtigungen**: Versand von Meldungen über verdächtige Aktivitäten und Notfälle (zum Beispiel per E-Mail oder Telegram-Chat).
- **Automatische Maßnahmen**: automatische Reaktion auf Vorfälle (zum Beispiel das Sperren eines Benutzers).

### Beispielumsetzung

#### Protokollierung

Einsatz einer Bibliothek zur Protokollierung in der Anwendung.

```ruby title="Ruby on Rails"
# Logs all changes to models
gem "audited"

# Logging settings
Audited.config do |config|
    config.audit_class = CustomAudit
end

class CustomAudit < Audited::Audit
  default_scope { order(created_at: :desc) }

  ACTION_NAME = { 'Create' => 'create',
                  'Update' => 'update',
                  'Destroy' => 'destroy' }.freeze

end

# Metering device
class Equipment < ApplicationRecord
  audited except: [:password]
	...
end
```

#### Erfassung von Fehlern in den Daten der Zähler

```ruby title="Ruby on Rails"
# data model for error collection
class ErrorLog < ApplicationRecord
    enum message: { invalid_equipment_serial_number: 0,
                  invalid_equipment_software_version: 1,
                  ...
                  }
    belongs_to :loggable, polymorphic: true
    belongs_to :loggable_equipment, class_name: 'Equipment', foreign_key: :loggable_id, optional: true
    validates :loggable_type, :loggable_id, :message, presence: true
end


# Event log
unless valid_value?(serial_number)
	message_params = {equipment: equipment, new_serial_number: serial_number}
	message2logger(loggable_obj: equipment, message: :invalid_equipment_serial_number, params: message_params)
end
```

#### Protokollspeicherung

Einsatz einer zentralen Speicherung für Protokolle.

##### Tabelle `audits`

In dieser Tabelle werden Informationen zur Datenprotokollierung gespeichert.

| Feld              | Typ                              | Beschreibung                                                           |
| ----------------- | -------------------------------- | ---------------------------------------------------------------------- |
| `id`              | `integer`                        | Eindeutige Kennung des Datensatzes (Primärschlüssel).                  |
| `auditable_id`    | `integer`                        | Verweis auf das auditierte Objekt (`equipment.id`, `stations.id` ...). |
| `auditable_type`  | `character varying`              | Auditierbares Objekt (`equipment`, `stations` ...).                    |
| `user_id`         | `integer`                        | Verweis auf die Benutzerkennung (`users.id`)                           |
| `action`          | `character varying`              | Aktion                                                                 |
| `audited_changes` | `jsonb`                          | Auditierte Änderungen                                                  |
| `version`         | `integer`                        | Version der Änderungen                                                 |
| `remote_address`  | `character varying`              | Remote-Adresse                                                         |
| `request_uuid`    | `character varying`              | Kennung des Ereignisses.                                               |
| `created_at`      | `timestamp(6) without time zone` | Datum/Uhrzeit der Änderung.                                            |

##### Tabelle `error_logs`

In dieser Tabelle werden Informationen über Fehler in den von den Zählern eingehenden Daten gespeichert.

| Feld            | Typ                              | Beschreibung                                              |
| --------------- | -------------------------------- | --------------------------------------------------------- |
| `id`            | `integer`                        | Eindeutige Kennung des Datensatzes (Primärschlüssel).     |
| `loggable_id`   | `integer`                        | Verweis auf das registrierte Objekt (`equipment.id` ...). |
| `loggable_type` | `character varying`              | Registriertes Objekt (`equipment` ...).                   |
| `message`       | `integer`                        | Verweis auf die Fehlerkennung.                            |
| `params`        | `jsonb`                          | Merkmale des Fehlers.                                     |
| `created_at`    | `timestamp(6) without time zone` | Datum/Uhrzeit der Änderung.                               |

#### Protokollanalyse

Werkzeuge zur Analyse von Protokollen:

- Einrichtung von Webformularen zur Visualisierung und Analyse von Protokollen.
- Erstellung von Dashboards zur Überwachung der Benutzeraktivität.

#### Benachrichtigungen

Angepasste Benachrichtigungen bei verdächtigen Aktivitäten:

- Konfiguration von Benachrichtigungen in Zabbix zur Überwachung von Metriken.
- Versand von Meldungen per E-Mail oder Telegram-Chat bei Alarmereignissen.

#### Vorteile von Auditierung und Überwachung

Auditierung und Überwachung sind leistungsfähige Datenschutzwerkzeuge, mit denen sich die Aktivität von Benutzern und System nachverfolgen, verdächtiges Verhalten erkennen und die Einhaltung der Sicherheitsanforderungen sicherstellen lässt. Sie ermöglichen Folgendes:

- Nachvollziehbarkeit und Sicherheit der Daten zu gewährleisten;
- Vorfälle zu erkennen und zu verhindern;
- gesetzliche Vorgaben zu erfüllen.
