В погоне за битком: как эксперт «Лаборатории Касперского» подобрал секретный ключ от биткоин-кошелька

8 марта

Антивирусный эксперт Алексей Маланов рассказывает, как ему удалось досрочно завершить конкурс от blockchain.ru и забрать свой приз в 0,05 BTC.

Шестого февраля портал blockchain.ru объявил конкурс со следующими условиями:

  1. Биткоины лежат на бумажном кошельке с адресом 17ipJUbstTuK747BFWzNPAijmgFUetHX1v
    Можете проверить баланс прямо здесь.
  2. В течение месяца (с 6 февраля по 6 марта) в материалах на сайте blockchain.ru будут последовательно публиковаться части (по 4 символа) закрытого ключа от кошелька. Ваша задача: внимательно читать тексты и искать эти 52 знака. Как только соберёте приватный ключ – сможете вывести биткоины с кошелька!
  3. Учитывайте, что одновременно с вами получить пароль могут ещё несколько участников. Поэтому на финальном этапе всё будет решать скорость. Кто первый импортирует бумажный кошелёк и переведёт с него биткоины на другой адрес – заберёт приз. Не умеете пользоваться бумажными кошельками – ничего страшного, у вас есть целый месяц, чтобы разобраться. Начать можете здесь.
  4.  Победителя заранее просим связаться с нами через почту info@blockchain.ru (в теме письма напишите «Конкурс telegram»), вам будет предложено участие в спецпроекте.

Приз – 0.05 биткоина (~600$). Деньги неплохие, но, что важнее, – по сути за просто так.

По фразам «на финальном этапе будет решать скорость» и «вам будет предложено участие в спецпроекте» мне показалось, что авторам просто хочется найти программиста для решения какой-то своей практической задачи, связанной с ключами, а конкурс – всего лишь способ отобрать подходящего. Если была цель поощрить внимательных читателей, вполне сгодилась бы сумма и в 0.001 биткоина (~6-12$).

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

Алексей Маланов

Суть задачи

Биткоин построен на криптографии с открытым ключом. Есть секретный ключ, который знает только владелец кошелька. По нему можно вычислить публичный ключ, который в свою очередь можно свернуть в адрес кошелька.

Послать деньги на адрес может любой желающий, а вот чтобы потратить деньги, надо при помощи секретного ключа подписать транзакцию: «Передаю деньги со своего адреса на адрес Васи».

Секретный ключ выглядит так 5KDD4329bJzRNjJneUdC4Dpdw2U6RNsPuhoxA2saHX3gnf4Dg1H, это 51 символ. Авторы пообещали публиковать его в статьях на blockchain.ru по 4 символа в течение месяца.

Что надо делать? Конечно же поначалу можно ничего не делать и никуда не торопиться, а вот под конец надо написать программу и подобрать ключ. Пытаться собрать ключ вручную и ждать последние три символа – дело бесперспективное.

Техническая сторона вопроса

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

https://habrastorage.org/files/8dc/200/25b/8dc20025b1bd4a8d99720a344219d267.png

Описание формата представления секретного ключа для доступа к кошельку

Ключ, который мы должны отгадать (5KDD4329bJzRNjJneUdC4Dpdw2U6RNsPuhoxA2saHX3gnf4Dg1H), это закодированный в виде текста секрет длиной 32 байта. Но что особенно важно, последние 5 символов (4Dg1H) вообще не нужны при угадывании. Они используются для контроля остальной информации, чтобы человек случайно не ошибся при вводе адреса.

Забавно, что в криптовалюте Ethereum, которая появилась в 2015 году, спустя более 6 лет после создания биткоина, такого контроля адресов предусмотрено не было. Как результат, легко послать деньги на неправильный адрес.

Например, на такой адрес 0x0000000000000000000000000000000000000000 случайно напосылали более 7000 эфира и еще на полмиллиарда долларов всяких разных токенов.

В общем, команда Сатоши была внимательна к мелочам, грамотные парни.

