Jump to content

Salvarea parolelor


IstuntmanI

Recommended Posts


Introducere:

- De ce am hotarat sa fac acest tutorial ?

Toti cred ca avem pe serverele noastre sisteme de conturi, acel lucru care ii lasa pe utilizatori sa se inregistreze pe server si sa se logheze cu acel cont dupa ce a intrat iar pe server, recuperand datele de la ultima sesiune de jucat. Mai jos am sa va explic cum sa le salvati parolele in database-ul vostru, fara ca un hacker sa le poata citi, daca va sparge database-ul. Stiu ca multi vreti sa aflati parolele utilizatorilor vostri, dar eu nu va recomand sa faceti asta, pentru ca va compromiteti profesionalitatea serverului si nu va mai avea nimeni incredere in voi, si vor evita acel server, daca se descopera ca faceti asta. In opinia mea securitatea este mult peste interesul propriu. Eu unul folosesc cea mai grea metoda de salvare a unei parole, care am s-o v-o explic mai jos, nimeni nu poate sparge parolele cu acea metoda.

Pentru ca de multe ori am vazut ca folositi primele doua metode proaste de mai jos, iar de multe ori vi se sparge contul de la host, iar database-ul (prin asta ma pot referi si la fisiere, sistemele de conturi pe fisiere folosesc si ele aceste metode, nu uitati) este furat de cineva si postat pe internet, iar utilizatorii care n-au nici o vina vor avea parolele stiute de toti, din cauza incapabilitatii acelui proprietar de server care nu a fost in stare sa faca un sistem de securizare la parole. Un exemplu bine cunoscut este Romania Super Stunt (nu sunt un fan, dar este un server foarte mare, din Romania, pe care toti il cunoasteti si care a patit ce am spus anterior), acest server avea (si inca are, dar vorbesc de momentul in care a fost spart database-ul) mii de utilizatori, ale caror parole le salva in "plain text" (prima metoda). Dar cineva (cred ca stiti cine, nu mai dau nume) le-a spart database-ul si l-a postat pe net, asta insemnand ca parolele la mii de utilizatori au fost facute PUBLICE ! Chiar vreau sa schimb modul in care gestionati parolele utilizatorilor.

- De ce am fost inactiv ?

Am fost, si inca voi mai fi inactiv (probabil voi mai veni cateodata pe aici in cazuri speciale), din motive pe care le-am spus unora, dar nu vreau sa le spun aici. Am vrut sa va invat sa va securizati parolele. Parolele sunt centrul de atractie pentru hackeri, de aceea trebuie sa acordati un timp important securizarii acestora !

- Nu stiti cine sunt ?

Cei mai vechi utilizatori ma vor sti, acum minim un an (nu mai stiu exact cand) am fost Global Moderator aici, si ajutam pe majoritatea la intrebari, care de multe ori se tot repetau si incepusem mai mult sa dau link-uri intre topicuri, lucru care incepuse sa ma deranjeze. Am mai scris cateva tutoriale acum mult timp, acesta fiind cel mai nou (scris azi, 04.12.2013), mai complex si important dintre ele.


Daca trebuie sa le salvati parolele utilizatorilor vostri, cele mai proaste metode de a le salva in database sunt:

1. Plain Saving (Salvarea simpla): Prin aceasta metoda, in database veti salva direct parola. Cand se logheaza, comparati direct parola introdusa, cu parola din database, daca sunt la fel, ii permiteti accesul. Un exemplu ar fi:

[table]

KeyUserParola

0Testexemplu123

1Huser123456

[/table]

2. Encrypt Saving (Salvarea criptata): Prin aceasta metoda, in database veti salva parola criptata, pe care apoi voi o veti putea decripta prin inversarea metodei de criptare. Aceasta metoda este putin mai securizata decat prima, dar tot nu este recomandata. Daca gresesc cu aceasta explicatie, corectati-ma, nu m-am documentat foarte mult despre criptare. Cand se logheaza, comparati criptarea parolei introduse, cu parola din database (care este cea de la inregistrare, dar criptata), daca sunt la fel, ii permiteti accesul. Un exemplu oarecare (metodele de criptare pot diferi, dand diferite rezultate):

