- Уязвимость генератора псевдослучайных чисел в Bitcoin
- Атака генератора псевдослучайных чисел
- Каков масштаб угрозы для Биткоина?
- Как с этим бороться ?
- Пул поиска потерянных приватных ключей криптовалют Bitcoin, Ethereum, Litecoin, Dash и других
- BtcMaker
- BtcMaker
- BtcMaker
- Уязвимость генератора псевдослучайных чисел в 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 из стандартных библиотек операционной системы.
Таким образом, во всей функции можно повлиять только на эту переменную. Что даёт два вектора атаки:
- заложенная уязвимость в псевдослучайное число
- и вселенское везение при котором случайное число выпадает дважды
» width=»640″ height=»360″ allowfullscreen>
Атака генератора псевдослучайных чисел
Первым эту проблему исследовал и опубликовал 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 — это сумма всех балансов цепочки адресов. А при исходящей транзакции, с этих адресов собираются монеты, составляя для каждого Биткоин-адреса одну исходящую транзакцию. Сдача будет направлена на новый Биткоин-адрес из цепочки адресов.
Такая схема работы значительно увеличивает безопасность и анонимность кошелька.
Источник
Пул поиска потерянных приватных ключей криптовалют Bitcoin, Ethereum, Litecoin, Dash и других
BtcMaker
BtcMaker
BtcMaker
Старый домен на русском https://secretscan.ru/ (не реклама)
Новый домен на англ.яз. https://secretscan.ru/ (не реклама)
(Я не владелец и не разработчик, просто участник проекта)
Почему я про это рассказываю?
Нужны участники, которые помогают друг другу своими ресурсами, чем нас больше, тем выше шансы что то найти по времени.
Диапазон поиска огромен, шансов может и не быть, так как на весь перебор требуется несколько сотен, а то и тысяч лет.
Приватные Биткоин-ключи это целочисленное значение от 1 до 115792089237316195423570985008687907852837564279074904382605163141518161494337 или в HEX 1 до 0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141.
Пока квантового компуктера нету для этих целей, они применяются в других областях. Дело времени.
И так.
Как участвовать?
1) Зарегистрируйтесь.
2) Зайдите в Личный кабинет, введите ваш кошелек для биткоина и эфира.
3) Скачайте и запустите программу, согласно инструкции на сайте в разделе «Программа».
Как работает сканер?
1) Генерируется приватный ключ.
2) Из приватного ключа программа математически высчитывает публичный ключ и получает связанный с ним адрес кошелька.
3) Кошелек автоматически сверяется с топовыми адресами в базе, содержащими биткоины, эфир и т.д.
4) Если адрес совпадет с адресом поиска, то все участники получат транзакции пропорционально количеству проверенных приватных ключей.
5) Если у участника не указан адрес для какой-либо криптовалюты, то в личном кабинете появится приватный ключ от нового, сгенерированного адреса, с пополненным балансом.
Как узнать что ключ найден?
В кабинетах участников есть звезда, которая автоматически включится, если у любого из участников полученный адрес совпадет с базой поиска. При этом поиск продолжится для следующего ключа.
Какие шансы?
Вероятность нахождения 1 адреса 2^256 степени (примерно равно 10^77), что практически невозможно, но это как бесплатная биткоин лотерея и 1) с момента создания проекта скорости выросли в миллион раз, 2) в поиске 10^7 адресов, что увеличивает шансы, 3) в приватном ключе 64 знака, а в адресе только 40, поэтому у каждого адреса существует 2^(256/64*40=96), т.е. 2^96 (10^29) работающих приватных ключей. Проверив 2^(256-256/64*40=160) 2^160 (10^48) ключей, будут найдены все адреса, 4) используется особый математический рандом, сужающий область поиска на порядки, 5) если для поиска 1 видеокарте требуется миллион лет, тогда миллион видеокарт найдет за 1 год. В отличие от майнинга, когда добывается регулярно по чуть-чуть, процесс поиска ключей занимает длительное время, но и вознаграждение существенней.
Есть и другие направления развития проекта: на основе проверенных приватных ключей и полезных математических вычислений планируется сделать новую криптовалюту, которую участники как бы добывают уже сейчас, перенос открытого кода в блокчейн с запуском криптовалюты, привязанной к количеству проверенных приватных ключей с возможностью покупать/продавать и менять свой %, полная автоматизация и децентрализация (вся статистика в программе, программы участников связаны между собой в сеть).
Законно ли это?
Генерация приватных ключей и проверка адресов — это теоретические вычислительные математические операции онлайн по общеизвестным формулам, подбор и поиск числовых совпадений. Нет никакого взлома, атак и соединений с чем-либо. Кроме того, в поиске участвуют большинство адресов, приватные ключи к которым вероятно утеряны. Также, общеизвестно, что все криптовалюты являются открытыми и доступными, распоряжается криптовалютой любой владелец приватного ключа (случайное число, которых 2^96 у каждого адреса). Если в течении месяца найдется собственник, предоставивший доказательства и приватный ключ, то кошелек будет возвращен владельцу.
Как осуществляется доступ к BTC по приватному ключу?
Остановите поиск, скопируйте Bitcoin Private key, скачайте программу биткоин кошелька Electrum. Запустите программу, создайте кошелек с помощью private key. Установите пароль на вход. Все, вы можете управлять балансом этого адреса. Для Segwit и Bech32 адреса откройте консоль, введите importprivkey(‘p2wpkh-p2sh:ПриватныйКлюч’) и/или importprivkey(‘p2wpkh:ПриватныйКлюч’).
Как осуществляется доступ к ETH по приватному ключу?
Остановите поиск, скопируйте Ethereum Private key, зайдите на сайт MyEtherWallet в раздел Send Ether & Tokens / Private Key. Вставьте ключ и нажмите Unlock. Сравните адрес кошелька.
Источник
Уязвимость генератора псевдослучайных чисел в 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 из стандартных библиотек операционной системы.
Таким образом, во всей функции можно повлиять только на эту переменную. Что даёт два вектора атаки:
- заложенная уязвимость в псевдослучайное число
- и вселенское везение при котором случайное число выпадает дважды
Атака генератора псевдослучайных чисел
Первым эту проблему исследовал и опубликовал 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 — это сумма всех балансов цепочки адресов. А при исходящей транзакции, с этих адресов собираются монеты, составляя для каждого Биткоин-адреса одну исходящую транзакцию. Сдача будет направлена на новый Биткоин-адрес из цепочки адресов.
Такая схема работы значительно увеличивает безопасность и анонимность кошелька.
Источник