Второй важный момент – ключ на самом деле длиной не 52 символа, как сказали организаторы, а 51. Дело в том, что он начинается с 5, а это однозначно говорит о том, что он в uncompressed формате. А это значит, что перебирать надо строку вида 5KDD4329bJzRNjJneUdC4Dpdw2U6RNsPuhoxA2sa111111xxxxx. Если дописать еще одну лишнюю единичку (52 символ), то все развалится, ничего не подберется.

Программа для подбора:

  1. декодировать подсказку, получить часть секретного ключа
  2. добавить единичку к секретному ключу
  3. получить из секретного ключа адрес кошелька
  4. если адрес не совпадает с искомым, перейти к шагу 2

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

Например, я выяснил, что ключ в виде 5KDD4329bJzRNjJneUdC4Dpdw2U6RNsPuhoxA2sa111111xxxxx подбирается где-то за час. А это значит, что последние символы A2sa необходимы. Ведь без них на подбор уйдет 11 миллионов (58*58*58*58) часов.

Ну, а еще – программа должна быть многопоточной. Во всех современных процессорах несколько ядер. Это значит, что программа будет работать в 4-8 раз быстрее, если вы загрузите их все.

Если бы награда была побольше, оправданно было бы даже арендовать мощности в облачном сервисе.

Нетехническая сторона вопроса

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

Например, 6 февраля, еще когда не было ни одной подсказки, внимательно читал вот эту статью, и увидел 4 латинских символа:

Это теперь смешно, но тогда я подумал, что Frok – одна из частей ключа, а ключ еще и не случайный, а придуманный авторами.

Потом выяснилось, что подсказка всегда в самом конце статьи, всегда жирным шрифтом, не больше одной в день. Но кто знает, а вдруг в конце организаторы специально по приколу проверят внимательность участников и спрячут ее в середине статьи? И все, проигрыш.

Еще оказалось, что на blockchain.ru публикуется очень много статей: десятки в день и пол тысячи в месяц. До конкурса я мониторил только телеграм-канал и не представлял, что материалов так много. Организаторы достигли цели – вовлеченность меня, как читателя, повысилась.

Что делал я, чтобы справиться с потоком статей. При помощи консольной утилиты wget я выкачивал весь сайт blockchain.ru и натравливал на файлы скрипт, который удалял все русские буквы.

Статья от 6 февраля после обработки

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

Самое сложное в конкурсе – закончить его третьего марта. Потому что четвертого я улетал и никак не мог участвовать дальше. Но по расчетам выходило замечательно: третьего получаем 40 символов, четвертого – 44, пятого – 48, шестого – последние три символа. Не получить 40 символов третьего нельзя, потому что иначе дней не хватит (конечно, при соблюдении условия «не больше одной подсказки в день»). А сорока как раз хватает для подбора. Третьего в субботу я регулярно проверял новые статьи, жадно искал ключ, но его все не было.

В итоге не обошлось без сюрпризов. В выходные на ресурсе выходит заметно меньше статей. Когда все статьи были опубликованы, а ключа не было, организаторы вставили его в пятничную вчерашнюю статью, а ее анонс опубликовали в телеграм-канале. Я мониторил субботние статьи и далеко не сразу заметил «прикол». Это могло стоить мне победы, но я вовремя заглянул в телеграм и не поленился пересмотреть статью, которую я читал накануне.

Заключение

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

Спасибо организаторам. Требуем больше конкурсов, разных и интересных!

Автор статьи – Алексей Маланов, антивирусный эксперт Лаборатории Касперского.

 

Оставайтесь в курсе и следите за развитием событий на сайте blockchain.ru! Присоединяйтесь к обсуждениям самых интересных тем в нашем сообществе Facebook. А для того, чтобы оперативно узнавать о горячих новостях, подписывайтесь на наш телеграм-канал.

Войдите на сайт, чтобы оставить комментарий
0 комментариев
Популярные
Новые

Рассылка

Подписывайтесь на обновления и анонсы

18+
Москва, Берсеневская набережная 6/2
+7 (495) 118-41-48
2018 © Blockchain.ru, Сделано в Charmer
  • Дисклеймер
  • Пользовательское соглашение
  • Политика конфиденциальности

К сожалению, браузер, которым вы пользуйтесь, устарел и не позволяет корректно отображать сайт. Пожалуйста, установите любой из современных браузеров, например:

Google Chrome Firefox Opera