Ik ben geïnteresseerd in informatiebeveiliging. Ik maakte onlangs kennis met het idee van hashen. Wat ik momenteel begrijp van hashing, is dat het wachtwoord nodig is dat een gebruiker invoert. Vervolgens genereert het willekeurig een “hash” met behulp van een aantal variabelen en alles door elkaar halen. Wanneer u vervolgens dit wachtwoord invoert om in te loggen, komt dat wachtwoord overeen met de hash. Er zijn maar een paar dingen die ik er niet van begrijp.

  1. Waarom is het zo moeilijk om deze hashes te kraken? Ik neem aan dat als je eenmaal de methode hebt gevonden die ze gebruiken om codeer het (laten we gaan met een extreem eenvoudige zoals Caesars cijfer, als je eenmaal weet hoeveel je moet verschuiven, kun je het voor hele boeken doen). Zelfs als het zoiets als tijd gebruikt en het door elkaar haalt, zijn er een aantal heel grote manieren waarop je de opties kunt beperken (laten we het Caesar-cijfer gebruiken, ze gebruiken het jaar mod x je weet al dat er realistisch gezien twee mogelijke jaren zijn, dan moet je gewoon zoek het tweede stukje van de puzzel).

  2. Als ze willekeurig worden gegenereerd (zelfs als twee wachtwoorden hetzelfde zijn, komen ze er anders uit), hoe kunnen ze dan zien of het correct?

  3. Hoe worden ze gekraakt. Hoe weet de hash-kat wanneer hij het wachtwoord succesvol heeft gedecodeerd?

Gerelateerde video (maar beantwoordt mijn vraag niet precies): https://www.youtube.com/watch?v=b4b8ktEV4Bg

Reacties

  • Als een klein antwoord op Q (3 ) meer specifiek programmas zoals oclHashcat proberen in de meeste gevallen miljoenen hashes in een vooraf bepaalde lijst. Ze ‘ decoderen ‘ het wachtwoord (onthoud je kunt alleen encryptie decoderen – hashing! = encryptie), maar ze weten of ze een wachtwoord proberen en de resulterende hash komt overeen met de hash die ze hebben, het moet het originele wachtwoord zijn geweest. Dat wil zeggen dat ze ‘ t decoderen, doen ze miljoenen keren per seconde met vallen en opstaan om te zien of ze een match kunnen krijgen. Daarom ‘ is het ook goed dat een hash langzaam is .
  • @Peleus Dit lijkt veel op wat ik bedoelde. Het enige is dat ik dacht dat bij het hashen van het wachtwoord ze gooien het willekeurig door elkaar. Hoe ze het wachtwoord nemen en het opnieuw door elkaar gooien met dezelfde willekeurige bewegingen. En als dezelfde invoer een andere uitvoer kan geven, dat verwart me ook.
  • Ik ‘ weet niet zeker of je ‘ zegt ” Ik dacht dat ze het willekeurig hadden gecodeerd ” zoals in jou ‘ ve nu anders geleerd, maar u weet dat ‘ zeker niet het geval is! Hashing is niet willekeurig, het is ‘ herhaalbaar – maar het is ‘ onmogelijk om achteruit te werken dat ‘ s alles. Een SHA256-hash van het woord ‘ cat ‘ zal altijd 100% van de tijd hetzelfde zijn. Dat ‘ is waarom we ze betrouwbaar kunnen gebruiken voor wachtwoorden. Als de hash elke keer een nieuwe waarde produceerde, en we konden alleen vergelijken met een eerdere hashwaarde, zouden we ‘ nooit weten of het wachtwoord juist was of niet! : D
  • Ik snap het. Deze video legt precies uit wat ik wilde weten. youtube.com/watch?v=vgTtHV04xRI
  • Een betere video waarin wordt uitgelegd waarom hashing wordt gebruikt. In tegenstelling tot de bovenstaande die RSA-codering uitlegt en waarom het ‘ moeilijker is om achteruit te gaan op een hash. youtube.com/watch?v=b4b8ktEV4Bg

