Около года назад, бродя по всемирной паутине в поисках онлайн-заработка, я наткнулся на информацию о так называемых «криптовалютных кранах». Краткое пояснение для тех, кто не в теме: краны – специальные сайты, позволяющие заработать криптовалюту за просмотр рекламы, ввод капчи или какие-либо иные действия, не требующие от пользователя ни знаний, ни квалификации и потому доступные любому желающему. Понятно, что речь идёт о мизерных суммах, которыми вряд ли можно заинтересовать даже интернет-люмпенов. Поэтому для привлечения пользователей сайты-краны не устанавливают фиксированную расценку за каждое действие, а оформляют раздачу криптокопеек в виде игр или лотерей. Например, так выглядит страница раздачи бесплатных биткойнов на сайте FreeBitcoin, неизменно занимающем верхнюю строчку во всех обзорах и рейтингах криптовалютных кранов:

Всем желающим предлагается сыграть в бесплатную лотерею, каждый пользователь может сделать одну попытку в час. Лотерея беспроигрышная, размеры выигрышей указаны в таблице, они зависят от текущего курса биткойна и выпавшего номера. Для большинства номеров суммы менее чем символические, но нижние строки смотрятся неплохо: максимальный приз – 200 долларов США в биткойн-эквиваленте. Представляете, одним кликом заработать 200 баксов, тем самым почти удвоив мою скромную месячную пенсию! Ведь, на первый взгляд, вероятность такого выигрышного клика – 1 из 10 тысяч. Пусть мои шансы сделать этот победный клик невысоки, тем не менее, они не выглядят совсем уж призрачными. Конечно, чтобы сорвать джек-пот, потребуется некоторое везение, но вдруг повезёт именно мне?! Впрочем, не выпадет главный приз – не беда, 20 у. е. тоже будут неплохой прибавкой к пенсии, ведь участие бесплатное, а попыток можно сделать сколько угодно, благо свободного времени достаточно, были бы желание и доступ в интернет… Так я и встрял в эту историю с FreeBitcoin.
Первые 1,5-2 тысячи попыток прошли в нетерпеливом ожидании джек-пота и в полной уверенности, что он вот-вот выпадет. Когда счёт пошёл на третью тысячу, предвкушение близкого выигрыша постепенно стало слабнуть и сменяться всё более усиливающимися сомнениями: ведь мне ни разу не выпал не только главный приз в 200 у. е., но и гораздо более скромные призы в 20 и даже в 2 у. е., хотя при таком количестве попыток что-нибудь из перечисленного уже должно было произойти. К концу четвёртой тысячи у меня сформировалось стойкое убеждение, что утверждение хозяев сайта «This game is provably fair!» («Эта игра доказуемо честная!», см. скриншот выше) не соответствует действительности, и я решил изучить предложенные организаторами лотереи доказательства их честности. При переходе по ссылке открылось окно с правилами игры:

