Компания
33,56
рейтинг
31 мая 2010 в 22:54

Разное → Правда о ГСЧ покер румов

Введение


В этой статье вы узнаете об одной из важнейших составляющих онлайн покера — генераторе случайных чисел (ГСЧ). «Честность» ГСЧ различных покер-румов регулярно подвергается сомнению и обязательно обсуждается на любом ресурсе посвященном покеру. Пользователи постоянно жалуются на «подкрученный» генератор, который позволяет комнате сдерживать более сильных игроков для того чтобы большинство представляющее категорию «более слабых игроков» осталось лояльным комнате. Давайте разберемся действительно ли все так плохо со случайностью на покерных сайтах.

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

Определения


Генератор случайных чисел (ГСЧ) должен генерировать абсолютно случайную последовательность чисел. Такую последовательность можно получить если использовать какие-то физические природные процессы, например: физический шум, космическое излучение, радиационный фон и т.д. В компьютерных системах различают программные и аппаратные ГСЧ. Первые фактически являются генератором псевдослучайных чисел (ГПСЧ) и представляют из себя алгоритм, генерирующий последовательность чисел, элементы которой почти независимы друг от друга и подчиняются заданному распределению. Так как алгоритм предопределен, то и последовательность полученных чисел тоже предопределена. Получается если знать алгоритм ГПСЧ, то можно получить и «случайную» последовательность.

Аппаратный ГСЧ представляет из себя устройство, использующее какой-либо из внешних источников энтропии для получения последовательностей.

Сейчас ГСЧ обычно реализуется комбинированием ГПСЧ и внешнего источника энтропии. В компьютерах в качестве такого источника используют счетчик тактов процессора, шум звуковой карты или оригинальные способы, к примеру "ГСЧ из WiFi-шума".

ГСЧ в онлайн покере


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

Все покер-румы получают различные сертификаты, чтобы доказать состоятельность своих ГСЧ и софта. Cigital — одна из крупнейших компаний в этой области, занимается, в том числе, сертификацией покерного софта и ГСЧ. Сертификат этой компании есть у крупнейших покер-румов Full Tilt Poker и PokerStars. Основа тестирования любого ГСЧ — набор тестов NIST (National Institute of Standards and Technology), основанных на стандарте США FIPS 140-2 (Federal Information Processing Standard). Он включает различные тесты от теста на соотношение 0 и 1 в генерируемой последовательности, до теста на сжатие алгоритмом LZO (случайная последовательность не может быть существенна сжата, потому что не должна иметь много повторяющихся последовательностей).

Для генерации случайных последовательностей они используют систему из одного или нескольких источников энтропии и алгоритма ГПСЧ. Например, крупнейший покер-рум PokerStars использует данные от пользователей (передвижения мышью, время реакции на определенные действия и т.д.) как фактор случайности и аппаратный ГСЧ Quantis, сертифицированный швейцарским Федеральным бюро метрологии. Quantis использует физические процессы для генерации числовых последовательностей. Он улавливает фотоны и пропускает их через полупрозрачное зеркало. Два события: отражение и прохождение света принимаются за 0 и 1. Quantis выпускается с разными интерфейсами: USB, PCI, PCI-E с потоком случайных чисел в 4 Мбит/с. Также есть 16 Мбит/с модификация для PCI устройств. Цена такого девайса €890 — €1165 для 4 Мбит/с потока и €2000 для 16 Мбит/с. Также в PokerStars есть критерии определения достаточной степени случайности. Например, если данных от пользователей недостаточно, то раздача не начинается пока не будет обеспечена достаточная генерация случайных бит аппаратным ГСЧ. Само преобразование потока случайных бит в числа происходит так: если нужно число от 0 до 25, то выбирается 5 бит и преобразуется в число от 0 до 31; если число больше 25, то процесс повторяется. Для перетасовки колоды выбирается исходная колода и пустая, из первой выбирается случайная карта и переносится во вторую. Так, пока все карты не будут перенесены в изначально пустую колоду.

