Уязвимость генератора псевдослучайных чисел в Bitcoin / Хабр

 

Содержание

Уязвимость генератора псевдослучайных чисел в Bitcoin

Приватные Биткоин-ключи — это целочисленное значение от 1 до 115792089237316195423570985008687907852837564279074904382605163141518161494337 или в HEX 1 до 0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141. В главной сети Биткоина существуют адреса начинающиеся на 1: compressed, uncompressed; адреса на 3: SigScript и обратно совместимые с SegWit, а так же нативные SegWit адреса начинающиеся на bc1. К тому же есть уже порядка семидесяти форков, имеющие другие префиксы, но те же корни что и основного Биткоина.

Биткоин-адреса рассчитываются криптографической функцией подписи ECDSA ( ) основанной на эллиптической кривой.

Итак, рассмотрим генерацию Биткоин-адреса из приватного ключа.

Закрытый ключ d — число
Открытый ключ Q — точка эллиптической кривой, равная dG,
где G — базовая точка кривой.

  • Для подписи выбирается случайное число k, в диапазоне [1, n-1].
  • Вычисляется точка кривой (x1,y1) = k*G
  • Вычисляется r = x1 mod N, где N — порядок кривой.
  • Вычисляется s = k-1(H(m)+rd) mod N, где k-1 — число, обратное по модулю N к k.
  • H(m) — хэш подписываемого сообщения.

Подписью является пара (r,s).

Переменная «k» рандомная и получается в алгоритме ECDSA из стандартных библиотек операционной системы.

Таким образом, во всей функции можно повлиять только на эту переменную. Что даёт два вектора атаки:

  1. заложенная уязвимость в псевдослучайное число
  2. и вселенское везение при котором случайное число выпадает дважды

Атака генератора псевдослучайных чисел

Первым эту проблему исследовал и опубликовал Nils Schneider в 28 января 2013 на своей личной странице. Но проблема сохранилась и более того, приобрела новый масштаб.

Программная атака на ГПСЧ подразделяется на три типа:
Прямая криптографическая атака основанная на анализе выходных данных алгоритма.

Атаки, основанные на входных данных, могут быть разделены на атаки с известными входными данными, атаки с воспроизводимыми входными данными и атаки на избранные входные данные.

Атаки, основанные на вскрытии внутреннего состояния при которых злоумышленник знает начальное или исходное состояние генератора.

Также сюда можно отнести — закладки в программное обеспечение, при которых создатель алгоритма знает любое из хэшированных псевдослучайных чисел и последующие в цепочке. Такой алгоритм сложно определить со стороны, так как числа выглядят равномерно распределенными по всему диапазону.

К программным уязвимостям также относится слабая генерация псевдослучайных чисел в отдельных библиотеках. Таких как SSL, OpenSSL, некоторые библиотеки Java, JavaScript и т.д. Подробные материалы неоднократно описывались в периодических изданиях по взлому и со временем становились примерами в учебниках криптографии.

Каков масштаб угрозы для Биткоина?

Имея полную Биткоин ноду, можно провести сравнение и группировку всех транзакций сети. Достаточно сравнить переменную «к» во всех транзакциях по каждому адресу и найти дублирующие.

Первый раз мы делали сверку в конце 2016 года, тогда база данных составляла более 210 миллионов адресов, транзакций с общим количеством более 170 миллионов адресов, а подписей 447 миллионов. Сканирование уязвимых адресов в десять потоков заняло неделю.

В итоге было найдено 1327 уязвимых адреса с одинаковыми подписями! Список адресов можно найти в конце статьи.

Это означает, что к этим адресам можно вычислить приватный ключ, а значит получить контроль над деньгами.

Самая крупная утечка произошла летом 2015 года. JavaScript кошелька Blockchain.info несколько часов выдавал одно и тот же значение переменной «к». Что привело к краже порядка 200 Биткоинов!

Если убрать человеческий фактор программных уязвимостей, вероятность совпадения примерно 0,000296868 %. Совсем не много, но очень бы не хотелось стать таким “счастливчиком” и потерять свои деньги.

Как с этим бороться ?

Как мы описывали выше, данная уязвимость работает только при отправке платежей и генерации одинаковой переменной “К”, как минимум на двух транзакциях. Следовательно, если не создавать исходящих транзакций или свести их количество к минимуму, то и угрозы нет ни какой. Такая идея давно реализована в Биткоин протоколе BIP 32 (Hierarchical Deterministic Wallets, HD wallet) Иерархический Детерминированный Кошелек.

