Пользователи биткойнов часто генерируют новые адреса для каждой транзакции, которую они совершают, что значительно увеличивает количество адресов биткойнов, используемых для получения денег.
Возможно ли (и выгодно) кому-то найти коллизии в адресном пространстве биткойна, чтобы украсть деньги?
Это может быть «теоретически» возможно, но в действительности это вряд ли будет достигнуто — как маловероятно подсчет количества атомов в офисном здании.
Биткойн-адреса на самом деле представляют собой 256-битный SHA - хэш открытого ключа ECDSA , поэтому любые уязвимости в этих алгоритмах представляют собой уязвимость в самом биткойне. Однако на самом деле для взлома этого уровня шифрования требуется огромная вычислительная мощность. По совпадению, для этого требуется точно такая же вычислительная мощность, как и для майнинга биткойнов, и почти в каждом сценарии майнить будет намного выгоднее, чем взламывать.
Редактировать: на самом деле это RIPEMD-160 (SHA-256 (открытый ключ)), а не просто SHA-256 (открытый ключ), как я упоминал изначально, поэтому это 160-битный хеш 256-битного хэша открытого ключа. Хотя целевое пространство ключей (160 бит) меньше благодаря этому последнему шагу, это также дополнительные вычисления, которые должен сделать потенциальный хакер. Хотя дополнительная вычислительная сложность даже близко не отменяет удаление 96-битного пространства ключей, следует отметить, что обнаружение коллизии в 160-битном пространстве ключей по-прежнему невероятно сложно и требует много времени. Что еще более важно, это сложнее и требует больше времени, чем добыча такого же количества монет.
Некоторые биткойн-адреса можно взломать методом грубой силы, потому что некоторые люди генерируют свои закрытые ключи небезопасным способом. Любые (ненулевые) 32 байта могут быть закрытым ключом. Таким образом, запуск sha256 по кодовой фразе дает явно случайный, но пригодный для перебора закрытый ключ.
Возьмем, например, sha256 ("колбаса"):
$ echo -n 'sausage' | sha256sum
30caae2fcb7c34ecadfddc45e0a27e9103bd7cfc87730d7818cc096b1266a683 -
Загрузите бит -адрес и вставьте этот закрытый ключ на вкладку «Информация о кошельке», чтобы получить соответствующий биткойн-адрес, затем найдите его в blockexplorer :
$ GET http://blockexplorer.com/q/getreceivedbyaddress/1TnnhMEgic5g4ttrCQyDopwqTs4hheuNZ; echo
0.01000000
и вы увидите, что в феврале 2012 года адрес удерживал один битцент около 2 дней.
Смотрите также: «fuckyou», державший 2,5 битцента в течение 12 праздничных дней на рубеже прошлого года.
Таким образом, на практике возможно создать биткойн-адрес методом грубой силы, но только для плохо выбранных парольных фраз. Вероятно, это были просто люди, играющие с идеей «хранить биткойны в своей голове», поэтому они на такие небольшие суммы и почему их не оставляли финансироваться надолго.
При создании этого ответа ни один адресный баланс не пострадал.
Чтобы потратить деньги, отправленные на биткойн-адрес, вам просто нужно найти открытый ключ ECDSA, хэш которого соответствует тому же 160-битному значению. Это займет, в среднем, 2 160 генерации ключей.
Предположим, вы можете генерировать миллиард (2 30 ) в секунду, вам потребуется 2 130 секунд.
Для параллельного выполнения этого с использованием миллиарда машин требуется всего 2 100 секунд.
Если к вам присоединится миллиард ваших самых богатых друзей, это займет всего 2 70 секунд.
В году примерно 2 25 секунды, поэтому вам нужно 2 45 года.
Возраст Вселенной пока около 2 34 лет — пора ломать голову!
Нет, это невозможно по двум причинам.
Во-первых, вам придется сгенерировать и хешировать невообразимо большое количество пар ключей ECDSA, чтобы иметь разумный шанс найти коллизию. При нынешних вычислительных мощностях это займет больше времени, чем возраст Вселенной.
Во-вторых, как указано в других ответах, намного выгоднее генерировать биткойны, если у вас много вычислительной мощности.
Если вы хотите увидеть какое-то доказательство того, что сгенерировать известную пару ключей действительно невозможно, вы можете проверить это самостоятельно, если хотите.
Павол Руснак создал coinkit, библиотеку Python для взаимодействия с вещами, связанными с биткойнами. Там есть пример того, как его использовать, который делает именно то, что вы просите.
Он генерирует случайную пару ключей и ищет баланс на blockchain.info.
Я запустил его около месяца назад с небольшими изменениями примерно на 1 миллионе адресов и не обнаружил ни одного конфликта.
Если вы предпочитаете диаграммы: http://i.imgur.com/ag3KQ0L.png (адресов в адресном пространстве больше, чем зептометров, 1/1 000 000 000 000 000 000 метра в ширине вселенной) .
Если вы предпочитаете математику: http://download.wpsoftware.net/bitcoin-birthday.pdf (автор Andrew Poelstra ) говорит (слегка отредактировано):
Используя [математику атаки дня рождения], мы подсчитали [выше], что для вероятности коллизии 0,1% нам потребуется 5,4 × 10 ^ 22 существующих адресов. Для вероятности 99,9999% нам потребуется 6,35 × 10^24 адресов.
Таким образом, даже если было сгенерировано 10^22 биткойн-адреса, коллизии просто не произойдет. Но если бы было сгенерировано 10 ^ 25 адресов, коллизия обязательно произошла бы.
Должны ли мы беспокоиться об этом? Нет, по этим независимым причинам:
Вероятность конкретной коллизии, скажем, коллизии с одним из ваших адресов, по-прежнему составляет 1 из 2^160 или 1 из 10^48. Таким образом, даже если у вас есть миллион миллионов миллионов адресов, ни у кого нет шансов столкнуться с вами.
На момент написания этой статьи в сети используется менее 10^7 адресов. Таким образом, любой, у кого 10 ^ 25 адресов, будет сталкиваться только со своими собственными адресами.
Каждый адрес занимает около 100 байт для хранения. (На самом деле примерно вдвое меньше, но нас интересуют только порядки.) Таким образом, чтобы сеть поддерживала 10^25 адресов, потребовалось бы 10 миллионов миллионов терабайт памяти только для их записи. (И это даже не касается проблемы поиска в таком огромном хранилище данных.
По данным sipa, если текущая сеть майнинга (которая составляет 25 THash и является самой мощной вычислительной сетью в истории мира) была переключена на генерацию адресов, сеть могла бы генерировать 2,5 × 10 ^ 12 адресов в секунду (один генерация адреса, соответствующая примерно 10 хэшам). При такой скорости потребуется 127 000 лет, чтобы получить столько адресов. Спорный вопрос, так ли долго ходил по земле homo sapiens.
При 21 миллионе биткойнов, когда-либо существовавших, и 8 знаках после запятой, не более 2,1 × 10^14 могут иметь деньги одновременно. Но в пространстве из 10 ^ 24 адресов это означает, что только один из 10 ^ 12 адресов может иметь деньги. Таким образом, злоумышленник, совершивший 3 триллиона раз физически невозможное, имеет только один шанс из триллиона получить хотя бы один сатоши.
Теоретически можно (но не выгодно). Но на самом деле сумма денег, которую вам придется потратить, будет намного больше, чем вы заработаете.
Возможно: Да.
Вероятно: Нет.
Многие события возможны, даже если они маловероятны. Вероятность подбора закрытого ключа биткойна настолько маловероятна, что с современными вычислительными стандартами это практически невозможно.
По мере развития науки о криптографии и по мере того, как брутфорс становится все более мощным, базовая инфраструктура биткойнов будет улучшаться, чтобы идти в ногу с совершенствующимися технологиями. Это может потребовать доступа к вашему биткойн-кошельку с использованием улучшенного клиента в будущем для поддержания высокого уровня безопасности.
Кроме того, биткойн-адрес — это не то же самое, что закрытый ключ. Генерация биткойн-адреса позволит злоумышленнику отправлять вам монеты, но не позволит им подписывать транзакции с вашим закрытым ключом (т. е. удалять монеты из вашего кошелька).
Да, следуя технологическому прогрессу, как только станет доступным оборудование, способное выполнять 1 Тэш/сек и выше, становится возможным начать поиск коллизий с разумной вероятностью успеха. По моим оценкам, примерно через 2-3 года это станет жизнеспособным, а вот удастся ли кому-нибудь, кто попытается получить адрес, с которым связано приличное количество BTC, это другой вопрос, и вопрос о том, будет ли это даже быть прибыльным еще дальше.
Я совершенно уверен, что шансы намного меньше, чем показывает базовая математика. пара.
Пропустите десятилетие вперед, и это будет гораздо более реалистичным беспокойством, или в тот момент, когда Тэш станет нормальным, а Фаш появится на картах ... точно так же, как графические процессоры сейчас бездействуют и ищут применение, так же будет майнинговое оборудование, которое даже не было изобретено еще через несколько лет.
2^80
для обнаружения коллизии должны потребоваться грубые ключи. Генерация ключа занимает гораздо больше времени, чем хэш SHA-256 (и стандартные ASIC для майнинга этого не сделают), поэтому «THash» не является полезным измерением. Но даже если бы вы могли делать 1 тераключ в секунду, вам нужно было бы делать 2^40
ключи, чтобы усреднить одно столкновение — по моим расчетам, это около 34 000 лет — и даже тогда вы, вероятно, только что нашли столкновение с другим ключом, который вы сгенерировали, который на самом деле не содержит ничьих монет.2^256
возможные закрытые ключи сопоставляются только с возможными адресами 2^117
или около того 2^160
- это может показаться огромной слабостью используемых алгоритмов хеширования, если это правда, и должно быть опубликовано в ведущем криптографическом журнале.Я прочитал на bitcoin.org, что закрытый ключ $d_A$ — это любое целое число от $1$ до $n-1$. Также $n=FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFE 0x00 = 18 446 744 073 709 551 615 0d00 $. Предположим, что существует 100 миллионов различных адресов, что составляет $5,42 e^{-12}$ вероятности выбора используемого адреса. Если у нас есть $x$ догадок, нам нужны закрытые ключи $x=$frac{1}{5.42e^{-12}}$, чтобы гарантировать их нахождение. Это составляет $5,42 e^{12}$ генерации адреса, тогда для всех 5,42 триллиона сгенерированных случайным образом закрытых ключей вам нужно будет умножить $G$ на каждый закрытый ключ $d_n$ в эллиптическом поле, чтобы получить $Q_n$, затем выполнить поиск цепочка блоков биткойнов для этого $Q_n$. После 5,42 трлн из них вы почти наверняка найдете один и сможете украсть его биткойны.
Вы можете решить это с помощью компьютерных наук, например, как долго умножать $d_n \times G$ и как долго искать в цепочке блоков. Поскольку почти все не будет в нем, это будут все поиски в худшем случае.
Артефакт2
Пасьер
Марч
Пасьер
Марч
Марч
Манан5439