Šifra

U kriptografiji, **šifra** je algoritam za šifriranje i dešifriranje — serija precizno definiranih koraka koji slijede jedan za drugim.

U netehničkoj upotrebi, **šifra** i **kod** predstavljaju isti termin, ali u kriptografiji ti su pojmovi različiti. U klasičnoj kriptografiji šifra je odvojena od koda. Načelno, u kodu se zamjenjivanje vrši na temelju obimne knjige kodova, u kojoj se riječi i fraze zamijenjuju slučajnim nizom znakova. Na primjer, UQJHS može biti kod za "Nastavite do sljedećih koordinata".

Originalna (izvorna) informacija poznata je kao **otvoreni tekst**, a šifrirani oblik kao šifrirani tekst ili **šifrat**. Šifrirana poruka sadrži sve informacije iz otvorenog teksta, ali nije u obliku čitljivom za čovjeka ili računalo bez primjene odgovarajućeg mehanizma za njegovo dešifriranje - treba predstavljati nasumične znake za sve kojima poruka nije namijenjena.

Operacija šifriranja obično zavisi od dodatne informacije zvane **ključ**. Procedura šifriranja varira u zavisnosti od ključa, koji mijenja detalje algoritma. Ključ se mora izabrati prije šifriranja poruke. Bez poznavanja ključa trebalo bi da je teško, ili skoro nemoguće, dekriptirati šifrat u čitljiv otvoreni tekst.

Treba razlikovati termine **dešifriranje** i **dekriptiranje**:
* **Dešifriranje** je pretvaranje šifrata u otvoreni tekst kad je ključ poznat, vrši ga osoba kojoj je poruka namijenjena.
* **Dekriptiranje** je pokušaj pretvaranja šifrata u otvoreni tekst kad ključ nije (unaprijed) poznat - vrše ga osobe kojima poruka nije namijenjena. Dekriptiranje je dio kriptoanalize.

Većina modernih šifri može se svrstati u kategorije na nekoliko načina:
* Po načinu - primjenjuju li se na blokovima znakova obično stalne dužine (**blok šifre**), ili na neprekidnom nizu znakova (poznata pod nazivima **šifra niza**, šifra toka ili protočna šifra, engl. *stream cipher*).
* Po načinu - koristi li se isti ključ za šifriranje i dešifriranje (**algoritmi simetričnih ključeva**), ili se koristi poseban ključ (**algoritmi asimetričnih ključeva**). Ako je algoritam simetričnog ključa, ključ mora biti poznat primatelju i nikome više. Kod algoritma asimetričnog ključa, ključ za šifriranje je različit od ključa za dešifriranje, ali je s njim u tijesnoj vezi. Ako se jedan ključ ne može utvrditi iz drugog, algoritam asimetričnog ključa ima svojstvo javnog/tajnog ključa i jedan od ključeva može biti objelodanjen bez gubitka tajnosti informacije.

## Porijeklo
Riječ šifra potiče iz francuskog jezika, fr. *cifre* - brojka, tajni znak, odnosno iz arapskog ar. *صفر, şafira* - prazno, *şifr* - nula, ništa.

U ranijim vremenima, cifra je imala značenje "nula", a kasnije je korištena za bilo koji decimalni broj, ili bilo koji broj. Ove teorije pokazuju kako je cifra postala šifra u značenju šifriranje:

* U šifriranju su se često koristili brojevi.
* Rimski brojni sistem je bio nezgrapan, jer ne poznaje pojam nule (ili praznog skupa). Pojam nule (koja se također zvala cifra), koji je za nas sasvim prirodan, bio je posve stran u srednjevjekovnoj Europi. Cifra je stoga dobila značenje skrivanja jasne poruke, odnosno šifriranje.
Dr Al-Kadi je zaključio da se arapska reč şifr za nulu razvila u europski tehnički termin za šifriranje.

## Šifriranje i kodiranje

U netehničkoj upotrebi, "(tajni) kod" obično znači "šifra". Međutim, u tehničkim diskusijama riječi "kod" i "šifra" se odnose na dva različita pojma. Kodovi rade na nivou značenja — to jest, riječi i izrazi se pretvaraju u nešto drugo i to sažimanje načelno skraćuje poruku. Nasuprot tome, šifra radi na nižem nivou: na nivou pojedinačnih slova, malih grupa slova, ili, u modernim šemama, na pojedine bitove. Neki sustavi koriste kombinaciju koda i šifre, takozvano "superšifriranje" za povećanje sigurnosti. U nekim slučajevima, termini kod i šifra se koriste kao sinonimi u zamjeni i pomjeranju.

Povijesno, kriptografija je podijeljena u dihotomiju koda i šifre; kod ima svoju terminologiju, analognu onoj za šifru: "kodiranje", "kodni tekst", "dekodiranje" itd.

Međutim, kod ima dosta nedostataka, kao što su osjetljivost na kriptoanalizu i teškoće u baratanju glomaznim knjigama kodova. Zbog toga je kod zapostavljen u modernoj kriptografiji, a šifra je postala dominantna tehnika.

## Tipovi šifre
Postoji više vrsta različitih tipova šifriranja. Algoritmi koji su se koristili ranije u prošlosti značajno se razlikuju od modernih metoda, a moderna šifra se može klasificirati prema načinu kako radi i koristi li jedan ili dva ključa.

