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:
- Plain text: Izvirni, nešifrirani podatki
- Ciphertext: Šifrirani, neberljivi podatki
- Ključ (key): Skrivna vrednost, ki omogoča enkripcijo ali dekripcijo
- 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:
- Ustvarite par ključev: javni in zasebni
- Javni ključ daste vsem - ljudje vanj zaklenejo sporočila
- 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
- Uporaba zastarelih algoritmov: MD5 in SHA-1 nista varna za noben namen. Ne uporabljajte jih!
- Mehki nasumični števci: Uporaba `rand()` ali `mt_rand()` za generiranje ključev. Vedno uporabite kriptografsko varne funkcije, kot je `random_bytes()` v PHP
- Hardkodirani ključi: Nikoli ne shranjujte enkripcijskih ključev direktno v kodo. Uporabite spremenljivke okolja ali namensko varno hrambo
- Ponavljanje IV (Initialisation Vector): Pri AES-CBC morate za vsako enkripcijo uporabiti nov, unikaten IV
- 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.