Vingerafdrukken van uw bestanden

Drie cryptografen van Stanford University kwamen onlangs met een slimme oplossing voor het hardnekkige probleem van identiteitsdiefstal op internet. Slimme hackers in Rusland, China en andere landen sturen stapels e-mailberichten die eruitzien alsof ze afkomstig zijn van een financiële instelling zoals Citibank of Paypal. Miljoenen consumenten krijgen deze berichten, die HTML-links bevatten die de nietsvermoedende ontvanger naar vergelijkbare websites leiden die in verre oorden worden uitgevoerd. U wordt gevraagd een gebruikersnaam en wachtwoord in te voeren en vervolgens heeft de hacker de sleutels van uw bankrekening.





Maar goede gebruikersnamen en wachtwoorden die op slechte websites worden getypt, zijn niet de enige bedreiging waarmee consumenten worden geconfronteerd. Een potentieel groter probleem is dat veel mensen op meerdere sites dezelfde combinatie van gebruikersnaam en wachtwoord gebruiken. Dit maakt het onthouden gemakkelijker, maar het betekent dat een gewetenloze website-exploitant een lijst met gebruikersnamen en wachtwoorden van bijvoorbeeld een internet-sweepstake-site kan nemen en deze kan gebruiken om te proberen in te breken op online bankrekeningen.

Dus Stanford-cryptografen Blake Ross, Dan Boneh en John Mitchell hebben een slimme plug-in voor Internet Explorer ontworpen die dit probleem oplost door te versleutelen wat je typt in het wachtwoordveld, zodat elke website een ander wachtwoord ziet. en op het domein van de website zelf.

Nu gebruiken veel mensen een variant op deze strategie. Hun Hotmail-wachtwoord kan nosmis-hotmail zijn terwijl hun Yahoo! Het wachtwoord voor contactadvertenties is nosmis-Yahoo! Maar elke strategie als deze is vrij eenvoudig te ontcijferen. De methode voor het versleutelen van wachtwoorden die het Stanford-trio heeft bedacht, is gebaseerd op een wiskundige functie die een cryptografische hasha-achtige eenrichtingsfunctie wordt genoemd en die wat de gebruiker typt, omzet in een wirwar van cijfers en letters op een manier die niet kan worden teruggedraaid. Omdat het Stanford-systeem de cryptografische hash van zowel het domein van de website als het wachtwoord van de gebruiker berekent, krijgt de hacker andere wachtwoorden dan de legitieme. (Klik hier om details over deze slimme oplossing te vinden.)



Een bedrijf dat cryptografische hashes op een zeer openbare manier gebruikt, is Yahoo! Vorig jaar heeft Yahoo! heeft het inlogproces op zijn website opnieuw ontworpen om het snuffelbestendig te maken. De standaard manier om dit te doen is door middel van encryptie. Maar codering kan traag zijn, vooral wanneer u een van de meest populaire sites op internet gebruikt.

Dus wat Yahoo! in plaats daarvan was het aanpassen van de inlogpagina om een ​​zogenaamd challenge-response-systeem te gebruiken op basis van een cryptografische hash. Wanneer u probeert in te loggen, downloadt de server van Yahoo! naar uw browser een cryptografische hashfunctie die is geschreven in JavaScript. Samen met deze functie is een uitdaging een korte reeks letters en cijfers. Wanneer u uw wachtwoord in het inlogscherm typt, neemt uw browser uw wachtwoord, voegt deze door Yahoo! verstrekte tekens toe en berekent de cryptografische hash van de resulterende string. De browser stuurt vervolgens de resulterende waarde terug naar Yahoo!, en er is geen codering nodig. Zelfs als je in een cybercafé je webverkeer laat opsnuiven door Belgische hackers, is er geen manier voor de slechteriken om de resulterende hash-waarde te nemen en je oorspronkelijke wachtwoord af te leiden.

Dit slimme challenge-response-systeem ligt ook aan de basis van het Mobil Speedpass-systeem: dat maakt de Speedpass-tag voor radiofrequentie-identificatie (RFID) zo moeilijk te klonen. Andere RFID-systemen gebruiken geen challenge-response, waardoor ze relatief eenvoudig kunnen worden aangevallen.