Его идея заключается в том, что используется приватный ключ из которого можно получить бесконечную цепочку Биткоин-адресов. Для приема каждой отдельной транзакции можно использовать одноразовый адрес. При этом сумма баланса HD wallet — это сумма всех балансов цепочки адресов. А при исходящей транзакции, с этих адресов собираются монеты, составляя для каждого Биткоин-адреса одну исходящую транзакцию. Сдача будет направлена на новый Биткоин-адрес из цепочки адресов.

Такая схема работы значительно увеличивает безопасность и анонимность кошелька.

Приватный ключ биткоина (private key) – что это такое, как выглядит, как получить и безопасно сохранить

Автор Редакция Profinvestment.com Обновлено Май 25, 2022

Сегодня рассмотрим значение слов «приватный ключ биткоина» – для чего он нужен, как получить и как правильно хранить.

В то время как публичный ключ, или адрес, представляет собой средство идентификации кошелька, подобие логина, приватный ключ – строго конфиденциальная информация. Внешне выглядит как набор символов, введя которые, пользователь получает доступ к управлению счетом. Приватные (их еще называют частными или закрытыми) ключи хранятся в специальном файле, публичные –формируются криптографическим методом именно на основе приватных.

Технически «private key» – это 256-битное число, случайно генерируемое при создании аккаунта в кошельке. Диапазон очень велик, поэтому методом подбора угадать ключ невозможно, это может быть любое число от единицы до 10 в степени 77.

Как внешне выглядят публичный и приватный ключи кошелька биткоина

Приватный ключ биткоина кодируется в следующих форматах: Base64, MINI, Hex, WIF, сжатый WIF. Все они взаимосвязаны и преобразуются один в другой:

  • Формат WIF (51 символ, «5» в начале): 5JPeWYZx922hXi49Lg2RJPwLfqcmDGS9YegMNgANvx8cJa6kNK8.
  • Большинство криптовалютных кошельков, используют для хранения приватных ключей WIF-сжатый формат (52 символа, начинается с «L» или «K»): KykxZQLSNPYVtYCsoqFGFnEqpRar997zihJgvfrPo8LapFrAtaea.
  • Формат Hex (64 символа): 4BBFF74CA25A2A00409DCB24EC0418E9A41F9B3B56216A183E0E9731F4589DC6.
  • Формат Base64 (44 символа): S7/3TKJaKgBAncsk7AQY6aQfmztWIWoYPg6XMfRYncY=.

На картинке один приватный ключ биткоина в разных форматах:

формат приватных ключей биткоин

Публичный адрес (ключ)

Внешний вид публичного биткоин-ключа в различных форматах:

формат публичных ключей Bitcoin

  • Наиболее используемый в кошельках — короткий адрес. Он имеет вид 1BSUkuwtdM7gkdy6W4Q954gNKWBgy4A19Q и всегда начинается с единицы или тройки (segwit address).

Публичные ключи (public key) видны всем желающим и используются как адрес для отправки или получения биткоинов. В одном кошельке можно сгенерировать неограниченное количество публичных ключей. Каждому будет соответствовать свой приватный ключ.

Простыми словами, любой криптовалютный кошелек — это приватный ключ, с которого генерируется публичный.

Как создать приватные биткоин-ключи

При создании любого кошелька для биткоина создается приватный ключ. В зависимости от вида бумажников можно обладать контролем над ними или нет. Последний случай больше относится к онлайн-сервисам, на которых можно пройти простую регистрацию, получить адрес биткоина, но приватные ключи не доступны. Контроль над ними имеют владельцы данных онлайн-кошельков. Поэтому рекомендуем выбирать криптокошельки с возможностью выгрузки приватных ключей или сохранением seed.

кошелек ledger

  1. Локальные. Устанавливаются на десктопные или мобильные устройства. К ним относят Jaxx, Electrum, Coinomi, Exodus и другие. Делятся на «тонкие» и «толстые», в зависимости от способа обращения к блокчейн-сети.
  2. Онлайн-кошельки. Для их создания обычно нужно указать email и пароль. Такие сервисы могут предоставлять возможность просмотра приватных ключей или не иметь такой функции. Популярные сайты для хранения криптомонет: blockchain.com. . После создания счета доступны кошельки для криптовалют, которые в листинге площадки. Приватные ключи не предоставляются. Можно вносить депозит на предоставленный адрес, торговать криптовалютой и совершать вывод. Популярные торговые платформы: LocalBitcoins (ЛокалБиткоинс), EXMO, Binance, Huobi, BitMEX и другие. . Наиболее безопасный вариант сохранить криптоактивы в безопасности. Владелец имеет полный контроль над всеми приватными ключами, а их кража невозможна. Выпускают аппаратные устройства Ledger, Trezor и другие.
  3. Бумажные. Это может быть просто записанный приватный ключ на бумаге или сервисы, которые его генерируют и предоставляют возможность распечатать и сохранить. Способ относится к «холодному» хранению криптовалют.

