Приватные биткойн-ключи представляют собой целое число от 1 до 115792089237316195423570985008687907852837564279074904382605163141518161494337 или в шестнадцатеричном формате от 1 до 0xfffffffffffffffffffffffffffebaaedce6af4. 8a03bbfd25e8cd0364141. В основной сети Биткойн есть адреса, начинающиеся с 1: сжатый, несжатый; адреса с 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 — обратный mod N числа k.
- H(m) — хэш подписываемого сообщения.
Подпись представляет собой пару (r,s).
Переменная «k» является случайной и получается в алгоритме ECDSA из стандартных библиотек операционной системы.
Таким образом, во всей функции можно воздействовать только на эту переменную.
Что дает два вектора атаки:
- встроенная уязвимость в псевдослучайном числе
- и универсальная удача, в которой случайное число появляется дважды
Атака на генератор псевдослучайных чисел
Нильс Шнайдер первым исследовал и опубликовал эту проблему 28 января 2013 года на своей личной странице.Но проблема сохранилась и, более того, приобрела новый масштаб.
Программные атаки на PRNG делятся на три типа: Прямая криптографическая атака, основанная на анализе выходных данных алгоритма.
Атаки на основе ввода можно разделить на известные атаки на ввод, атаки на воспроизводимый ввод и атаки на выбранный ввод. Атаки основаны на открытии внутреннего состояния, при котором злоумышленник знает начальное или начальное состояние генератора.
Сюда же относятся закладки в программном обеспечении, в которых создатель алгоритма знает любое из хешированных псевдослучайных чисел и последующие в цепочке.
Такой алгоритм сложно определить снаружи, поскольку числа кажутся равномерно распределенными по всему диапазону.
К уязвимостям программного обеспечения также относится слабая генерация псевдослучайных чисел в некоторых библиотеках.
Такие как SSL, OpenSSL, некоторые Java-библиотеки, JavaScript и т.д. Подробные материалы неоднократно описывались в периодике по хакерству и со временем стали примерами в учебниках по криптографии.
Каков масштаб угрозы для Биткойна?
Имея полноценный биткойн-узел, вы можете сравнивать и группировать все транзакции в сети.Достаточно сравнить переменную «k» во всех транзакциях для каждого адреса и найти дубликаты.
Первый раз сверку мы делали в конце 2016 года, тогда база насчитывала более 210 миллионов адресов, транзакций общим количеством более 170 миллионов адресов и 447 миллионов подписей.
Сканирование уязвимых адресов в десять потоков заняло неделю.
В результате было найдено 1327 уязвимых адресов с одинаковыми сигнатурами! Список адресов можно найти в конце статьи.
Это значит, что для этих адресов можно вычислить приватный ключ, а значит получить контроль над деньгами.
Самая крупная утечка произошла летом 2015 года.
JavaScript кошелька Blockchain.info в течение нескольких часов выдавал одно и то же значение переменной «k».
Что привело к краже около 200 биткойнов! Если убрать человеческий фактор из уязвимостей ПО, вероятность совпадения составляет примерно 0,000296868%.
Совсем немного, но мне бы очень не хотелось стать таким «счастливчиком» и потерять свои деньги.
Как с этим справиться?
Как мы описали выше, эта уязвимость работает только при отправке платежей и генерации одной и той же переменной «K» как минимум в двух транзакциях.Поэтому если не создавать исходящие транзакции или сократить их количество до минимума, то угрозы нет. Эта идея уже давно реализована в протоколе Биткойн BIP 32 (Иерархические детерминированные кошельки, HD-кошелек).
Его идея заключается в том, что используется закрытый ключ, из которого можно получить бесконечную цепочку адресов Биткойн.
Одноразовый адрес может использоваться для принятия каждой отдельной транзакции.
В этом случае сумма баланса HD-кошелька представляет собой сумму всех балансов в цепочке адресов.
И во время исходящей транзакции монеты собираются с этих адресов, совершая одну исходящую транзакцию для каждого биткойн-адреса.
Изменение будет отправлено на новый биткойн-адрес из цепочки адресов.
Такая схема работы существенно повышает безопасность и анонимность кошелька.
[3] Комбинированные атаки для восстановления закрытого ключа [4] Список уязвимых адресов и общий баланс Теги: #bitcoin #Криптовалюты #уязвимость #ECDSA #RNG #crypto #rng
-
Меррифилд, Роберт Брюс
19 Oct, 24 -
Разница Между Cpanel И Plesk Obsidian
19 Oct, 24 -
Пулемет – Это Событие?
19 Oct, 24 -
Почему Я Не Верю В 3D Карты
19 Oct, 24 -
Официальный Ответ Microsoft На Демарш Google
19 Oct, 24 -
Оригинальный Apple Imac
19 Oct, 24