Blog o spletnem programiranju in elektroniki
💬 👤
back Nazaj na blog
WEB (HTML, CSS, PHP)

Kaj je enkripcija in zakaj je potrebna

Enkripcija je proces, ki podatke pretvori v neberljivo obliko, dostopno samo tistim, ki imajo pravilen ključ za dešifriranje. V svetu, kjer so podatki vrednejši od zlata, enkripcija predstavlja temelj digitalne zasebnosti in varnosti. Vsakič, ko opravite spletno bančništvo, pošljete e-pošto ali shranite občutljive datoteke v oblak - enkripcija deluje v ozadju in vas ščiti.

Kaj je enkripcija?

Enkripcija (šifriranje) je metoda zaščite informacij, pri kateri se izvirna podatki (imenovani "plain text") pretvorijo v šifrirano obliko (imenovano "ciphertext"), ki je brez ključa popolnoma nerazumljiva. Proces obratne pretvorbe iz ciphertext nazaj v plain text imenujemo dešifriranje (dekripcija).

Ključni pojmi:

  1. Plain text: Izvirni, nešifrirani podatki
  2. Ciphertext: Šifrirani, neberljivi podatki
  3. Ključ (key): Skrivna vrednost, ki omogoča enkripcijo ali dekripcijo
  4. Algoritem: Matematična metoda enkripcije

Vrste enkripcije

Obstajata dve glavni vrsti enkripcije, ki se uporabljata danes:

Vrsta Osnova Uporaba Primeri
Simetrična En ključ za enkripcijo in dekripcijo Hiter, za velike količine podatkov AES, ChaCha20
Asimetrična Dva ključa: javni in zasebni Zamenjava ključev, digitalni podpisi RSA, ECC

Simetrična enkripcija

Pri simetrični enkripciji se uporablja isti ključ tako za zaklepanje kot odpiranje podatkov. To je podobno fizičnemu ključu za vrata - isti ključ zaklene in odklene.

Prednosti:

  • Hitra in učinkovita za velike datoteke
  • Manjši ključi (manjša poroba virov)

Slabosti:

  • Ključ mora biti skrivnost in varen prenos je težaven
  • Težava pri deljenju podatkov z več ljudmi

Najpogostejši algoritmi:

  • AES (Advanced Encryption Standard): Zlati standard, uporablja ga vojska in vlade
  • ChaCha20: Moderna alternativa AES, hitrejša na mobilnih napravah
// Primer uporabe AES-256 v PHP:

$plaintext = "Tajni podatki";
$key = random_bytes(32); // 256-bit ključ
$iv = random_bytes(16);  # Vektor inicializacije

$encrypted = openssl_encrypt(
    $plaintext,
    'AES-256-CBC',
    $key,
    OPENSSL_RAW_DATA,
    $iv
);

// Shranite $encrypted in $iv varno
// Za dešifriranje potrebujete $key in $iv

Asimetrična enkripcija

Asimetrična enkripcija uporablja par ključev: javni ključ (public key) in zasebni ključ (private key). Kar en ključ zaklene, lahko odlocka samo drugi ključ iz para.

Kako deluje:

  1. Ustvarite par ključev: javni in zasebni
  2. Javni ključ daste vsem - ljudje vanj zaklenejo sporočila
  3. Zasebni ključ hranite zase - samo z njim lahko odprete sporočila

Uporaba:

  • HTTPS certifikati za varne spletne strani
  • Digitalni podpisi dokumentov
  • Pošiljanje šifriranih e-poštnih sporočil (PGP/GPG)
  • Kriptovalute (Bitcoin, Ethereum)
// Primer uporabe RSA v PHP:

// Generiranje para ključev
$config = [
    "digest_alg" => "sha256",
    "private_key_bits" => 2048,
    "private_key_type" => OPENSSL_KEYTYPE_RSA,
];

$res = openssl_pkey_new($config);
openssl_pkey_export($res, $privateKey);
$publicKey = openssl_pkey_get_details($res)["key"];

