Привет, Хабр! Предлагаю всем желающим немного размять мозги небольшим крипто-ребусом.
Оговорюсь сразу, сам я загадку до конца не решил, однако ход решения вроде бы ясен поэтому мне хотелось бы посмотреть, как будет решать сообщество.
Заранее извиняюсь за стиль изложения, но в четыре утра всё же буду предельно краток рассказывая коротоко и по сути. Кому интересны подробности — все ссылки приведены в конце заметки.
Итак, началось всё с того, что некий художник Энди Баух в 2016-м году прикупил некоторое количество криптовалюты на несколько кошельков. А потом он взял приватные ключи от этих кошельков и каким-то, одному ему известным образом, зашифровал эти ключи в красивых картинках. Таких как под заголовком, например.
Затем Энди сложил эти картинки из блоков Lego и буквально в прошлую пятницу (23.03.2018) выставил всё это дело в арт-галерее la’s Castelli Art Space (ссылки в конце).
Во всё это, как обычно принято у художников, вложен некий глубокий смысл, касательно стоимости искусства и т.д. и т.п. Но мы тут не философствовать собрались, а загадки решать, поэтому перейду сразу к сути.
Я рандомно выбрал для ковыряния картинку от кошелька «INITIALLY VALUED AT $80». Положенные в 2016 году на кошелёк 0.1875 BTC сегодня чудесным образом превратились в 1600$, что, очевидно, должно несколько ускорить расшифровку. Картинка вот:
Итак. Поехали.
Я постеризовал изображение, чтоб было меньше шума и чуть подкрутил контраст с яркостью. Поковырявшись в фотошопе я понял, что картинка эта состоит из простейших блоков 15*6. Вот таких:
Однако, есть ещё три блока, каждый из которых отличается от основного всего на один квадрат. Вот все четыре блока:
Тут используются блоки восьми цветов, что позволяет предположить, что каждый цвет кодирует три бита.
Приватный ключ Bitcoin-кошелька представляет собой строку, насколько я понял, в формате Base58. Что-то в духе такого:
L4QhpdfFzv1DHfoRcbG2T76Z4QN9zmhWhBNEsH22PbKHA4ZNkS
Длина ключа может быть различной, поэтому тут нам, увы, дополнительной информации получить не удастся.
На этом этапе я додумался посмотреть на этот кошелёк в блокчейн и выяснил, что вчера какой-то умник, вероятно, код уже взломал и денег там больше нет =(
Предлагаю вам завершить разгадку, либо поправить меня, если я ошибся в первых шагах. Осталось подобрать цветовое кодирование и это, собственно, самое интересное во всём этом ребусе. Полагаю, что после получения числа, нужно выполнить преобразование Число -> Base58.
Возможно три отличающихся блока дают какую-то подсказку, но может быть и так, что автор просто ошибся при сборке.
В любом случае, подозреваю, что денег на всех кошельках уже нет, так что все дальнейшие манипуляции just for fun.
Upd от SopaXT:
Те, что за $20 и $30 решил я. В первой используют двоичные цифры, а во второй — троичные, и т.д.
Там был т.н. «mini private key», строка из 30 ASCII-символов, где сам ключ — это ее SHA256. Кстати, если добавить в конец "?", то хеш будет начинаться с нулевого байта (такая хитрая проверка на ошибки).
Там можно было заметить повторяющуюся последовательность (длиной в 210 ячеек в двоичной и 150 в троичной и четверичной системе).
Каждые 7/5 (соотв.) ячеек — один байт, а таких байт там 30. В двоичной использовалась семибитная ASCII, как предположил кто-то в IRC, я с ним за это поделился :).
В четверичной первая цифра в группе нулевая (эту решил не я, а _jstanley).
P.S. Цифры с цветами пришлось сопоставлять перебором.
К сожалению, не доступен сервер mySQL