Maar wat is deze cryptografische hashfunctie eigenlijk?

De ongelooflijk nuttige hasj

Cryptografische hashfuncties zijn een van de fundamentele bouwstenen van de huidige digitale economie. Toch blijven ze in veel opzichten een mysterie, zowel voor de cryptografen die ze maken als voor het grote publiek dat ze elke dag gebruikt.



Hashfuncties worden soms vingerafdrukfuncties genoemd omdat ze kunnen worden gebruikt om een ​​unieke vingerafdruk van een digitaal bestand te maken. De vingerafdrukken zijn meestal 128-bits of 160-bits getallen die worden weergegeven als een reeks hexadecimale cijfers. De vingerafdruk van mijn naam met behulp van het MD5-systeem is bijvoorbeeld c55bbe0f3ba258f5b1cb6d5b62b0b360. Hash-functies zijn zo ontworpen dat, althans in theorie, geen twee bestanden ooit naar dezelfde waarde zullen worden gehasht.

Om u een idee te geven van hoe deze functies voor vingerafdrukken werken, hebben we hieronder een op JavaScript gebaseerde MD5-calculator ingesloten. Typ gewoon wat tekst en je kunt de MD5-hash zien. Merk op hoe het volledig verandert elke keer dat u een letter toevoegt, verwijdert of wijzigt. De manier waarop de vingerafdruk verandert is inderdaad onvoorspelbaar, als we zouden kunnen voorspellen hoe deze verandert, dan zouden bestandsvingerafdrukken niet erg nuttig zijn.

Vul hieronder uw tekst in:

De MD5 is:

De meeste hashfuncties die tegenwoordig worden gebruikt, zijn gebaseerd op een techniek die in de jaren tachtig is ontwikkeld door MIT-professor Ron Rivest. (Rivest is waarschijnlijk het best bekend als de R in het RSA-coderingsalgoritme, het openbare-sleutelcoderingsalgoritme dat in praktisch elke webbrowser is ingebouwd.) In die tijd werkten Rivest en andere wiskundigen de details uit van de cryptografische basisbewerkingen die we nu vanzelfsprekend vinden. De hash-functies waren bedoeld als een soort cryptografisch compressiesysteem, een manier om een ​​groot bestand te verkleinen tot een korte reeks letters en cijfers.



Het idee was om deze vingerafdrukken te gebruiken als een soort surrogaat voor de bestanden zelf. In plaats van het hele bestand digitaal te ondertekenen, redeneerden Rivest en anderen, zou je de hash digitaal kunnen ondertekenen. Omdat cryptografie met openbare sleutels veel zware wiskunde met zich meebrengt, maken hash-functies het bijna net zo snel om een ​​extreem lang bestand te ondertekenen als om een ​​kort bestand te ondertekenen.

Een van de meest basale dingen die je met een hash-functie kunt doen, is uitzoeken of een bestand is gewijzigd: bereken gewoon de hash van een bestand en schrijf het op. Later bereken je de hash opnieuw. Als de hash niet is gewijzigd, is de kans overweldigend dat het bestand ook niet is gewijzigd.

Stel bijvoorbeeld dat u de financiën van uw kleine bedrijf bijhoudt met QuickBooks en dat u een paar dagen op vakantie wilt: mensen moeten uw computer gebruiken, maar u wilt ervoor zorgen dat niemand de QuickBooks-gegevens wijzigt. Een eenvoudig ding dat u kunt doen, is de cryptografische hash van het bestand berekenen voordat u vertrekt en het nummer op een indexkaart schrijven. Als je terugkomt van vakantie, bereken je de hash opnieuw. Als de twee waarden niet overeenkomen, weet u dat er met het bestand is geknoeid.

Natuurlijk hoeft u niet te stoppen met slechts één bestand. Je zou de cryptografische hash van elk bestand op je computer kunnen berekenen en ze allemaal in een nieuw bestand kunnen plaatsen, dat bestand hashes.txt aanroepen. Je zou dan de hash van hashes.txt kunnen berekenen en deze vingerafdruk op je notitiekaart kunnen schrijven. Herhaal het proces wanneer u terugkomt van vakantie en u zult snel weten of een bestand op uw hele computer is gewijzigd. (U zult op geen enkele manier weten welk bestand is gewijzigd, maar dat is een ander probleem.)