Antwoord

Snel, factor 1081.

Of, als je dat liever hebt, beantwoord dit: wat is 23 keer 47?

Welke is gemakkelijker? Het is gemakkelijker om voer een vermenigvuldiging uit (volg de regels gewoon mechanisch) dan om de operanden te herstellen die alleen het product hebben gegeven. Vermenigvuldiging. (Dit is trouwens de basis van enkele cryptografische algoritmen zoals RSA .)

Cryptografische hashfuncties hebben verschillende wiskundige grondslagen, maar ze hebben dezelfde eigenschap: ze “zijn gemakkelijk te berekenen in de toekomst (bereken H (x) gegeven x), maar praktisch onmogelijk om terug te rekenen (gegeven y, bereken x zodanig dat H (x) = y). In feite is een van de tekenen van een goede cryptografische hash functie is dat er geen betere manier is om x te vinden dan ze allemaal te proberen en H (x) te berekenen totdat je een overeenkomst hebt gevonden.

Een andere belangrijke eigenschap van hashfuncties is dat twee verschillende invoer verschillende hashes hebben. als H (x 1 ) = H (x 2 ), kunnen we concluderen dat x 1 = x 2 Wiskundig gezien is dit onmogelijk – als de invoer langer is dan de lengte van de hash, moeten er botsingen zijn.Maar met een goede cryptografische hashfunctie is er geen bekende manier om een botsing te vinden met alle computerbronnen ter wereld.

Als je meer wilt weten over cryptografische hash -functies, lees dit antwoord van Thomas Pornin . Vooruit, ik wacht.

Merk op dat een hash-functie geen versleutelingsfunctie is. Versleuteling houdt in dat je kunt ontsleutelen (als je de sleutel kent). Met een hash is er geen magisch getal waarmee je terug kunt gaan.

De belangrijkste aanbevolen cryptografische hashfuncties zijn SHA-1 en de SHA-2 -familie (die beschikbaar is in verschillende uitvoerformaten, voornamelijk SHA-256 en SHA-512). MD5 is een oudere, nu verouderd omdat er bekende botsingen zijn. Uiteindelijk is er geen wiskundig bewijs dat het inderdaad goede cryptografische hash-functies zijn, alleen een wijdverbreide overtuiging omdat veel professionele cryptografen jaren van hun leven hebben geprobeerd, maar er niet in geslaagd zijn, ze te doorbreken.

Oké, dat ” is een deel van het verhaal. Nu is een wachtwoordhash niet direct een cryptografische hashfunctie. Een wachtwoordhashfunctie (PHF) heeft twee invoer nodig: het wachtwoord en een salt. De salt wordt willekeurig gegenereerd wanneer de gebruiker zijn wachtwoord kiest, en het is opgeslagen samen met het gehashte wachtwoord PHF (wachtwoord, salt). (het gaat erom dat twee verschillende accounts altijd verschillende salts hebben en dat het willekeurig genereren van een voldoende grote salt een goede manier is om deze eigenschap met een overweldigende waarschijnlijkheid te hebben.) nogmaals, het verificatiesysteem leest de salt uit de wachtwoorddatabase, berekent PHF (wachtwoord, salt) en verifieert dat de resultaat is wat er in de database is opgeslagen.

Het punt van het zout is dat als iemand een wachtwoord wil kraken, ze “de hash voordat ze kunnen starten , en ze moeten elk account afzonderlijk aanvallen. Het zout maakt het onmogelijk om vooraf veel kraakwerk uit te voeren, b.v. door een regenboogtafel te genereren.

Dit antwoordt (2) en (3) – de legitieme verificateur en de aanvaller komen erachter in hetzelfde of het wachtwoord (ingevoerd door de gebruiker of geraden door de aanvaller) correct is. Een laatste punt in het verhaal: een goede wachtwoord-hashfunctie heeft een extra eigenschap, deze moet traag zijn. De legitieme server hoeft het slechts één keer per inlogpoging te berekenen, terwijl een aanvaller het één keer per poging moet berekenen, dus de traagheid doet de aanvaller meer pijn (wat nodig is, omdat de aanvaller doorgaans meer, gespecialiseerde hardware heeft).

