Hashing en enkripsie? Wat is 'n hash-waarde, wat is hash-enkripsie en wat is hash-dekripsie?

Hash versus enkripsie

Daar is' n algemene misverstand dat hash en enkripsie dieselfde ding is. Hulle is nie. Hash is onomkeerbaar. Neem die volgende voorbeeld as voorbeeld:

$ echo-n wagwoord123 | md5sum
42f749ade7f9e195bf475f37a44cafcb-

Ons slaag die string "wagwoord123" na die MD5-algoritme (algo), wat wiskundige bewerkings uitvoer en die gegenereerde heksadesimale gekodeerde hash terugstuur. Die enigste manier om dieselfde hash-uitsetwaarde te kry, is om die algo oorspronklik in te voer. Daar is konflik, maar ons kan dit later bespreek.

Die uitset van die meeste hash-algoritmes is' n heksadesimaal-gekodeerde binêre string van vaste lengte. Ander, soos hierdie voorbeeld, gebruik Base64-geënkodeerde stringe as uitset. Let daarop dat die lengte altyd dieselfde is:

{SHA} uNF8eZRJ8jmr8WTjyocRJPVpe7w =
{SHA} lqdu/Zr6o2dgIER8Up1/7lcUtgw =
{SHA} qYUOwLMlDEuukA5HCT4LR1kQzco =
{SHA} MXZBCpyWJ7TTs1w2kgGJslwNwTg =
{SHA} 2sAPLaUh9Mz0bI + XxKEg7qyABe8=

TL; Dr

Enkripsie is omkeerbaar, hash is nie


Ek wil nie te veel oor enkripsie praat nie (want daai goed is vir boeke), maar dit is belangrik om te kan onderskei tussen hash strings en enkripsie strings. Enkripsie vul gewoonlik die string om' n spesifieke lengte te bevredig voordat enkripsie plaasvind. Dit vereis ook' n sleutel (of wagwoord) om te dekripteer. As jy' n geënkripteerde wagwoord gebruik, sal die string verander na gelang van die lengte van die invoer. As jy' n klomp ciphertext wagwoorde sien, wissel die lengte en jy kan enkripsie in plaas van hash hanteer. AES-256-CBC Voorbeeld Enkripsie string en geassosieerde gewone teks (die sleutel is "ASDF"):

 foobar                           |   U2FsdGVkX19G + KtytNHdj6yH2AVvX26pEmtunS/PRnU = 
foobarfoobar               |   U2FsdGVkX18sPpIvN6nVh68lOUCcb3gR2fKbCCnBxog = 
foobarfoobarfoobar   |   U2FsdGVkX1/EOnUt57TCW4Rh0EdNnWX + ldatuqv2xexeaeoww0xg/EXJUe9aSUz 

$   kat   geënkripteerde_wagwoorde 
U2FsdGVkX19G + KtytNHdj6yH2AVvX26pEmtunS/PRnU = 
U2FsdGVkX18sPpIvN6nVh68lOUCcb3gR2fKbCCnBxog = 
U2FsdGVkX1/EOnUt57TCW4Rh0EdNnWX + lDatuQv2xEXXeAeowW0XG/EXJUe9aSUz 

$   vir   i   in   `cat   encrypted_passwords`;   doen   eggo   $i   |   openssl   enc   -base64   -d   -aes-256-cbc   -pas   pas:asdf;   eggo;   Klaar 
foobar 
foobarfoobar 
foobarfoobarfoobar 

Nou dink jy dalk: Jy is seker reg. Die feit dat kritieke materiaal vir die stelsel toeganklik moet wees, beteken egter dat dit in wese 'n gewone teks-meesterwagwoord iewers is – hetsy as' n RSA-sleutel of 'n wagwoord in' n wagwoord of lêer, ingebed in 'n databasis, hardekodeer in' n aansoek of' n wagwoord iewers in die geheue. pfft, niemand ' gaan asdf gebruik as die sleutel om hul gebruikers ' wagwoorde

te enkripteer nie Gebruik dieselfde string vir MD5:

 foobar                           |   3858f62230ac3c915f300c664312c63f 
foobarfoobar               |   59faa421729e846dd800dce59943bfc0 
foobarfoobarfoobar   |   1352aadab322d1a033c27964be0965db 

