Информация о неприятной криптографической проблеме изначально была опубликована анонимом в рассылке Linux Foundation, а также ИБ-специалист Дэвид Джерар (David Gerard) посвятил багу отдельный пост в своем блоге.
Дело в том, что старые Bitcoin-адреса, сгенерированные в браузерах или при помощи JavaScript приложений, могут быть подвержены неприятному криптографическому багу, который позволяет узнать приватные ключи (при помощи брутфорса) и перехватить контроль над кошельком, похитив средства.
Проблема заключается в работе SecureRandom(), использовавшейся для генерации случайных адресов и приватных ключей. Как оказалось, результаты работы SecureRandom() были недостаточно случайны. Из-за ошибки в коде обращение к window.crypto API оканчивалось неудачей и вместо этого использовался ненадежный Math.random() API. В итоге криптографические ключи, невзирая на их длину, обладали менее чем 48 битами энтропии, и полученный результат так же мог похвастаться энтропией не более 48 бит, даже если seed предполагает нечто большее. К тому же SecureRandom() использует устаревший алгоритм RC4, результаты работы которого можно предсказать. В итоге специалисты пришли к выводу, что ключи, созданные при участии SecureRandom(), получались предсказуемыми и уязвимыми к простому брутфорсу.
Эксперты рассказывают, что SecureRandom() применялась в веб-приложениях и клиентах кошельков несколько лет назад, пока о бреши не заговорили публично. К примеру, еще в 2013 году на форумах BitcoinTalk было обсуждение данной проблемы, а в 2015 году о ней рассказывал на конференции один из разработчиков Bitcoin Core. Сейчас специалисты предполагают, что проблема возникла еще до 2013 года в криптографической библиотеке jsbn.
Таким образом, Джерар предупреждает, что Bitcoin-адреса, сгенерированные при участии SecureRandom() в 2013-2014 годах могут быть уязвимы, в частности, проблеме были подвержены BitAddress (до 2013 года) и Bitcoinjs (до 2014 года).
Профессор Университетского колледжа Лондона, Мустафа аль-Бассам (Mustafa Al-Bassam) пишет, что многие старые приложения Bitcoin-кошельков (будь то клиентская часть приложения или веб-приложение) долгое время использовали jsbn.js для генерации адресов, а некоторые используют старые версии jsbn.js до сих пор. По мнению исследователей, на взлом приватных ключей от таких кошельков уйдет примерно неделя. Специалисты советуют пользователям, которые полагают, что их Bitcoin-адреса могут быть уязвимы, как можно быстрее создать новые кошельки и перенести в них средства.