Как получить (экспортировать) приватный ключ биткоина

Бывают ситуации, когда необходимо получить свой приватный ключ из кошелька для тех или иных целей. Разберем, как это сделать.

Извлечение (экспорт) приватных ключей из криптокошельков

В качестве примера используется «тонкий» десктопный кошелек Exodus. В нем нужно произвести операцию экспорта приватного биткоин-ключа. Изначально она надежно скрыта, поскольку разработчики справедливо считают, что неопытному пользователю лучше не пытаться ее произвести. Неверные действия чреваты потерей средств из кошелька.

Инструкция по экспорту:

приватный ключ биткоин privkey

Открыть файл можно через текстовый редактор Libre Office, Wordpad, Exel, стандартный Блокнот и т. д. В графе «PRIVKEY» будет буквенно-цифровое сочетание – это и есть приватный (закрытый) ключ биткоина:

Получение приватного ключа из онлайн-кошелька Blockchain

Получение приватного ключа из кошелька Blockchain

Рассмотрим, как получить приватный ключ в популярном онлайн-кошельке Блокчейн. В настройках функции экспорта ключей нет. Нужно воспользоваться seed-фразой, которая находится по адресу «Настройки» — «Безопасность» — «Фраза для восстановления кошелька». Скопировать все слова и перейти в генератор iancoleman.io . Указать количество слов (12) и вставить их в форму «BIP39 Mnemonic».

публичные и приватные ключи blockchain кошелька

Опуститься вниз страницы в раздел «Derived Addresses». В нем будет адрес, публичный и приватный ключ.

Получение ключа в бумажного кошельке

Бумажные кошельки генерируют приватные ключи локально с помощью выполнения скрипта в браузере.

генерация приватного ключ для биткоина

После сбора случайной энтропии высветится сжатый адрес биткоина и приватный ключ в сжатом WIF-формате. Что с ними делать, понятно по картинке:

вид приватных ключей для биткоинов

Сервис для создания бумажных кошельков: bitaddress.org.

Что такое детерминированный кошелек (HD wallet), seed фраза

В 2011 году для решения ряда проблем с анонимностью разработчики Bitcoin Core выпустили такую разработку, как HD Wallet. HD расшифровывается «hierarchical deterministic», то есть «иерархически детерминированный». Звучит непонятно, но по факту все не так сложно.

В контексте криптовалют словом «иерархия» обозначают связь между элементами. В данном случае появляется возможность использовать один адрес для выяснения второго, а также применять секретную seed-фразу для генерации сразу многих связанных между собой адресов.

Пример seed (backup phase) в кошельке Blockchain (всего 12 слов):

приватная seed фраза в кошельке Blockchain

«Детерминированная» система – та, где недопустимы никакие случайности в процессе формирования будущих состояний. То есть конкретные вводные данные всегда будут выдавать конкретный результат.

Преимущества технологии HD wallet:

  1. Усиление анонимности. Владелец HD wallet обладает одной копией программного бумажника с одним тайным ключом (называемым также «семя» или «master key»). При объединении семени с хеш-функциями образуется бесконечное количество связанных между собой адресов. Связь невидима со стороны. Это адреса называют «дочерними».
  2. Легкость запоминания сид-фразы. Записать или выучить код из 12 слов намного легче, чем хранить приватные ключи для каждого отдельного адреса биткоина.
  3. Комфортное резервное копирование. Многие пользователи сталкиваются с проблемами резервного копирования мобильных кошельков на iOS или Android – возникает необходимость использовать один и тот же ключ, а это прямая угроза для безопасности. HD кошелек вообще не требует создания резервных копий, достаточно распечатать или сохранить в надежном месте сид-фразу.

Технология реализована в надстройке Armory для Bitcoin Core, кошельках Electrum, MultiBit HD, BitGo, CarbonWallet, The Hive, Mycelium Bitcoin Wallet, Green Address, Trezor и других.

Как безопасно хранить приватные ключи

Используя интернет-кошельки, следует понимать, что ключи хранятся на серверах компании-разработчика. Пользователь лично владеет private key лишь в случае использования десктопных, аппаратных или бумажных кошельков.

Варианты хранения кода:

  1. На бумаге.
  2. На флешке в виде скриншота или фотографии, pdf-файла.
  3. На жестком диске, в том числе съемном.
  4. На физической монете, металлической пластине (своеобразный аналог аппаратного «холодного» кошелька в форме криптовалютной монеты).
  5. В памяти.