### Povijesne šifre

Šifre s olovkom i papirom koje su korištene u prošlosti poznate su pod nazivom "klasična šifra". One uključuju jednostavne "**šifre zamjene** (supstitucije)" i "**šifre pomjeranja** (transpozicije)". Na primjer, "dobar dan" može se šifrirati kao "ŽSDGĆ ŽGP", gdje se u poruci "d" zamjenjuje sa "Ž", "a" sa "G" itd. Pomjeranjem bi "dobar dan" moglo da bude "RDANDOBA". Ove jednostavne šifre i primjere je vrlo lako razbiti, čak i bez pomoći parova otvoreni tekst - šifrirani tekst.

Jednostavne šifre su zamijenjene šiframa "**polialfabetske zamjene**", koje mijenjaju alfabet zamjene za svako slovo. Na primjer, "dobar dan" se može zamijeniti sa "ŽĆZIA ONV", gdje se u poruci "d" zamenjuje sa "Ž" i "O", "a" sa "I" i "N". Čak i na malom uzorku poznatog ili pretpostavljenog otvorenog teksta, šifre polialfabetske zamjene i šifre pomjeranja slova (namijenjene za šifriranje olovkom i papirom) se vrlo lako razbijaju.

Početkom dvadesetog stoljeća izumljeni su elektromehanički strojevi za šifriranje i dešifriranje, a koristili su pomjeranje, polialfabetsku zamjenu i neku vrstu "dodatne" zamjene. U "rotor mašinama", nekoliko rotirajućih diskova je služilo za polialfabetsku zamjenu, a dodatne ploče su služile za neku drugu zamjenu. Ključevi su se lako mijenjali zamjenom rotirajućih diskova i prespajanjem žica dodatnih ploča. Iako su ove metode šifriranja bile kompleksnije od prethodnih i zahtijevale mašine za šifriranje i dešifriranje, izumljene su druge mašine (kao npr. britanska "Bomba") za dekriptiranje ovih metoda šifriranja.

### Moderne šifre
Moderne metode šifriranja mogu se podijeliti po dva kriterija: po tipu korištenog ključa i tipu ulaznih podataka.

Po tipu ključa, šifre se dijele na:
* Algoritmi simetričnog ključa (kriptografija s tajnim ključem), gdje se isti ključ koristi i za šifriranje i za dešifriranje, i
* Algoritmi asimetričnog ključa (kriptografija s javnim ključem), gdje se koriste dva različita ključa za šifriranje i dešifriranje.

Kod algoritma simetričnog ključa (npr. *[[DES]]* i *[[AES]]*), pošiljatelj i primatelj moraju imati isti ključ, koji je unaprijed pripremljen i koji mora biti tajan za sve kojima nije namijenjen - pošiljatelj koristi taj ključ za šifriranje, a primatelj isti taj ključ za dešifriranje. Kod algoritma asimetričnog ključa (npr. *[[RSA]]*), postoje dva posebna ključa: "javni ključ" se objavljuje i omogućuje pošiljatelju da izvrši šifriranje, dok "tajni ključ" primatelj čuva kao tajnu i koristi ga da izvrši ispravno dešifriranje.

Po tipu ulaznih podataka, šifre se mogu svrstati u dvije grupe:
* Šifra blokova, kojom se šifrira blok podataka fiksne dužine, i
* Šifra niza (šifra toka ili protočna šifra), kojom se šifrira kontinualni niz podataka.

## Veličina ključa i ranjivost
U čisto matematičkom napadu (tj. u nedostatku drugih informacija koje bi pomogle u razbijanju šifre), prije svega, bitna su tri čimbenika:
* Matematičke prednosti za otkrivanje i iskorištenje slabosti šifre.
* Dostupna snaga izračunavanja, tj. snaga računala koja se može upotrijebiti za rješavanje problema. Treba napomenuti da prosječne performanse/kapacitet jednog računala nisu jedini čimbenik koji se uzima u obzir. Protivnik može, recimo, koristiti više spregnutih računala i tako značajno ubrzati potragu za ključem (takozvani "napad grubom silom").
* Veličina ključa, tj. dužina ključa koji je upotrijebljen za šifriranje poruke. Kako raste veličina ključa, tako se povećava i kompleksnost pretraživanja grubom silom, sve do tačke kad direktno razbijanje šifre prestaje biti praktično.

Pošto je željeni efekt teškoća izračunavanja, teorijski se biraju algoritam i nivo težine, a na temelju toga se bira odgovarajuća dužina ključa.

Primjer ovog procesa se može naći na web stranici "Dužina ključa", koji koristi nekoliko izvještaja za pokazivanje da recimo simetrična šifra sa 128 bitova, asimetrična šifra sa 3072 bitova i eliptična kriva sa 512 bitova imaju sličnu težinu.

Claude Shannon je dokazao, koristeći razmatranja teorije informacija, da svaka teoretski neprobojna šifra mora imati dužinu ključa najmanje koliko je dugačak otvoreni tekst i da se ključ koristi samo jednom (jednokratni blok, eng. *one-time pad*)

## Povezano
* Glosar kriptologije
* XOR šifra

## Reference

## Vanjske veze
* Andrej Dujella: Kriptografija
* SecurityDocs Resource for encryption whitepapers