Register
Sarah Дек 16, 2018

Продвинутое руководство по прозрачной тасовке карт на CoinPoker

До сих пор онлайн-покер-румы скрывали информацию о своем программном обеспечении для тасования карт. Игроки не могли убедиться в том, что эти закрытые системы тасуют карты действительно честным способом, и именно для того, чтобы изменить ситуацию, был создан прозрачный карточный тасовщик CoinPoker. Используя односторонние криптографические хэш-функции, новый шаффлер карт CoinPoker позволяет безопасно раскрывать информацию о процессе Продвинутое руководство по прозрачной тасовке карт на CoinPoker

Без категории

До сих пор онлайн-покер-румы скрывали информацию о своем программном обеспечении для тасования карт. Игроки не могли убедиться в том, что эти закрытые системы тасуют карты действительно честным способом, и именно для того, чтобы изменить ситуацию, был создан прозрачный карточный тасовщик CoinPoker.

Используя односторонние криптографические хэш-функции, новый шаффлер карт CoinPoker позволяет безопасно раскрывать информацию о процессе тасования и дает вам возможность:

  • Просматривать неразыгранные карты с помощью функции Hand Hindsight
  • Проверить свой собственный вклад с помощью инструмента RNG Validation Tool
  • Получить прозрачную информацию о внутренней работе нашего ГПСЧ

Прежде чем погрузиться в технологию, лежащую в основе прозрачной тасовки карт, ознакомьтесь с нашим кратким руководством, которое поможет вам испытать ее самостоятельно!

Как использовать инструмент проверки для подтверждения участия

Если наша прозрачная карточная тасовка для вас в новинку, мы советуем вам для начала ознакомиться с нашим базовым руководством со скриншотами здесь.

Шаг 1: Для того чтобы доказать честность руки, вам понадобится доступ к односторонним хэш-функциям, упомянутым ранее. Вы найдете их, нажав на ссылку RNG Shuffle Order в нижней части вкладки Hand History.

Шаг 2: Здесь вы найдете длинный список хэш-последовательностей. Первая секция будет для каждой карты в начальном порядке колоды, затем зашифрованные семена от каждого игрока и CoinPoker, и, наконец, хэши каждой карты в окончательном порядке колоды.

Считайте, что числа, перечисленные под хэшем перетасованной колоды, — это их положение в колоде, а хэш каждого игрока — это его зашифрованный«фактор встряски«, представленный в начале раздачи.

Шаг 6: Эти данные бесполезны без инструмента проверки, который вы можете получить, нажав на ссылку в верхней части окна.

Шаг 7: Следующим шагом будет подтверждение руки, что может означать одно из двух, в зависимости от того, хотите ли вы этого:

  1. Проверить справедливость, доказав свое участие в «встряхивании»
  2. Проверить, совпадает ли фактическое положение карты в итоговой колоде с зашифрованным положением, в определении которого вы участвовали до начала тасовки

Для варианта 1:

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

Если они совпадают, значит, вы успешно подтвердили свое участие в тасовке!

Для варианта 2:

