---
title: Mehanizmi bezbednosti podataka
description: Jedinstvena autentifikacija i autorizacija, šifrovanje i heširanje podataka, kao i komponente za reviziju i praćenje koje štite podatke u celoj platformi.
section: Concepts
weight: 2
related:
  - security/security-mechanisms
  - security
  - rest-api
  - eu-compliance
---

## Jedinstveni sistem autentifikacije i autorizacije

Jedinstveni sistem autentifikacije i autorizacije ključna je komponenta zaštite podataka koja obezbeđuje bezbedan pristup resursima sistema. Omogućava vam da upravljate korisnicima, njihovim dozvolama i pristupom podacima na nivou celog sistema.

Podsetnik:

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

### Komponente sistema

#### Autentifikacija

- **Korisničko ime i lozinka**: tradicionalni način autentifikacije. Pri prijavi korisnik najpre mora da se identifikuje korisničkim imenom i lozinkom.
- **Višefaktorska autentifikacija** (MFA): korišćenje više faktora (na primer, dinamički ažuriranog softverskog tokena za veb API).

Autentifikacija zasnovana na tokenima pojednostavljuje postupak za postojeće korisnike. Na početku korisnik šalje serveru zahtev sa korisničkim imenom i lozinkom. Server ih proverava prema vrednostima registrovanim u svojoj bazi identiteta. Ako je identitet potvrđen, server vraća token za autentifikaciju (koji se takođe čuva u bazi podataka).

Kada isti korisnik kasnije zatraži pristup zaštićenim resursima, takvi zahtevi mogu da se autorizuju tokenom za autentifikaciju umesto korisničkim imenom i lozinkom. Server upoređuje token sa onim koji je registrovan u bazi podataka i odobrava pristup.

#### Autorizacija

- **Uloge i dozvole**: korisnicima se dodeljuju uloge (na primer, administrator pristupa, korisnik) koje određuju njihove dozvole.
- **ACL** (Access Control Lists): liste kontrole pristupa koje određuju ko ima pristup kojim resursima.
- **RBAC** (Role-Based Access Control): kontrola pristupa zasnovana na ulogama.
- **ABAC** (Attribute-Based Access Control): kontrola pristupa zasnovana na atributima (na primer, prema dobu dana ili lokaciji).

#### Skladištenje podataka o korisnicima

- **Baza korisnika**: čuva podatke o korisnicima, njihovim ulogama i dozvolama u jedinstvenoj bazi podataka.

#### Bezbednost

- **Šifrovanje**: štiti podatke tokom prenosa i skladištenja.
- **Pristupni tokeni**: softverski tokeni koji se dinamički ažuriraju i koriste za upravljanje sesijama.
- **Revizija**: evidentiranje svih radnji korisnika radi kasnije analize.

### Implementacija sistema

Platforma koristi postupak autentifikacije zasnovan na tokenima. Korisnik se prijavljuje korisničkim imenom i lozinkom, sistem ih proverava i vraća pristupni token, a taj token se zatim šalje uz svaki sledeći zahtev radi autorizacije pristupa zaštićenim resursima. Kao korisničko ime koristi se imejl adresa korisnika.