[table]

KeyUserParola

0TestdJKkdf25Ka412

1Huser74g2dG1g69pa

[/table]

Criptarea unei parole va fi mereu aceeasi, la toti utilizatorii care folosesc acea parola, deci se poate afla usor ce utilizatori folosesc aceeasi parola.

3. Hash Saving (Salvarea hash-ului): Prin aceasta metoda, in database veti salva parola "hash-urata", pe care apoi voi NU o veti putea "dehash-ura", spre deosebire de a doua metoda. Aceasta metoda este mai securizata decat a doua, dar tot nu este recomandata. Cand se logheaza, comparati parola introdusa pe care apoi o "hash-urati", cu parola din database (care este cea de la inregistrare, dar "hash-urata"), daca sunt la fel, ii permiteti accesul. Un exemplu oarecare (metodele de "hash-urare" pot diferi, dand diferite rezultate) folosind metoda de "hash-urare" Whirlpool (una dintre cele mai securizate metode) este (prima este hash de la "exemplu123", iar a doua de la "123456"):

[table]

KeyUserParola

0TestA4BB726A4CB4547B889FB7F9A18DF65B2783B885742A5696654B9CA9DAF3763421C0ACBE0ED1785D2CE124F7212F584EE381E4283FF838D222309B918A857734

1HuserFD9D94340DBD72C11B37EBB0D2A19B4D05E00FD78E4E2CE8923B9EA3A54E900DF181CFB112A8A73228D1F3551680E2AD9701A4FCFB248FA7FA77B95180628BB2

[/table]

"Hash-ul" unei parole va fi mereu acelasi, la toti utilizatorii care folosesc acea parola, deci se poate afla usor ce utilizatori folosesc aceeasi parola.

Cea mai buna metoda de salvare a parolelor este urmatoarea:

    Hashed Password + Salt Saving (Salvarea "hash-urarii" parolei + salt): Prin aceasta metoda, in database veti salva parola "hash-urata" alaturi de un "salt" (un string generat aleatoriu pentru fiecare utilizator, pe care trebuie sa-l salvati "plain" in database, care se contopeste cu parola), pe care apoi voi NU o veti putea "dehash-ura" prin nici o metoda enumerata mai jos (nici nu mai poate fi vorba de citit direct sau decriptate, "dehash-urare", sau orice alt lucru de acest gen). Aceasta metoda este mult mai securizata fata de oricare alta metoda de salvare a parolelor. Cand se logheaza, comparati parola introdusa pe care apoi o "hash-urati" alaturi de acel salt, cu parola din database (care este cea de la inregistrare, dar "hash-urata" alaturi de salt), daca sunt la fel, ii permiteti accesul. Un exemplu oarecare (metodele de "hash-urare" pot diferi, dand diferite rezultate) folosind tot metoda de "hash-urare" Whirlpool este (prima este hash de la "exemplu123" + salt, iar a doua de la "123456" + salt):

[table]

KeyUserSaltParola

0Testkfaisfk3hj6278CDB5901D6CD159FEE1889879F4AD928D531B1BA9E6A09C20FD321D9F6EB2CC35DC5EFE7D0BD9DD8C40ABCEF2E6781D46261C501733A8BB187AB0C96B536F

1Huserf45d56g63435EEEF19487633CCA36AC4470289624CDAE7C5F7F2D00BF625AFFB423906502B95F0DD43F034E886716679096B48B818127EEB85AD4B031F25B3AF53327FAAAB

[/table]

Metode de a sparge o parola "hash-urata":

1. Brute Force: Prin aceasta metoda se foloseste un program care verifica "hash-urarea" fiecarei combinatii de caractere posibila, pana cand "hash-urarea" acelei combinatii de caractere corespunde cu "hash-urarea" parolei din database, iar daca ele corespund.