Выберите одну из сданных карт (у них будет и хэш слева, и зашифрованная хэш-функция справа. Введите хэш внутри функции справа в разделе Card Validation. На выходе должен получиться хэш, указанный слева в CoinPoker, а также правильное значение карты.

Шаг 8: Получайте удовольствие от изучения неразыгранных карт и доказывайте свое участие в первой децентрализованной системе RNG в онлайн-покере!

Расширенное объяснение: Как работает прозрачный RNG CoinPoker

Представьте себе колоду неперетасованных карт следующим образом: 2c, Qd, Kh

В реальности существует перестановка 52 карт, но чтобы получить представление о том, как работает этот процесс, мы ограничимся тремя. Используя этот порядок колод, CoinPoker создаст начальную колоду и распределит ее между всеми игроками за столом в следующих шагах.

Шаг 1

CoinPoker запускает свой RNG, используя секретное значение, которое мы будем называть seed. Это значение существует только временно и используется просто для запуска процесса.

Шаг 2

CoinPoker использует это случайное семя для генерации значения соли — случайных данных, которые служат паролем или парольной фразой для односторонних криптографических функций. Это значение комбинируется с картой для создания хэша для каждой карты в колоде. При использовании трех карт, упомянутых ранее, формула будет выглядеть следующим образом:

  • Hash(2c salt1) = aa
  • Хэш(Qd salt2) = bb
  • Hash(Kh salt3) = cc

Примечание: хэши aa, bb и cc упрощены для наглядности. В действительности это 256-битные строки, и работать с ними немного сложнее, по крайней мере, для человека.

Шаг 3

CoinPoker тасует хэшированную колоду из Шага 2, используя случайное семя из Шага 1.

  • Неперетасованная колода в хэшах: aa (2c), bb (Qd), cc (Kh)
  • Перетасованная колода (начальная колода) в хэше теперь: bb (Qd), cc (Kh), aa (2c)

Шаг 4

CoinPoker отправляет эту хэшированную колоду (в виде вектора, включающего все хэши карт в начальном порядке колоды) каждому игроку.

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

Следующие шаги описывают, как начальная колода преобразуется в конечную колоду с использованием данных игроков, которые объединяются с данными CoinPoker для формирования коллективного входа (он же — совокупное зерно). Опять же, эти шаги называются семенами.

Шаг 5

Опять же, для упрощения сложности этого процесса, представьте, что за столом находятся два игрока. Назовем их Алиса и Боб.

Шаг 6

Теперь Алисе и Бобу нужно вычислить хэш своего семени, чтобы отправить его в CoinPoker. Формула будет выглядеть примерно так:

  • Hash(Alice’s_seed) = XX
  • Hash(Bob’s_seed) = YY

Шаг 7

CoinPoker генерирует новое семя, не то, что было в Шаге 1. Это случайное семя используется для создания хэша: Hash(CoinPoker’s_seed) = ZZ

Шаг 8

Семена хэша игроков, а также семена CoinPoker’а затем компилируются в список семян обязательств: [XX, YY, ZZ].

Шаг 9

CoinPoker отправляет вектор семян обязательств Алисе и Бобу.

Шаг 10

После получения семян обязательств Алиса и Боб отправляют свои настоящие семена с Шага 5. Это то семя, которое было использовано для создания хэшей. Таким образом, Hash(Alice’s_seed) = XX и Hash(Bob’s_seed) = YY.

Шаг 11

Реальные семена затем используются для создания агрегированного семени. Это новое семя учитывает все семена игроков, а также семена CoinPoker, в результате чего получается значение, в которое внесен вклад всего стола.

Hash(Alice’s_seed Bob’s_seed CoinPoker’s_seed) = aggregated_seed

Шаг 12

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

Начальная колода: Qd, Kh, 2c → RNG с агрегированным_семенем → Конечная колода: Kh, 2c, Qd
(Хэши: cc, aa, bb)

Принцип работы инструмента верификации ГПСЧ

Одно из ключевых преимуществ использования криптографических хэш-функций заключается в том, что мы можем безопасно раскрыть информацию о тасовке, которая впоследствии может быть использована для доказательства того, что тасовка была честной. Мы называем это средством проверки ГПЗУ, и мы продолжим шаги, чтобы помочь вам понять, как оно работает.

Обратите внимание, что ни Боб, ни Алиса не знают реальных семян друг друга и имеют доступ только к своим собственным реальным семенам. Они имеют доступ ко всем хэшам семян других игроков и CoinPoker (вспомните шаги 8 и 9).

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

Шаги 13-18: Проверка влияния игроков на перетасованную колоду

Шаг 13

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

Если Hash(Alice’s_seed) действительно равно XX, то оно считается верным

Шаг 14

После того как все реальные семена от игроков и CoinPoker будут использованы для проверки хэшей, игроки также могут проверить правильность агрегированного_семени, подставив недостающие значения в хэш-функцию:

Hash(alice_seed bob_seed server_seed) = aggregated_seed

Шаг 15

Теперь, когда агрегированное зерно проверено на правильность каждым игроком, Алиса или Боб могут отменить функцию RNG. Подставляя хэш конечной колоды и агрегированное зерно для вычисления начальной колоды, игроки могут проверить, получается ли в результате тот же порядок начальной колоды, который они получили на Шаге 4.

Шаг 16

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

Доказательство участия — это только начало. Игроки также могут проверить случайность карт в последней колоде. Это можно сделать для всех общих карт и рук, раскрытых другими игроками (так что руки без мастей), но для пояснения мы покажем, как можно проверить случайность первых двух карт:

Шаг 17

После завершения раздачи игроки получают (в дополнение ко всем настоящим семечкам) солью и значения первых двух сданных карт. Обратите внимание, что значения и соли карт были использованы в функции Hash из Шага 2:

Hash(Kh salt3) = cc

Шаг 18

Теперь, когда Алиса и Боб имеют значения для всех переменных в хэш-функции, они могут перевернуть ее, чтобы подтвердить, была ли Kh фактической первой картой в окончательной тасовке колоды, полученной на Шаге 12.

Если результат Hash(Kh salt3) равен cc, то игрок подтверждает, что хэш последней колоды cc верен. Это можно сделать для любых раскрытых карт на столе.

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

Экспертное объяснение и вознаграждение за баг в размере 1 000 000 CHP

Хотя приведенное выше объяснение может быть достаточно продвинутым для обычного игрока в покер, для энтузиастов криптографии это лишь вершина айсберга. Ниже приведены ссылки на оригинальный документ протокола, а также на открытый исходный код на GitHub:

В духе прозрачности мы также предлагаем 1,000,000 CHP тому, кто докажет, что прозрачная система тасования карт неисправна. Для получения более подробной информации об условиях баунти и о том, как подать заявку, посетите нашу официальную страницу Bug Bounty здесь.

Sarah