[ Mikky @ 27.05.2004. 14:16 ] @
Koliko je lakse razbiti enkriptovane podatke ako su poznati parametri enkripcije kao sto su algoritam, initialization vector, encryption mode (npr CBC, CTR...)?

Radim program koji ce da enkriptuje fajlove sa raznim standardnim algoritmima tipa blowfish i AES, i na pocetak svakog enkriptovanog fajla cu prvo dodati mali header koji ce da sadrzi algoritam, mod enkripcije i IV. Tako da te stvari ne bih pamtio vec samo kljuc enkripcije. Sad samo ne znam koliko to ugrozava sigurnost, odnosno ako neko uzme moj program i reversuje ga moze lako doci do toga kako izgleda header.


Drugo pitanje je kako se meri sigurnost kljuca, posto ce kljuc da bude niz ASCII karaktera (prakticno sifra koju unosim u programu). Ako je npr sifra "asd" da li je to 3*8 bitova = 24 bitni kljuc? Buni me i sto sam negde video da karakteri koji se ponavljaju ne doprinose povecanju sigurnosti kljuca, npr "aaa" ce biti samo 8 bitni kljuc jer ima samo jedan karakter.
[ zvrba @ 09.08.2004. 09:19 ] @
Poznavanje parametara enkripcije ne utjece na sigurnost. Sa dobrim algoritmom sigurnost iskljucivo ovisi o KLJUCU koji se koristi za enkripciju. Jedino nemoj koristiti ECB mode.

Sto se tice sigurnosti passworda, postao sam neke linkove na topic "Koliko je nesto ovakvo pametno?" Zbog redundancije govornog jezika entropija gotovo nikad ne odgovara broju znakova. Na tastaturi ne mozes utipkati bajtove koji imaju 7. bit postavljen. To je vec 7 bitova po 'slovu'. Ljudi cesto utipkavaju samo znakove iz tzv. 'base-64' character seta (velika, mala slova i znamenke..) sto ti odmah srozava stvar na 6 bitova po znaku. ako su rijeci iz govornog jezika, stvar je jos gora...
[ Mikky @ 09.08.2004. 22:50 ] @
Ok hvala! Meni kao autoru programa je vazno da uradim sve u mojoj moci kako bi ponudio korisniku najvecu sigurnost. Znaci ne bih da ostavim neki previd ili propust koji ce da omoguci nekome da razbije enkripciju. Znam da je korisnicka sifra uglavnom najslabija karika u lancu ali na to nemogu mnog da uticem osim nekim upozorenjima.

I dalje mi nije jasno da li sifra "aaa" i "asd" imaju istu "kolicinu" zastite. Tj da li je "aaa" 8-bitna sifra, a "asd" 24bita, ili su obe 24-bitne.
[ zvrba @ 10.08.2004. 09:00 ] @
Kao prvo, sigurno nemaju 24 bita zastite :) Ne mozes tako jednostavno procjenjivati entropiju.. Formula je jednostavna, ali ljudi jako lose biraju slucajne brojeve.. Ono sto se lako utipkava na tastaturi ima otprilike 6.5 bitova (=log_2(127-32). 32 kontrolna znaka ne mozes utipkati...) entropije po znaku. I to jedino ako je korisnik u stanju izabrati nekoliko NEZAVISNIH, SKROZ SLUCAJNIH znakova. A nije.

Procjena je da za rijeci engleskog jezika entropija iznosi 2.62 bita PO ZNAKU. Slavenski jezici imaju nesto vise slova pa se to mozda popne do 3 bita po slovu, ali ne vise.. Procitaj npr. ovaj clanak.

Mozes forsirati pravila za passworde (npr. min. duljina 12 znakova, barem jedno veliko slovo, barem jedna znamenka i barem jedan specijalni znak (@, ", ', zarez, tocka, []{} itd...). Onda imas rijecnik standardnih rijeci negdje sa strane i zabranis passworde koji u sebi imaju bilo kakav podstring koji se moze naci u rjecniku...

Imas jednostavnu formulu za entropiju. Ostatak pisem u TeX sintaksi (nazalost ne znam u koji tag da to stavim pa da se lijepo renderira u prikazu). Ako je p_i vjerojatnost pojavljivanja znaka i, tada je entropija po znaku nad abecedom od N znakova jednaka

E=-\sum_{i=1}^N p_i\lg p_i

Vrijednost ovog izraza je MAKSIMALNA kad su sve vjerojatnosti jednake.

Za tastaturu je N obicno oko 100 (7-bitni ASCII character set minus kontrolni znakovi), a vjerojatnost utipkavanja pojedinog znaka jako ovisi od osobe do osobe.
To ti daje oko vec procijenjenih 6.5 bitova po znaku ako je osoba u stanju birati skroz slucajne znakove. A redovito ce cesce birati iskljucivo mala slova i znamenke sto ti se svodi na abecedu od 40 znakova i to ti daje \lg 40 = 5.3 bita po znaku. I to ako SLUCAJNO bira slova i znamenke. Situacija je JOS GORA ako bira rijeci iz rjecnika i slicno...
[ gnarfoleon @ 04.10.2004. 19:55 ] @
Nisam od 'iskusnijih' na ovom polju, ali zar nije pametno u tom slucaju kad korisnik unosi sifru, prvo tu sifru hashovati pa hash koristiti kao kljuc? Zar tako ne rade ozbiljniji programi za enkripciju?