Miért nem lehet egy hash értéket visszafejteni?
Vannak olyan műveletek amiket nem tudsz megfordítani, mert vagy nem egyértelmű a megfeleltetés, vagy szükséged van az elhashelt számra hogy kitaláld.
Játszd el kicsiben:
Legyen a szám amit el akarsz hashelni 12345.
A hash legyen az, hogy beszorzod az eredeti számot a számjegyeinek összegével: 12345*(1+2+3+4+5)=185175
Most próbáld visszaszámolni a 185175 hash-t anélkül, hogy ismernéd az eredeti számot. Nem tudod visszaszámolni, viszont próbálkozással viszonylag könnyen ki lehet találni, ezért ez egy rossz hash.
Most bonyolítsunk rajta egy fokot:
A bemenet 4959823, a hash pedig legyen a következő:
daraboljuk fel a számot kettesével (ha páratlanok a jegyei fűzzünk hozzá egy 0-t):
A=04, B=95, C=98, D=23
Mindegyikhez adjunk 101-t, majd szorozzuk össze őket.
105*196*199*124=507832080
Mivel eredetileg 8 jegyet használtunk fel, most vágjuk le az utolsó 8 számjegyet: 07832080
Játsszuk el az egészet újra, mondjuk 32-szer:
A=07, B=83, C=20, D=80
108*184*121*181=435216672 -> 35216672
A=35, B=21, C=66, D=72
stb.
Visszaszámolni nem lehet. Ha 1-szer játszod el csak, akkor lehet találni arra algoritmus amivel viszonylag kevés próbálkozásból meg lehet fejteni. Ha 32x játszod el, akkor már nem nagyon van olyan algoritmus ami előbb fejtené meg, minthogy végigpróbáld simán az összes lehetőséget.
Persze kicsiben könnyű megfejteni, de ha 256 vagy 512 bites hashekről beszélünk, akkor ott már az univerzum teljes életkora sem lenne elég hogy végig próbáljuk az összes lehetőséget.
Ezen kívül vannak még trükkök és módszerek amivel nehezítik a számolást, és biztosítják a hash egyediségét valamilyen szinten és persze azt, hogy ne lehessen visszafejteni.
Amúgy az igazi hash-ek is nagyon hasonlóan működnek és ha érdekel, akkor érdemes utána olvasni párnak.
igen szorozzuk össze a számot a számjegyek összegével. 185175 ha ez a hash akkor visszafele eljátszuk
próbálgatással de nem sorban egyesével hanem arányosan az értékhez a kódot számjegyenként kell kezelni mivel a hash algoritmusa csak számjegyekről beszél szóval a 20 az is 2 és 0 és nem 20. 1+1+9-->11*119=1309 ennél százszor nagyobb a hash ezért + 2 számot hozzáadok a sorozathoz 1+1+9+1+1-->13*11911=154843 ez egy kicsit még kisebb szóval valami számjegyet növelni kéne 11941-->*16=191056 ez egy kicsit több egy tízezressel biztosan több ezért a láncban is a tízezres helyiértéknél csökkentek 1-el 10941*15=164115 ez kevesebb húszezerrel szóval a tízezres helyiérték csökkentése túl sok volt akkor azt visszaállítom és az ezresnél csökkentek pl 5-el 11441*11=125851 ez megint kevesebb 60ezerrel így a tízezresnél növelek 1-el. 12441*12=149292 ez kevesebb 30ezerrel a számjegyek összegét kéne n övelni 2-vel és akkor a 30ezres plusz nagyságrendileg meglenne. 12443*14=174202 ez még tízezerrel mindig kevesebb így +1számjegy az utolsóhoz,hogy a szorzaton legyen a hangsúly ne a szorzandó növekedésén. 12444*15=186660 ez már forró, 1500-al kissebb kéne 12344*14 ez a szorzat miatt már számolni sem érdemes de ha az utolsó számjegyhez hozzáadok 1-et 12345*15=185175 és már meg is hackeltem a hash függvényedet hahaha mit szóltok hozzá? nyílván egy mezei gépen egy ilyen művelet másodperc töredéke alatt meglenne
Ne a válaszoló sematikusan vázolt hash-ét "hackolgasd", hanem a gyakorlatban használtat: [link]
Sok sikert a publikációidhoz és a hírnévhez!
Túlbonyolítjátok a kérdést...
Kérdező!
25 melyik számnak a négyzete?
Szeretem, amikor ilyeneken kezdenek el emberek izmozni. Nem arról van szó, hogy nincsenek eljárások, hanem arról van szó, hogy nincs értelme. Túlságosan időigényes. Igen, ha 12345 a kódom, akkor próbálgatással igen gyorsan ki lehet találni, de ennél jóval egyszerűbb, ha elhashelem magamnak azt, hogy 12345 és összehasonlítom a kettőt. Léteznek is ilyen adatbázisok, hogy mittom az 1000 leggyakoribb jelszó-t tartalmazza. Már csak egy megfelelő kódot kell írnom, ami végigpróbálgatja az összes kódot, vagy épp ki milyen permutációját szeretné ennek.
A gond, hogy értsd azzal van, hogy én használok pl. jelszó managert. Nekem nem nehéz megjegyezni a jelszavam. Ez az én banki jelszavam, tudod féltem a millióimat:
hLP8e)D9T2@si`zq6jT?poXjd+"@Tg@R4&5*:VjJx@UJ_f?5}Wy[X>;KWAm\(MKVV1>|w\&5y\BAru.&.U'Qd"+J-gulSv;N?Q1%c/Bu0UGIlYjTOS2e&^B$71U,F!c*
Nos, ha ezt elhasheled, próbálgatással évmilliók múlva sem fogok tudni belépni a bankszámlámra. Ugyanis a te elgondolásod alapján, ha megérné visszafejtegetni a kódokat, akkor ugye az algoritmusodnak előbb az elhashelt kódot kellene visszafejteni, hogy összehasonlítsa, helyes jleszót adtam e meg. Ennek nyilván nincsen semmi értelme, könnyebb az én megadott jelszavamat elhashelni és a két hash-t összehasonlítani.
Ráadásul ez már biztonságtechnikai kérdés. Így például én jobb szeretném, ha a gépemen mondjuk egy javascript elhashelné a jelszavamat, mielőtt elküldöm a világhálóra. Miért? Mert ki tudja ki hallgatja le a "titkos" vonalakat és ki fogja elfogni a jelszót. Ami, ha már eleve hashelve van, milyen kemény vagyok má.
---
Amire te szeretnél gondolom, hogy megCrackelsz jelszavakat és akkor a Juci facebook oldaláról leszedheted a privát meztelen képeit. Nah az ilyenek miatt használunk 1 urányú jelszó kódolásokat. És ma már olyan is létezik, hogy "sózás", ami azt teszi lehetővé, hogyha Pista és Karcsi 12345 -ös jelszót ad meg, akkor is különböző hash kódot generáljon nekik a rendszer. És még lehet ezt bonyolítani tovább.
A két irányú titkosítással az a probléma, hogy marha gyorsan lehet olyan algoritmust írni, ami visszafejti a kódot. Az eredeti képlet ismerete nélkül is. Sajnos ez van. Ma már az RSA-t is vissza lehet fejteni 6 lépésben. Fő is a bankok feje miatta :-]
Anonymus
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!