Als u ooit wachtwoorden moet hashen, bedenk dan niet uw eigen methode . Gebruik er een van de standaardmethoden : scrypt , bcrypt of PBKDF2 .  

Reacties

  • Verdomme naar de beveiligingssite komen van alle anderen en het enige dat heel duidelijk is, is dat jullie waanzinnig veel werk hebben gestoken in het beantwoorden. Niet alleen correct maar ook buitengewoon grondig. Ik zou willen dat ik twee antwoorden kon selecteren, maar die van jou leek veel meer op wat Ik zocht.
  • @Griffin – Je kunt echter beide stemmen. Of inderdaad – als er ‘ is meer dan t wo antwoorden – stem tegen iedereen waarvan je denkt dat ze nuttig waren, zelfs als je er maar één kunt accepteren. Veel vragen hier hebben meer dan één goed antwoord, en soms wordt ‘ zelfs aanbevolen om de meeste antwoorden te lezen om een beter begrip van het onderwerp te krijgen. Ja, soms zelfs degenen met een lagere stem. Door te stemmen (in beide richtingen), help je ook toekomstige lezers om te beslissen over de geldigheid van antwoorden, vooral die lezers die nog aan het leren zijn over een bepaald onderwerp. 😉
  • Ik heb beide gestemd! Ze waren buitengewoon nuttig.
  • +1: alle antwoorden zijn goed, maar deze is ongeveer net zo dicht bij een perfect antwoord als ik ‘ heb ooit gezien op Stack Exchange. Zou +10 als ik kon.
  • @IlmariKaronen Dat ‘ is waarom ik hier graag kom.

Antwoord

Cryptografische hashfuncties zijn wiskundige objecten die kunnen worden omschreven als “een grote mix en versleutelingsactie van enkele stukjes “. Ze nemen als invoer een reeks bits (mogelijk een zeer lange) en bieden een uitvoer met een vaste grootte. Globaal gesproken zijn ze zo verward dat, hoewel er niets geheims aan is (dat is slechts deterministische code), niemand kan achterhalen hoe ze te “omkeren” (vind een overeenkomende invoer voor een bepaalde uitvoer) behalve door de basismethode genaamd “geluk”: probeer willekeurige invoer totdat er een overeenkomst is gevonden.

Hoe het wetenschappelijk kan gebeuren dat hash-functies überhaupt kunnen bestaan, is een goede vraag .

Hashing is geen versleuteling . Er is geen geheim, geen sleutel in hashing.

Hash-functies hebben veel toepassingen; een daarvan is “wachtwoordopslag”. Een hash-functie lijkt een goede zaak voor het opslaan van wachtwoorden. We willen wachtwoorden niet rechtstreeks opslaan (anders zou een af en toe kijken in onze databases door de aanvaller hem te veel informatie geven; zie deze blogpost voor een discussie) ; we willen tokens voor wachtwoordverificatie opslaan: iets dat de verificatie van een wachtwoord (dat de gebruiker presenteert) mogelijk maakt, maar het wachtwoord zelf niet onthult. Dus het idee is: laten we de hash van het wachtwoord opslaan. Wanneer een wachtwoord moet worden geverifieerd, berekenen we gewoon de hash en kijken of deze overeenkomt met de opgeslagen waarde. Maar het is moeilijk om het wachtwoord te raden aan de hand van de hash-waarde, omdat de hash-functie is veerkrachtig tegen “inversie” (zie hierboven).

