Как получить приватный ключ от Bitcoin Cash кошелька Роджера Вера

Вместо предисловия к этой статье я хочу заявить, что не знаком лично ни с самим Роджером Вером, ни с журналистами, записавшими это интервью. Каждый, у кого был доступ к видео, мог узнать приватный ключ. Я мог бы назвать этот пост просто «Какие классные все эти QR-коды и как мне удалось восстановить QR-код из мелкого фрагмента». Но гораздо интереснее, когда QR-код является ключом к Bitcoin Cash кошельку с BCH на $1 000.

Биткойн, Эфир, Litecoin, Dash, Neo… Криптовалюты пришли в нашу жизнь и продолжают быстро в ней обосновываться. Я слежу за биткойном с 2013 (следить не значит покупать). Я три раза прочитал Mastering Bitcoin чтобы понять как всё это работает и быть в состоянии популярно объяснить это кому угодно. Но тем не менее, рынок развивается так стремительно, что я не успеваю за всем следить. Новые криптовалюты, новые форки, новые ICO… Все это происходит буквально везде и всюду, каждый день.

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

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

 

Первое правило Крипто-клуба: никому не давай свой приватный ключ.

 

Самая ценная вещь для держателя криптовалют – его приватный ключ. Все просто: потерял ключ — потерял деньги. Кто-то узнал твой приватный ключ – ты тоже теряешь деньги.

В своей статье я расскажу и пошагово покажу как я сумел восстановить приватный ключ от кошелька с криптовалютой на $1000. Это кошелек был создан Роджером Вером специально для французской телепрограммы “Complément d’enquête”, но его номер был показан в «заблюренном» виде.

Еще одна прелюдия

Не так давно канал France 2 показал документальный фильм про биткойн. Для фильма они взяли интервью у @rogerkver, который решил подарить $1 000 телезрителю, который быстрее всех сможет добраться до кошелька. Но QR-код и приватный ключ от него были «заблюрены» сотрудниками France 2 при монтаже видео.

Вот та часть документального фильма, где Роджер Вер дает адрес кошелька.

№1 «Заблюренный» QR-код и ниже строка с приватным ключом

Я видел несколько возмущенных комментариев по этому поводу в Twitter. Некоторые даже обвиняли France 2 в том, что они решили оставить деньги себе. Это не так. France 2 пришлось «заблюрить» ключ не потому, что они захотели присвоить 1 000 долларов, а потому, что следовали букве закона.

Можно попытаться считать и раскодировать QR-код из видео, но он «заблюрен» так, что вам не удастся это сделать ни одним из доступных приложений. На этом история о $1 000 могла бы закончиться. Деньги пропали бы навсегда, поскольку Роджер вряд ли сохранил копию приватного ключа (разумеется их еще могли забрать себе записавшие интервью журналисты).

Но ближе к самому концу интервью на экране был четко виден один маленький кусочек QR-кода. Показали ли они его специально, зная, что иначе $1 000 пропадут? Или это просто одна из тех ошибок, которые может допустить неопытный пользователь криптовалют?

№2 Четко видимая часть QR кода. Ниже – «заблюренный» приватный ключ.

Скриншот этого QR кода мне прислал мой друг @clementstorck. Мы решили немного «поколдовать» над ним, чтобы понять сможем ли мы подобрать приватный ключ к кошельку, имея в своем распоряжении столь малый объем информации.

Честно говоря, шансы подобрать ключ перебором (brute force) были близки к нулю. Мы знали, что QR-коды хорошо защищены от повреждений. Нашей целью было найти как можно больше информации, чтобы максимально сократить количество неизвестных параметров. После описанных ниже шагов, нам осталось подобрать искомую комбинацию из всего 2 097 152 возможных вариантов.

Итак, с чего начать? Вот предпринятые нами шаги:

  • Сбор информации
  • Увеличиваем! Анализ изображения
  • Стандарт оформления QR-кода. Часть 1
  • Реконструкция QR-кода
  • Стандарт оформления QR-кода. Часть 2
  • Раскодирование QR-кода
  • Код с коррекцией ошибок
  • Python & подбор перебором (brute force)

1 — Сбор информации

На первом этапе мы попытались «выжать» из видео как можно больше информации. Мы просмотрели интервью кадр за кадром и сделали несколько скриншотов:

Открытый ключ, который привел нас к (почти) пустому BTC кошельку. Неужели Роджер Вер соврал? Именно так решили многие пользователи Twitter. Он не врал. Вот его твит. Нужно было искать BCH кошелек.

№3 Открытый ключ и QR код: 17Qgadvc7pm51mV9r9zUAs4xU1XXwDRr8o

«Заблюренная» часть приватного ключа. Мы исследуем её на этапе Анализа изображения, чтобы получить первые 6 символов. Код с коррекцией ошибок даст нам следующие 7.

№4 «Заблюренная» часть приватного ключа. Можно прочитать некоторые символы, но все нечётко.

Последняя буква приватного ключа, которая очень пригодится при отгадывании последних 8 символов.

№5 Последняя буква приватного ключа. Четкая “V”

Скриншоты верхней и левой части QR-кода также пригодятся. Не смотря на плохое качество, они дадут довольно много полезной информации на стадии завершения реконструкции QR-кода.

№6 Можно расшифровать верхний первый ряд QR-кода.

№ 7 Серьезно? Левая сторона QR-кода, первые две колонки можно (частично) расшифровать.

Инструмент, которым Вер пользовался для создания открытого и приватного ключа – Single Wallet на Bitcoin.com. Это дает нам кое-какую информацию о данных, зашифрованных в QR-коде: ключ длиной в 52 символа формата Wallet Import, похожий на этот:

KwjiU4CVAmdyxyDbvkbx2XbSoU1nxZgyXz7usqAemvsd4RdGHoPF

Следующий шаг – воссоздание QR-кода.

2 — Давайте увеличим! Анализ изображения

Ok, у нас есть меньше 1/3 QR-кода и мы по-прежнему очень далеки от расшифровки приватного ключа. Но что ещё можно узнать из полученных скриншотов?

Мы решили хорошенько рассмотреть 2 скриншота. На первом из них «заблюренный» QR-код приватного ключа. Мы решили узнать смогут ли приложения для чтения QR-кодов прочитать его после небольшой обработки.

Второй скриншот, над которым мы решили поработать – тот, на котором был приватный ключ. Чтобы сработал код с исправлением ошибок, нужно было получить хотя бы небольшую часть информации.

Мы решили послать скриншоты нашим экспертам. И получили хорошие результаты 🙂

Так и не смог решить, какая из реплик моя самая любимая.

А Вот что у нас получилось после небольшого «разблюривания».

«Разблюренная» версия QR-кода по-прежнему не читалась приложениями. Мы решили всё же попытаться его прочитать, потому что этот чувак проводил ряд крэш-тестов с QR-кодами и, судя по комментариям, все они оказались сканируемыми.

№8 Но у нас не получилось ничего кроме этой картинки. Только подтверждение последней буквы.

Две версии «разблюренного» приватного ключа. Первая дает нам первые четыре символа (мы не можем четко увидеть “K”), а вторая – первые шесть символов (мы не можем четко увидеть “z”).

№ 9 Нечетко, но можно различить “?yUz”

№10 Немного четче. Можно прочитать до 6 символа “KyU?sR”.

Эта информация пригодится нам на следующих этапах. Пока забудем про нее и сосредоточимся на QR-коде.

3 — Стандарт оформления QR-кода. Часть 1

Важной задачей было разобраться в том, как работают QR-коды и насколько можно восстановить поврежденный QR-код с помощью кода с коррекцией ошибок.