Привет Libertaad, приятно встретиться с вами!
Мне тоже приятно познакомиться!
То, что вы говорите, верно лишь отчасти: с Вихрь Мерсенна не Криптографически-Strong генератор псевдослучайных чисел (CSPRNG) есть вероятность того, что возможные предварительные изображения могут быть вычислены, чтобы максимизировать некоторые статистические свойства продукции Мерсенна Twister. Преимущество может быть тонким, но это может быть сделано, в теории.
Мое предложение заключается в использовании client_seed гораздо больше (скажем, 80 бит) и CSPRNG.
Основной причиной того, что мы пошли с Вихрь Мерсенна для фазы перестановки потому, что мы придаем большое значение на эталонной реализации. Мы хотели доступную эталонную реализацию, что любой из наших конечных пользователей может работать. Это означало, что должно было быть в JavaScript. Мы не хотим, чтобы просто иметь этот удивительный алгоритм доказуемо справедливого перетасовки, но сделать это в принципе невозможно для любого из наших конечных пользователей по-настоящему проверить что-нибудь.
Мы также не хотим повторно реализовать любой ПСЧ-й в JavaScript, так как это противоречило бы цели иметь простую эталонную реализацию. Наша эталонная реализация составляет менее 100 строк кода, но это не полагаться на существующие
Вихрь Мерсенна реализация.
Большой! Но проблема заключается в том, что пользователь должен вручную проверять перетасовки каждый раз. Там должен быть способ для автоматизации проверок, но в каком-то смысле код проверка не отправляется на сервер, но задается пользователем. Межфазных границ между веб-страницей и местного применения.
Я считаю, что это отличный способ для подкованных пользователей, чтобы сделать это самостоятельно будет через Greasemonkey скрипт. Это возможно, так как bitZino это приложение HTML5. Так как Greasemonkey скрипты в JavaScript, пользователь может даже использовать нашу эталонную реализацию, если они желают
Есть (возможно) два других проблем с протоколом:
1) Происхождение кода, который выбирает в client_seed:
Я havenґt видел страницу, но я сомневаюсь, что пользователь может обеспечить случайное зерно вручную в окне редактирования.
Если нет, то сервер-отослано на стороне клиента JavaScript код может выбрать номер в предсказуемым образом, и пользователь не имеет возможности найти его.
"не настоящие" Веб-страница может быть отправлена с вероятностью 1/10, так что шансы пользователей нахождения его во время просмотра исходного кода является низким.
bitZino на самом деле позволяет редактировать client_seed если вы так желаете (вы можете увидеть интерфейс для себя, если вы хотите с игры деньги за одним столом в
https://bitzino.com/blackjack). В то время как можно было бы для нас, чтобы отправить вниз поддельное JavaScript в некоторых случаях для создания client_seeds, способствовавших нас, мы были бы гарантированы в конце концов поймали, если бы мы сделали это.
Это направление атаки также может быть остановлено пользователем под управлением Greasemonkey скрипт, который всегда представленный свой собственный client_seed. Таким образом, пользователь никогда не будет в зависимости от JavaScript на странице, чтобы произвести семя для них.
2) Путем случайного client_seed выбрано:
Опять же, я havenґt видел исходный код веб-страницы, где выбирается наиболее client_seed. (Я havenґt играл на вашем сайте), но я предполагаю, что у него есть некоторые JavaScript-код, который вызывает Math.random (), которая не является криптографически безопасной и так itґs предсказуемы.
Как вы вычислить client_seed? Вы должны использовать CSPRNG, например, как один, предоставленной SJCL пространства имен sjcl.random (я havenґt тестировал сам)
Не могли бы вы опубликовать исходный код веб-страницы, где выбирается client_seed?
Мы действительно с помощью Math.random () для генерации семян.
Исходный код, если вам интересно (это создает базу-62 строку 24 символов):
Функция setRandomClientSeed () {
вар а = [];
для (вар я = 0; я < 24; я ++) {
вар Val = Math.floor (Math.random () * 62);
вал + = 48;
если (VAL > 57) {вал + = 7; }
если (VAL > 90) {вал + = 6; }
a.push (вал);
}
$ ( '# Client_seed_input') Вал (String.fromCharCode.apply (нуль, а)).
}
Еще раз, хотя, пользователь может использовать Greasemonkey скрипт для создания своего собственного семени, и, следовательно, не полагаться на страницу JavaScript для безопасности на всех.
Мы думали о том, чтобы весь этот алгоритм Greasemonkey скрипт с самого начала - что бы удовлетворили все ваши вопросы, касающиеся сервера отправки вниз испорченные JS. Поэтому мы решили не делать этого, в первую очередь, как Greasemonkey скрипт был еще раз о доступности. Мы хотели 100% наших пользователей, чтобы иметь возможность проверить свои руки, если они выбрали. Я все еще могу сделать Greasemonkey верификатора, но я думаю, что это будет на самом деле будет лучше, если верификатор Greasemonkey пришел из сообщества, а не от нас.