Die hash wagwoord is ver van perfek, in werklikheid is dit' n bietjie sleg, maar dit is erger as enkripsie as gevolg van wat dit probeer bereik. Gebruikers kies die absolute minimum vereiste meer gereeld as nie, en kan dit ook op verskeie webwerwe gebruik. Baie "hacks" is eintlik niks meer as geloofsbriewe hergebruiksaanvalle nie. As die aanvanklike kompromie was om enkripsie te gebruik, was die enigste poging wat' n aanvaller moes doen om die sleutel te vind om al die wagwoorde te dekripteer. Vir hashes moet hulle ten minste moeite doen om hulle te kraak. Wanneer dit gebruik Word met moderne algoritmes soos sha512crypt, bcrypt, scrypt of argon2, kan die hash waardes' n groot moeite verg om te kraak.



Marineer

Die byvoeging van sout is om' n string by die wagwoord te voeg voor die hash. Die sout van elke hash moet uniek wees, gewoonlik lukraak gekies, aangesien die fokus daarop is om dieselfde duidelike teks "wagwoord" hash waarde elke keer anders te maak. Dit maak die lewe vir wagwoordkrakers moeilik, want om die woord "wagwoord" vir elkeen van die 1 000 gebruikers na te gaan, wat elke gebruiker' n unieke SALT het, moet hulle die werk 1 000 keer doen-een keer per gebruiker/SALT. Dit beteken ook dat hulle nie vooraf saamgestelde woordeboeke of reënboogtabelle effektief kan gebruik nie (gewoonlik...) omdat hulle' n pasgemaakte per sout benodig.

Webwerwe mors dit soms op en gebruik universele sout vir alle gebruikers; Dit is teen die doel.

Hier is die SHA1-hash met sout:


 b353977827f67a4ae0318f3a9447fae1c13d9d90:b8d18ca 
|___________________________________________| 
                                    hash                                     |     sout 
                                        | 
                                                                        skeider 

Die duidelike teks van hierdie hash is "wagwoord". Dit het' n soutwaarde van "b8d18ca" en gebruik SHA1 ($salt.$pass) in die API. Dit beteken dat die algoritme die gewone teks van die wagwoord kry, sout genereer en dit voor die gewone teks byvoeg. Wanneer' n webwerf of toepassing jou wagwoord in die toekoms probeer verifieer, neem dit jou duidelike teks wagwoord as invoer, lees die soutwaarde in die gestoorde Hash, voeg dit voor jou gekose wagwoord by en vergelyk die gegenereerde Hash waarde met die gestoorde Hash waarde. Cracking As jy nie weet dat' n deel daarvan sout is nie, sal die hash die volgende gewone teks produseer:

b8d18capassword

Aangesien die algoritme gewone teks invoer, sout en gegenereer Die hash-waarde kan deursigtig vir die gebruiker bly. By kraak, as die algoritme sout is, moet ons die sout ken sodat ons dit kan verskaf wanneer ons die kandidaat-gewone teks genereer.

As dit behoorlik geïmplementeer Word, kan souting krake meer tydrowend maak. Met ewekansige sout dwing jy Cracker om tyd te mors om te probeer om die hash waardes te kraak wat nie ooreenstem met sout nie. Dit voltooi ongeveer die moeite wat benodig Word vir device_speed/number_of_salts, want ons moet' n kandidaat vir elke sout genereer. As die sout staties is, dan is die wiskunde dieselfde... speed_of_device/1. Nog' n manier om dit te sien:

 ons   GTX   980   krake   SHA1 ($sout.$pass)   by   3576.8   MH/s   of   3.5   miljard   kandidate   per   sekonde 
Ons   hashlist   bevat   1000   unieke   soute 

3,500,000,000   /   1000   =   3,500,000   kandidate   per   tweede 

Dit is drie ordes van grootte stadiger en' n verlies van 99,9%. Met statiese sout lyk dit so:

 ons   GTX   980   krake   SHA1 ($sout.$pass)   by   3576.8   MH/s   of   3.5   miljard   kandidate   per   sekonde 
Ons   hashlist   bevat   1   unieke   sout 
               
3,500,000,000   /   1   =   3,500,000,000   kandidate   per   tweede 

As dit nie sin maak nie, hou aan lees, ons sal later 'n pragtige grafiek hê...


Iterasie

Nog' n algemene verbetering in vergelyking met bloot "hash this plaintext" is, "hash this plaintext, hash dan daardie resultaat, hash dan daardie resultaat" Word duisende kere herhaal. Dit maak dit moontlik om' n enkele kandidaatwagwoord te probeer, wat die wagwoordkraakprogram duisende kere moet doen. Dit Word iterasie, lus of veranderlike koste genoem. Sommige wagwoordhash-algoritmes gebruik hardekodeerde iterasierondes; Ander Git. Maak dit konfigureerbaar in' n deel van die Hash self. Byvoorbeeld, md5crypt () gebruik MD5, insluitend sout, en loop presies 1000 keer. sha512crypt () gebruik sha512, sluit 'n sout in en loop' n konfigureerbare aantal kere (verstek is 5 000).