Aangezien wachtwoorden een speciaal soort gegevens zijn (dat zijn gegevens die mensen kunnen onthouden), hebben we voor een goede beveiliging een hash-functie:

  • We willen een zeer langzame hash-functie.
  • We willen geen één hash-functie, maar veel verschillende hash-functies, zodat elk wachtwoord zal worden gehasht met zijn eigen hash-functie; dit gaat over het afschrikken van parallelle aanvallen. Dit proces waarbij een enkele hash-functie in vele varianten wordt omgezet, wordt salting genoemd.

Zie dit antwoord voor een grondige behandeling van het onderwerp hashing van wachtwoorden.

Opmerkingen

  • Sorry maar hoewel je antwoord buitengewoon grondig en goed samengesteld was, vond ik het andere antwoord lijkt meer op wat ik zocht.

Antwoord

Hashing is een functie van bitstring (meestal variabele lengte) naar een andere bitstring (meestal kleiner en met een vaste lengte).

Hashing wordt gebruikt in databases voor het ophalen van gegevens en in datastructuren in het geheugen die hashtabellen worden genoemd. Het stelt ons in staat om willekeurige gegevens, zoals een tekenreeks of een gecompliceerd object met veel velden, te reduceren tot een binair getal dat vervolgens direct kan worden gebruikt als een index in een beperkte array om de bijbehorende gegevens op te halen (met enkele details voor het afhandelen van hash botsingen).

De hashfuncties die op de bovenstaande manier worden gebruikt, zijn “neven” van cryptografische hashfuncties. Ze zijn ontworpen om aan verschillende eisen te voldoen. Ze moeten snel kunnen worden berekend en een goede distributie bereiken.

Bij beveiligd computergebruik worden cryptografische hashes gebruikt om gegevens in een representatieve, kleine bitstring te verwerken. Cryptografische functies hebben verschillende vereisten. Ze zijn zo ontworpen dat ze moeilijk omkeerbaar zijn (als “valluik” – of “eenrichtings” -functies). Niet alleen dat, maar een belangrijke vereiste is dat het moeilijk moet zijn om, voor een bepaalde platte tekst en hash-waarde, een andere platte tekst te vinden die dezelfde hash produceert.

Hashing kan niet alleen worden gebruikt voor wachtwoorden, maar als een checksum voor het verifiëren van de gegevensintegriteit en als onderdeel van de implementatie van digitale handtekeningen. Om een groot document digitaal te ondertekenen, hoeven we het document alleen maar te hashen om een “digest” te produceren (een naam die wordt gebruikt voor de uitvoer van een hash-functie, wanneer iets heel lang wordt gehasht). Vervolgens wordt alleen deze samenvatting door het cryptosysteem met openbare sleutel geleid om een handtekening te produceren. U kunt de zwakte daar zien: wat als een aanvaller erin slaagt een document te produceren met dezelfde samenvatting? Dan lijkt het erop dat de originele handtekening die over het echte document wordt geproduceerd, in feite een handtekening is van een vals document: een handtekening-transplanterende vervalsing is effectief gepleegd.

Met hashing van wachtwoorden kunnen systemen de platte tekstversie van een wachtwoord, maar stelt hen in staat om te verifiëren of de gebruiker die toegang probeert te krijgen, dat wachtwoord kent. Hashing staat niet alleen toe dat systemen de wachtwoorden in platte tekst niet opslaan (die zeer zorgvuldig zouden moeten worden bewaakt), maar het biedt ook de mogelijkheid dat zelfs als de hashes openbaar worden gemaakt, de wachtwoorden nog steeds veilig zijn (vergelijkbaar met systemen zijn in staat om openbare sleutels te onthullen). Hoewel in de praktijk hashes niettemin worden beschermd tegen openbare toegang: bijvoorbeeld /etc/shadow bestanden op Unix-achtige systemen, als aanvulling op wereldleesbare /etc/passwd bestanden .

De hash-functie is allesbehalve willekeurig. Randomisatie wordt echter gebruikt om aanvallers te dwarsbomen die grote woordenboeken met wachtwoorden en hashes bouwen, waardoor ze een hashcode kunnen opzoeken en het bijbehorende wachtwoord kunnen ophalen.

