Alex Vet

Gepubliseer op: 19/04/2018
Deel dit!
By Gepubliseer op: 19/04/2018

JavaScript-klas SecureRandom() het 'n fout in en genereer nie regtig veilige sleutels nie.

Hoe hou dit verband met kripto-geldeenhede?

Daar is talle blaaier-gebaseerde cryptocurrency-produkte wat gebruik steeds gewild SecureRandom() JS klas. JavaScript is baie gewild om blaaiergebaseerde produkte te skep, maar dit is nie 'n goeie ding om vir kriptografiedoeleindes te gebruik nie. Die grootste probleem is dat JS nie 'n tipe-veilige taal is nie.

Tik veiligheid is 'n komplekse onderwerp en daar is niemand ooreengekome definisie van wat presies 'n "tipe-veilige" taal is, maar deur byna enige definisie daarvan, JavaScript is nie tipe-veilig. Dit beteken dat JS nie tikfoute wat ontoelaatbaar is in kriptografie regtig ontmoedig of voorkom nie.

Die gevolgtrekking is dat alle kripto-beursies wat deur JS-nutsmiddels binne blaaiers gegenereer word, sleutels gehad het (en sommige het nog steeds!) sleutels wat voorspelbaar genoeg is om deur brute-force-aanval te kraak. Ja, sulke sleutels het die regte lengte (kriptografiesgewys), maar minder as 48 bisse entropie as gevolg van die fout in JavaScript-klas.

diep tegniese verduideliking.

Wat om nou te doen?

Eintlik is dit nie veel om daaraan te doen nie. Soos alle goeie cryptocurrency foute, hierdie een is glad nie nuut nie - hier is Greg Maxwell wat amper daaroor praat drie jaar gelede (51:00 aan):

Hierdie probleem raak jou as jy:

  • gebruik ou cryptocurrency adresse
  • hulle is met JavaScript gegenereer, dws, in 'n webblaaier

Moontlik geraak:

  • BitAddress voor 2013;
  • bitcoinjs voor 2014;
  • huidige sagteware wat verouderde repos van Github gebruik.

Wat om te doen:

  • skuif jou fondse uit daardie adresse
  • moenie hulle weer gebruik nie

Dit sal die risiko verminder dat jou sleutels gekraak word, maar oor die algemeen behoort hierdie inligting jou te laat ophou dink dat dit eeue sal neem vir moderne kripto-sleutels om te kraak. Dit blyk dat dit binne 'n week gekraak kan word.

 

'N Paar interessante feite:

JavaScript is oorspronklik LiveScript genoem. Dit is nie ontwikkel deur Sun Microsystems (soos Java) en daar was geen goeie rede om LiveScript na JavaScript te hernoem nie. Dit het gelei tot verwarring dat JavaScript op een of ander manier verwant is aan Java, maar JavaScript is 'n ander taal, dit het meer in gemeen met funksionele tale soos Lisp of Skema as met Java.

JavaScript is 'n werklike hoëvlak, geïnterpreteerde programmeertaal, nie die skrif nie, soos die - Skripsie agtervoegsel suggereer.