2. Rainbow Table: Prin aceasta metoda, nu trebuie decat sa descarcati un database cu foarte foarte multe parole deja criptate (dar si foarte foarte mare, de cativa gigabytes), iar el nu va face decat sa selecteze "hash-ul" parolei pe care incearca s-o sparga din database, iar in database alaturi de acel hash este si parola normala. In acest "Rainbow Table" se afla fiecare hash al fiecarei combinari de caractere, pe care cineva le-a facut inainte si le-a publicat.

Detalierea celei mai bune metode de salvare a parolei:

Prin aceasta metoda, metodele de a sparge parola de mai sus nu se pot aplica, deoarece parola este lipita de acel salt, in "hash-ul" final ea devenind alt hash, ci nu hash-ul direct al parolei. Nu se poate scoate salt din acel hash final, pentru ca nu sunt "hash-urate" separat, ci impreuna, ca si cum ar fi o parola unita.

Mai multe exemple ale aplicarii celei mai bune metode:

Mai jos voi folosi hash la parola ("exemplu123") + salt (aleatoriu, specificat in tabel), in cazul simplei "hash-urari", "hash-ul" final trebuia sa fie la fel la toate, dar aici vom folosi salt, deci "hash-ul" final va fi complet diferit pentru aceeasi parola, din cauza ca "salt-ul" difera (in cazurile extrem de rare in care "salt-ul" este identic, "hash-ul" final va fi si el la fel, dar tot nu se poate descoperi parola initiala pentru ca este contopita cu acel salt):

[table]

KeyUserSaltParola

0<nume>10degFD8517FAF7C4EA0B0C42D47D6A4A39A674709E4B1352599BEB86D7E3465D1E847194C33BF3C0DCDC61D8365148260E88EFB06AB95AB971AB04D5153960D01609

1<nume>548yM55C918D79FF8C0855B53C3AF1587ECEF78D1BE93E51ABDFC6928D0006FDF293B71D23DA0E6B0EA9577092ECA89CDFA6C09FB786E23E4FD9939E04EB49A47384A

2<nume>4D8I52687B369BF48C20D6BE37FB767E921D1CF1B6AFE5852BD61065D6CD3760C227808FCBE3EE0A37B183ACA3EA17A6265F00BDDD9A2A99134DAE77DF5370DA89AAE

3<nume>4i5kp34112D1F1678AE251676FE5F86CCDE6CDE7EB875AEC69F6664803EAA67F9E4C48C718A72290F2AD0C820264419826C114BA988154092F2A80C7D1B262FA2B56E

4<nume>WayIPD4E21D7BD3C25CC11C95658734A59505E545B711B5CEB6B32C05F18A06E42DA4AC386599B2452DC5B22AD24EC6D7C051652870BC0FF3EE7225C3245C71F96D2A

5<nume>02jZYD4E11E2ED93D4EA33FAE6062E747DDDA69C9E144838DF950207BFA4B8115B10F9AAFE64EA5FCBF470A9B099DC465AC66E60F1CE10C3474C01CC1C26A753EA682

6<nume>d1HeS8A276668B69F51E8B5061BAC7E72414582723D760B95494B707C861AB1EC2C5388DDF129D95E27F7E8325FCB15DE8D6AFBC22BAB68FF2C6BF083DC67DC74034F

7<nume>71ed279E51F0ACCED3FF5A4090D2B000B131E8A7AB98DE5C6AA0298B1259402935A1ABB6CCC4DC590FD8494CF2BCAE0CF2687E095E9CD41B85640B105C913BCEBACF1

8<nume>cFCcU2D44196E14054447FA160D707E7D9E815F9FB7508C088523330B154198A666FE9CE20EDC0FCFAFDC7EB9B05C6F9D242BF68A1E87B97C1EFCB394AC203E903DF1

9<nume>6660x6F02BC0EE9481F6A1713C2B9618D1C5946E92BF666ABD00F6665FF4316D01EE5265AEEE50DE522B0C4DB38FEE1DC3EFFD4C743ED8EF6A5D8661282490EA38C53

