---
title: Mechanizmy zabezpečenia údajov
description: Jednotná autentifikácia a autorizácia, šifrovanie a hašovanie údajov spolu so subsystémami auditu a monitorovania, ktoré chránia údaje naprieč platformou.
section: Concepts
weight: 2
related:
  - security/security-mechanisms
  - security
  - rest-api
  - eu-compliance
---

## Jednotný systém autentifikácie a autorizácie

Jednotný systém autentifikácie a autorizácie je kľúčovou súčasťou ochrany údajov, ktorá zabezpečuje bezpečný prístup k systémovým zdrojom. Umožňuje spravovať používateľov, ich oprávnenia a prístup k údajom na úrovni celého systému.

Pripomenutie:

- **Autentifikácia** je proces overenia totožnosti používateľa (napríklad pomocou používateľského mena a hesla).
- **Autorizácia** je proces overenia oprávnení používateľa na vykonanie určitých činností (napríklad prístup k údajom alebo k systémovým funkciám).

### Súčasti systému

#### Autentifikácia

- **Prihlasovacie meno a heslo**: tradičný spôsob autentifikácie. Pri prihlasovaní sa používateľ musí najprv identifikovať používateľským menom a heslom.
- **Viacfaktorová autentifikácia** (MFA): použitie viacerých faktorov (napríklad dynamicky aktualizovaného softvérového tokenu pre webové API).

Autentifikácia založená na tokenoch zjednodušuje proces pre zavedených používateľov. Na začiatok používateľ odošle serveru požiadavku s používateľským menom a heslom. Server ich overí oproti hodnotám zaregistrovaným v jeho databáze totožností. Ak je totožnosť potvrdená, server vráti autentifikačný token (ktorý sa zároveň uloží do databázy).

Keď ten istý používateľ neskôr požiada o prístup k chráneným zdrojom, tieto požiadavky možno autorizovať pomocou autentifikačného tokenu namiesto používateľského mena a hesla. Server token porovná s tým, ktorý je zaregistrovaný v databáze, a udelí prístup.

#### Autorizácia

- **Roly a oprávnenia**: používateľom sa priraďujú roly (napríklad správca prístupu, používateľ), ktoré definujú ich oprávnenia.
- **ACL** (Access Control Lists): zoznamy, ktoré definujú, kto má prístup ku ktorým zdrojom.
- **RBAC** (Role-Based Access Control): riadenie prístupu na základe rolí.
- **ABAC** (Attribute-Based Access Control): riadenie prístupu na základe atribútov (napríklad podľa dennej doby alebo polohy).

#### Ukladanie používateľských údajov

- **Databáza používateľov**: ukladá informácie o používateľoch, ich rolách a oprávneniach v jednej databáze.

#### Zabezpečenie

- **Šifrovanie**: chráni údaje počas prenosu aj uloženia.
- **Prístupové tokeny**: dynamicky aktualizované softvérové tokeny používané na správu relácií.
- **Auditovanie**: zaznamenávanie všetkých činností používateľov na neskoršiu analýzu.

### Implementácia systému

Platforma používa autentifikačný tok založený na tokenoch. Používateľ sa prihlási prihlasovacím menom a heslom, systém ich overí a vráti prístupový token, ktorý sa následne odosiela s každou ďalšou požiadavkou na autorizáciu prístupu k chráneným zdrojom. Ako prihlasovacie meno sa používa e-mailová adresa používateľa.

Príklad požiadavky vo formáte `Curl`:

```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
```

V odpovedi dostaneme nasledujúcu správu:

```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"}}
```

V tejto odpovedi nás zaujíma parameter `access_token`. Hodnota tejto hlavičky sa používa ako heslo pre každú požiadavku a mení sa s každou požiadavkou.

Tu je príklad požiadavky, ktorá používa token z predchádzajúcej odpovede:

```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
```

V odpovedi dostaneme nasledujúcu správu:

```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
}
```