Разобраться в написанном стоило мне определённых усилий, но диплом с отличием, честно заработанный много лет назад в техническом вузе, послужил хорошим подспорьем: понятие «криптографический хэш» и обозначения HMAC, SHA256, SHA512 перестали быть для меня китайской грамотой и наполнились вполне конкретным смыслом. Попытаюсь в нескольких словах, не углубляясь в математику, изложить принцип работы «лотерейного барабана». По сути он, как и следовало ожидать, представляет собой генератор псевдослучайных чисел в диапазоне 0..10000. Результат игры зависит от сочетания трёх параметров:
Таким образом, пользователь может влиять на результат попытки, меняя ClientSeed. Если оба сида генерируются независимо друг от друга, то выпадающее число получается действительно непредсказуемым, и игра с полным основанием может считаться честной. В том случае, если одна из сторон знает сид другой стороны, она легко может подобрать собственный сид таким образом, чтобы получить благоприятный для себя результат. То, что пользователю заранее неизвестен ServerSeed, – понятно. К сожалению для себя и к счастью для организаторов, пользователь узнаёт серверный сид уже постфактум, только после состоявшейся попытки, и, узнав его, может проверить правильность результата. В свою очередь, организаторам в момент запуска «лотерейного барабана» известны все параметры, и они заинтересованы в минимизации пользовательских выигрышей. Почему бы им не использовать такой ServerSeed, который в сочетании с остальными параметрами не позволит пользователю выиграть сколь-нибудь значительную сумму? Но нет, организаторы утверждают, что играют честно, и в доказательство этого они перед попыткой публикуют не сам серверный сид, но его хэш. Хэш – это результат некоторых математических операций над сидом, обладающий двумя ключевыми свойствами:
Таким образом, если пользователь перед попыткой знает хэш, а после попытки узнаёт и сам ServerSeed, то он может легко проверить их соответствие друг другу и, тем самым, убедиться в честности организаторов.
Теперь, совершив краткое и неглубокое (насколько это было возможно) погружение в математику сайта FreeBitcoin, вернёмся к цели этого погружения: проверить, действительно ли, как заявляют хозяева сайта, они играют честно, или же во всей этой схеме существуют таки возможности для мошенничества.
Итак, результат попытки есть функция трёх параметров. Если вы выиграли слишком много, и ваш результат не устроил организаторов, теоретически они могут подменить либо результат, либо любой из трёх параметров. Давайте попытаемся оценить перспективы практической реализации каждого варианта.
Итак, с какой стороны ни глянь – организаторы честны, в рамках заявленных правил злоупотребления невозможны. Или всё же возможны? Если не срабатывают сложные математические выкладки, то почему бы не попробовать применить простую житейскую логику? Ведь в игре участвуют обычные люди. Многие ли из них заходили на страницу с описанием алгоритма работы «лотерейного барабана»? Многие ли из заходивших прочитали описание алгоритма и разобрались с его работой? Многие ли из прочитавших уяснили, что можно поменять ClientSeed, и пользуются этим? Многие ли из пользующихся проверяют результаты попыток? Вопросы риторические. Думаю, каждый новый вопрос сокращает количество пользователей раз в 100 по сравнению с предыдущим, и к последнему вопросу не остаётся никого. Оно и понятно: по мелочам организаторы мухлевать не станут, а крупные выигрыши выпадают достаточно редко. Мало у кого даже при наличии необходимых знаний хватит терпения скрупулёзно фиксировать и тщательно проверять данные нескольких сотен, а то и тысяч попыток.
Тем не менее, ваш покорный слуга решил попробовать. С теорией вероятностей не поспоришь, и, если отбросить гипотезу о фатальном, прямо-таки патологическом невезении, то слишком долгое невыпадение мало-мальски значимого выигрыша могло быть объяснено только недобросовестностью организаторов игры.
Ждать пришлось достаточно долго, более 1,5 тыс. попыток. Но в итоге моё терпение принесло плоды, и предположение о нечестности организаторов получило экспериментальное подтверждение. Результат представлен на двух скриншотах.
1. Данные перед попыткой:

Порядковый номер попытки 5821. Хэш серверного сида виден не полностью, полное значение такое: 6018b3d70b222d418aa61aa55699d35464835d78d2886a7cdb72e2e47e60d4af.
2. Данные с результатом попытки:

Здесь виден всё тот же порядковый номер 5821, но совершенно другой хэш серверного сида, его полное значение 076fbdecc8e7d6add383f4b15753d16b57e18e8b1ca51c92e9394abd53429171. Если смотреть только 2-ой скриншот, то всё в порядке: серверный сид и его хэш соответствуют друг другу, клиентский сид – тот самый, который был мной введён, порядковый номер – правильный, результат попытки соответствует алгоритму его расчёта. Не будь 1-го скриншота – всё чин чинарём, ничего подозрительного. Уверен, читатели уже поняли, что же на самом деле произошло. Как только результат попытки с первоначальным сидом не устроил организаторов, они попросту подменили ServerSeed вместе с его хэшем. Иными словами, подобно заправским шулерам передёрнули карты!
Резюмирую. Громкие слова о честной игре оказались не более чем рекламным фейком. Самый популярный и рейтинговый биткойн-кран пойман на мошенничестве и уличён в обмане. Закономерным итогом вскрывшегося шулерства стало обнуление моего интереса как к данному конкретному сайту, так и к криптовалютным кранам в целом. Надеюсь, мой скромный опыт не будет проигнорирован теми, кто наивно верит в честность напёрсточников и надеется на крупный выигрыш. А таких, увы, немало… Сам до недавнего времени был таким…