Ни один из перечисленных способов не дает 100%-ную гарантию сохранности ключа, в каждом случае есть вероятность физического повреждения, взлома или кражи. Так что выбор каждый делает, исходя из своих соображений.

В Сети сейчас много злоумышленников, которые мечтают украсть приватный ключ биткоина. Они могут соблазнять бесплатными токенами, предлагать получить новые монеты, а взамен просят загрузить в сеть или созданную ими программу частный ключ. Делать этого ни в коем случае нельзя.

Что такое приватный ключ в биткоине и как это работает?

Что такое приватный ключ в биткоине и как это работает?

Наверняка в вашем телефоне есть сканер лица или датчик отпечатков пальцев, который позволяет разблокировать устройство, в то время как биткоин, в качестве аутентификации, использует закрытый (приватный) ключ, чтобы вы могли отправлять платежи с кошелька. Возможно, вы не видели приватный ключ при создании кошелька на blockchain.com, но если вы присмотритесь, то увидите его.

Что такое приватный ключ?

Приватные ключи — это просто набор случайно сгенерированных символов, но они очень важны. Строка из букв и цифр может звучать как тарабарщина и выглядеть так:

Приватные ключи состоят из 64 символов. В их состав входят числа от 0 до 9 и буквы латинского алфавита от A до F. Поэтому они используют шестнадцатеричную систему счисления. Теперь давайте оставим сложные вещи!

Каждый биткоин-кошелек имеет приватный ключ, и прежде чем с него можно будет отправить средства, необходимо ввести вручную ключ или предварительно загрузить его на кошелек. Но имейте в виду, что перемещение средств не означает, что они физически хранились в кошельке. Транзакция — это лишь запись того, какое количество BTC перемещается с оного адреса на другой. На самом деле с технической стороны все выглядит куда интереснее, не поленитесь почитать увлекательную статью об этом.

Как работает приватный ключ с адресами?

Каждый приватный ключ биткоина также связан с адресом. Адрес или открытый ключ помогают вам указать других пользователей в сети, с которыми вы хотите заключить сделку (т.е. адрес вашего кошелька — это и есть открытый ключ). Подумайте об этом таким образом, вы могли бы отправлять платежи кому-то, если бы у вас не было номера их счета? Определенно! Но вы пошлете его не тому человеку. Это был сложный вопрос, но теперь вы поняли, к чему это приведет.

Кроме того, прежде чем вы сможете попытаться сделать такие переводы с помощью биткоина, у вас должен быть криптовалютный кошелек с денежными средствами. Ввод вашего приватного ключа в этот кошелек подтверждает, что вы являетесь его владельцем. В этот момент вы, возможно, поняли, что blockchain.com не волнует, принадлежит ли вам кошелек или нет, все, что ему нужно, — это чтобы приватный ключ совпадал с адресом. Если это соответствует, то вы владелец.

Как обеспечить безопасность ваших биткоинов?

Приватные ключи должны храниться «в секрете», потому что тот, кто их имеет, является владельцем средств. Различный подход к безопасности средств, хранящихся на определенных адресах, привел к созданию нескольких видов кошельков, которые, в теории, должны затруднить хакеру доступ к ключам. Одним из таких является бумажный кошелек. О нем подробно мы расскажем вам в следующих статьях.

Бумажный кошелек создает запись для вас в блокчейне, где будет указано, сколько у вас биткоинов. Также будет отражено сколько вы потратили, используя этот адрес. Таким образом, после того, как был создан блок (в цепочке блоков), вы можете напечатать адрес этого блока, а также приватный ключ, который позволит вам получить доступ к блоку. Бумажные кошельки, как известно, являются самыми безопасными, так как они не имеют онлайн подключения. Вы даже можете запомнить свой закрытый ключ, если чувствуете себя гением.

Кроме того, хранение ваших средств на биржах — это совсем другая история, т.к. в таком случае вам не нужен приватный ключ для доступа к биржевому кошельку. Ваши средства фактически хранятся на адресе биржи, и поэтому, если будет взломан приватный ключ биржи, вы можете потерять свои средства.

Надеемся данный материал был полезным для вас. Если вы новичок в криптовалюте и технологии блокчейн и хотели бы узнать больше об этом, не забудьте посетить нашу Блокчейн Академию.

Обсудите эту новость в лучших чатах по криптовалюте CryptoOn и bt[c]hat — чат

Источник https://habr.com/ru/post/430240/

Источник https://profinvestment.com/private-key-bitcoin/

Источник https://thebcj.ru/2019/04/02/chto-takoe-privatnyj-klyuch-v-bitkoine-i-kak-eto-rabotaet/