Na ukončenie relácie môžete použiť procedúru `SignOut`, prípadne uložiť potrebné hlavičky z poslednej požiadavky a opätovne ich použiť nabudúce, ak token ešte nevypršal. Upozorňujeme, že bez ukončenia relácie zostáva posledný token istý čas platný, v závislosti od systémových nastavení servera.

### Výhody systému

Jednotný systém autentifikácie a autorizácie je výkonným nástrojom na ochranu údajov a riadenie prístupu. Poskytuje tieto výhody:

- **Centralizovaná správa**: zjednodušuje správu používateľov a ich oprávnení.
- **Zabezpečenie**: chráni údaje pred neoprávneným prístupom.
- **Konzistentnosť**: všetky aplikácie a systémy používajú rovnaký mechanizmus autentifikácie a autorizácie.
- **Škálovateľnosť**: uľahčuje pridávanie nových aplikácií a používateľov.

## Šifrovanie údajov

Na ochranu kritických informácií systém používa šifrovanie (prevod informácií do podoby, ktorú nemožno prečítať bez príslušného kľúča) a hašovanie (prevod údajov na jedinečný reťazec pevnej dĺžky — haš). Ide o jeden z kľúčových mechanizmov ochrany údajov, ktorý zabezpečuje dôvernosť, integritu a bezpečnosť informácií tak pri uložení, ako aj pri prenose.

Systém používa rôzne algoritmy šifrovania a hašovania údajov.

### Použitie šifrovania v systéme

#### Šifrovanie pri uložení

- **Databázy**: šifrovanie jednotlivých polí databázy.
- **Súbory**: šifrovanie súborov pred ich uložením na disk.

#### Šifrovanie údajov pri prenose

- **HTTPS**: použitie SSL/TLS na šifrovanie údajov počas sieťového prenosu.
- **VPN**: vytvorenie zabezpečeného tunela na prenos údajov.

#### Šifrovanie hesiel

Ukladanie hašov hesiel namiesto hesiel.

### Príklady šifrovania a dešifrovania údajov

Pozrime sa na príklady šifrovania a dešifrovania konfiguračných súborov systému.

#### Šifrovanie údajov

```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)
```

#### Dešifrovanie údajov

```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
)
```

### Výhody šifrovania údajov

- **Dôvernosť**: ochrana údajov pred neoprávneným prístupom.
- **Integrita**: zaistenie, že údaje neboli zmenené.
- **Pravosť**: potvrdenie zdroja údajov.
- **Súlad s predpismi**: splnenie regulačných požiadaviek.

## Audit a monitorovanie

Niekoľko subsystémov monitoruje činnosť používateľov a systému, zisťuje podozrivé správanie a zabezpečuje súlad s bezpečnostnými požiadavkami. Spoločne:

- zhromažďujú, analyzujú a uchovávajú informácie o činnosti používateľov a systému na zaistenie zodpovednosti a súladu;
- nepretržite monitorujú systém a zariadenia v reálnom čase, aby zistili incidenty a reagovali na ne.

### Ciele

- **Zodpovednosť**: zaistenie, že všetka činnosť používateľov a systému je zaznamenaná.
- **Zabezpečenie**: zisťovanie a predchádzanie neoprávnenej činnosti.
- **Zisťovanie problémov**: identifikácia hardvérových problémov a anomálií a prijatie nápravných opatrení.
- **Optimalizácia výkonu**: analýza výkonu systému a hľadanie úzkych miest, ktoré si vyžadujú optimalizáciu.
- **Predikcia a plánovanie**: zhromažďovanie údajov na prognózovanie budúceho zaťaženia a plánovanie zdrojov.
- **Súlad**: zabezpečenie súladu s regulačnými požiadavkami.
- **Analýza incidentov**: analýza incidentov, ktoré sa vyskytli, s cieľom predísť budúcim.

### Súčasti auditu a monitorovania

#### Zber údajov

- **Záznamy (logy)**: záznamy o činnosti používateľov a systému na všetkých úrovniach.
- **Metriky**: údaje o výkone systému (napríklad využitie procesora, využitie pamäte).

#### Ukladanie údajov

- **Úložisko logov**: zhromažďovanie údajov z rôznych zdrojov s distribuovaným uložením logov a metrík usporiadaným podľa tematických oblastí.
- **Rotácia logov**: automatické odstraňovanie starých logov s cieľom šetriť miesto.

#### Analýza údajov

- **Vyhľadávanie a filtrovanie**: možnosť vyhľadávať a filtrovať logy podľa rôznych kritérií.
- **Analytika**: použitie nástrojov na analýzu údajov (napríklad Zabbix).

#### Upozornenia

- **Upozornenia**: odosielanie notifikácií o podozrivej činnosti a mimoriadnych udalostiach (napríklad e-mailom alebo do chatu Telegram).
- **Automatické akcie**: automatické reagovanie na incidenty (napríklad zablokovanie používateľa).

### Príklad implementácie

#### Zaznamenávanie do logu

Použitie knižnice na zaznamenávanie do logu v aplikácii.

```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
```

#### Zber chýb v údajoch z meradiel

```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
```

#### Ukladanie logov

Použitie centralizovaného úložiska pre logy.

##### Tabuľka `audits`

Táto tabuľka uchováva informácie o zaznamenávaní údajov.

| Pole              | Typ                              | Popis                                                           |
| ----------------- | -------------------------------- | --------------------------------------------------------------- |
| `id`              | `integer`                        | Jedinečný identifikátor záznamu (primárny kľúč).                |
| `auditable_id`    | `integer`                        | Odkaz na auditovaný objekt (`equipment.id`, `stations.id` ...). |
| `auditable_type`  | `character varying`              | Auditovateľný objekt (`equipment`, `stations` ...).             |
| `user_id`         | `integer`                        | Odkaz na identifikátor používateľa (`users.id`)                 |
| `action`          | `character varying`              | Akcia                                                           |
| `audited_changes` | `jsonb`                          | Auditované zmeny                                                |
| `version`         | `integer`                        | Verzia zmien                                                    |
| `remote_address`  | `character varying`              | Vzdialená adresa                                                |
| `request_uuid`    | `character varying`              | Identifikátor udalosti.                                         |
| `created_at`      | `timestamp(6) without time zone` | Dátum/čas zmeny.                                                |

##### Tabuľka `error_logs`

Táto tabuľka uchováva informácie o chybách v údajoch prichádzajúcich z meradiel.

| Pole            | Typ                              | Popis                                                |
| --------------- | -------------------------------- | ---------------------------------------------------- |
| `id`            | `integer`                        | Jedinečný identifikátor záznamu (primárny kľúč).     |
| `loggable_id`   | `integer`                        | Odkaz na zaregistrovaný objekt (`equipment.id` ...). |
| `loggable_type` | `character varying`              | Zaregistrovaný objekt (`equipment` ...).             |
| `message`       | `integer`                        | Odkaz na identifikátor chyby.                        |
| `params`        | `jsonb`                          | Charakteristiky chyby.                               |
| `created_at`    | `timestamp(6) without time zone` | Dátum/čas zmeny.                                     |

#### Analýza logov

Nástroje používané na analýzu logov:

- Nastavenie webových formulárov na vizualizáciu a analýzu logov.
- Vytváranie dashboardov na monitorovanie činnosti používateľov.

#### Upozornenia

Prispôsobené upozornenia na podozrivú činnosť:

- Konfigurácia upozornení v nástroji Zabbix na monitorovanie metrík.
- Odosielanie notifikácií e-mailom alebo do chatu Telegram pri poplachových udalostiach.

#### Výhody auditu a monitorovania

Audit a monitorovanie sú výkonné nástroje na ochranu údajov, ktoré umožňujú sledovať činnosť používateľov a systému, identifikovať podozrivé správanie a zabezpečiť súlad s bezpečnostnými požiadavkami. Umožňujú vám:

- zaistiť zodpovednosť a bezpečnosť údajov;
- identifikovať incidenty a predchádzať im;
- splniť regulačné požiadavky.