Dit idee om de hash van een hash te berekenen, is de basis van een inbraakdetectiesysteem genaamd Tripwire, dat in het begin van de jaren negentig, professor computerwetenschappen van de Purdue University, Gene Spafford en zijn afgestudeerde student Gene Kim uitvonden. (Spafford en ik hebben samen vijf boeken over computerwetenschap geschreven.) Tegenwoordig gebruiken veel verschillende programma's deze Tripwire-aanpak om de integriteit van computerbestanden en databases te verzekeren.

Het berekenen van hashes van hashes is ook de basis van een veilige tijdstempelservice die is uitgevonden door Stuart Haber en Scott Stornetta terwijl de twee in 1990 bij Bellcore waren. De service, genaamd Surety, maakt het mogelijk om cryptografisch veilig en onvervalsbaar bewijs te genereren dat een bepaald document , foto of ander bestand bestond op een bepaald tijdstip op een bepaalde datum en is sindsdien niet gewijzigd.

De Surety-techniek werkt door een hash-boom te berekenen op basis van de hash-codes van elk document met een tijdstempel. De wortel van de boom wordt vervolgens gepubliceerd op een bekende locatie, deze kan bijvoorbeeld worden afgedrukt in een rubrieksadvertentie in de New York Times . U kunt aantonen dat uw document op de betreffende dag bestond door aan te tonen dat de vingerafdruk van uw documenten nodig was om de vingerafdruk-van-vingerafdrukken te genereren die in de krant verschenen.

Andere bedrijven en zelfs de U.S. Postal Service hebben sindsdien hun eigen elektronische tijdstempelservice gecreëerd. Maar al deze systemen zijn afhankelijk van een organisatie die optreedt als een vertrouwde derde partij die in feite uw document ondertekent met hun persoonlijke sleutel. Het probleem met deze aanpak is dat de derde partij volledig betrouwbaar moet zijn: als die derde besluit een handtekening met de verkeerde datum te maken, of als een hacker erin slaagt de persoonlijke sleutel van de derde partij te stelen, is er geen manier om onderscheid een frauduleuze handtekening van een geldige. Het is natuurlijk ook mogelijk om frauduleuze borgtochthandtekeningen te maken, maar u moet ofwel teruggaan in de tijd en wijzigen wat er in de New York Times , of reis de hele wereld over, zoek elk exemplaar dat is afgedrukt en verander de oude vingerafdruk-van-vingerafdrukken in de nieuwe.

Hoe hash-functies werken

Daarom zijn hashfuncties handig. Laten we nu eens kijken hoe ze er in het echt uitzien.