Om een wachtwoord veiliger te hashen, kunnen we eenvoudig enkele willekeurige stukjes ervan, een “zout” genoemd. Verschillende salts die aan hetzelfde wachtwoord worden toegevoegd, leiden natuurlijk tot verschillende hashes (hopelijk met weinig of geen botsingen).

Als de willekeurige salt bijvoorbeeld 32 bits breed is, betekent dit dat in theorie één wachtwoord op meer dan vier miljard verschillende manieren kan hashen, waardoor het erg onpraktisch is om een vooraf berekend woordenboek van alle mogelijke hashes te hebben van een groot aantal wachtwoorden.

Natuurlijk, wanneer de gebruiker wordt geauthenticeerd, weet ze niets van dit zout. Dat is oké, want de salt wordt samen met de hash opgeslagen in het gebruikersprofiel (vaak gecombineerd met de hash in een enkele compacte bitstring). Wanneer de wachtwoordinvoer van de gebruiker wordt gevalideerd, wordt de salt toegevoegd aan het wachtwoord ze kwam binnen, zodat het hashen wordt uitgevoerd met het juiste zout. Als het wachtwoord correct is, zal de hash overeenkomen, aangezien het gebruikte salt ook de juiste is, omdat het uit het gebruikersprofiel is gehaald.

Dus zo wordt willekeur in het hashen van wachtwoorden opgenomen, terwijl het nog steeds werkt.

Wat hashes moeilijk te kraken maakt, is dat ze zijn opgebouwd uit valdeur- of eenrichtings-functies. In de wiskunde zijn er veel voorbeelden van dergelijke dingen. is een simpele optelling een valdeur. Als we een aantal gehele getallen toevoegen om een som te produceren, is het onmogelijk om de originele getallen terug te krijgen, omdat we alleen de som kennen.

Wachtwoord-hashes zijn geen gecodeerde wachtwoorden. Als een aanvaller de hash en salt van een wachtwoord, en toevallig het wachtwoord raadt, dan kan ze dit gemakkelijk bevestigen, precies op dezelfde manier als de login authenticator software het doet: ze voert het wachtwoord plus salt door de hashing-functie en ziet dat de juiste hash komt tevoorschijn.

Reacties

  • Uitstekende schrijfvaardigheid en een erg gemakkelijke Om een antwoord te begrijpen dat feitelijk correct is, maar toch alle punten aanpakt en er een natuurlijke stroom naar toe houdt die het zoveel uitgebreider maakt. Dat ‘ is geen gemakkelijke prestatie, heel erg bedankt voor je antwoord!
  • zeer informatief. Je hebt alle aspecten behandeld.

Answer

Een van de sleutels tot hashing is dat het informatie weggooit. Je kunt een hash niet omkeren omdat de benodigde kennis verdwenen is. Hier zijn een paar voorbeelden van werkbare (maar vrij waardeloze) hashfuncties. Als je me een wachtwoord geeft, kan ik zoiets als een van de volgende doen:

  • Tel het aantal klinkers
  • Neem de ASCII-code voor elke letter en XOR ze allemaal samen
  • Neem de CRC32-checksum van de binaire weergave van het wachtwoord (dit is eigenlijk een echte hash, alleen geen cryptografische)

In elk van deze gevallen kan ik het proces niet omkeren. In plaats daarvan moet ik het proces opnieuw uitvoeren wanneer u mij het wachtwoord later opnieuw geeft om te zien of de berekening die ik heb uitgevoerd overeenkomt.

Voor voorbeeld: als je me aanvankelijk het wachtwoord aap geeft, kan ik het nummer 3 (3 klinkers) opslaan. Als ik later het wachtwoord draak probeer te verifiëren, voer ik dezelfde controle opnieuw uit en bedenk ik 2, die komt niet overeen met 3. Dus ik weet dat je me het verkeerde wachtwoord hebt gegeven. Maar als je me het wachtwoord “melissa” geeft, ga ik er ten onrechte van uit dat je het juiste wachtwoord hebt ingevoerd. Dit is een hash botsing .