Всем желающим предлагается сыграть в бесплатную лотерею, каждый пользователь может сделать одну попытку в час. Лотерея беспроигрышная, размеры выигрышей указаны в таблице, они зависят от текущего курса биткойна и выпавшего номера. Для большинства номеров суммы менее чем символические, но нижние строки смотрятся неплохо: максимальный приз – 200 долларов США в биткойн-эквиваленте. Представляете, одним кликом заработать 200 баксов, тем самым почти удвоив мою скромную месячную пенсию! Ведь, на первый взгляд, вероятность такого выигрышного клика – 1 из 10 тысяч. Пусть мои шансы сделать этот победный клик невысоки, тем не менее, они не выглядят совсем уж призрачными. Конечно, чтобы сорвать джек-пот, потребуется некоторое везение, но вдруг повезёт именно мне?! Впрочем, не выпадет главный приз – не беда, 20 у. е. тоже будут неплохой прибавкой к пенсии, ведь участие бесплатное, а попыток можно сделать сколько угодно, благо свободного времени достаточно, были бы желание и доступ в интернет… Так я и встрял в эту историю с FreeBitcoin.
Первые 1,5-2 тысячи попыток прошли в нетерпеливом ожидании джек-пота и в полной уверенности, что он вот-вот выпадет. Когда счёт пошёл на третью тысячу, предвкушение близкого выигрыша постепенно стало слабнуть и сменяться всё более усиливающимися сомнениями: ведь мне ни разу не выпал не только главный приз в 200 у. е., но и гораздо более скромные призы в 20 и даже в 2 у. е., хотя при таком количестве попыток что-нибудь из перечисленного уже должно было произойти. К концу четвёртой тысячи у меня сформировалось стойкое убеждение, что утверждение хозяев сайта «This game is provably fair!» («Эта игра доказуемо честная!», см. скриншот выше) не соответствует действительности, и я решил изучить предложенные организаторами лотереи доказательства их честности. При переходе по ссылке открылось окно с правилами игры:

Разобраться в написанном стоило мне определённых усилий, но диплом с отличием, честно заработанный много лет назад в техническом вузе, послужил хорошим подспорьем: понятие «криптографический хэш» и обозначения HMAC, SHA256, SHA512 перестали быть для меня китайской грамотой и наполнились вполне конкретным смыслом. Попытаюсь в нескольких словах, не углубляясь в математику, изложить принцип работы «лотерейного барабана». По сути он, как и следовало ожидать, представляет собой генератор псевдослучайных чисел в диапазоне 0..10000. Результат игры зависит от сочетания трёх параметров:
- Nonce – порядковый номер попытки;
- ServerSeed (серверный сид) – строка из 64 шестнадцатеричных символов, генерируется организаторами игры и не может быть изменена пользователем;
- ClientSeed (клиентский сид) – строка из переменного количества алфавитно-цифровых символов, первоначально генерируется организаторами игры, но может быть изменена пользователем.
Таким образом, пользователь может влиять на результат попытки, меняя ClientSeed. Если оба сида генерируются независимо друг от друга, то выпадающее число получается действительно непредсказуемым, и игра с полным основанием может считаться честной. В том случае, если одна из сторон знает сид другой стороны, она легко может подобрать собственный сид таким образом, чтобы получить благоприятный для себя результат. То, что пользователю заранее неизвестен ServerSeed, – понятно. К сожалению для себя и к счастью для организаторов, пользователь узнаёт серверный сид уже постфактум, только после состоявшейся попытки, и, узнав его, может проверить правильность результата. В свою очередь, организаторам в момент запуска «лотерейного барабана» известны все параметры, и они заинтересованы в минимизации пользовательских выигрышей. Почему бы им не использовать такой ServerSeed, который в сочетании с остальными параметрами не позволит пользователю выиграть сколь-нибудь значительную сумму? Но нет, организаторы утверждают, что играют честно, и в доказательство этого они перед попыткой публикуют не сам серверный сид, но его хэш. Хэш – это результат некоторых математических операций над сидом, обладающий двумя ключевыми свойствами:
- восстановить сид по его хэшу практически невозможно;
- вероятность того, что разные сиды имеют одинаковые хэши, практически равна 0.
Таким образом, если пользователь перед попыткой знает хэш, а после попытки узнаёт и сам ServerSeed, то он может легко проверить их соответствие друг другу и, тем самым, убедиться в честности организаторов.
Теперь, совершив краткое и неглубокое (насколько это было возможно) погружение в математику сайта FreeBitcoin, вернёмся к цели этого погружения: проверить, действительно ли, как заявляют хозяева сайта, они играют честно, или же во всей этой схеме существуют таки возможности для мошенничества.
Итак, результат попытки есть функция трёх параметров. Если вы выиграли слишком много, и ваш результат не устроил организаторов, теоретически они могут подменить либо результат, либо любой из трёх параметров. Давайте попытаемся оценить перспективы практической реализации каждого варианта.
- Подмена результата. Бесперспективный вариант. Пользователь при попытке верификации подставит в формулу исходные данные, получит несовпадающий результат и сразу увидит подмену.
- Подмена Nonce. Тоже бесперспективный вариант. Сайт показывает результаты последних десяти попыток, сбой в порядковых номерах попыток сразу будет замечен.
- Подмена ClientSeed. Вновь бесперспективный вариант. Если пользователь меняет этот сид, то заметить подмену ему будет несложно.
- Подмена ServerSeed. Опять-таки бесперспективный вариант. У пользователя есть хэш серверного сида, он может легко увидеть несоответствие.
Итак, с какой стороны ни глянь – организаторы честны, в рамках заявленных правил злоупотребления невозможны. Или всё же возможны? Если не срабатывают сложные математические выкладки, то почему бы не попробовать применить простую житейскую логику? Ведь в игре участвуют обычные люди. Многие ли из них заходили на страницу с описанием алгоритма работы «лотерейного барабана»? Многие ли из заходивших прочитали описание алгоритма и разобрались с его работой? Многие ли из прочитавших уяснили, что можно поменять ClientSeed, и пользуются этим? Многие ли из пользующихся проверяют результаты попыток? Вопросы риторические. Думаю, каждый новый вопрос сокращает количество пользователей раз в 100 по сравнению с предыдущим, и к последнему вопросу не остаётся никого. Оно и понятно: по мелочам организаторы мухлевать не станут, а крупные выигрыши выпадают достаточно редко. Мало у кого даже при наличии необходимых знаний хватит терпения скрупулёзно фиксировать и тщательно проверять данные нескольких сотен, а то и тысяч попыток.
Тем не менее, ваш покорный слуга решил попробовать. С теорией вероятностей не поспоришь, и, если отбросить гипотезу о фатальном, прямо-таки патологическом невезении, то слишком долгое невыпадение мало-мальски значимого выигрыша могло быть объяснено только недобросовестностью организаторов игры.
Ждать пришлось достаточно долго, более 1,5 тыс. попыток. Но в итоге моё терпение принесло плоды, и предположение о нечестности организаторов получило экспериментальное подтверждение. Результат представлен на двух скриншотах.
1. Данные перед попыткой:

Порядковый номер попытки 5821. Хэш серверного сида виден не полностью, полное значение такое: 6018b3d70b222d418aa61aa55699d35464835d78d2886a7cdb72e2e47e60d4af.
2. Данные с результатом попытки:

Здесь виден всё тот же порядковый номер 5821, но совершенно другой хэш серверного сида, его полное значение 076fbdecc8e7d6add383f4b15753d16b57e18e8b1ca51c92e9394abd53429171. Если смотреть только 2-ой скриншот, то всё в порядке: серверный сид и его хэш соответствуют друг другу, клиентский сид – тот самый, который был мной введён, порядковый номер – правильный, результат попытки соответствует алгоритму его расчёта. Не будь 1-го скриншота – всё чин чинарём, ничего подозрительного. Уверен, читатели уже поняли, что же на самом деле произошло. Как только результат попытки с первоначальным сидом не устроил организаторов, они попросту подменили ServerSeed вместе с его хэшем. Иными словами, подобно заправским шулерам передёрнули карты!
Резюмирую. Громкие слова о честной игре оказались не более чем рекламным фейком. Самый популярный и рейтинговый биткойн-кран пойман на мошенничестве и уличён в обмане. Закономерным итогом вскрывшегося шулерства стало обнуление моего интереса как к данному конкретному сайту, так и к криптовалютным кранам в целом. Надеюсь, мой скромный опыт не будет проигнорирован теми, кто наивно верит в честность напёрсточников и надеется на крупный выигрыш. А таких, увы, немало… Сам до недавнего времени был таким…