02. marts 2008 - 17:50Der er
46 kommentarer og 1 løsning
Dekryptering af md5-kode
Hejsa
Jeg er ved at lave en mail funktion der sender en email til brugeren med hans password. Det eneste (Men ret stort) problem jeg støder på er hvordan jeg kan vise passwordet. Jeg har nemlig gemt den i en krypteret form med md5(), så hvordan dekrypterer jeg?
Havde det på fornemmelsen :D Men det vil så sige at flere store brugersystemer, ikke krypterer deres passwords, siden at man kan få fremsendt sit password?
med rainbow Crack projektet kan du "dekrypterer" alle md5 hashede passwords på 16 karakterer og nedefter på omkring 4 minutter. Søg på Rainbow crack i google
Rainbow crack kan dekrypterer alle passwords fra 16 tegn og nedefter, Store og små bogstaver, tal og specialtegn. De skal nemlig ikke delrypteres, de skal bare slås op i en meget stor table og det tager ca 4 minutter når man gør det distribueret i et grid
Selve databasen er så kæmpestor at den vist ikke likker på en server, men mange fordelt ud over nettet så selve opslagene foretages samtidig på mange maskiner, det er derfor det kan gøres så hurtigt.
Jeg husker ikke om rainbow crack er gratis, men ved at opslag i tabellen er muligt fra diverse hacker linux distributioner. Hvordan det foregår fra windows ved jeg ikke
søg på rainbow crack det er derude. De 4 minutter er måske ovenikøbet et gammelt tal. Husk vi taler om distribueret samtidig søgning i mange databaser. Databasen er relativt simpel og betsår dybest set af to koloner, en med alle mulige kombinationer af 16 tegn og den anden kolone med hver muligheds tilsvarende md5 hashværdi. Så har du en hashværdi skal den "bare" findes i databasen så har du passswordet
Da jeg havde det samme problem, løste jeg ved at sende et link, der hed noget i retning af nytpassword.php?pass=[MD5], der lavede jeg så et db-opslag ($sql="SELECT * FROM users where md5=".addslashes($_GET['pass'])."\"") og en havde en form, hvorpå brugeren kunne indtaste et nyt password, med validering og hele balladen.
Mangler du ikke den halvdel der er søgeordet før det bliver hashet. Om man tror på det eller ej, så har rainbow crack projektet betydet at der i dag tales seriøst om two factor. Hvor langt de er nået ved jeg ikke og jeg ved heller ikke om man bruger disk teknologi. til den slags. Jeg har set den slags store tabeller der skulle gennemtravles nærmest fra ende til anden indtil man havde et resultat gennemført på bånd (Husker ikke om det var et eksperiment) hvor man faktisk kunne opnå ganske høje søgehastigheder
bufferzone >> Umiddelbart ser Arnes udregning helt korrekt ud - og hvad 'man' taler om på nettet, skal man nok tage med et vist gran salt (og ofte med et ton salt!). Det samme gælder mange af de eksempler folk opstiller.
F.eks. er det blevet et nærmest uigendriveligt faktum, at innerHTML er dramatisk hurtigere end DOM til data indsættelse i et dokument i forbindelse med Ajax. Årsagen er, at quirksmode.org har lavet et eksempel, der tydelig viser, at det forholder sig sådan.
Sagen er blot, at han i et laaaangt loop kun tester med indsættelse af ét tegn i et element. Laver man samme test med lidt større datamængder, får man helt andre resultater - f.eks. at DOM i Firefox kan være op til 15 gange hurtigere end innerHTML!
Samme site har 'begavet' os med lignende performance test omkring skift af CSS-klasse kontra skift af de enkelte style properties. Igen er det kun én test, der skal til at få skræmmende mange kodere til at slå fast som et uigendriveligt faktum, at klasseskift performer bedst. Ikke desto mindre har roenving og jeg ved flere lejligheder lavet eksempler i yderst realistiske dokumenter, hvor klasseskift tager flere sekunder længere end skift af de enkelte style propeties.
Werner Heisenberg sagde engang noget i stil med: "Det, vi oplever, er ikke virkeligheden - men virkeligheden udsat for vores måde at spørge på"
Man skal passe meget på med, hvad man lægger i de eksempler, man får forevist - samt at lytte til, hvad 'man' taler om ;o)
Jeg kunne ikke finde på at betvivle Arnes beregninger, men hele denne diskussion er noget teoretisk, især fordi jeg ikke er nøjagtig nok i mine udsagn. Se det er således.
Da "Crackingen" af passwordet i virkeligheden er et opslag i databasen, kunne vi teoretisk lige så godt finde det korrekte password til hasværdigen ved første opslag som ved sidste. De 4 minutter er derfor ikke et udtryk for hvor lang tid det ville tage at gennemlæse alle records i databasen, eller for den sags skyld hvor mange records der i virkeligheden er. De 4 minutter er en statisk værdi der siger noget om hvor lang tid det gennemsnitligt vil tage at slå et password op og hvis jeg husker korrekt (det er 5 år siden jeg sidst regnede på denne slags opgaver) så er det ikke engang et gennemsnit for alle passwords, men et udtryk for hvornår halvdelen af passwords vil være fundet.
Stadig under forudsætning af at jeg husker korrekt, så vil de 4 minutter altså være den tid det tager at finde 50 % af passwords, herunder både de dårlige, de korte, de direkte tåbelige.
Man skal huske at de fleste passwords er lavet af mennesker og de fleste af dem ikke er særlig gode, hvilket for mig betyder at de 4 minutter nok er et ret sobert tal for en given organisation og den så bruger 16 karakterer som sine passwords.
Jeg beklager min lidt løse formulering og skal gøre opmærksom på at jeg er i tvivl om de 50 % både som procent sats og om det er fundne passwords eller om det er 50 % af alle records. Min tid har ikke lige været til atjeg har kunne læse ordentligt op på det. Problemstillingen er i alle tilfælde virkelig nok og skulle jeg have ramt helt forkert og det faktisk tager hele 20 minutter at finde et password, så ville jeg ikke betragte denne tidsudvidelse i forhold til de 4 minutter som et fald for princippet faktisk ikke engang om det skulle tage en dag
Lige nu er det vist ikke antallet af minutter, men størrelsen på tabellen der virker mest underligt. Ikke nok med at den skal være helt enormt stor, det vil også tage pænt lang tid at lave den.
Det er ikke LM hashes du tænker på? De kan jo deles op i to dele, med 7 tegn i hver. Så behøver tabellen ikke være nær så stor for at bryde et komplekst password på op til 14 tegn
Hvis det ikke er muligt at gemme en sådan database p.g.a. størrelsen, så er truslen jo noget teoretisk.
Og et normalt dictionary attack er kun et database opslag, men brug af rainbow tables er faktisk en kombination af mange udregninger og database opslag.
Om man læser alle brugeroplysninger op i memory ved app start eller henter oplysninger om den enkelte bruger når de skal bruges har ikke så stor sikkerheds betydning.
Fordelen ved denne fremgangsmåde er, at jeg ikke behøver sidde og fedte med en streng, når jeg skal opdatere array'et. I stedet kan rette array'et med alle de array-funktioner, PHP tilbyder - og tilslut skrive det ud =)
Jeg kender godt fopen, men ikke implode. Så hvidt jeg ved bruges implode da til at indsætte et/flere tegn imellem det specificerede tegn, så hvordan virker linjen:
Din fremgangsmåde strider lodret mod gængs, god skik på Eksperten. Da du er rimelig ny i dette forum, ville det nok være en god idé at kikke lidt her: http://expfaq.dk/
Men for det første så det ikke ud til at der var aktivitet længere. For det andet drejer det sig ikke om så mange point, og for det tredje, ved jeg ikke hvem der skulle have disse point.
Men jeg er da klar på at oprette et par ekstra (tomme) spørgsmål og så give jeg nogle point, som en slags erstatning.
Det er for mig slet ikke et spørgsmål om points - eller for den sags skyld om Eksperten. Det mindste, man kan gøre, når folk kommer vrimlende for at hjælpe én, når man kalder, er at sige tak for hjælpen - uanset kontekst ;o)
1) Aktiviteten i dine spørgsmål afhænger jo af om sprøgsmålet er besvaret eller ej, og om du selv yder en aktiv indsats. Hvis dit spørgsmål er besvaret er der jo ingen grundt til yderligere aktivitet, andet end fra din side.
2) Om et spørgsmål er på 100 eller 15 point ændre intet ved om man skal være taknemlig for de svar man får. Antallet af point skal udelukkende afhænge af spørgsmålets omfang. Hvis et spørgsmål er besvaret tilstrækkeligt eller har været medvirkende til at spørgeren har fået løst sit problem, skal den som har skrevet svaret, vel som minimum have mulighed for at modtage point for sin ulejlighed og hjælp.
3) Hvem der skal have point afhænger af hvem der har svaret på dit spørgsmål. Hvis der er flere, så er der flere som skal dele point. Men det er op til dig at bedømme hvem der skal have point for rigtig svar.
Det kan vi godt være enig om ... med det vil vi ikke bære nag over.
Som spørger er det dit ansvar at fordele de point du har udlovet for at få et svar. Hvis der ikke er nogen som har lagt et Svar så beder du dem simpelthen bare om at lægge et sådan at du kan give dem point. :^)
Du kan spørge: Hvorfor lægger folk ikke bare et svar hvis de gerne vil have point? Svaret på dette er at der er dem som gerne vil vente med at lægge et svar før at det er 100 % sikkert at spørgeren faktisk har fået løst sit problem. Derfor.
Det vil jeg så være ekstra påpasselig med fremover.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.