Дневник игрока в самую "эзотерическую" игру... Рулетку.

18
Статистика
Статистика
18
Статистика темы
  • Популярность
    Топ-630
  • Постов
    11,552
  • Просмотров
    972,682
  • Подписок
    18
  • Карма автора
    -2,553
1 471 472 473 474 578
  • AUMRAM @ 4.2.2013
    А можно в двух словах - сам принцип взлома?
    Просто если в нем есть какие-то универсальные моменты, то нет особой разницы - используют Вихрь в том виде или нет или используют совсем даже не Вихрь

    Вот здесь документ можно скачать "Уязвимости ГСЧ"
    Если вкратце то зная любую непрерывность из 624 чисел выданных Вихрем можно определить его текущее состояние и 100% определить следующее выданное им число. Только как это поможет "расколоть" ГСЧ казино?
    Ответить Цитировать
    178/179
    + 1
  • AsianHawk @ 5.2.2013
    Вот здесь документ можно скачать "Уязвимости ГСЧ"
    Если вкратце то зная любую непрерывность из 624 чисел выданных Вихрем можно определить его текущее состояние и 100% определить следующее выданное им число. Только как это поможет "расколоть" ГСЧ казино?


    Я естественно, ни бум-бум в этих программных кодах, но мне что-то не верится, что там ошибки нет. Поэтому спрошу у SCRTR - неужели нет там ошибки?


    Взлом ГПСЧ Вихрь Мерсенна в PHP
    Рассмотрим ещё один не криптостойкий алгоритм генерации псевдослучайных чисел Mersenne Twister. На этот раз будем анализировать реализацию алгоритма в исходном коде php версии 5.4.6.
    Содержимое файла /ext/standard/basic_functions.h
    #define MT_N (624)
    /* rand.c */
    php_uint32 state[MT_N+1]; /* state vector + 1 extra to not violate ANSI C */
    php_uint32 *next; /* next random value is computed from here */
    int left; /* can *next++ this many times before reloading */
    unsigned int rand_seed; /* Seed for rand(), in ts version */
    zend_bool rand_is_seeded; /* Whether rand() has been seeded */
    zend_bool mt_rand_is_seeded; /* Whether mt_rand() has been seeded */

    Содержимое файла /ext/standard/rand.c
    #define N MT_N /* length of state vector */
    #define M (397) /* a period parameter */
    #define hiBit(u) ((u) & 0x80000000U) /* mask all but highest bit of u */
    #define loBit(u) ((u) & 0x00000001U) /* mask all but lowest bit of u */
    #define loBits(u) ((u) & 0x7FFFFFFFU) /* mask the highest bit of u */
    #define mixBits(u, v) (hiBit(u)|loBits(v)) /* move hi bit of u to hi bit of v */
    #define twist(m,u,v) (m ^ (mixBits(u,v)>>1) ^ ((php_uint32)(-(php_int32)(loBit(u))) & 0x9908b0dfU))

    /* {{{ php_mt_reload
    */
    static inline void php_mt_reload(TSRMLS_D)
    {
    /* Generate N new values in state
    Made clearer and faster by Matthew Bellew (matthew.bellew@home.com) */

    register php_uint32 *state = BG(state);
    register php_uint32 *p = state;
    register int i;

    for (i = N - M; i--; ++p)
    *p = twist(p[M], p[0], p[1]);
    for (i = M; --i; ++p)
    *p = twist(p[M-N], p[0], p[1]);
    *p = twist(p[M-N], p[0], state[0]);
    BG(left) = N;
    BG(next) = state;
    }
    /* }}} */

    /* {{{ php_mt_initialize
    */
    static inline void php_mt_initialize(php_uint32 seed, php_uint32 *state)
    {
    /* Initialize generator state with seed
    See Knuth TAOCP Vol 2, 3rd Ed, p.106 for multiplier.
    In previous versions, most significant bits (MSBs) of the seed affect
    only MSBs of the state array. Modified 9 Jan 2002 by Makoto Matsumoto. */

    register php_uint32 *s = state;
    register php_uint32 *r = state;
    register int i = 1;

    *s++ = seed & 0xffffffffU;
    for( ; i < N; ++i ) {
    *s++ = ( 1812433253U * ( *r ^ (*r >> 30) ) + i ) & 0xffffffffU;
    r++;
    }
    }
    /* }}} */

    /* {{{ php_mt_srand
    */
    PHPAPI void php_mt_srand(php_uint32 seed TSRMLS_DC)
    {
    /* Seed the generator with a simple uint32 */
    php_mt_initialize(seed, BG(state));
    php_mt_reload(TSRMLS_C);

    /* Seed only once */
    BG(mt_rand_is_seeded) = 1;
    }
    /* }}} */

    /* {{{ php_mt_rand
    */
    PHPAPI php_uint32 php_mt_rand(TSRMLS_D)
    {
    /* Pull a 32-bit integer from the generator state
    Every other access function simply transforms the numbers extracted here */

    register php_uint32 s1;

    if (BG(left) == 0) {
    php_mt_reload(TSRMLS_C);
    }
    --BG(left);

    s1 = *BG(next)++;
    s1 ^= (s1 >> 11);
    s1 ^= (s1 << 7) & 0x9d2c5680U;
    s1 ^= (s1 << 15) & 0xefc60000U;
    return ( s1 ^ (s1 >> 18) );
    }

    Можно заменить, что php_mt_reload вызывается при инициализации и после вызова php_mt_rand 624 раза. Начнем взлом с конца, обратим трансформации в конце функции php_mt_rand(). Рассмотрим (s1 ^ (s1 >> 18)) в бинарном представление операция выглядит так
    10110111010111100111111001110010 s1
    00000000000000000010110111010111100111111001110010 s1 >> 18
    10110111010111100101001110100101 s1 ^ (s1 >> 18)
    Видно, что первые 18 бит (выделены жирным) остались без изменений.
    Напишем две функции для инвертирования битового сдвига и xor

    public static long unBitshiftRightXor(long value, long shift) {
    // we part of the value we are up to (with a width of shift bits)
    long i = 0;
    // we accumulate the result here
    long result = 0;
    // iterate until we've done the full 32 bits
    while (i * shift < 32) {
    // create a mask for this part
    long partMask = (-1 << (32 - shift)) >>> (shift * i);
    // obtain the part
    long part = value & partMask;
    // unapply the xor from the next part of the integer
    value ^= part >>> shift;
    // add the part to the result
    result |= part;
    i++;
    }
    return result;
    }

    public static long unBitshiftLeftXor(long value, long shift, long mask) {
    // we part of the value we are up to (with a width of shift bits)
    long i = 0;
    // we accumulate the result here
    long result = 0;
    // iterate until we've done the full 32 bits
    while (i * shift < 32) {
    // create a mask for this part
    long partMask = (-1 >>> (32 - shift)) << (shift * i);
    // obtain the part
    long part = value & partMask;
    // unapply the xor from the next part of the integer
    value ^= (part << shift) & mask;
    // add the part to the result
    result |= part;
    i++;
    }
    return result;
    }

    Тогда код для инвертирования последних строк функции php_mt_rand() будет выглядеть так
    long value = output;
    value = unBitshiftRightXor(value, 18);
    value = unBitshiftLeftXor(value, 15, 0xefc60000);
    value = unBitshiftLeftXor(value, 7, 0x9d2c5680);
    value = unBitshiftRightXor(value, 11);

    Если у нас есть 624 последовательных числа сгенерированных Mersenne Twister , то применив этот алгоритм для этих последовательных чисел, мы получим полное состояние Mersenne Twister, и сможем легко определить каждое последующее значение, запустив php_mt_reload для известного набора значений.


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

    Но в той же работе написано:

    Одним из известных тестов является тест на следующий бит — тест, служащий для проверки генераторов псевдослучайных чисел на криптостойкость. Тест гласит, что не должно существовать полиномиального алгоритма, который, зная первые k битов случайной последовательности, сможет предсказать k+1 бит с вероятностью большей ½.
    В теории криптографии отдельной проблемой является определение того, насколько последовательность чисел или бит, сгенерированных генератором, является случайной. Как правило для этой цели используются различные статистические тесты, такие как например тесты DIEHARD или тесты NIST. Эндрю Яо доказал в 1982 году что генератор, прошедший «тест на следующий бит», пройдет и любые другие статистические тесты на случайность, выполнимые за полиномиальное время.


    Как это сочетается с тем, что Вихрь успешно проходит тест на следующий бит, что указывается во всех статьях и заметках о Вихре?
    Ответить Цитировать
    2165/2439
    + 0
  • AUMRAM @ 4.2.2013
    Упп-с, слона-то я и не приметил. Еще и Теория знамений была?


    жжошь .
    Ответить Цитировать
    550/695
    + 0
  • AUMRAM @ 5.2.2013
    Я естественно, ни бум-бум в этих программных кодах, но мне что-то не верится, что там ошибки нет. Поэтому спрошу у SCRTR - неужели нет там ошибки?

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

    НО! Надо понимать, что для "взлома" надо 624 исходных числа, сгенерированных ГСЧ. А Вихрь выдаёт 32-битные числа, т.е. числа в диапазоне от 0 до 2^32=4294967296, и только потом эти числа преобразуются в то, что нужно для практических целей, например, в последовательность рулеточных исходов 0..36.

    Имея 624 рулеточных исхода, вихрь не взломать, т.к. любому из 37 рулеточных исходов может соответствовать 116080197 различных исходных случайных числа, выданных вихрем.
    Ответить Цитировать
    243/258
    + 3
  • SCRTR @ 5.2.2013
    У меня, к сожалению, не было времени подробно разбираться, но на первый взгляд, никаких ошибок нет. И я не вижу в этом ничего необычного.

    НО! Надо понимать, что для "взлома" надо 624 исходных числа, сгенерированных ГСЧ. А Вихрь выдаёт 32-битные числа, т.е. числа в диапазоне от 0 до 2^32=4294967296, и только потом эти числа преобразуются в то, что нужно для практических целей, например, в последовательность рулеточных исходов 0..36.

    Имея 624 рулеточных исхода, вихрь не взломать, т.к. любому из 37 рулеточных исходов может соответствовать 116080197 различных исходных случайных числа, выданных вихрем.


    Иными словами для реального взлома необходимо порядка 10 миллиардов чисел.
    Ответить Цитировать
    2166/2439
    + 0
  • Тестер, пошто мой знаковый постинг заминусовал?
    я вона - как рискую-то гневом Контрривера, такое выдавая в открытую, а ты минусуешь
    Ответить Цитировать
    2167/2439
    + 0
  • AUMRAM, я так понимаю на твой вопрос мне, уже ответили:). Насчет невозможности взломать (эт уже для SCRTR) - попросил знакомого чела разобраться и покодить, условия такие - чтоб скормить проге тхт с 1000 номеров вихря, прога проанализирует первых 700 а потом должна построить ряд оставшихся. Для контроля можно разрезать файл на 2 части 700+300 это чтоб мухлежа не было. У этого знакомого порог вхождения выше - он на сишарп и пхп кодит. Мне больше времени на разборы надо будет. Как появится результат отпишусь. Но опять же - в казинах используют закрытые гпсч и это нигде не применить, кроме как доказать или опровергнуть возможность взлома вихря. Мне так это интерессно.
    Ответить Цитировать
    28/35
    + 0
  • helperroullet @ 5.2.2013
    AUMRAM, я так понимаю на твой вопрос мне, уже ответили:). Насчет невозможности взломать (эт уже для SCRTR) - попросил знакомого чела разобраться и покодить, условия такие - чтоб скормить проге тхт с 1000 номеров вихря, прога проанализирует первых 700 а потом должна построить ряд оставшихся. Для контроля можно разрезать файл на 2 части 700+300 это чтоб мухлежа не было. У этого знакомого порог вхождения выше - он на сишарп и пхп кодит. Мне больше времени на разборы надо будет. Как появится результат отпишусь. Но опять же - в казинах используют закрытые гпсч и это нигде не применить, кроме как доказать или опровергнуть возможность взлома вихря. Мне так это интерессно.


    Мне тоже. Потому что я не верю в описанную тобой возможность, тем более SCRTR уже прояснил ситуацию: 624 числа Вихря - это вовсе не 624 числа рулетки, в которые превращаются числа Вихря. Для рулетки это будет соответствовать 10 миллиардам числам )
    Ответить Цитировать
    2168/2439
    + 0
  • Код-то выложен, заява присутствует, от и попробуем проверить. А если SCRTR такоеже сможет сделать так и еще лучше, но наверное не захочет - не верит, а у меня надежда умирает последней.
    Ответить Цитировать
    29/35
    + 0
  • AUMRAM @ 5.2.2013
    Резюме такое. Далеко не все тестеровы посылы являются извращением теории веоятностей, математики в общем и естествознания в целом. Поэтому надо бы констатировать, в чем он прав. а в чем нет.

    1. В последовательности истиннослучайных событий предельных отклонений нет и быть не может. Равно как и якобы порождающих их "напряжений вероятностных полей" и прочих выдумок. Так что в этом он не прав.


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

    ЗЫ

    Можешь конечно вспомнить про летающих слонов. Но это абсурд.
    Ответить Цитировать
    2432/3100
    + 0
  • tester37 @ 5.2.2013
    Вот за это минусанул. С чего ты такой вывод сделал - мне непонятно. Ничего ведь не изменилось. То, что Бога нет - не доказано. Также и с предельными отклонениями.

    ЗЫ

    Можешь конечно вспомнить про летающих слонов. Но это абсурд.


    По сути не абсурд. Только по форме.
    Ответить Цитировать
    2169/2439
    + 0
  • Соглашусь, но в данном случае это важно. Так как есть формы актуальные, а есть - неактуальные и никому не интересные.
    Ответить Цитировать
    2433/3100
    + 0
  • tester37 @ 5.2.2013
    Соглашусь, но в данном случае это важно. Так как есть формы актуальные, а есть - неактуальные и никому не интересные.


    А это интересная!
    Да и опять же - не в форме вопрос. Она подобрана так, чтобы максимально наглядно довести до широкой общественности суть твоих вредоносных заблуждений. В сути дело, форма может быть любой.

    Ладно, Тестер, мне и правда интересно: как думаешь, скольких страниц достигнет твой дневник?
    Ответить Цитировать
    2170/2439
    + 0
  • AUMRAM @ 5.2.2013
    Да не сочтет Преподобный Контрривер крамолой мой следующий постинг!


    За подобное вольнодумство, Аумрам, ведь и анафеме предаться недолго. И даже партбилет на стол положить.
    Ответить Цитировать
    417/434
    + 0
  • Contriver @ 5.2.2013
    За подобное вольнодумство, Аумрам, ведь и анафеме предаться недолго. И даже партбилет на стол положить.


    Ну уж и партбилет сразу
    Ответить Цитировать
    2171/2439
    + 0
  • Удачливость! Феномен присущий только человеку, с его свободой выбора? А если вместо человека, ставки делает бот? Может ли быть счастливый бот? Так, мысли вслух.
    Ответить Цитировать
    69/175
    + 0
  • Бот врядли, а вот обладателя.....
    Ответить Цитировать
    30/35
    + 0
  • Ну с этой точки зрения, скорее разработчика
    Ответить Цитировать
    70/175
    + 0
  • Самое трудное для меня сегодня - это продолжать рассказывать и двигать идею мэджикспинса, имея такой большой (сравнительно) проигрыш на игре за достаточно продолжительное время.
    Но я нашел утешение среди братьев-покеристов :)
    Совершенно согласен с Ваниш


    Цитата (feruell @ 7.2.2013) *
    Новый пост в Колодце Феруэлла:

    Я прочитал математику покера очень давно, и хотя ничего полезного для себя не вынес, осталось какое-то чувство уважения, ощущение, что человек понимает покер на такой глубине, до которой мне еше расти и расти. А потом Билл Чен обнаружился на 50-100 ЛХЕ столах покерстарса и выяснилось, как в случае с шахматным матчем О. Бендера, что маэстро - полуфиш. Он несколько месяцев там играл спорадически, позаливал и бросил.

    Запомнился правда тем, что стал единственным человеком, которому я проиграл каре в каре (55 против 77). Но это к пониманию игры не имеет отношения.

    VANISH:

    Ты и раньше писал, мол, книга не помогла самому Чену, значит бесполезна.
    По-моему это логическая ошибка.
    Мы все прекрасно понимаем, что существует гиганская пропасть между знанием "как надо" и фактическими действиями.
    С этим везде каждый день сталкиваешься.
    А уж в покере-то и подавно.
    В своей книге Чен описывает некую математическую модель, и неспособность применения на практике не доказывает её несостоятельность.

    Если есть что конкретно возразить по книге, то рад обсудить, ибо я как раз считаю эту книгу одной из самых полезных о покере.
    Ответить Цитировать
    2434/3100
    + 0
  • Для покера это очень и очень справедливо. Да и для любой игры между человеком и человеком. Рулетка - игра против набора статичных правил. И там понятия "как надо" и фактические действия разными конечно могут быть. Но там на вопрос: а как надо? - пока ответ один: надо не играть в нее. Никто еще не смог доказать правильность других ответов.
    А если доказали бы: или правила были бы изменены или вопрос несоостветствия как надо и фактических действий стал бы вполне тривиальным. Потому что правила - положительные, отрицательные или нулевые - они всегда статичны в играх против казино. В покере - игре между живыми людьми, находящимися в равных относительно правил условиях - все совсем иначе. Поэтому много блестящих теоретиков, не умеющих применить собственные теории на практике. Если ты думаешь, что только по причине тилта - очень ошибаешься. В покере однозначных решений очень мало, а большинство тех, где можно сыграть оптимально, неоптимально и ошибочно. И грань между ними слишком тонка для просто теоретика. Слишком многое зависит от конкретного соперника, что перед ним. Слишком много различных игровых ситуаций, в том числе и тех, где даже вопрос об оптимальности решается весьма трудно, а в отдельных случаях решения вообще не имеет.
    Так что, Тестер, утешение ты можешь находить в чем угодно. Но в отрицательные игры не играй.
    Ответить Цитировать
    2172/2439
    + 0
1 471 472 473 474 578
1 человек читает эту тему (1 гость):
Зачем регистрироваться на GipsyTeam?
  • Вы сможете оставлять комментарии, оценивать посты, участвовать в дискуссиях и повышать свой уровень игры.
  • Если вы предпочитаете четырехцветную колоду и хотите отключить анимацию аватаров, эти возможности будут в настройках профиля.
  • Вам станут доступны закладки, бекинг и другие удобные инструменты сайта.
  • На каждой странице будет видно, где появились новые посты и комментарии.
  • Если вы зарегистрированы в покер-румах через GipsyTeam, вы получите статистику рейка, бонусные очки для покупок в магазине, эксклюзивные акции и расширенную поддержку.