---
title: Mehanizmi sigurnosti podataka
description: Jedinstvena autentifikacija i autorizacija, šifriranje podataka i izračun sažetka (hashing), kao i komponente za reviziju i nadzor koje štite podatke na cijeloj platformi.
section: Concepts
weight: 2
related:
  - security/security-mechanisms
  - security
  - rest-api
  - eu-compliance
---

## Jedinstveni sustav autentifikacije i autorizacije

Jedinstveni sustav autentifikacije i autorizacije ključna je komponenta zaštite podataka koja pruža siguran pristup resursima sustava. Omogućuje vam upravljanje korisnicima, njihovim ovlastima i pristupom podacima na razini cijelog sustava.

Podsjetnik:

- **Autentifikacija** je postupak provjere identiteta korisnika (na primjer, pomoću korisničkog imena i lozinke).
- **Autorizacija** je postupak provjere ovlasti korisnika za izvršavanje određenih radnji (na primjer, za pristup podacima ili funkcijama sustava).

### Komponente sustava

#### Autentifikacija

- **Korisničko ime i lozinka**: tradicionalni način autentifikacije. Korisnik se pri prijavi najprije mora identificirati korisničkim imenom i lozinkom.
- **Višefaktorska autentifikacija** (MFA): korištenje više faktora (na primjer, dinamički ažuriranog softverskog tokena za web-API).

Autentifikacija temeljena na tokenima pojednostavnjuje postupak za postojeće korisnike. Na početku korisnik šalje poslužitelju zahtjev s korisničkim imenom i lozinkom. Poslužitelj ih provjerava prema vrijednostima registriranim u svojoj bazi identiteta. Ako je identitet potvrđen, poslužitelj vraća token za autentifikaciju (koji se također čuva u bazi podataka).

Kada isti korisnik kasnije zatraži pristup zaštićenim resursima, takvi se zahtjevi mogu autorizirati tokenom za autentifikaciju umjesto korisničkim imenom i lozinkom. Poslužitelj uspoređuje token s onim koji je registriran u bazi podataka i odobrava pristup.

#### Autorizacija

- **Uloge i ovlasti**: korisnicima se dodjeljuju uloge (na primjer, administrator pristupa, korisnik) koje određuju njihove ovlasti.
- **ACL** (Access Control Lists): popisi za kontrolu pristupa koji određuju tko ima pristup kojim resursima.
- **RBAC** (Role-Based Access Control): kontrola pristupa temeljena na ulogama.
- **ABAC** (Attribute-Based Access Control): kontrola pristupa temeljena na atributima (na primjer, prema dobu dana ili lokaciji).

#### Pohrana podataka o korisnicima

- **Baza korisnika**: pohranjuje podatke o korisnicima, njihovim ulogama i ovlastima u jedinstvenoj bazi podataka.

#### Sigurnost

- **Šifriranje**: štiti podatke tijekom prijenosa i pohrane.
- **Pristupni tokeni**: softverski tokeni koji se dinamički ažuriraju i koriste za upravljanje sesijama.
- **Revizija**: bilježenje svih radnji korisnika radi kasnije analize.

### Implementacija sustava

Platforma koristi postupak autentifikacije temeljen na tokenima. Korisnik se prijavljuje korisničkim imenom i lozinkom, sustav ih provjerava i vraća pristupni token, a taj se token zatim šalje uz svaki sljedeći zahtjev radi autorizacije pristupa zaštićenim resursima. Kao korisničko ime koristi se adresa e-pošte korisnika.

Primjer zahtjeva u formatu `Curl`:

```bash title="Request example"
curl -i --header "Content-Type: application/json" \
--request POST \
--data '{"email":"api-user@example.com","password":"Str0ngPas$"}'\
https://server123/api/v1/auth/sign_in
```

Kao odgovor stiže sljedeća poruka:

```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: EXAMPLE-ACCESS-TOKEN-1
token-type: Bearer
client: EXAMPLE-CLIENT-ID
expiry: 1615227012
uid: api-user@example.com
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-user@example.com","name":"API user"}}
```

U ovom odgovoru zanima nas parametar `access_token`. Vrijednost ovog zaglavlja koristi se kao lozinka za svaki zahtjev i mijenja se sa svakim zahtjevom.

Slijedi primjer zahtjeva koji koristi token iz prethodnog odgovora:

```bash title="Request example with token"
curl -i --header "access-token: EXAMPLE-ACCESS-TOKEN-1" \
--header "token-type: Bearer" \
--header "client: EXAMPLE-CLIENT-ID" \
--header "uid: api-user@example.com" \
--request GET \
--header "Content-Type: application/json" \
--data '{"page":"2"}' \
https://server123/api/v1/stations
```

Kao odgovor stiže sljedeća poruka:

```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: EXAMPLE-ACCESS-TOKEN-2
token-type: Bearer
client: EXAMPLE-CLIENT-ID
expiry: 1615311367
uid: api-user@example.com
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":"860000000000001","equipment_brand_name":"Corrector
BK","phone":"","equipment_id":1},...
],
"total_pages":7,
"current_page":2
}
```

Sesiju možete završiti postupkom `SignOut` ili spremiti potrebna zaglavlja iz posljednjeg zahtjeva i ponovno ih upotrijebiti sljedeći put, ako token još nije istekao. Imajte na umu da posljednji token, ako sesija nije završena, ostaje valjan još neko vrijeme, ovisno o postavkama sustava na poslužitelju.

### Prednosti sustava

Jedinstveni sustav autentifikacije i autorizacije moćan je alat za zaštitu podataka i kontrolu pristupa. Donosi sljedeće prednosti:

- **Centralizirano upravljanje**: pojednostavnjuje upravljanje korisnicima i njihovim ovlastima.
- **Sigurnost**: štiti podatke od neovlaštenog pristupa.
- **Dosljednost**: sve aplikacije i sustavi koriste isti mehanizam autentifikacije i autorizacije.
- **Skalabilnost**: olakšava dodavanje novih aplikacija i korisnika.

## Šifriranje podataka

Kako bi zaštitio kritične informacije, sustav koristi šifriranje (pretvaranje informacija u oblik koji se ne može pročitati bez odgovarajućeg ključa) i izračun sažetka (hashing), tj. pretvaranje podataka u jedinstven niz znakova fiksne duljine – sažetak (hash). To je jedan od ključnih mehanizama zaštite podataka: osigurava povjerljivost, cjelovitost i sigurnost informacija, kako pohranjenih, tako i onih u prijenosu.

Sustav koristi različite algoritme za šifriranje podataka i izračun sažetka.

### Primjena šifriranja u sustavu

#### Šifriranje pohranjenih podataka

- **Baze podataka**: šifriranje pojedinačnih polja baze podataka.
- **Datoteke**: šifriranje datoteka prije spremanja na disk.

#### Šifriranje podataka u prijenosu

- **HTTPS**: korištenje protokola SSL/TLS za šifriranje podataka pri mrežnom prijenosu.
- **VPN**: uspostavljanje sigurnog tunela za prijenos podataka.

#### Šifriranje lozinki

Pohrana sažetaka lozinki umjesto samih lozinki.

### Primjeri šifriranja i dešifriranja podataka

Pogledajmo primjere šifriranja i dešifriranja konfiguracijskih datoteka sustava.

#### Šifriranje podataka