// Šifriranje z javnim ključem
$plaintext = "Zaupno sporočilo";
openssl_public_encrypt($plaintext, $encrypted, $publicKey);

// Dešifriranje z zasebnim ključem
openssl_private_decrypt($encrypted, $decrypted, $privateKey);

End-to-End Enkripcija (E2EE)

End-to-End enkripcija je način enkripcije, kjer so podatki šifrirani na pošiljalovem napravi in dešifrirani šele na prejemnikovi napravi. Strežnik, ki prenosi podatke, nima dostopa do ključev in ne more prebrati vsebine.

Primeri:

  • WhatsApp, Signal (sporazumi)
  • Proton Mail, Tutanota (e-pošta)
  • Proton Drive (shranjevanje)

Za razliko od navadne enkripcije, kjer strežnik shrane podatke dešifrirane, E2EE zagotavlja, da le pošiljatelj in prejemnik vidita vsebino. Tudi če bi nekdo vdrl v strežnik, bi dobil samo neberne šifrirane podatke.

Enkripcija vs. Hash - kaj je razlika?

To pogosto zamenjujejo, zato je pomembno jasno razlikovati:

Lastnost Enkripcija Hash
Smer Dvosmerna (možnost povratka) Enosmerna (brez povratka)
Namen Skriti podatke, kasneje prikazati Preveriti integriteto, ne prikazati
Ključ Zahteva ključ Brez ključa
Izhod Ciphertext (lahko se dekriptira) Hash (nikoli ne sme biti reverzibilen)
Uporaba E-pošta, datoteke, komunikacija Gesla, checksums, blockchain

Kateri algoritem izbrati?

Če gradite aplikacijo, tukaj je priporočila glede na namen:

Pomen Priporočilo Opombe
Gesla bcrypt, Argon2, scrypt Nikoli MD5 ali SHA-1 za gesla!
Datoteke AES-256 Uporabite CBC ali GCM način
E-pošta PGP/GPG (RSA ali ECC) Standard za šifrirano komunikacijo
Web (HTTPS) Let's Encrypt, TLS 1.3 Nujno za vsako spletno stran
Mobilne aplikacije AES-256 + ChaCha20 ChaCha20 bolje deluje na Androidu

Najpogostejše napake pri enkripciji

  1. Uporaba zastarelih algoritmov: MD5 in SHA-1 nista varna za noben namen. Ne uporabljajte jih!
  2. Mehki nasumični števci: Uporaba `rand()` ali `mt_rand()` za generiranje ključev. Vedno uporabite kriptografsko varne funkcije, kot je `random_bytes()` v PHP
  3. Hardkodirani ključi: Nikoli ne shranjujte enkripcijskih ključev direktno v kodo. Uporabite spremenljivke okolja ali namensko varno hrambo
  4. Ponavljanje IV (Initialisation Vector): Pri AES-CBC morate za vsako enkripcijo uporabiti nov, unikaten IV
  5. Ignoriranje avtentikacije: Nekateri načini enkripcije (kot AES-GCM) nudijo tudi avtentikacijo. Ne pozabite preveriti integritete dešifriranih podatkov

Zakaj je enkripcija pomembna?

Enkripcija je temelj digitalne svobode. Omogoča vam, da:

  • Prenosite občutljive podatke skozi internet brez strahu pred prestrezanjem
  • Shranite gesla in osebne informacije v oblaku brez tveganja vdora
  • Komunicirate s komerkoli, ne da bi tretji videli vsebino sporočil
  • Varujete svoje podjetje pred podatkovnimi kršitvami

V današnjem svetu, kjer so podatkovne kršitve postale rutina, enkripcija ni več izbira - je nujnost. Vsak razvijalec bi moral razumeti osnove enkripcije in jo pravilno uporabljati v svojih projektih.

Za boljše razumevanje prakse hash-anja in enkripcije priporočamo ogled primera v moji vadnici: PHP Obrazci z varno obdelavo in zaščito gesel.

back Nazaj na blog