Siguria e fjalekalimeve

Albforumi

Primus registratum
Siguria e fjalekalimeve

di
</img>
di
</img></p>

siguria-fjalekalimeve-300x225.jpg
</p>

Siguria e aplikacioneve është një nga elementët që shqetëson më shumë programuesit dhe që duhet marrë me shumë seriozitet. Vrimat e sigurisë mund ti lënë mundësi sulmuesit të marrë informacione të rëndësishme nga sistemi (fjalëkalime, emaile, etj) apo thjeshtë ta nxjerrin atë jashtë funksionimit normal. Një programues duhet të paktën të zotërojë bazat e sigurisë, në mënyrë që aplikacionet që ai krijon të jenë të sigurta nga sulmet e rëndomta. Një nga masat e rëndësishme për një aplikacion të sigurt dhe tema e këtij artikulli është kriptimi i fjalëkalimeve, në mënyrë që mos të bien në duar të gabuara. Le ta shtjellojmë më tej.</p>

- Problemet e fjalëkalimeve të pa kriptuar -</p>

Le të supozojmë që kemi një aplikacion ku për të pasur akses në zona të caktuara, përdoruesit duhet të regjistrohen në faqe me një e-mail dhe fjalëkalim. Pra unë jam përdorues dhe regjistrohem me fjalëkalimin web12345 duke menduar se të dhënat janë të sigurta. Ndërkohë një sulmues tenton të gjejë vrima sigurie në sistem dhe arrin ti gjejë duke përdorur një teknike shumë të përhapur (fatkeqësisht) si SQL Injections. Në dorën e sulmuesit është e gjithë tabela e përdoruesve me e-mailet e tyre dhe fjalëkalimet, duke i dhënë mundësi të identifikohet në sistem si kushdo përdorues. Imagjinoni që sistemi në fjalë të jetë për të blerë produkte! E gjithë kjo mund të parandalohej nëse kriptohej fjalëkalimi, pa harruar gjithashtu edhe vrimat ndaj SQL Injections.</p>

- Çfarë është kriptimi? -</p>

Kriptografia është shkenca e fshehjes së informacionit, në mënyrë që të lexohet vetëm nga personat apo sistemet që dinë ta dekriptojnë mesazhin. Për këtë artikull, ne na intereson më tepër një fushë e kriptografisë, që merret me kriptimin Hash, veçanërisht me funksionet një-krah. Duke i dhënë një vlerë për tu kriptuar, funksionet Hash një-krah gjenerojnë një fjalë me madhësi të caktuar e cila është e pamundur të dekriptohet në vlerën origjinale.</p>

- MD5 -</p>

MD5 (Message-Digest algorithm 5) është një funksion Hash shumë i përdorur në web dhe zgjedhja për kriptim në shumë aplikacione të njohura. Fjala e gjeneruar është 128 bit e gjatë me 32 karaktere heksadecimale. Në shumë përdorime sensitive, MD5 është abandonuar sepse është provuar dobësia e tij, megjithatë për qëllimin tonë e bën punën më së miri. Në PHP egziston një funksion që quhet pikërisht md5(), i cili gjeneron Hash-in e një vlere. Provoni kodin e mëposhtëm:</p>
$fjalekalimi = 'web12345';
$hash = md5($fjalekalimi);
echo $hash;


Nëse e egzekutoni kodin, në ekran do tju printohet fjala Hash e atij fjalëkalimi (egzaktësisht: 1bfe5bbf619681e49cdc62d07badc4cb).</p>

Me siguri po pyesni veten se si ta dekriptojmë këtë fjalëkalim, kur MD5 është një funksion që gjeneron një fjalë të pa dekriptueshme. Zgjidhja është e thjeshtë. Bëjmë krahasime të fjalëve Hash. Le të marrim një shembull:</p>

Një përdorues regjistrohet në sistem me fjalëkalimin nukegjendot, i cili pas kriptimit me MD5 ruhet në databazë si c45f12cc8df8ad9b45141146e36200f2. Kur ky përdorues tenton të indetifikohet, ajo që do bëjmë është krahasimi i Hashit të ruajtur në databazë, me Hashin e fjalëkalimit që përdoruesi ka plotësuar. Një shembull në PHP:</p>
//lidhja me databazen nuk perfshihet ne kete shembull
$emri = mysql_real_escape_string($_POST['emri']); //vlera e marre nga forma dhe e pastruar per tu futur ne query
$fjalekalimi = $_POST['fjalekalimi']; //vlera e marre nga forma
$hash = md5($fjalekalimi); //kriptojme fjalekalimin e futur
$rezultatet = mysql_query(&amp;quot;SELECT id FROM perdoruesit WHERE emri='$emri' AND fjalekalimi='$hash'&amp;quot;); //kerkojme ne databaze nese ky emer dhe hash egziston
if(mysql_num_rows($rezultatet) == 1){ //nese ky if() eshte i vertete, te dhenat jane te sakta
echo 'Te dhenat jane te sakta';
}