10<nume>850tZC53F8782B2658687E942CC0A5505DB813104A90C2ABF5991354ECC945981DBED08BB525CA8F525F8CBC63E8341B7492123842FCDDADEE290A1CB0BB9D7419490

11<nume>05c2128BC6DEE54AA5FC66E70C083BD66C8D9CDC2DC2E6A27996898B518BFD919AA476BC2861975A94A9483ECD1A3E5AA16C104C974CA91AAF343C29B74F1C58AC1A4

12<nume>4K8740325C06B2CDD1F9DDAB8D226C85951D4F51DC4B29D703553DD8469022C97D42DC6CE2B6BBDE0036A962BC4694C29B22C0DA4C14D50B4ACE77F4E8A1414FC9640

13<nume>63y18043873D4A6F4889C69D827F6AF43E44480A27EF296D989F1E8C73B02EBD5744A21462733694D68958439BA9941B9446C6D10915739A37FBEF2CE73EA40D1E740

14<nume>Dq5n30DF76CEC3D9C38453C0C6CF655401A8B62B9BF7C07B2255BE6AA47171F820BA1030B56587FC51A027A21849986431A6414F7F01D45C2FA3B3ACFB2ED2049A9D6

15<nume>32450E947105AC01F9517C0EB49D7D195DE2D88D22D47B333CF799B726FB64226E6038448421E55BF6C6093901C6162D477A7F6D9F4A60344A7BB257BF76F1C88268E

16<nume>2lzfsE03DE626CD5CF9F05DAA6EC29AF7031A38A3103C0D5E164B9B6C94A00ECF186739B24947BB7BC6AE4D2DDA308512EC5095EC3A6457B1F87C89861A100234F072

17<nume>32418722CFD5AFFCD6F5721A9C2B8065E4D65844B23C7BBCC0F7571E84781AF6B63CB61AA306F14B37DC97FCF2F30F47DEFF6C279CED6F50A406D1A197608A3FF3C2F

18<nume>4E4D237629E928DF9F44EB53A21C79810597CDF31A87591FB89A8BCF623B190D1206FD691674F93CEB5B5E7D9A1A642E9CF9A26ADB5EEC6B552AB92C0527D98E20A69

19<nume>eu2Z88B014596CA4B3C9F84BAC4784A3CEE53C4E4A330CD4C836E63F72968BF047C60CF523C1B3327DBFA7954908F766B0616FF8E5C2B6CEF2D9CF76DD8AB07F5D392[/table]

Eu am folosit un salt aleatoriu de 5 caractere, dar pentru mai multa securitate se poate opta pentru un salt mai lung (deci sansele ca unele "salt-uri" de la utilizatori sa fie aceleasi vor fi mult mai mici).

Aplicarea celei mai bune metode:

Voi folosi aici Whirlpool, una dintre cele mai bune metode de "hash-urare". Prin parola contopita cu salt ma refer ca parola sa fie de exemplu "exemplu123", iar "salt-ul" unul aleatoriu, de exemplu "10deg" (primul in tabelul mare de mai sus), iar ele in final vor fi unite "exemplu12310deg" pentru ca ele mai apoi sa fie "hash-urate", dand rezultatul:

FD8517FAF7C4EA0B0C42D47D6A4A39A674709E4B1352599BEB86D7E3465D1E847194C33BF3C0DCDC61D8365148260E88EFB06AB95AB971AB04D5153960D01609

Acum urmeaza scriptul, pe care il puteti face singuri foarte simplu, prima data trebuie sa obtineti parola pe care o vrea utilizatorul (daca folositi dialog la inregistrare, la OnDialogResponse parola este trimisa scriptului prin parametrul string "inputtext"). Apoi trebuie sa generati un salt intr-un string, care ar fi bine sa fie cat mai lung, dar este ok si unul de, sa zicem, 15 caractere:

for( new i = 0; i < 15; i ++ ) // 15 fiind numarul de caractere dorit
    salt[ i ] = random( 2 ) ? ( '0' + random( 9 ) ) : ( random( 2 ) ? ( 'a' + random( 26 ) ) : ( 'A' + random( 26 ) ) );
