The OpenNET Project / Index page

[ новости/++ | форум | wiki | теги | ]

16.04.2018 18:55  JavaScript-приложения криптовалют, использующие SecureRandom(), могли генерировать уязвимые ключи

Раскрыты сведения о серьёзных проблемах с качеством генерации ключей криптовалют через браузерные web-интерфейсы или старые приложения, написанные на JavaScript, в которых для получения случайных чисел использовался класс SecureRandom() из библиотеки jsbn. Недостаточный размер энтропии приводил к созданию предсказуемых ключей и делал реальным подбор закрытого ключа по открытому.

Проблема затрагивает только ключи, сгенерированные при помощи JavaScript-приложений, в которых применяется старая версия библиотеки jsbn, выпущенная до 2013 года. Например, проблема зафиксирована в выпусках приложения BitAddress до 2013 года и bitcoinjs до 2014 года. Важно отметить, что в сети в JavaScript-реализациях криптовалют и в web-сервисах до сих пор встречается уязвимый старый код, например, при запросе jsbn на первом месте в выдаче Google выдаётся ссылка на форк репозитория jsbn на GitHub, который был ответвлён 7 лет назад (автор данного форка несколько дней назад удалил его).

Суть проблемы в том, что до появления Web Crypto API класс SecureRandom() пытался собрать энтропию при помощи API window.crypto (nsIDOMCrypto), предоставляющего доступ к CSPRNG, но из-за опечатки в функции сравнения версии браузера создавалась ситуация, при которой библиотека пыталась обратиться к window.crypto.random в браузере без его поддержки и без вывода ошибки откатывалась на использование ненадёжного математического генератора псевдослучайных чисел math.Random, который способен обеспечить всего 48 бит энтропии (в реальных конфигурациях выдаёт заметно меньше).