В целом, покер-румы используют два вида тасования колоды: одиночное и постоянное. В одиночном колода тасуется один раз перед раздачей, а в постоянном тасовка продолжается всю раздачу. Второй вариант вносит дополнительную защиту от взлома, потому что следующая карта стола неизвестна до последнего момента. Постоянная тасовка, например, используется во втором по величине покер-руме — FullTilt. Сам ГСЧ FullTilt'a построен по похожему с PokerStars принципу, используются 3 независимых генератора: аппаратный ГСЧ с физическим источником энтропии и два независимых ГПСЧ (ISAAC и OpenSSL). Вообще такой вариант комбинирования нескольких генераторов случайных чисел используется сейчас повсеместно, но на заре становления онлайн покера дела с ГСЧ обстояли гораздо хуже.

История с Planet Poker и ASF Software Inc.


Planet Poker — первый в мире покер-рум, который предложил своим пользователям игру на деньги в интернете. Произошло это в январе 1998 года. Немного позже его безопасностью заинтересовались специалисты из «Reliable Software Tehnologies» (ныне «Cigital»). На сайте Planet Poker были открыты исходники их алгоритма ГСЧ (сам алгоритм принадлежал компании «ASF Sowtware Inc.»). Этим они хотели показать свою честность и надежность, но исходники только помогли специалистам найти в нем бреши. Вот функция перетасовки карт из опубликованного алгоритма:
procedure TDeck.Shuffle;
var
ctr: Byte;
tmp: Byte;
 
random_number: Byte;
begin
{ Fill the deck with unique cards }
for ctr := 1 to 52 do
Card[ctr] := ctr;
 
{ Generate a new seed based on the system clock }
randomize;
 
{ Randomly rearrange each card }
for ctr := 1 to 52 do begin
random_number := random(51)+1;
tmp := card[random_number];
card[random_number] := card[ctr];
card[ctr] := tmp;
end;
 
CurrentCard := 1;
JustShuffled := True;
end;
 

Вкратце, берется неотсортированная колода карт и карты от 1 до 52 меняются местами с любой случайной картой. Для генерации случайных чисел используются Pascal-функции random, randomize, которые используют системный таймер и алгоритм ГПСЧ для получения случайных чисел.

Первая ошибка алгоритма кроется в функции random(n) — она, в отличие от большинства Pascal-функций, возвращает значение от 0 до n-1. Т.е. «random(51)+1» дает нам число от 1 до 51 — классическая ошибка off-by-one. Получается текущая карта никогда не будет меняться местами с последней 52-й картой, что уже дает отклонение от случайности получаемой колоды.

Также специалисты «Reliable Software Tehnologies» выявили несостоятельность самого алгоритма, даже если исправить ошибку off-by-one. Для демонстрации этого они использовали описанный выше алгоритм:
for (i is 1 to n)
Swap i with random position between 1 and n


Для простоты расчетов использовалась колода из 3-х карт. В результате колоды 231, 213 и 132 встречались чаще чем 312, 321 и 123. Понятно, что для колоды из 52-х карт какие-то варианты перетасовки колоды должны были встречаться чаще чем другие.

Еще одним важным упущением было количество возможных колод в таком ГСЧ. При реальной перетасовке карт возможны 52!= 8,06*1067 вариантов колоды. Pascal-функции генерируют случайные числа на основе системных часов. Основа для расчета случайного числа — количество милисекунд с полуночи. В сутках всего 86 400 000 миллисекунд, таким образом мы имеем всего 86,4 млн возможных вариантов перетасовки колоды, что гораздо меньше реально возможной.

И это не все, найденные недостатки не дают особого преимущества для игроков, но следующая уязвимость позволяла полностью узнать последовательность карт в колоде. Все опять же из-за ГПСЧ, точнее его предсказуемости. Исследователи написали эксплоит, который в точности мог показывать все карты игроков и оставшиеся карты стола после выложенных на стол 3-х карт. Таким образом он основывался на 5-ти известных картах: 2-х игрока и 3-х на столе. Используя аналогичный Pascal алгоритм ГСЧ и подбирая разное количество миллисекунд с отклонением от текущего времени (время генерации карт должно было быть близко к локальному времени), эксплоит находил точное совпадение 5-ти известных карт и выдавал все остальные.
image
После этого эксплоит дополнительно синхронизировал локальное время с временем сервера, и следующие переборы занимали меньше одной секунды.