Apoi, intr-un alt string, contopiti parola cu "salt-ul":
format( gsString, 256, "%s%s", inputtext, salt );
Apoi, ca sa rezulte "hash-ul" final, trebuie sa "hash-urati" parola contopita cu "salt-ul":
WP_Hash( gsHash, 130, gsString );
iar apoi la inregistrare introduceti in database "salt-ul" si "hash-ul" final, iar la login trebuie sa contopiti parola introdusa cu "salt-ul" din database, iar apoi sa "hash-urati" si sa comparati cu "hash-ul" final din database. Pentru si mai multa securitate, va sugerez: - un salt de minim 32 caractere - un salt format si din caractere speciale - contopirea sa nu fie facuta direct, ci prin combinatii personale pe care sa nu le stie nimeni. Exemple:
format( gsString, 256, "%s.%s", inputtext, salt );
format( gsString, 256, "%s|**#@%s", inputtext, salt );
format( gsString, 256, "%s524%s", salt, inputtext );
format( gsString, 256, "<%s><%s>", inputtext, salt );
- combinati de mai multe ori "salt-ul" si/sau parola in contopire. Exemple:
format( gsString, 1024, "%s%s%s%s", inputtext, salt, salt, salt );
format( gsString, 1024, "%s%s%s%s", salt, inputtext, salt, salt );
format( gsString, 1024, "(%s><%s>!%s!%s|", salt, inputtext, salt, salt );

- "hash-urati" inca o data "hash-ul" final

- "hash-urati" si parolele de la case, masini, sau orice alt lucru care necesita o parola pe server


Inca o data va spun, uitati de propriul interes, nu va mai uitati la parolele utilizatorilor, ci cautati sa le securizati, sa le faceti imposibil de citit de cineva (asta am explicat in acest tutorial), pentru ca niciodata nu poti sti cand cineva iti va sparge serverul, iar utilizatorii fara nici o vina vor avea parolele aflate.

In legatura cu parolele voastre pe servere, site-uri, etc., va recomand sa folositi o parola doar pentru un server/site, ci nu peste tot, deci daca un proprietar este incapabil sa faca o metoda de securizare si parolele vor fi postate, voi nu o veti avea la fel si pe alt site. Cel mai bine este sa folositi un generator de parole, care le si retine. Unul dintre aceste generatoare care si retine parolele este "Kaspersky Password Manager".


Acest tutorial este scris in totalitate de mine, [sG]stuntman, iar daca il veti posta pe alte site-uri (sa afle toti proprietarii de servere de securizarea parolelor, dar sa nu uitati:) sa dati sursa (link catre acest topic sau topicul de pe site-ul meu) si credite (mie) !

Link to comment
Share on other sites

Cam mult de citit, dar merge.

stuntman[]!" post="154840" timestamp="1386170672"]

- De ce am fost inactiv ?

Am fost, si inca voi mai fi inactiv (probabil voi mai veni cateodata pe aici in cazuri speciale), din motive pe care le-am spus unora, dar nu vreau sa le spun aici. Am vrut sa va invat sa va securizati parolele. Parolele sunt centrul de atractie pentru hackeri, de aceea trebuie sa acordati un timp important securizarii acestora !

- Nu stiti cine sunt ?

Cei mai vechi utilizatori ma vor sti, acum minim un an (nu mai stiu exact cand) am fost Global Moderator aici, si ajutam pe majoritatea la intrebari, care de multe ori se tot repetau si incepusem mai mult sa dau link-uri intre topicuri, lucru care incepuse sa ma deranjeze. Am mai scris cateva tutoriale acum mult timp, acesta fiind cel mai nou (scris azi, 04.12.2013), mai complex si important dintre ele.

Sincer asta nu ma prea intereseaza  :tongue:

35012l1.png.aee1a3398b9bd9f8eec50574d2cd

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. For more details you can also review our Terms of Use and Privacy Policy.