Трудоёмкость воссоздания закрытого ключа методом прямого перебора (brute force) для уязвимых ключей, созданных при уровне энтропии 48 бит, оценивается при наличии достаточно большой вычислительной мощности примерно в одну неделю работы. Поэтому всем пользователям, использующим подверженные уязвимости адреса криптовалют, рекомендуется перенести с них средства на новые адреса, созданные с использованием качественного генератора случайных чисел. Кроме того, ключ, созданный в программах на базе jsbn, даже при использовании CSPRNG не может считаться надёжным, так как SecureRandom() прогоняет выход через ненадёжный алгоритм RC4, который приводит к появлению коррелирующих смещений (biases).

  1. Главная ссылка к новости (https://davidgerard.co.uk/bloc...)
  2. OpenNews: Криптовалюта Monero не настолько защищена от отслеживания, как предполагалось
  3. OpenNews: Выявлена лёгкая в реализации атака на P2P-сеть криптовалюты Ethereum
  4. OpenNews: Ошибка в реализации криптовалюты Zcoin позволяла повторно тратить средства
  5. OpenNews: Опубликован прототип бэкдора в генераторе псевдослучайных чисел Dual_EC_DRBG
  6. OpenNews: Критическая уязвимость в генераторе случайных чисел GnuPG и Libgcrypt
Лицензия: CC-BY
Тип: Проблемы безопасности
Ключевые слова: bitcoin, crypt, javascript
При перепечатке указание ссылки на opennet.ru обязательно
Обсуждение Ajax/Линейный | Раскрыть все сообщения | RSS
 
  • 1.2, Аноним (-), 20:01, 16/04/2018 [ответить] [показать ветку] [···]    [к модератору]
  • +/
    Надо было собирать энтропию с событий ввода как GnuPG
     
  • 1.3, Аноним (-), 20:14, 16/04/2018 [ответить] [показать ветку] [···]    [к модератору]
  • –3 +/
    Ой, какие бомбы замедленного действия.. Похоже криптой не следует пользоваться еще лет 15 , пока не отладят ..
     
     
  • 2.4, A.Stahl (ok), 20:34, 16/04/2018 [^] [ответить]    [к модератору]
  • +12 +/
    А ЯваСкриптом нужно было начинать не пользоваться ещё 15 лет назад.
     
     
  • 3.13, Аноним (-), 22:00, 16/04/2018 [^] [ответить]    [к модератору]
  • +2 +/
    А слабо предоставить замену? Ну хотя бы частично компенсирующую жс, не надо всех возможностей сразу.
     
     
  • 4.14, Аноним (-), 22:58, 16/04/2018 [^] [ответить]     [к модератору]
  • +2 +/
    Assembler, C, Lisp В принципе, при грамотном отношении этих трёх было бы достат... весь текст скрыт [показать]
     
     
  • 5.16, A.Stahl (ok), 23:37, 16/04/2018 [^] [ответить]    [к модератору]  
  • +/
    Ты злой. Нет, хуже. Ты во власти стереотипов. На ЯваСкрипте не пишут дураки. Вовсе нет. На этом языке пишут многие умные люди. Беда в том, что пишут они дурацкие, вредные вещи. А сам язык неплох. Наверное.
     
     
  • 6.31, Аноним (-), 00:13, 18/04/2018 [^] [ответить]     [к модератору]  
  • +/
    - А если хороший человек сделает гадость, он так и останется хорошим - Хороший ... весь текст скрыт [показать]
     
  • 5.19, Аноним (-), 07:58, 17/04/2018 [^] [ответить]    [к модератору]  
  • +3 +/
    Т.е. блобы во все щели?
    Про квалификацию тыжпограммистов на С и Lisp можно сказать тоже самое
     
     
  • 6.20, Crazy Alex (ok), 09:11, 17/04/2018 [^] [ответить]    [к модератору]  
  • –1 +/
    Слышал про такую штуку, как свободный софт? Хотя выбор языков забавный, конечно.
     
     
  • 7.25, Аноним (-), 11:28, 17/04/2018 [^] [ответить]    [к модератору]  
  • +/
    M$ или Гугель сделают браузер в котором работать будет только код написанный под их браузеры, для безопасности, а потом пропихнут это в стандарты. Мало DRM, хочется больше и толще?
     
  • 6.21, commiethebeastie (ok), 09:17, 17/04/2018 [^] [ответить]    [к модератору]  
  • +/
    Когда на них тыжпрограммисты писали? Они же фокспро, дельфи и сишарпик используют.
     
     
  • 7.27, Аноним (-), 11:33, 17/04/2018 [^] [ответить]    [к модератору]  
  • +1 +/
    Как раз тыжпограмисты используют C, т.к. это даёт +100500 к крутости.
     
  • 6.33, Аноним (-), 00:45, 18/04/2018 [^] [ответить]     [к модератору]  
  • +/
    Какие ещё блобы code script type text lisp onload lambda this ... весь текст скрыт [показать]
     
     
  • 7.36, Аноним (-), 08:01, 18/04/2018 [^] [ответить]    [к модератору]  
  • +/
    Для ускорения работы и повышения безопасности это надо поместить в специальную сборку, а то мало ли перехватят и изменят или ещё что нибудь.
     
  • 5.30, rvs2016 (ok), 16:01, 17/04/2018 [^] [ответить]    [к модератору]  
  • +/
    > Assembler, C, Lisp. В принципе, при грамотном отношении этих трёх было бы
    > достаточно

    Остаётся ответить только на вопрос:
    Как имеющиеся браузеры заставить выполнять программы на этих языках?
    И к каким ресурсам браузера из этих языков можно получить доступ? Это каким-то образом удастся дать ответ на первый вопрос. :-)

     
     
  • 6.32, Аноним (-), 00:44, 18/04/2018 [^] [ответить]    [к модератору]  
  • +/
    А что, понятие API только для js изобрели и для других языков принципиально нельзя программный интерфейс к возможностям браузера?
     
     
  • 7.37, rvs2016 (ok), 14:12, 18/04/2018 [^] [ответить]    [к модератору]  
  • +/
    > А что, понятие API только для js изобрели и для других языков
    > принципиально нельзя программный интерфейс к возможностям браузера?

    Ну конечно же изобрести можно любые программы, подпрограммы да алгоритмы. Но в браузерах сейчас это есть? Если этого нет, то не будут же вебмастеры ждать снисхождения благодатного АПИ на браузеры вместо того, чтобы ваять программы на каком-никаком, но зато на уже имеющемся, JS?

     
     
  • 8.38, Аноним (-), 23:32, 18/04/2018 [^] [ответить]     [к модератору]  
  • +/
    Изначально вопрос стоял предложите альтернативы яваскрипту Если одним из крит... весь текст скрыт [показать]
     
  • 6.34, Аноним (-), 00:47, 18/04/2018 [^] [ответить]     [к модератору]  
  • +/
    Первые два - в виде устанавливаемых из репозитория пакетного менеджера или скач... весь текст скрыт [показать]
     
     
  • 7.39, rvs2016 (ok), 10:05, 19/04/2018 [^] [ответить]    [к модератору]  
  • +/
    >> Как имеющиеся браузеры заставить выполнять программы на этих языках?
    > Первые два - в виде устанавливаемых из репозитория пакетного менеджера

    Это слова для кого? Для программистов и сисадминов? Или для пользователей? Программисты и сами напишут себе что угодно. А пользователи не знают даже что такое браузер. Они его называют - вот та штука, как её там... интернет короче... А менеджер для них - это такой человек, который ходит по магазину и пристаёт с вопросами типа "вам что-нибудь подсказать"? Соответственно, если вебмастеры вместо наваяния скриптов на JS будут пользователям сайтов писать что-то типа - да установите такую-то приблдуду из репозитория, то такие вебмастеры быстро лишатся работы и заказов.

    (или скачиваемых
    > с левых сайтов, в зависимости от ОС) расширений,
    > третий - прямо в исходниках страниц в форме <script type="text/lisp">
    > Разумеется, "само" это не заработает, кто-то должен сделать поддержку в браузерах.

     
  • 4.23, АНГЫВНАГЫНВАШЩ (?), 09:36, 17/04/2018 [^] [ответить]    [к модератору]  
  • +/
    для анимации кнопочек JS более чем достаточно
     
  • 2.5, Аноним (-), 20:41, 16/04/2018 [^] [ответить]    [к модератору]  
  • –1 +/
    >Похоже криптой не следует пользоваться еще лет 15

    Да эта пирамида дай Б-г год ещё протянет.

     
     
  • 3.24, Аноним (-), 10:40, 17/04/2018 [^] [ответить]    [к модератору]  
  • +/
    Что еще по "телевизеру" сказали?
     
  • 1.10, Аноним (-), 21:33, 16/04/2018 [ответить] [показать ветку] [···]    [к модератору]  
  • –6 +/
    https://ru.wikipedia.org/wiki/%D0%91%D0%BB%D0%BE
     
  • 1.12, Аноним (-), 21:59, 16/04/2018 [ответить] [показать ветку] [···]     [к модератору]  
  • +1 +/
    Сами виноваты Я никогда не пользовался этим дерьмом Зачем пользоваться всяким ... весь текст скрыт [показать]
     
     
  • 2.17, KonstantinB (ok), 03:21, 17/04/2018 [^] [ответить]    [к модератору]  
  • +1 +/
    Суть проблемы как раз в том, что в некоторых браузерах нужного нет, а в комбинации с ошибкой проверки версии (что, кстати, тоже не шибко умное решение, проверять намного лучше по наличию API) получилось то, что получилось.

    Надо было вместо фолбэка на Math.random() кидать new Error("your browser sucks").

     
     
  • 3.22, Аноним (-), 09:35, 17/04/2018 [^] [ответить]     [к модератору]  
  • –3 +/
    Значит эти браузеры - гoвно и их пользователей надо послать на хер, раз они не м... весь текст скрыт [показать]
     
     
  • 4.28, KonstantinB (ok), 14:51, 17/04/2018 [^] [ответить]    [к модератору]  
  • +/
    От проекта зависит. Я б с удовольствием слал, но некоторые заказчики хотят, чтобы у всех работало, и даже готовы это оплачивать. И я их прекрасно понимаю - сто баксов одинаковые и у пользователя Хрома, и у пользователя MSIE.

    Впрочем, совсем древность уже никто не требует, а для MSIE 9+ вполне можно без всяких jquery обойтись, да.

     
     
  • 5.29, KonstantinB (ok), 14:58, 17/04/2018 [^] [ответить]    [к модератору]  
  • +/
    Впрочем, Math.random() голый я бы все равно не брал. Сходил бы на сервер за рандомом, если в браузере все плохо.
     
     
  • 6.40, qwe (??), 02:41, 21/04/2018 [^] [ответить]    [к модератору]  
  • +/
    > Сходил бы на сервер за рандомом, если в браузере все плохо.

    Ага, отличная идея - формировать приватные ключи пользователя на сервере.

     
  • 1.18, Аноним (-), 07:46, 17/04/2018 [ответить] [показать ветку] [···]     [к модератору]  
  • +/
    JavaScript во все поля и минимум юнит-тестов - что ты с хипстеров возьмёшь ... весь текст скрыт [показать]
     
     
  • 2.35, Аноним (-), 01:41, 18/04/2018 [^] [ответить]    [к модератору]  
  • +1 +/
    > минимум юнит-тестов - что ты с хипстеров возьмёшь.

    У хипстеров как раз TDD вместо мозга. Написали тест - написали реализацию. Не написали тест - не написали реализацию.

     

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:


      Закладки на сайте
      Проследить за страницей
    Created 1996-2018 by Maxim Chirkov  
    ДобавитьПоддержатьВебмастеруГИД  
    Hosting by Ihor