De set regels die u toepast om het nummer te bedenken dat vertegenwoordigt een bepaald wachtwoord is uw hash-functie . Deze worden beschouwd als “eenrichtings” -functies omdat u ze niet zou moeten kunnen “ongedaan maken”. Hash-functies van hoge kwaliteit zijn ontworpen om het aantal mogelijke botsingen te beperken, zodat u zich geen zorgen hoeft te maken over dat probleem. Een stap verder, cryptografische hash-functies zijn ontworpen om het moeilijk te maken om een string te bedenken die overeenkomt met een bepaalde output ( en misschien opzettelijk botsingen veroorzaken). Ze zijn ook ontworpen om de hoeveelheid informatie die u kunt verzamelen over een bepaalde invoer te beperken uit alleen de hash-uitvoer.

Dus als resultaat, is de enige manier om erachter te komen welk wachtwoord overeenkomt met een bepaalde cryptografische hash, alle mogelijkheden te proberen totdat je er een tegenkomt die werkt. Verdere tegenmaatregelen (salt, BPKDF2, enz.) Maken dit raadproces nog moeilijker door de persoon die het wachtwoord raadt bij elke poging door meer hoepels te laten springen.

Merk op dat ik volledig verdoezelde hoe een cryptografische hashfunctie het maakt moeilijk om een werkend wachtwoord te bedenken (zelfs als het niet het originele wachtwoord is). Dit wordt een “ preimage-aanval “. In het triviale voorbeeld hierboven is het bedenken van” melissa “als een kandidaat-wachtwoord met 3 klinkers een voorbeeld van een dergelijke aanval.

Cryptografische hashfuncties doen dit meestal door de invoer door meerdere” rondes “van een bepaald proces, waarbij de uitvoer van elke ronde deel wordt van de invoer voor de volgende.Om de invoer van de eerste ronde te achterhalen, “zou je de invoer van de tweede ronde moeten uitzoeken, waarvoor je op zijn beurt de invoer van de derde ronde moet uitzoeken, enz., Wat betekent dat elke gok van elk onderdeel moet worden gecontroleerd door een lange en complexe reeks berekeningen. Thomas Pornin heeft een behoorlijk uitputtende uitleg van hoe deze weerstand werkt; best handig als je echt wilt lezen begrijp het.