Для игроков эта история сложилась удачно — эксплоит был в хороших руках, и специалисты «Reliable Software Tehnologies» сразу сообщили о найденных уязвимостях в «ASF Sowtware Inc.» (их услугами кроме «Planet Poker» также пользовались purepoker.com, deltacasino.com) и позже опубликовали свой отчет. Они оценили ущерб, если бы программа попала в плохие руки, в $100 000 в день. Planet poker и вообще онлайн покеру эта история нанесла серьезный ущерб, хотя и не помешала активно развиваться этой отрасли. А «Reliable Software Tehnologies» была переименована в «Cigital» и сейчас является очень авторитетной компанией по аудиту и сертификации программ.

Real Deal и технология Cut'N Shuffle


Отдельно стоит упомянуть покер-рум Real Deal с их инновационным подходом к раздаче карт. Игра на реальные деньги в нем началась 7 мая 2010 г. Для перетасовки используется реальная колода карт и специальная шафл-машина для их перемешивания.



Этот запатентованный аппарат называется Cut'N Shuffle. С его помощью получается настоящее перемешивание реальной колоды карт. К тому же раздающему игроку предлагается подрезать колоду (он может и отказаться), что вносит дополнительный элемент случайности. Видеозаписи каждой перетасовки колоды сохраняются на сервере и любой игрок может получить их при желании. Это довольно молодая технология, посмотрим насколько она будет успешной в будущем.

Заключение


В заключении хотелось бы порассуждать о возможных махинациях с ГСЧ. Прибыль покер-рума идет от рейка (часть банка которую забирает себе казино), так что для них не важно кто выигрывает, им важно только количество наигранного рейка. Отсюда втекает идея прибыльной махинации: раздавать чаще хорошие комбинации нескольким игрокам, чтобы они пытались сыграть на все деньги. Вполне реализуемо, но все тайное когда-нибудь становится явным, а утечка такой информации вполне возможна. И вряд ли небольшая прибавка в прибыли стоит огромных потерь, если такой обман раскроют. Поэтому, если вы играете в покер и вам фатально не везет, не стоит обвинять во всем «подкрученный» ГСЧ, просто переждите полосу неудач и продолжайте играть.

На практике, чаще всего, игроки пытаются переложить свои ошибки на сильные плечи ГСЧ, обвиняя его во всех собственных неудачах. Всегда анализируйте собственные действия и ищите ошибки, перед тем как перекинуть вину на разработчиков софта.