Primer zahteva 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 sledeć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`. Vrednost ovog zaglavlja koristi se kao lozinka za svaki zahtev i menja se sa svakim zahtevom.

Sledi primer zahteva 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 sledeć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 da završite procedurom `SignOut` ili da sačuvate potrebna zaglavlja iz poslednjeg zahteva i da ih ponovo upotrebite sledeći put, ako token još nije istekao. Imajte u vidu da poslednji token, ako sesija nije završena, ostaje važeći još neko vreme, u zavisnosti od sistemskih podešavanja servera.

### Prednosti sistema

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

- **Centralizovano upravljanje**: pojednostavljuje upravljanje korisnicima i njihovim dozvolama.
- **Bezbednost**: štiti podatke od neovlašćenog pristupa.
- **Doslednost**: sve aplikacije i sistemi koriste isti mehanizam autentifikacije i autorizacije.
- **Skalabilnost**: olakšava dodavanje novih aplikacija i korisnika.

## Šifrovanje podataka

Da bi zaštitio kritične informacije, sistem koristi šifrovanje (pretvaranje informacija u oblik koji ne može da se pročita bez odgovarajućeg ključa) i heširanje (pretvaranje podataka u jedinstven niz znakova fiksne dužine – heš). To je jedan od ključnih mehanizama zaštite podataka: obezbeđuje poverljivost, integritet i bezbednost informacija, kako uskladištenih, tako i onih u prenosu.

Sistem koristi različite algoritme šifrovanja i heširanja podataka.

### Primena šifrovanja u sistemu

#### Šifrovanje uskladištenih podataka

- **Baze podataka**: šifrovanje pojedinačnih polja baze podataka.
- **Fajlovi**: šifrovanje fajlova pre čuvanja na disku.

#### Šifrovanje podataka u prenosu

- **HTTPS**: korišćenje protokola SSL/TLS za šifrovanje podataka pri prenosu kroz mrežu.
- **VPN**: uspostavljanje bezbednog tunela za prenos podataka.

#### Šifrovanje lozinki

Čuvanje heševa lozinki umesto samih lozinki.

### Primeri šifrovanja i dešifrovanja podataka

Pogledajmo primere šifrovanja i dešifrovanja konfiguracionih fajlova sistema.

#### Šifrovanje 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šifrovanje 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 šifrovanja podataka

- **Poverljivost**: zaštita podataka od neovlašćenog pristupa.
- **Integritet**: garancija da podaci nisu izmenjeni.
- **Autentičnost**: potvrda izvora podataka.
- **Usaglašenost sa propisima**: ispunjavanje regulatornih zahteva.

## Revizija i praćenje

Nekoliko komponenti prati aktivnost korisnika i sistema, otkriva sumnjivo ponašanje i obezbeđuje usaglašenost sa bezbednosnim zahtevima. Zajedno ove komponente:

- prikupljaju, analiziraju i čuvaju informacije o aktivnosti korisnika i sistema kako bi obezbedile odgovornost i usaglašenost;
- neprekidno prate sistem i opremu u realnom vremenu kako bi otkrile incidente i reagovale na njih.

### Ciljevi

- **Odgovornost**: garancija da se evidentira celokupna aktivnost korisnika i sistema.
- **Bezbednost**: otkrivanje i sprečavanje neovlašćenih aktivnosti.
- **Otkrivanje problema**: prepoznavanje hardverskih problema i anomalija, kao i preduzimanje korektivnih mera.
- **Optimizacija performansi**: analiza performansi sistema i pronalaženje uskih grla koja zahtevaju optimizaciju.
- **Predviđanje i planiranje**: prikupljanje podataka za prognozu budućeg opterećenja i planiranje resursa.
- **Usaglašenost**: obezbeđivanje usaglašenosti sa regulatornim zahtevima.
- **Analiza incidenata**: analiza incidenata do kojih je došlo, radi sprečavanja budućih.

### Komponente revizije i praćenja

#### Prikupljanje podataka

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

#### Skladištenje podataka

- **Skladištenje zapisa**: prikupljanje podataka iz različitih izvora i distribuirano skladištenje zapisa i metrika, organizovano po tematskim oblastima.
- **Rotacija zapisa**: automatsko brisanje starih zapisa radi uštede prostora.

#### Analiza podataka

- **Pretraga i filtriranje**: mogućnost pretrage i filtriranja zapisa po različitim kriterijumima.
- **Analitika**: korišćenje alata za analizu podataka (na primer, Zabbix).

#### Upozorenja

- **Upozorenja**: slanje obaveštenja o sumnjivim aktivnostima i havarijskim situacijama (na primer, imejlom ili u Telegram čet).
- **Automatske radnje**: automatsko reagovanje na incidente (na primer, blokiranje korisnika).

### Primer implementacije

#### Evidentiranje

Korišćenje biblioteke za evidentiranje 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 grešaka u podacima sa merila

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

#### Skladištenje zapisa

Korišćenje centralizovanog skladišta za zapise.

##### Tabela `audits`

U ovoj tabeli čuvaju se informacije o evidentiranju podataka.

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

##### Tabela `error_logs`

U ovoj tabeli čuvaju se informacije o greškama u podacima koji stižu sa merila.

| Polje           | Tip                              | Opis                                                    |
| --------------- | -------------------------------- | ------------------------------------------------------- |
| `id`            | `integer`                        | Jedinstveni identifikator zapisa (primarni ključ).      |
| `loggable_id`   | `integer`                        | Referenca na registrovani objekat (`equipment.id` ...). |
| `loggable_type` | `character varying`              | Registrovani objekat (`equipment` ...).                 |
| `message`       | `integer`                        | Referenca na identifikator greške.                      |
| `params`        | `jsonb`                          | Karakteristike greške.                                  |
| `created_at`    | `timestamp(6) without time zone` | Datum i vreme izmene.                                   |

#### Analiza zapisa

Alati koji se koriste za analizu zapisa:

- Podešavanje veb-obrazaca za vizuelizaciju i analizu zapisa.
- Izrada kontrolnih tabli za praćenje aktivnosti korisnika.

#### Upozorenja

Prilagođena upozorenja o sumnjivim aktivnostima:

- Podešavanje upozorenja u sistemu Zabbix za praćenje metrika.
- Slanje obaveštenja imejlom ili u Telegram čet pri alarmnim događajima.

#### Prednosti revizije i praćenja

Revizija i praćenje su moćni alati za zaštitu podataka: pomoću njih pratite aktivnost korisnika i sistema, otkrivate sumnjivo ponašanje i obezbeđujete usaglašenost sa bezbednosnim zahtevima. Omogućavaju vam da:

- obezbedite odgovornost za podatke i njihovu bezbednost;
- prepoznate i sprečite incidente;
- ispunite regulatorne zahteve.