Antwoord

  1. Bepaal de constante waarde van z die voldoet aan deze vergelijking: xy ^ 7 + yz ^ 5 + x ^ 3z = 0. Hulp nodig? OK, x = 32. Kun je het nog steeds niet oplossen? Dan zou je het antwoord in de eerste plaats niet moeten weten.

    De waarde van y, die dit zal reduceren tot een enkele variabelevergelijking, waardoor het oplossen voor die enkele variabele triviaal is voor elke groep uit de zesde klas (mogelijk een rekenmachine nodig), is een geheim dat ik alleen heb gedeeld met mensen die ik vertrouw. Zonder dit zou z alles kunnen zijn; de waarde ervan is afhankelijk van y en kan dus niet naar tevredenheid worden opgelost zonder een constante, bekende y. Ik ken je waarde, het is omdat ik je niet genoeg vertrouwd heb om het je privé te geven.

    Dit is het basisprincipe van cryptografie; de wiskundige formule of een ander deterministisch proces is goed -gedocumenteerd, en een of meer van de mogelijke variabelen van de formule mogen ook publiekelijk bekend zijn, waardoor de twee partijen het eens kunnen worden over een manier om hun cijfers in te stellen, zodat elk kan decoderen wat de ander codeert. Er zijn echter twee variabelen blijf geheim, als je er een kent, kun je de ander ontdekken. Degene die je zou moeten kennen is de sleutel, en degene die jij kan ontdekken met de sleutel is de boodschap.

    Voor een hash is het een beetje anders. Voor een hash hoeft niet het ene geheim bewaard te worden om een ander geheim te houden. In plaats daarvan werken hashes op basis van een onomkeerbare wiskundige transformatie; voor elke H (x) = y is er geen bekende H -1 (y) = x behalve om H (x) te proberen voor alle mogelijke x totdat je y krijgt. Meestal komt dit doordat verschillende tussenresultaten van de vergelijking dubbelzinnig zijn; het berekenen van de vierkantswortel van een positief getal levert bijvoorbeeld technisch beide een positief en negatief resultaat, aangezien een van beide getallen met zichzelf zou kunnen worden vermenigvuldigd om het resultaat te produceren. De inverse van een modulus is even dubbelzinnig; het getal 1, geproduceerd door x mod 3, had kunnen worden geproduceerd door elke x = 3k + 1. Dit soort “eenrichtings” -transformaties worden zo gecombineerd dat het proberen om de inverse hash-functie te berekenen oneindig veel mogelijkheden genereert; de gemakkelijkste (gemakkelijkste) manier om ze op te lossen is daarom om gewoon elke mogelijke invoer te proberen totdat een uitvoer overeenkomt. duurt nog steeds lang.

  2. Hashes zijn niet willekeurig. Zoals ik eerder al zei, zijn hashes het resultaat van een onomkeerbare wiskundige bewerking. Die operatie moet nog steeds deterministisch zijn; bij een constante invoer is de uitvoer constant, ongeacht hoe vaak u de bewerking uitvoert. Er is geen willekeurige component.

    Waar je misschien in de war bent geraakt, is de term voor wat een hash simuleert, wat een willekeurig orakel is. Stel je een zwarte doos voor, waarin zich een kleine man bevindt met een fotografisch geheugen en een mystieke methode om perfect willekeurige getallen te genereren. Je schrijft iets op een stuk papier en duwt het door een gleuf waar de man het pakt. Hij leest het, en er gebeuren twee dingen. Ofwel heeft hij het niet eerder gelezen, in welk geval hij een nieuw willekeurig nummer zal genereren en het aan u zal geven, waarbij zowel uw bericht als het nummer in zijn geheugen wordt vastgelegd. Of hij heeft dit exact gelezen bericht eerder, in welk geval hij het nummer onthoudt dat hij de eerste keer dat hij het las, onthoudt en u het nummer geeft. De generator van willekeurige getallen zal nooit een nummer genereren dat het al heeft gegenereerd, het heeft een oneindige mogelijke grootte, en de kleine man s geheugen is onbeperkt en onfeilbaar. Daarom zal de kleine man nooit denken dat hij een bericht eerder heeft gelezen als hij dat niet heeft gedaan, nooit vergeet dat hij een bericht eerder heeft gelezen, en dus nooit, nooit, twee verschillende nummers zal produceren voor exact hetzelfde bericht of hetzelfde. nummer voor twee verschillende berichten.

    Dit is wat hash-functies proberen te simuleren. Ze kunnen deze kleine man niet modelleren met het fotografische geheugen, omdat dat oneindige opslagruimte en onbeperkte, universele beschikbaarheid zou vereisen, zelfs voor apparaten die op geen enkele andere manier met een ander apparaat zijn verbonden. In plaats daarvan vertrouwen ze op een deterministische maar willekeurig- ogende berekening die het bericht verteert in zijn hash-waarde. Dezelfde hash-functie, gegeven hetzelfde bericht, zal hetzelfde overzicht produceren; deze functies zijn echter beperkt in het aantal hash-waarden dat ze mogen retourneren. Dit creëert de mogelijkheid van wat we hash-botsingen noemen; er zijn meer mogelijke berichten dan hash-waarden, dus vroeg of laat (hopelijk later), twee verschillende ik ssages zullen dezelfde hash produceren.

  3. Hashes kunnen om drie fundamentele redenen worden gekraakt.Ten eerste, omdat ze een deterministische, wiskundige afleiding zijn van hun bericht, vinden wiskundigen (en dus aanvallers) uiteindelijk een wiskundige relatie tussen een bericht en zijn hash, of tussen twee berichten en de resulterende hashes. Wat ooit willekeurig keek, is dat niet meer. Dat zou een aantal aanvallen mogelijk maken op basis van de aard van de gevonden zwakte; als er een algoritmische manier is, gegeven een bericht en zijn hash, om een botsend bericht te genereren, is dat een probleem. Als er een manier is om een bericht te manipuleren en de resulterende hash te voorspellen, is dat een ander probleem. Als er in feite een manier is om de hash om te keren en een bericht van de hash te produceren dat, wanneer opnieuw gehasht, dezelfde hash produceert, is dat “een serieus probleem.

    Ten tweede, omdat hashes een beperkte samenvatting hebben, zullen vroeg of laat twee berichten dezelfde hash produceren. Dat betekent dat een aanvaller het -bericht dat je gebruikt om een bepaalde hash te produceren, niet hoeft te vinden. ; het enige wat hij hoeft te doen is een bericht te vinden dat dezelfde hash produceert. De kans hierop is klein, theoretisch één kans op hoeveel mogelijke hashes er ook zijn, maar nog steeds beter dan één in oneindig.

    Ten slotte, hoewel er veel mogelijke berichten zijn, zijn er een veel kleinere aantal waarschijnlijke berichten. De berichten die we doorgaans aan hash-functies geven, hebben meestal enige structuur (op basis van taal, onderwerp, elektronische opmaak en doel), wat betekent dat we, gezien een deel van het bericht, andere delen van het bericht nauwkeuriger kunnen raden. Dit betekent, in informatiewetenschappelijke termen, dat berichten die in hashes worden omgezet, vaak een lagere entropie hebben dan de hashfunctie zelf; Simpel gezegd, een hash-functie die 256-bits samenvattingen produceert, kan theoretisch elke permutatie van die bits produceren, 2 ^ 256. Als er echter bijvoorbeeld slechts 10.000 mogelijke berichten zijn die ooit in deze hashfunctie zouden kunnen worden ingevoerd door een systeem dat wordt onderzocht op aanvallen, dan zullen slechts 10.000 van de 2 ^ 256 mogelijke hashwaarden ooit worden gezien, en wat nog belangrijker is, een aanvaller zou, in het ergste geval, alleen alle 10.000 mogelijke invoer hoeven te proberen om degene te vinden die de hash-waarde produceert waarnaar hij op zoek is.

