JavaScript-Klasse SecureRandom()
hat einen Fehler und generiert keine wirklich sicheren Schlüssel.
Welche Verbindung besteht zwischen diesem Thema und Kryptowährungen?
Es gibt zahlreiche browserbasierte Kryptowährungsprodukte, die noch verwenden beliebt SecureRandom()
JS-Klasse. JavaScript ist sehr beliebt zum Erstellen browserbasierter Produkte, eignet sich aber nicht wirklich gut für Kryptographiezwecke. Das Hauptproblem besteht darin, dass JS keine typsichere Sprache ist.
Typensicherheit ist ein komplexes Thema und es gibt keine allgemeingültige Definition, was genau eine „typsichere“ Sprache ist, aber nach fast jeder Definition ist JavaScript nicht typsicher. Das bedeutet, dass JS Typfehler, die in der Kryptografie unzulässig sind, nicht wirklich verhindert oder verhindert.
Die Schlussfolgerung lautet, dass alle von JS-Tools in Browsern generierten Krypto-Wallets Schlüssel hatten (und manche haben sie immer noch!), die vorhersehbar genug sind, um durch einen Brute-Force-Angriff geknackt zu werden. Ja, solche Schlüssel haben die richtige Länge (kryptografisch gesehen), aber aufgrund des Fehlers in der JavaScript-Klasse weniger als 48 Bit Entropie.
Tief technische Erklärung.
Was nun?
Eigentlich kann man nicht viel dagegen tun. Wie alle guten Kryptowährungs-Bugs ist auch dieser nicht neu – hier spricht Greg Maxwell fast vor drei Jahren (ab 51:00):
Dieses Problem betrifft Sie, wenn Sie:
- alte Kryptowährungsadressen verwenden
- sie wurden mit JavaScript generiert, dh, in einem Webbrowser
Möglicherweise betroffen:
- BitAddress vor 2013;
- Bitcoinjs vor 2014;
- Strom Software, die veraltete Repos von Github verwendet.
Was ist zu tun:
- Überweisen Sie Ihr Geld von diesen Adressen
- benutze sie nicht wieder
Dadurch wird das Risiko verringert, dass Ihre Schlüssel geknackt werden. Generell sollten Sie jedoch nicht mehr glauben, dass es ewig dauert, moderne Kryptoschlüssel zu knacken. Tatsächlich kann es in einer Woche geknackt werden.
Einige interessante Fakten:
JavaScript hieß ursprünglich LiveScript. Es wurde nicht von Sun Microsystems entwickelt (wie Javac) und es gab keinen guten Grund, LiveScript in JavaScript umzubenennen. Dies führte zu der Verwirrung, dass JavaScript irgendwie mit Java verwandt sei, aber JavaScript ist eine andere Sprache, es hat mehr mit funktionalen Sprachen wie Lisp oder Scheme gemeinsam als mit Java.
JavaScript ist eine tatsächliche höhere, interpretierte Programmiersprache, nicht das Skript, wie die -Skript Suffix vermuten lässt.