Статья Pokeroff.ru специально для Хабрахабра
Автор: @pokeroff
Покерофф
рейтинг 33,56
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Комментарии (35)

  • +4
    Можно подумать, что вы «всю правду» тут и расскажете…
    • +3
      Мы не являемся сотрудниками каких-либо комнат покера и готовы услышать «правду» от хабраюзеров, если они знают то, что мы упустили в статье
      • 0
        обычный ГСЧ подкручивают программно, а аппаратный «подкручивают» вот так:




        взято отсюда: realdealpoker.com/template/realdealpoker/webcam.php
      • 0
        Оппа — покерофф вылез )
        Стрельцов, ты? =))
  • +1
    Чёрт побери, так вот из-за чего я постоянно проигрываю!
  • +7
    Всю правду расскажу я, вкратце. После «наезда» на PokerStars и адекватного объяснения что у них не так (был приложен результат теста Die Hard и еще ряд выкладок — тема для отдельной статьи) — они в полуприватной беседе пояснили интересный нюанс. Да, на самом деле их ГПСЧ хорош, сертифицирован и т.д., но фишка в том, что они формируют так называемую «быструю игру» за счет общего шаффла на все(!) покер-румы.

    Это объясняет ряд моментов, но к сожалению, полностью отрицать факт наличия «балансера» у многих известных тайтлов нельзя. Свою цель — продержать игрока определенное время, до момента затягивания, балансеры успешно выполняют.

    Можно долго спорить на счет моих слов, тем более без приведения доказательств. Я не хочу развести холивар, это всего лишь мое личное мнение, которое я попробовал впихнуть в рамки комментария в контексте темы топика :)
    • 0
      Уточни, что ты подразумеваешь под «все(!) покер-румы», в контексте PokerStars?
      • 0
        Понял, мои извинения, выделил не совсем то слово, нужно было расписать подробнее. Не отрицаю наличия сегментации, к примеру, большинство ответственных игр (чампы, крупные ставки), вероятнее всего, имеют свои шаффлы, а все столы 0.25/0.50 (к примеру) — общий.

        Они не были особо разговорчивы на эту тему, к сожалению :) Задача общения с нами была возложена в итоге с саппорта на СБ в перемешку с младшими административными чинами.
    • 0
      Не совсем понятно что имеется ввиду под «общим» шафлом. Насколько я понимаю ГСЧ генерирует случайную последовательность, которая записывается в какой-то пул. При необходимости оттуда собираются числа. Если это «общий» шафл, то не вижу в нем ничего плохого
      • –1
        Как бы парадоксально не звучало, но за счет размазывания происходит увеличение вероятности выпадания «редких» комбинаций, тем самым увеличивается скорость игры. Тут все зависит от множества нюансов на стороне покер-владельца. До нас донесли в паре предложений, что они увеличивают скорость игры за счет общего шаффла, ничего противозаконного в этом нет, само собой.
      • –1
        скорее всего имеется ввиду генерация раздач на все столы подряд. типа отдельных гсч на все столы не хватает, вот и берут один на несколько столов, который генерит расклад, который отдается тому столу который первым «попросит».
        «по хорошему» ракеты в одни руки должны приходить один раз на 169 разач, а из-за того что «равномерность» размазывается на несколько столов получается что на один стол чаще приходят карманные топ-пары, а на другой что шлак типа 27o сыпят. и получается что распределение нормальное только на уровне «средней температуры по больнице», а за отдельными столами происходит черт знает что.
        а самое интересно то что никто и никогда не откроет нам всей правды. ее даже «свои» не знают :)
        • 0
          Если у нас есть абсолютно случайная последовательность (соответственно с равномерным распределением всех вероятных чисел), то любая часть этой последовательности (то что достается одному или другому столу) тоже абсолютно случайна. Любое следующее число не зависит от того берется ли оно из одной последовательности или из отдельных для каждого стола, поэтому распределение будет одинаково равномерным в обоих случаях.
          Или я вас не понимаю, или докажите мне обратное )

          P.S. Тузы, как и любая другая пара, выходят примерно 1 из 220 раздач.
          • 0
            Тузы, как и любая другая пара, выходят примерно 1 из 220 раздач.
            o_0
            о как. из 169 возможных рук в холдеме пара приходит 1 раз из 220. не странно?
            • +1
              Возможных комбинаций из двух карт — 1326 (AhAs, AhAc — разные комбинации, 169 — это комбинаций без учета мастей, т.е. 13 пар, 156 непарных комбинаций). Ракеты — AhAs, AhAc, AhAd, AsAc, AsAd, AcAd — 6 шт.
              1326/6 = 221
              1 из 221 раздач будут заходить какие-нибудь тузы.
              • 0
                согласен. вот что бывает когда прекращаешь играть и в голове остаются обрывки
          • 0
            >Или я вас не понимаю, или докажите мне обратное )
            даже не стану пытаться, тем более в холдем я уже довольно давно не играю. зато играя одновременно несколько столов PLO/PLO8 не раз замечал что в сессии на 100-300 рук за каждым, на одним из столов премиумы приходят чаще и обычно в «одни ворота» иногда, что приятно, мне :) причем аномально часто. понятно что «на дистанции» все будет «нормально», но когда дистанция короткая такие аномалии можно воспринимать и как «подкрученный» ГСЧ и как отклонение от нормали.
            • 0
              Не вижу никакой проблемы, если на дистанции все будет нормально. Без «отклонений от нормали» (дисперсии) не может быть, бывает что АА заходят два раза подряд за одним столом и это никак не противоречит теории вероятностей. Если бы АА заходили ровно каждые 221 руку, то врядли это можно было назвать ГСЧ.
              • 0
                все так. но именно эти отклонения и воспринимаются как «подкрученный ГСЧ». а крутят его на самом едели или не крутят при этом никто не задумывается.
      • –1
        >Если это «общий» шафл, то не вижу в нем ничего плохого
        плохо то, что из-за этого возможны перекосы в пределах стола. на выходе из ГСЧ распределение будет равномерным, а вот на вход не стол может и не быть.
    • 0
      Пруфлинк наезда на старзы в студию.

      Лидерам отрасли (PokerStars, FullTiltPoker, PartyPoker) никакие подкрутки нафиг не нужны. Они больше потеряют от этого — репутацию. В этих 3-х румах сосредоточенна основная масса игроков в покер. Что будет если пойдут слухи (не просто банальные плачи проигрывающих фишей на форумах) о том, что ГСЧ крутят? Правильно — рум потеряет очень большое количество игроков -> рейка -> денег.
      • 0
      • 0
        Стоп! Речь не идет об обмане населения о котором они заявили :) Речь идет о «потенциальном ускорении» игрового процесса с помощью общего шаффла на определенное количество столов. Ничего незаконного, все в рамках. Только вот ряд отклонений это формирует однозначно.
  • +5
    я думаю нужен отдельный блог, народ интересуется покером
  • +3
    сам много играю… как оффлайн так и онлайн покер…

    пишите еще… очень интересно :)
  • 0
    подолью еще немного масла в огонь :)
    есть мнение, что тестировать ГСЧ как криптографическую систему несколько некорректно. да, мы можем убедиться в том что на выходе у нас абсолютно случайное распределение что обеспечивает идеальное «тасование колоды». но эти тесты не проверяют что происходит с «колодой» после того как были розданы карманные карты ;)
    емнип, тесты которые проводит Cigial и прочие не подразумевают аудит кода и заканчиваются раздачей флопа. т.е. выудить «неслучайный» терн и ривер вроде как никто не запрещает :D
    • 0
      соврал. TST аудит кода проводит.
      хм. а кто ж тогда не проводил? буду искать у себя в записках. я ведь это где-то нашел…
      • 0
        блин. у какого то ж крупного аудитора читал. «бла-бла-бла, гарантируем что карты были классно случайно потасованы и розданы на руки игрокам.»

        да и старзы сейчас делают упор на том что «тасуем мы абсолютно честно», а про «раздаем» ни слова. не к добру это :D
        • 0
          Компьютеру достаточно мысленно «раздать» карты заранее (включая ривер), затем от этой последовательности взять SHA-1 и сказать игроку перед началом реальной раздачи. А дальше игрок проверяет честность компьютера сам. Это не аудит кода, конечно, но хотя бы защита от того, что открываемые карты могут зависеть от ставок и т.д.
          • 0
            чудесно. ответ лежит на поверхности. но кто так делает? правильный ответ никто.

            есть, правда одна незадача. вариантов «растасовать» колоду не так уж и много, поэтому создание rainbow таблиц такого объема будет экономически оправдано, а заначит таблицы появятся. как вариант — солить, но тогда начнут обвинять в том что соль «подбирается» для создания коллизий
            • 0
              и кагбэ резюме, чтобы в дальнейшем больше не участвовать в дискусси.
              1. ныть будут всегда. не зависимо от того как «открыт и частен» будет ГСЧ
              2. логика говорит о том что быть честным выгодно — репутация дороже. но логика не всегда руководит поступками отдельных личностей, поэтому «см. п.1»
            • 0
              так делают некоторые онлайн-казино, но мы не о казино же )

              с резюме согласен
          • 0
            Это ничего не изменит, потому что обвиняются в основном не в подкручивании во время раздачи, а до. Например, что слабым игрокам чаще раздают хорошие комбинации, чтобы захватить их игрой и дать по-началу небольшой плюс. Или что в принципе раздают несколько хороших карт за одну раздачу, чтобы игроки вкладывали больше денег в банк и т.д.
  • –3
    на казино.ру вам нужно
    • +1
      Причём тут казино вообще?

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.

Самое читаемое Разное