На этой странице
Рулетка (зашифрованная версия)
На этой странице
Введение
Эта страница посвящена зашифрованной версии рулетки, в которую часто играют в казино, использующих криптовалюту. Предполагаю, что читатель уже знаком с основными правилами обычной рулетки .
Казино, где доказуемая честность
Анализ
В игре на Crypto.Games рулетка играется на колесе с одним нулем, как это обычно бывает в онлайн-казино. Преимущество казино составляет 1/37 = 2,70% на каждую ставку.Честная игра
Следующее объяснение использования криптографии предполагает, что читатель знаком с терминологией и концепцией. Основные сведения можно найти на моей странице о кубиках (зашифрованная версия) . Вот как игра в рулетку на Crypto.Games генерирует случайное число от 0 до 37, которое используется в качестве результата игры.
- Как и положено, игра раскрывает хеш серверного сиу-фразы для следующей ставки и позволяет игроку выбрать свой собственный клиентский сиу-фразу.
- Игрок делает ставки, как в обычной рулетке.
- Игра будет объединять начальные значения (сиды) сервера и клиента именно в таком порядке.
- В игре будет использован хеш SHA-512 объединенного начального значения из шага 3.
- В игре будет выполнено преобразование двух символов хеша, начиная с шага 4, из шестнадцатеричного формата в десятичный.
- Возьмите последние две цифры десятичного числа из шага 5.
- Если результат шага 6 равен 0–36, то используйте его в качестве результата рулетки.
- Если результат шага 6 равен 37 или больше, то продвиньтесь на две позиции в хеш-таблице и вернитесь к шагу 5.
Пример
Сначала я перехожу на экран «Честная игра», показанный выше. Затем ввожу любой желаемый «сид-код клиента», подойдет случайный набор символов. После этого скопируйте и вставьте две вещи в другой источник:
- Ваш клиентский посев
- Следующий хеш начального значения сервера, который обозначен как "Next server seed SHA256".
Вы сами решаете, добавлять ли Nonce — дополнительные автоматические символы, добавляемые в конец клиентского сид-кода. Я считаю, что если бы казино намеревалось обмануть, добавление Nonce не обеспечило бы никакой защиты.
В нашем примере именно эти доказательства следует сохранить.
Хэш начального значения следующего сервера = e7043dd7fe369b94518449d61162a0c960f54781a16548af63194b7fd9d6891a Начальное значение параметра клиента = b0x6vb0v6TYUIQWF6b0sd6f0y
Затем я сделал ставку, как показано выше. Здесь я поставил 10 фишек, каждая стоимостью 0,000001 BTC (биткоина), на общую сумму 0,00001 BTC (эквивалент примерно 10 центов) на красный цвет.
Результат - 7 красных, значит, я выиграл.
Далее я выполняю следующие шаги, чтобы проверить результат. В реальной жизни я бы стал этим заниматься только в случае проигрыша. Если бы казино хотело обмануть, я, вероятно, проиграл бы.
- Я подключаю серверный и клиентский сид в следующем порядке: sMDGT5P10m071HAdTQkoYCLJ8vLXnwzq6ugfloMTb0x6vb0v6TYUIQWF6b0sd6f0y
- Я беру хеш SHA-512 объединенного начального значения из шага 1:
40cf0126a307d4d72900279d330499f6a5447c35ed838d6ec3fd2b53872df73c cac001686ddf05e024c5899205afa9d0551b5e19b8397af180f6de06aea429ac
- Я беру первые два символа, которым 40.
- Я перевожу число 40 из шестнадцатеричной системы в десятичную: 4*16 + 0*1 = 64.
- В десятичном результате из шага 4 есть две цифры, поэтому я оставляю его как есть. В противном случае я бы взял конечные две цифры.
- 64 больше 36, поэтому это не подходит в качестве результата в рулетке.
- Я перемещаю два символа в хеш-таблице, которые обозначены как cf.
- Я перевожу cf в десятичную дробь: c*16 + f = 12*16 + 15*1 = 207.
- Поскольку в числе 207 больше двух цифр, я беру две правильные, а именно 07.
- Поскольку 7 <= 36, это и становится исходом игры.
- Далее я проверяю, совпадает ли хеш начального значения сервера, который мне был предоставлен перед ставкой (начинающийся с e7043), с хешем начального значения сервера для последней ставки.По какой-то причине это казино использует для хеширования функцию SHA-256, в отличие от SHA-512, которая применяется для хеширования объединенной строки.
- В данном случае хеш sMDGT5P10m071HAdTQkoYCLJ8vLXnwzq6ugfloMT действительно равен e7043dd7fe369b94518449d61162a0c960f54781a16548af63194b7fd9d6891a, что гарантирует мне, что вклад казино в последнюю ставку был предопределен.
Если вам всё это кажется слишком сложным, я, к счастью, написал программу, которая сделает это за вас. Чтобы ею воспользоваться, выполните следующие шаги:
- Перейдите в PHP Sandbox .
- Введите начальные данные клиента в строке 4.
- Введите начальное значение сервера (Server Seed) в строке 5.
- Введите хеш следующего начального значения сервера в строке 6.
- Нажмите «Выполнить код».
- Проверьте результат игры и совпадет ли хеш начального значения сервера с тем, который был предоставлен до совершения ставки. Если нет, это будет означать, что вас обманули.
У меня также есть копия кода, которую вы можете посмотреть, нажав на кнопку ниже.
[спойлер]
// Конвертация игры в рулетку для Crypto.Games
// Введите начальное значение параметра Client Seed в строке 4 и начальное значение параметра Server Seed в строке 5.
$client_seed = "b0x6vb0v6TYUIQWF6b0sd6f0y";
$server_seed = "sMDGT5P10m071HAdTQkoYCLJ8vLXnwzq6ugfloMT";
$next_hash = "e7043dd7fe369b94518449d61162a0c960f54781a16548af63194b7fd9d6891a";
$color_array = array(0,1,2,1,2,1,2,1,2,1,2,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,2,1,2,1,2,1,2,1);
$position=0;
$combined_seed = $server_seed.$client_seed;
echo "Объединенное начальное значение = $combined_seed\n";
$combined_hash = hash('sha512', $combined_seed);
$server_hash = hash('sha256',$server_seed);
echo "Хэш объединенного начального значения = $combined_hash\n";
делать
{
$first_two=substr($combined_hash,$position,2);
$hex_to_dec=hexdec($first_two);
$hex_to_dec%=100;
если ($hex_to_dec-->36)
{
$position+=2;
}
}
while ($hex_to_dec>36);
echo "Хэш начального значения сервера =\t $server_hash\n";
echo "Результат игры =\t$hex_to_dec ";
если ($color_array[$hex_to_dec]==0)
{ echo "Зеленый\n"; }
elseif ($color_array[$hex_to_dec]==1)
{ echo "Красный\n"; }
еще
{ echo "Черный\n"; }
$server_seed_hash=hash('sha256', $server_seed);
если ($server_seed_hash==$next_hash)
{ echo "Совпадение начального значения сервера.\n"; }
еще
{
echo "НЕСООТВЕТСТВИЕ СЕМЕННЫХ ЗНАЧЕНИЙ СЕРВЕРА!\n";
echo "Серверный начальный параметр =\t$server_seed\n";
echo "Хэш начального значения сервера =\t$server_seed_hash\n";
echo "Предполагаемый следующий хеш=\t$next_hash\n";
}
// Процедура
// 1. Установите позицию равной 0.
// 2. Объедините начальные значения сервера и клиента, а также начальное значение сервера, в указанном порядке.
// 3. Сгенерируйте хеш SHA-512 строки из шага 2.
// 4. Преобразуйте первые два символа, начиная с "позиции" хеша из шага 3, из шестнадцатеричного формата в десятичный.
// 5. Если значение из шага 4 от 0 до 36, то это и будет исходом игры.
// 6. В противном случае, переместите позицию на 2 и перейдите к шагу 4.
?>
[/спойлер]