Iterasies beïnvloed hoofsaaklik die berekeningsikluskoste van die hash-algoritme, eerder as die geheuegebruik daarvan of ander faktore. Dit is ook belangrike aanvalle wanneer die ontwerp geoptimaliseer is om sekere soorte hash-tipes te weerstaan, maar dit is te onkruid om hier te bespreek.


Effek van hash tipe op kraakspoed

Kom ons kyk na' n paar voorbeelde om die impak van hash algoritme keuse te demonstreer, of dit nou gesout is, met behulp van verskeie iterasies, ens. Gestel 'n aanvaller het' n hash van 1 000 gebruikers van 'n besmette webwerf versamel. Hulle wil net' n eenvoudige aanval uitvoer en elke wagwoord-hash toets-143 miljoen kandidaat-wagwoorde.

Die tipe hash wat 'n besmette webwerf gebruik, sal' n groot impak hê op die tyd wat' n aanvaller deur hierdie aanval sal neem. Hier is' n (relatiewe, rofweg) grafiek van hoeveel sekondes dit neem om hierdie aanval te voltooi, afhangende van die tipe hash wat gebruik Word, waar standaard grafiese kaarte:

Wel, dit is nutteloos! Die sterkste hash tipe is baie stadiger, maar die vinniger tipe Word net platgedruk tot niks. Kom ons probeer weer dieselfde dataskaal met logaritmiese x-as tyd. Soos die stawe van links na regs beweeg, sal hulle tot 'n krag van 10 toeneem:

So' n paar punte is: Enkele rondte is makliker as veelvuldige rondtes en soutloos as sout wanneer jy' n paar wagwoordhash wil kraak. Inteendeel, wanneer sekere maatskappye of webwerwe' n datalek aankondig wat gebruikersdata bevat, is a) die wagwoord verkieslik gehash, nie net gewone teks nie; b) Hulle is verkieslik gesout, nie net gehash nie; c) Dit is beter vir hulle om kragtige multi-rondte gesoute hash te gebruik, nie net' n enkele rondte nie.



Identifiseer die hashtipe

Dit is aan die kraker om uit te vind watter hashalgoritme gebruik Word om dit te implementeer voordat hy' n gegewe wagwoordhash probeer kraak. Die identifisering van' n hash tipe is gewoonlik eenvoudig, maar nie altyd nie. Crackers maak dikwels' n ingeligte raaiskoot gebaseer op leidrade soos hash lengte en formaat. Uiteindelik is die enigste manier om seker te wees dat die hash tipe raai korrek is, of die hash gekraak is.

Daar is' n paar uitstekende hulpbronne vir hierdie taak hier en hier, wat albei wys hoe algemene hash waardes lyk.

Die "hash-identifier" pakket (beskikbaar hier) is beskikbaar in Kali Linux wat help om onbekende hash tipes te identifiseer.



Botsing

' n Botsing ontstaan wanneer twee verskillende insette dieselfde hash-uitset tot gevolg het. Dit is sleg (blykbaar). Vir wagwoorde kan dit beteken dat ek dalk nie jou werklike wagwoord gekraak het nie, maar aangesien ek' n inset gevind het wat dieselfde hash-waarde lewer, kan ek die gewone tekswaarde gebruik om die stelsel te mislei dat die wagwoord wettig is.

Microsoft Office gebruik in sy dokumentbeskerming' n algoritme wat vir jare geneig is tot konflikte. Dit is nie ongewoon om verskeie konflikte vir' n enkele hash te vind nie, wat almal die dokument ontsluit.

Sodra' n konflik ontdek Word, Word die algoritme eintlik vernietig. As dit een keer gebeur, is dit statisties baie waarskynlik dat dit weer sal gebeur. Die enigste ding wat ons in die pad hou, is tyd en verwerkingsvermoë. Namate algoritmes meer robuust Word, neem dit meer vermoë en tyd om kandidaat-algoritmes te genereer en hash-uitsette te vergelyk om daarna te soek. As gevolg hiervan Word ontwerpers al hoe beter om algoritmes te skep wat minder geneig is tot konflik.


Vorige artikel:Hashcat wagwoord kraak hardeware
Volgende artikel:Wat is Hashcat? Die eerste stap om wagwoord kraak [Basiese Inleiding]
  • Word/Excel/Pdf/PPT/RAR/zip/7z在线密码破解
  • offfice、PDF、压缩文件、WPS、在线密码恢复
  • hashcatonline.com在线密码破解版权所有2010-2025