Shembulli më sipër është rasti më i thjeshtë i krahasimit të Hashit të fjalëkalimit me atë të ruajtur në databazë. Kjo teknikë vlen edhe për funksionet e tjera një-krahësh.</p>

- SHA1 -</p>

Ashtu si MD5, edhe SHA1 (familja SHA – Secure HAsh Standart) gjeneron një fjalë të pa dekriptueshme, por gjatësia e të cilës është 160 bit dhe 40 karaktere heksadecimale. SHA1 konsiderohet më i sigurt se MD5 në përgjithësi, edhe pse dobësi sigurie janë gjetur në të. Megjithatë, ashtu si MD5, për qëllimin tonë ky funksion e bën punën më së miri. PHP ofron një funksion sha1() për të gjeneruar fjalë të kriptuara. Konsideroni shembullin e mëposhtëm.</p>
$fjalekalimi = 'web12345';
$hash = sha1($fjalekalimi);
echo $hash;


Nëse e egzekutoni kodin, do tju shfaqet kjo fjalë e kriptuar: 20d5b81872a334e86183db3dcd108717d182ffdf. Kë doni të zgjidhni midis MD5 dhe SHA1 mbetet tërësisht në dorën tuaj dhe asnjëri nuk ofron ndonjë avantazh mbi tjetrin për qëllimin tonë. Une personalisht kam zgjedhur të perdor SHA1, pa ndonjë arsye specifike.</p>

- Siguria e funksioneve Hash një-krahësh dhe Salt -</p>

Megjithëse teknikat MD5 dhe SHA1 janë praktikisht të pa kriptueshme, siguria sërish nuk është maksimale sepse egzistojnë mënyra për të gjetur vlerën e kriptuar. E di që mund tju duket e pamundur, por teknikat për dekriptim janë shumë të thjeshta. Le të marrim një shembull të thjeshtë për ta ilustruar.</p>

Shumë përdorues përdorin fjalëkalime të thjeshta që mund të jenë edhe fjalë fjalori në rastin më të keq. Sulmuesi i cili ka arritur të gjejë fjalëkalimet te kriptuara, përdor një lloj fjalori (Rainbow Tables) me një numër masiv fjalësh dhe kombinime abstrakte gërmash të kriptuara në MD5 apo SHA1 dhe krahason Hashin e gjetur me to. Pra, ashtu si sistemet që ne kodojmë krahasojnë një Hash me një tjetër Hash të ruajtur në databazë, sulmuesi krahason një Hash me qindra mijëra (apo miliona) Hashe të tjera. Që një fjalor të jetë efikas duhet të përmbajë praktikisht të gjitha fjalët e fjalorit dhe miliona kombinime gërmash, numrash dhe karakteresh speciale të cilat do e bënin kërkimin të vështirë dhe të gjatë. Megjithatë, shumë fjalëkalime janë thyer në këtë mënyre. Atëherë si të rrisim sigurinë? Fare e thjeshtë; përdorim një Salt.</p>

Salt është një fjalë që i shtohet fjalëkalimit dhe kriptohet së bashku me të, në mënyrë që rezultati përfundimtar të jetë i ndryshëm nga ai që pritet. Ta ilustrojmë me një kod PHP, sepse me fjalë mund të ngjajë me komplekse se në realitet.</p>
$fjalekalimi = 'web12345';
$salt = 'internet';
echo md5($fjalekalimi); //1bfe5bbf619681e49cdc62d07badc4cb
echo md5($fjalekalimi . $salt); //597e5797991d2236256015b3af004693


Fjalëkalimit i kemi ngjitur një fjalë arbitrate (internet) e cila e modifikon tërësisht Hashin përfundimtar, duke e bërë fjalën të pa gjatshme në fjalorët e sipër përmendur pa njohur Saltin. Përmbajtja e Saltit është në dorën e programuesit dhe fantazia e tij. Mund të jetë një fjalë statike, emri i përdoruesit, një fjalë e rastësishme që ruhet në databazë, etj.</p>

- Një mënyrë personale kriptimi -</p>

Përmbajtja e kësaj pike është thjeshtë një mënyrë alternative kriptimi i fjalëkalimeve (e-maileve apo të tjera të dhëna se
Ky artikull eshte marre nga: http://www.romeolab.com/?p=2538. Per me shume artikuj te ngjashem vizitoni: http://www.romeolab.com/?p=2538
 
Top