игра Satoshi круг не доказуемо справедливо.Они используют следующую модель:
1. Исход игры полностью определяется начальными данными в пути, известного игрок.
2. Часть исходных данных обеспечивается игроком ("Клиент Seed").
3. Для каждого возможного варианта данных сервера, существует вариант данных игрока, который делает игрок выигрыш.
4. Сервер доказывает, что он не изменил свои данные после того, как игрок показал свою часть исходных данных.
5. После игры, игрок может вычислить исход себя и убедиться, что он соответствует действительному исход игры.
Я покажу, что исход определяется в неизвестном пути, который аннулирует положение (1).
Вот выдержка из алгоритма, опубликованной Satoshi Circle:
Функция seedShuffle ($ пунктов, $ семян) {
если (is_numeric ($ семян)) {
$ Seedval = $ семян;
} Еще {
$ Seedval = CRC32 ($ семян);
}
srand ($ seedval);
для ($ I = Count ($ элементы) - 1; $ я > 0; $ I--) {
$ J = @rand (0, $ я);
$ TMP = $ пунктов [$ я];
$ пунктов [$ я] = $ пунктов [$ J];
$ пунктов [$ J] = $ TMP;
}
вернуть $ пункты;
}
Эта функция является центральной в определении результата. Он использует PHP функции
рант а также
srand. Основной ПГСЧ алгоритм имеет примерно столько же влияние на результате как исходные данные.
Это реализация
рант в PHP 5.5.0 (внутр / стандарт / rand.c):
PHP_FUNCTION (RAND)
{
длиной мин;
длиной не более;
длинный номер;
INT ARGC = ZEND_NUM_ARGS ();
если (ARGC! = 0 && zend_parse_parameters (ARGC TSRMLS_CC, "Л.Л.", &мин, &макс) == FAILURE)
вернуть;
число = php_rand (TSRMLS_C);
если (ARGC == 2) {
RAND_RANGE (число, мин, макс, PHP_RAND_MAX);
}
RETURN_LONG (число);
}
PHPAPI долго php_rand (TSRMLS_D)
{
давно в отставке;
если (! BG (rand_is_seeded)) {
php_srand (GENERATE_SEED () TSRMLS_CC);
}
#ifdef ZTS
RET = php_rand_r (&BG (rand_seed));
#else
# Если они определены (HAVE_RANDOM)
RET = случайная ();
# Элиф определено (HAVE_LRAND48)
RET = lrand48 ();
# еще
RET = Rand ();
# ENDIF
#endif
вернуться в отставке;
}
Как вы можете видеть, он использует один из 4-х возможных ПГСЧ функций. Какой из них фактически используется, зависит от PHP сборки. Один из серверных функций,
рант (Как это определено стандартом C), имеет зависящее от реализации алгоритма.
Итак, у нас есть много возможной PRNGs, и на самом деле, много различных алгоритмов для вычисления результата.
Как это теоретически может быть использовано Satoshi Кругом обмануть. Предположим, что игрок делает одну большую ставку, и это его первая ставка. После того как игрок раскрывает его "семя клиента", Сервер пытается несколько PRNGs и использует тот, который дает
худший результат для игрока. Затем Satoshi Circle утверждает, что "" ПСЧ они используют.
Кроме того, даже если ПСЧ алгоритм был известен игроку, по-прежнему трудно проверить результат.
1. Когда я пытаюсь выбрать хэш данных сервера для копирования-вставки его, "семя клиента" Форма входа всплывает и текст, который я пытаюсь выбрать идет в фоновом режиме.
2. Схема, используемая для вычисления результата является чрезмерно сложной. Там существует схема, которая будет обеспечивать по крайней мере такой же уровень безопасности для Satoshi круга и игрока, сделать лучше рандомизации результата, и легко вычислить с помощью среднего игрока.
3. Для проверки результата с использованием текущей схемы, игрок должен точно так же ПСЧ. Это может быть значительные хлопоты, чтобы получить один для некоторых операционных систем.
Все это
отпугивает игроков от проверки справедливости самих себя. Большинство будет надеяться, что кто-то найдет его, если Satoshi Circle обман.