JavaScript-klassen SecureRandom()
har en feil i seg og genererer ikke virkelig sikre nøkler.
Hvordan er det relatert til kryptovalutaer?
Det er mange nettleserbaserte kryptovalutaprodukter som fortsatt bruke populær SecureRandom()
JS klasse. JavaScript er veldig populært for å lage nettleserbaserte produkter, men det er ikke en veldig god ting å bruke til kryptografi. Hovedproblemet er at JS ikke er et typesikkert språk.
Type sikkerhet er et komplekst emne, og det er ingen enig definisjon av hva et "typesikkert" språk er, men med nesten hvilken som helst definisjon av det, er ikke JavaScript typesikkert. Det betyr at JS egentlig ikke fraråder eller forhindrer typefeil som ikke er tillatt i kryptografi.
Konklusjonen er at alle kryptolommebøker generert av JS-verktøy i nettlesere hadde (og noen – har fortsatt!) nøkler som er forutsigbare nok til å knekke ved brute-force-angrep. Ja, slike nøkler har riktig lengde (kryptografisk) men mindre enn 48 biter med entropi på grunn av feilen i JavaScript-klassen.
Dyp teknisk forklaring.
Hva skal jeg gjøre nå?
Egentlig er det ikke så mye å gjøre med det. Som alle gode kryptovaluta-feil, er denne ikke ny i det hele tatt - her er Greg Maxwell som snakker om det nesten tre år siden (51:00 på):
Dette problemet påvirker deg hvis du:
- bruke gamle kryptovaluta-adresser
- de ble generert med JavaScript, dvs., i en nettleser
Muligens påvirket:
- BitAddress før 2013;
- bitcoinjs før 2014;
- nåværende programvare som bruker utdaterte repos fra Github.
Hva å gjøre:
- flytte pengene dine fra disse adressene
- ikke bruk dem igjen
Dette vil redusere risikoen for at nøklene dine blir knekt, men generelt sett burde denne informasjonen få deg til å slutte å tenke på at det vil ta evigheter før moderne kryptonøkler blir knekt. Det viser seg at det kan være sprukket om en uke.
Noen interessante fakta:
Javascript ble opprinnelig kalt LiveScript. Den ble ikke utviklet av Sun Microsystems (som Java), og det var ingen god grunn til å endre navn på LiveScript til JavaScript. Dette førte til forvirring om at JavaScript på en eller annen måte er relatert til Java, men JavaScript er et annet språk, det har mer til felles med funksjonelle språk som Lisp eller Scheme enn med Java.
JavaScript er et faktisk tolket programmeringsspråk på høyt nivå, ikke skriptet, som -Manus suffikset antyder.