Een van de meest gebruikte hashfuncties van vandaag zijn de zogenaamde MD5 (voor Message Digest #5). MD5 produceert een hash die 128 bits lang is en die gewoonlijk wordt geschreven als een reeks van 32 hexadecimale (grondtal 16) cijfers. Als je mijn naam zou nemen en het zou verwerken met MD5, zou je deze schijnbaar willekeurige string krijgen:

c55bbe0f3ba258f5b1cb6d5b62b0b360

Of, om het met meer wiskundige formaliteit te zeggen:

MD5(Simson Garfinkel)= c55bbe0f3ba258f5b1cb6d5b62b0b360

Elk van die hexadecimale tekens staat voor 4 bits; de MD5-waarde van mijn naam is eigenlijk:

1100001010110111011111000001111100111011101
0001001011000111101011011000111001011011011
010101101101100010101100001011001101100000

De meeste mensen werken met de hexadecimale weergave omdat het vrij eenvoudig is om naar twee hashes te kijken en te zien of ze hetzelfde of verschillend zijn.

MD5 werkt door het bestand op te splitsen in veel kleine stukjes, en vervolgens elk van die stukjes te nemen en honderden wiskundige bewerkingen uit te voeren die de bits schudden, omkeren, transponeren en anderszins verwerken tot een onherkenbare puinhoop. Het woord onherkenbaar in deze beschrijving staat centraal. De fundamentele vereiste van een goede hash-functie is dat het onmogelijk moet zijn om de vingerafdruk van een bestand te voorspellen zonder daadwerkelijk de moeite te nemen om die vingerafdruk te berekenen, er mogen geen snelkoppelingen zijn. Als dat zo was, zou je de hash-functie misschien achterstevoren kunnen uitvoeren en een bestand maken met een specifieke hash, bijvoorbeeld de hash van een ander bestand. Inderdaad, de hele beveiliging van hashfuncties valt volledig uit elkaar als het mogelijk is om twee bestanden te genereren die dezelfde hash hebben.

Het mooie van de hash-functie is dat zelfs een kleine wijziging aan de invoer een dramatische verandering in de uitvoer teweegbrengt. Wiskundig gezien zijn de functies zo ontworpen dat elk bit in de uitvoer een kans van 50 procent heeft om te veranderen voor elk afzonderlijk bit dat in de invoer wordt gewijzigd.

Laten we eens kijken naar een andere MD5-hash, deze van een iets andere weergave van mijn naam:

MD5 (Simson L. Garfinkel) = df876e8e6f548d5be698fab7f06dd278

Alleen al het toevoegen van L. levert een heel andere hasj op. Als je de twee hashes bit-voor-bit vergelijkt, zul je zien dat 63 van de 128 posities zijn veranderd van een 0-naar-1 of een 1-naar-0, en de andere 65 zijn ongewijzigd gebleven.

Helaas heeft de hele theorie van cryptografische hashfuncties een enorm probleem. Het gebruik van deze functies vereist dat er geen zogenaamde botsingen zijn. Per ongeluk of expres mogen er geen twee bestanden zijn met dezelfde cryptografische vingerafdruk. En het blijkt dat dit een onmogelijke vereiste is.

De reden is vrij simpel. Bestandsvingerafdrukken hebben een vaste grootte, wat betekent dat er een eindig aantal mogelijke vingerafdrukken is. Bestanden daarentegen kunnen elke grootte hebben. Er zijn dus meer bestanden mogelijk dan vingerafdrukken, en er moet dus minimaal één vingerafdruk zijn die de vingerafdruk is van meerdere bestanden. De wiskundige term hiervoor is het duivenhokprincipe. Inderdaad, zelfs als je je beperkt tot bestanden die slechts negen tekens lang zijn, zijn er nog steeds 256 keer het aantal mogelijke bestanden als het aantal mogelijke vingerafdrukken.

De reden dat het hokjesprincipe hash-functies niet volledig zinloos maakt, is dat er een verbazingwekkend aantal mogelijke vingerafdrukken is, in feite veel meer dan het aantal bestanden op de planeet. (Met MD5 zijn er 2128 mogelijke vingerafdrukken. Nu is het totale aantal harde schijven van computers dat ooit is vervaardigd slechts ongeveer 229. Als elke harde schijf een miljoen unieke bestanden zou hebben, een grove overschatting, zouden er nog steeds slechts 249 afzonderlijke bestanden zijn. Dat is veel , veel, veel kleiner aantal dan 2128.)

De SHA-1 Controverse

Voor zelfstudiedoeleinden heb ik de MD5-hashfunctie gebruikt. Maar tegenwoordig wordt MD5 overwogen doorgang in plaats daarvan stapt het grootste deel van de wereld over naar de Amerikaanse regeringen Secure Hash Algorithm, bekend als SHA-1, een standaard die begin jaren negentig werd aangenomen door de National Institutes of Standards and Technology (NIST).

Tegenwoordig is SHA-1 een alom gerespecteerd algoritme, maar het heeft een bewogen geschiedenis. In 1993 probeerde de Amerikaanse regering de industrie ertoe te brengen het zogenaamde geheime versleutelingssysteem Clipper Chipa te gebruiken, ontworpen door de National Security Agency. Tijdens de zogenaamde crypto-oorlogen die rond Clipper woedden, stelde NIST voor dat de Amerikaanse regering haar eigen Secure Hash Algorithm zou aannemen als onderdeel van de Federal Information Processing Standards. Om technische redenen zouden hashfuncties twee keer zoveel bits moeten hebben als de coderingsalgoritmen waarmee ze werken. Clipper was een 80-bits coderingsalgoritme, dus de standaard was ontworpen om een ​​160-bits vingerafdruk te produceren.

Je zou kunnen denken dat de overheidsstandaard, met zijn 160-bits vingerafdruk, veiliger zou zijn dan de 128-bits MD5. Maar net als Clipper zelf, werd SHA ontworpen door de National Security Agency en zowel NIST als de NSA weigerden de principes uit te leggen die bij het ontwerp werden gebruikt. Sommige mensen vroegen zich af of de NSA misschien een soort achterdeur in het algoritme had verborgen, zodat het bureau op verzoek botsingen kon genereren. Zo'n achterdeur zou bijvoorbeeld kunnen worden gebruikt om valse digitale handtekeningen te produceren, iets dat de CIA nuttig zou kunnen vinden. Een valse digitale handtekening kan bijvoorbeeld worden gebruikt om een ​​elektronische bestelling te ondertekenen die een Amerikaanse spion toegang geeft tot een database in het buitenland.

Veel cryptografen en andere academici analyseerden het SHA-algoritme en konden er niets mis mee vinden. Op 11 mei 1993 riep NIST SHA uit tot het Secure Hash Algorithm van de naties. Maar de inkt van dit decreet was nog maar net droog toen NIST aankondigde dat het een fout had gemaakt. Om redenen die destijds niet bekend zouden worden gemaakt, heeft NIST een aangepaste versie van het Secure Hash Algorithm-algoritme gepubliceerd dat we nu SHA-1 noemen.

De complottheoretici in de cryptografiegemeenschap (en er zijn er veel) hadden een velddag. Was SHA zo krachtig dat de NSA had besloten dat het moest worden gedempt? Of had de NSA misschien een achterdeur in SHA geplant en was iemand bij NIST erachter gekomen? Waren beide algoritmen even veilig, en waren de cryptografen van de NSA gewoon bezig met de gedachten van mensen?

In augustus 1998 leerde de wereld min of meer het antwoord op het SHA vs. SHA-1 mysterie. Florent Chabaud en Antoine Joux, twee Franse cryptografen, bedachten een theoretische aanval tegen de eerste versie van de SHAan-aanval waartegen SHA-1 toevallig veilig was. Vrijwel zeker wisten de mensen van de NSA van deze aanval en stelden SHA-1 voor als tegenmaatregel. Wat hier interessant is, is dat cryptografen van NSA's waarschijnlijk niet op de hoogte waren van de aanval toen SHA voor het eerst werd voorgesteld in 1993, wat betekent dat 's werelds beste cryptografische bureau slechts vijf jaar voor was op de cryptografen in de academische wereld.

Tegenwoordig worden hash-functies ook vaak gebruikt om herhaalbare maar onvoorspelbare willekeurige getallen te genereren, om getypte wachtwoorden om te zetten in waarden die geschikt zijn om als coderingssleutels te gebruiken. In plaats van wachtwoorden direct op te slaan, slaan veel computersystemen de hash van een wachtwoord op. Dit voorkomt dat iemand die inbreekt in een computer, ieders wachtwoord te weten komt.

Hashfuncties zijn voorgesteld als een manier om spam te bestrijden en als basis voor digitale geldsystemen. Wiskundige Peter Wayner publiceerde een boek genaamd Doorschijnende databases waarin hij een paar jaar geleden liet zien hoe hashfuncties kunnen worden gebruikt om informatie in een database op te slaan op een manier die wordt beschermd door de organisatie die de database beheert. Een toelatingsafdeling van een universiteit zou bijvoorbeeld burgerservicenummers van studenten in de database kunnen opslaan, zodat deze nummers nog steeds kunnen worden gebruikt als identificatiegegevens voor aanvragen, maar zodat niemand in het toelatingsbureau bij een terminal kan gaan zitten en een lijst met studenten kan krijgen en hun aantallen. Tot nu toe is echter geen van die benaderingen echt van de grond gekomen.

Al met al zijn cryptografische hashes een van de meest interessante en bruikbare wiskundige technieken die cryptografen de afgelopen 20 jaar hebben bedacht en die er nog steeds steeds nieuwe toepassingen voor vonden.

zich verstoppen