```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šifriranje podataka

```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
)
```

### Prednosti šifriranja podataka

- **Povjerljivost**: zaštita podataka od neovlaštenog pristupa.
- **Cjelovitost**: jamstvo da podaci nisu izmijenjeni.
- **Autentičnost**: potvrda izvora podataka.
- **Usklađenost s propisima**: ispunjavanje regulatornih zahtjeva.

## Revizija i nadzor

Nekoliko komponenata nadzire aktivnost korisnika i sustava, otkriva sumnjivo ponašanje i osigurava usklađenost sa sigurnosnim zahtjevima. Zajedno ove komponente:

- prikupljaju, analiziraju i pohranjuju informacije o aktivnosti korisnika i sustava kako bi osigurale odgovornost i usklađenost;
- neprekidno nadziru sustav i opremu u stvarnom vremenu kako bi otkrile incidente i reagirale na njih.

### Ciljevi

- **Odgovornost**: jamstvo da se bilježi cjelokupna aktivnost korisnika i sustava.
- **Sigurnost**: otkrivanje i sprječavanje neovlaštenih aktivnosti.
- **Otkrivanje problema**: prepoznavanje hardverskih problema i anomalija te poduzimanje korektivnih mjera.
- **Optimizacija performansi**: analiza performansi sustava i pronalaženje uskih grla koja zahtijevaju optimizaciju.
- **Predviđanje i planiranje**: prikupljanje podataka za prognozu budućeg opterećenja i planiranje resursa.
- **Usklađenost**: osiguravanje usklađenosti s regulatornim zahtjevima.
- **Analiza incidenata**: analiza incidenata do kojih je došlo, radi sprječavanja budućih.

### Komponente revizije i nadzora

#### Prikupljanje podataka

- **Zapisi (logovi)**: evidencija radnji korisnika i sustava na svim razinama.
- **Metrike**: podaci o performansama sustava (na primjer, opterećenje procesora, zauzeće memorije).

#### Pohrana podataka

- **Pohrana zapisa**: prikupljanje podataka iz različitih izvora i distribuirana pohrana zapisa i metrika, organizirana po tematskim područjima.
- **Rotacija zapisa**: automatsko brisanje starih zapisa radi uštede prostora.

#### Analiza podataka

- **Pretraživanje i filtriranje**: mogućnost pretraživanja i filtriranja zapisa prema različitim kriterijima.
- **Analitika**: korištenje alata za analizu podataka (na primjer, Zabbix).

#### Upozorenja

- **Upozorenja**: slanje obavijesti o sumnjivim aktivnostima i havarijskim situacijama (na primjer, e-poštom ili u razgovor na Telegramu).
- **Automatske radnje**: automatsko reagiranje na incidente (na primjer, blokiranje korisnika).

### Primjer implementacije

#### Bilježenje

Korištenje biblioteke za bilježenje u aplikaciji.

```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
```

#### Prikupljanje pogrešaka u podacima s mjerila

```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
```

#### Pohrana zapisa

Korištenje centralizirane pohrane zapisa.

##### Tablica `audits`

U ovoj tablici pohranjuju se informacije o bilježenju podataka.

| Polje             | Tip                              | Opis                                                              |
| ----------------- | -------------------------------- | ----------------------------------------------------------------- |
| `id`              | `integer`                        | Jedinstveni identifikator zapisa (primarni ključ).                |
| `auditable_id`    | `integer`                        | Referenca na objekt revizije (`equipment.id`, `stations.id` ...). |
| `auditable_type`  | `character varying`              | Objekt revizije (`equipment`, `stations` ...).                    |
| `user_id`         | `integer`                        | Referenca na identifikator korisnika (`users.id`)                 |
| `action`          | `character varying`              | Radnja                                                            |
| `audited_changes` | `jsonb`                          | Izmjene obuhvaćene revizijom                                      |
| `version`         | `integer`                        | Verzija izmjena                                                   |
| `remote_address`  | `character varying`              | Udaljena adresa                                                   |
| `request_uuid`    | `character varying`              | Identifikator događaja.                                           |
| `created_at`      | `timestamp(6) without time zone` | Datum i vrijeme izmjene.                                          |

##### Tablica `error_logs`

U ovoj tablici pohranjuju se informacije o pogreškama u podacima koji stižu s mjerila.

| Polje           | Tip                              | Opis                                                   |
| --------------- | -------------------------------- | ------------------------------------------------------ |
| `id`            | `integer`                        | Jedinstveni identifikator zapisa (primarni ključ).     |
| `loggable_id`   | `integer`                        | Referenca na registrirani objekt (`equipment.id` ...). |
| `loggable_type` | `character varying`              | Registrirani objekt (`equipment` ...).                 |
| `message`       | `integer`                        | Referenca na identifikator pogreške.                   |
| `params`        | `jsonb`                          | Karakteristike pogreške.                               |
| `created_at`    | `timestamp(6) without time zone` | Datum i vrijeme izmjene.                               |

#### Analiza zapisa

Alati koji se koriste za analizu zapisa:

- Konfiguriranje web-obrazaca za vizualizaciju i analizu zapisa.
- Izrada nadzornih ploča za praćenje aktivnosti korisnika.

#### Upozorenja

Prilagođena upozorenja o sumnjivim aktivnostima:

- Konfiguriranje upozorenja u sustavu Zabbix za praćenje metrika.
- Slanje obavijesti e-poštom ili u razgovor na Telegramu pri alarmnim događajima.

#### Prednosti revizije i nadzora

Revizija i nadzor moćni su alati za zaštitu podataka: pomoću njih pratite aktivnost korisnika i sustava, otkrivate sumnjivo ponašanje i osiguravate usklađenost sa sigurnosnim zahtjevima. Omogućuju vam da:

- osigurate odgovornost za podatke i njihovu sigurnost;
- prepoznate i spriječite incidente;
- ispunite regulatorne zahtjeve.