Opmerkingen

  • En dit … is waarom ik hou van IT-beveiliging ‘ s stack exchange site-ding.
  • Ook jouw uitleg van # 1 is precies wat ik nodig had. Ik heb echter een vraag. Het lijkt erop dat ” hashes ” zijn als nummerversies voor een bepaald ding (wachtwoorden in dit geval). Dus als ik een website heb en 100.000 mensen melden zich aan. Vervolgens gebruikt 50% het wachtwoord ” wachtwoord ” Ik kan een hoop ruimte besparen door alleen de gehashte waarde van ” wachtwoord ” in plaats van wachtwoord een heleboel keren?
  • Als je ‘ opnieuw een veilige hash gebruiken (> = 256-bits digest-grootte) en vervolgens de gehashte waarde van ” wachtwoord ” gaat uw opslagruimte vergroten. Bovendien, als een aanvaller ooit zou zien dat 50% van de gebruikersaccounts dezelfde wachtwoordhash had, zou hij ‘ weten dat hij ‘ d moet doen is één wachtwoord kraken en hij heeft toegang tot 50% van de gebruikersaccounts. U moet ” salting ” uw wachtwoord-hashes zijn; er zijn verschillende methoden, maar het eindresultaat is dat hetzelfde wachtwoord gehasht door hetzelfde algoritme een andere samenvatting oplevert, vanwege een extra unieke zoutwaarde voor elk account.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *