19. novembar, 2016. Omer Ramić Obrazovanje

Kada je riječ o pentestingu, nezaobilazna tema su termini enkripcija, kodiranje, hešing i obfuskacija. Obično postoji velika zbunjenost kada se govori o ovim terminima.

Pogledajmo bliže svaki od ovih termina:

Enkripcija

Tipovi enkripcije, simetrična i asimetrična.

Svrha enkripcije služi za transformaciju čitljivih podataka (plaintext) kako bi se sakrili (ostali tajni) od onih kojima nisu namijenjeni korištenjem algoritma (cipher), npr. ukoliko pošaljemo nekome poruku samo osoba kojoj je poruka namijenjena bi trebalo da je može pročitati (dekriptovati).

Enkripcija transformiše podatke u potpuno drugi format (ciphertext) na takav način da samo određena osoba može vratiti te podatke u originalnu vrijednost (plaintext). U ovu svrhu se koristi ključ koji je tajan, skupa sa čitljivom porukom (plaintext) i algoritmom kako bi se ostvarila enkripcija. Zatim su kriptovani tekst (ciphertext), algoritam i ključ potrebni kako bi se poruka vratila u originalnu čitljivu formu (plaintext). Važno je napomenuti da postoji simetrična i asimetrična enkripcija.

Primjeri bi bili: AES, Blowfish, RSA

Kodiranje

Kodiranje podataka.

Svrha kodiranja je da se podaci transformišu kako bi mogli da se ispravno (i sigurno) upotrijebe od strane različitih sistema, npr. slanje binarnih podataka putem emaila ili pregled specijalnih znakova na web stranici ili u URL-u stranice. Cilj kodiranja nije da informacije budu tajne, nego da budu ispravno iskorištene.

Kodiranje pretvara podatke u drugi format korištenjem šeme koja je javno dostupna kako bi lagano vratila podatke u originalni oblik. Ovdje nije potreban nikakav ključ, ovdje je samo potreban algoritam za dekodiranje koji je upotrijebljen i za kodiranje.

Primjeri bi bili: ASCII, Unicode, URL Encoding, Base64

Hešing

Hashing podataka.

Hešing se koristi kako bi se osigurao integritet. Hešing uzima proizvoljnu vrijednost a na izlazu se dobiva string tačne dužine koji ima sljedeće atribute:

  •     Ista vrijednost unosa uvijek daje istu izlaznu vrijednost.
  •     Višestruki različiti unosi ne bi trebalo da dadnu istu izlaznu vrijednost.
  •     Ne bi trebalo da bude moguće da se izlazna vrijednost vrati u originalnu (ulaznu) vrijednost.
  •     Bilo kakva izmjena ulazne vrijednosti bi trebalo da dadne potpuno drugačiji rezultat izlaza (hash).

Primjeri: SHA1, SHA256, SHA-3, MD5 (prevaziđen) i td.

Obfuskacija

Obfuscation - skrivanje.

Obfuskacija se koristi kada postoji potreba da se razumijevanje nečega oteža, najčešće se koristi kako bi se otežao napad ili da bi se nešto prekopiralo. Jedna upotreba je primjena na izvorni kod tako da bi se otežalo repliciranje određenog proizvoda ukoliko se izvrši reverzni inženjering.

Treba napomenuti kako obfuskacija ne predstavlja enkripciju nego samo prepreku. Isto kao i kod kodiranja moguće je dobiti originalnu vrijednost reverzijom.

Obfuskacija nosi još jedan problem, ukoliko se obfuskacija primjenjuje na kod, mora se primijeniti do te mjere da kod ipak ostane upotrebljiv, u suprotnom aplikacija neće nikako funkcionirati.

Moj primjer obfuskatora za IP adresu: https://www.ramicomer.com/bs/blog/prikrivanje-obfuskacija-citljive-ip-adrese-obfuskovanim-ekvivalentom/

Zaključak:

  • Enkripcija se koristi za zaštitu povjerljivih podataka. A za dobivanje originalne poruke (plaintext) potreban je tajni ključ.
  • Kodiranje je transformacija podataka, a originalna vrijednost može se vratiti koristeći isti algoritam na sadržaj.
  • Hešing služi za provjeru integriteta sadržaja, gotovo je nemoguće dobiti originalnu vrijednost.
  • Obfuskacija se koristi kako bi se ljudi spriječili da nešto razumiju i najčešća upotreba je sprečavanje krađe funkcionalnosti proizvoda.