Клас JavaScript SecureRandom()
мае памылку і не стварае сапраўды бяспечныя ключы.
Як гэта звязана з крыптавалютамі?
Існуе мноства криптовалютных прадуктаў на аснове браўзэра да гэтага часу выкарыстоўваю папулярны SecureRandom()
Клас JS. JavaScript вельмі папулярны для стварэння прадуктаў на аснове браўзера, але яго не вельмі добра выкарыстоўваць у мэтах крыптаграфіі. Асноўная праблема ў тым, што JS не з'яўляецца тыпабяспечнай мовай.
Тып бяспекі гэта складаная тэма, і няма адзінага ўзгодненага вызначэння таго, што такое «тыпабяспечная» мова, але практычна ў любым яе азначэнні JavaScript не з'яўляецца тыпабяспечным. Гэта азначае, што JS сапраўды не перашкаджае і не прадухіляе памылкі тыпу, якія недапушчальныя ў крыптаграфіі.
Выснова заключаецца ў тым, што ўсе крыптакашалькі, створаныя інструментамі JS у браўзерах, мелі (а некаторыя - усё яшчэ ёсць!) ключы, якія дастаткова прадказальныя, каб іх можна было ўзламаць метадам грубай сілы. Так, такія ключы маюць належную даўжыню (з пункту гледжання крыптаграфіі), але менш за 48 біт энтрапіі з-за памылкі ў класе JavaScript.
глыбокая тэхнічнае тлумачэнне.
Што ж цяпер рабіць?
На самай справе, зрабіць з гэтым не так шмат. Як і ўсе добрыя памылкі крыптавалюты, гэтая зусім не новая - вось Грэг Максвел расказвае пра яе амаль тры гады таму (51:00):
Гэтая праблема закранае вас, калі вы:
- выкарыстоўваць старыя адрасы криптовалют
- яны былі створаны з дапамогай JavaScript, г.зн., у вэб-браўзеры
Магчыма, пацярпелі:
- BitAddress да 2013 г.;
- bitcoinjs да 2014 года;
- ток праграмнае забеспячэнне, якое выкарыстоўвае састарэлыя рэпазітары Github.
Што рабіць:
- перавесці свае сродкі з гэтых адрасоў
- не выкарыстоўвайце іх зноў
Гэта знізіць рызыку ўзлому вашых ключоў, але ў цэлым гэтая інфармацыя павінна прымусіць вас перастаць думаць, што для ўзлому сучасных крыптаключоў спатрэбіцца шмат гадоў. Аказваецца, яго можна ўзламаць праз тыдзень.
Некалькі цікавых фактаў:
JavaScript першапачаткова называўся LiveScript. Ён не быў распрацаваны Sun Microsystems (як ява) і не было важкіх прычын перайменаваць LiveScript у JavaScript. Гэта прывяло да блытаніны, што JavaScript нейкім чынам звязаны з Java, але JavaScript - гэта іншая мова, яна мае больш агульнага з функцыянальнымі мовамі, такімі як Lisp або Scheme, чым з Java.
JavaScript - гэта сапраўдная інтэрпрэтаваная мова праграмавання высокага ўзроўню, а не скрыпт, як -Сцэнар суфікс мяркуе.