Рейтинг:4

Скрытие/скрытие информации о позиции в настольной игре

флаг jp
fho

Был вопрос на форумах BoardGameGeek это в основном сводится к следующему:

  1. На обычной прямоугольной карте в позиции (px,py) находится персонаж игрока.
  2. Существует один персонаж «ИИ», который перемещается по этой карте в соответствии с некоторой функцией или шаблоном (например, одно поле за ход (t), (ax,ay) = (ax0,ay0) + t * (vx,vy)).
  3. Игроку необходимо определить, находятся ли два персонажа в пределах (L1/Манхэттен) расстояния D.

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

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

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


редактировать: @bmm6o, конечно, прав. Схема, предложенная @PaulUszak, на самом деле не учитывает, что кто-то должен вычислять $H(p_x || p_y || a_x || a_y)$ а в случае (одиночной) настольной игры это игрок.

Я получил схему из ответа Пауля и опубликовал это на БГГ. Критика заключалась в том, что я жестко запрограммировал позиции ИИ, что снижает реиграбельность. Как только игрок выяснит $ai_{хэш} \rightarrow (ai_x, ai_y)$ отношения позиция ИИ больше не скрыта.

Имея это в виду, возникает вопрос, существует ли схема раскрытия текущего расстояния [2] между игроком и ИИ для игрока, который выполняет расчет, раскрывая при этом как можно меньше информации о текущем положении ИИ.


[2] Если это имеет значение, оригинальный постер на BGG в основном интересовался тем, занимают ли ИИ и игрок одно и то же место ($д=0$) или если ИИ «близок» (например, $d<3$). Дальнейшее расстояние не имеет значения.

Paul Uszak avatar
флаг cn
Какова мощность набора координат карты? т.е. сколько возможных позиций есть на карте?
флаг jp
fho
@PaulUszak Это не было указано в исходном вопросе, но я думаю, мы можем предположить, что на доске примерно 10x10 полей.
флаг jp
fho
@kelalaka Я не уверен, что понимаю ваш вопрос, но я думаю, вы предполагаете, что я говорю о компьютерной игре? Если бы это было так, было бы легко позволить компьютеру обрабатывать любую скрытую информацию и вычисления.Но речь шла о схеме скрытия и раскрытия только части информации в настольной игре.
kelalaka avatar
флаг in
Хорошо, может ли пользователь видеть, где находится ИИ-плеер? Не правда ли, Manhattan D легко вычислить, если не считать препятствий...
Mark avatar
флаг ng
Стоит отметить, что если кто-то согласен с некоторыми релаксациями (вероятностными и гарантирует только, когда игрок находится близко, то есть $\lVert \vec v-\vec v'\rVert_1 dc$ для $c > 1$), можно, вероятно, сделать *намного* лучше, чем текущий ответ с хэшированием с учетом местоположения. Это не дает криптографической гарантии, но в этом нет необходимости. Кроме того, существующие схемы LSH (близки к) линейны, поэтому, вероятно, можно было бы просто хранить $(h, h(ax_0, ay_0), h(v_x, v_y))$, (относительно) небольшое количество данных. Однако «разрыв» означает, что это может не подходить для приложения.
флаг jp
fho
@Mark Какой "пробел"?
Mark avatar
флаг ng
$c > 1$. Конкретно, можно гарантировать, что LSH будет работать при «закрытии» ($cd$) расстояний, но не дает гарантий для "средних" ($\in (d, cd)$) расстояний.
флаг jp
fho
Дополнительный вопрос здесь: https://crypto.stackexchange.com/questions/98313/hiding-obscuring-position-information-in-a-board-game-part-2
Рейтинг:2
флаг cn

Хороший инстинкт приходит сюда. Честное предупреждение, я не знаю, что это за игра, но. Пусть игрок живет в $(п_х, п_у)$ а ИИ живет в $(а_х, а_у)$. И мы предполагаем сетку 10 на 10 ячеек.

Таким образом, у каждого игрока есть 100 возможных позиций и, следовательно, 10 000 возможных комбинаций двух игроков.Я предполагаю, что ИИ может быть над игроком, иначе у вас было бы 10 000-100 возможных комбинаций, если они не могут делить ячейку.

Для всех игр предварительно рассчитать $H(p_x||p_y||a_x||a_y)$, а также манхэттенское расстояние $Д$ между $(п_х, п_у)$ и $(а_х, а_у)$. $Ч$ является криптографической хеш-функцией. Я предлагаю SHA-1, так как 40-символьные шестнадцатеричные значения не слишком длинны для ручного поиска. Сортировать $Ч$ в числовом порядке для дальнейшего облегчения поиска. Затем опубликуйте $(Ч, Д)$ пар в толстой книге. При 50 хэшах на страницу это примерно 200 страниц.

Когда ИИ или игрок перемещаются, «игра» выводит $Ч$ который можно найти в толстой книге, чтобы получить $Д$. Вам не нужно было цифровое хранилище, иначе игра могла бы просто вычислять и выводить $Д$ напрямую. Игрок будет знать расстояние, но инвертировать его вычислительно невозможно. $Ч$ чтобы получить позицию ИИ без перебора/обмана. Этот метод также позволяет односторонне пересчитать $(Ч, Д)$ пары, если это необходимо для аудита процесса и предотвращения мошенничества.

Это должно быть выполнимо для доски 10 на 10, но явно становится нелепым для гораздо больших.


Примечание 1. Помните о степени детализации доски 10 на 10. Поскольку вы знаете свою позицию, любая $Д$ создает круг потенциальных локаций ИИ вокруг игрока. Если расчет расстояния был основан на центрах ячеек, только несколько ячеек точно совпадут. $Д$. Так что есть некоторая утечка позиционной информации. Эта слабость связана не только с моим решением, но и с математикой и мелкой сеткой.

Примечание 2: Инверсия комментария. Да, вы можете сами создать книгу чит-кодов и найти все $Ч$ прообразы. Хотя это обман. Если бы в игре был независимый беспристрастный арбитр, мастер подземелий (???), если хотите, вы могли бы адаптировать хэш как $H = \text{SHA-1}(p_x||p_y||a_x||a_y||перец)$ где перец известен только арбитру. Это все равно облегчило бы аудит во время спора.Сможет ли ИИ удержать перец, если вы доверите ему честную игру?

Примечание 3: должно быть статистически возможно обрезать $|Ч|$ от 40 шестнадцатеричных символов до гораздо меньшего. 10 000 комбинаций занимают всего 14 бит. Если мы выберем уровень безопасности игровой позиции еще 10 000, мы могли бы использовать 28 бит для публикуемых хэшей. Это будет опубликовано как семь шестнадцатеричных символов; восемь, если вы хотите пары. И поэтому меньше страниц.

Aman Grewal avatar
флаг gb
В вопросе говорится о манхэттенском расстоянии, поэтому ссылки на Пифагора не применяются. И если это на самом деле должно быть расчетом на бумаге, я бы не предложил SHA-1.
Paul Uszak avatar
флаг cn
@AmanGreval Манхэттен: отсортировано, спасибо. Хэши предварительно вычисляются в справочнике.Я понял, что кодовые книги/справочные таблицы разрешены.
флаг ph
Как происходит этот шаг: «игра выводит H»?
флаг us
«вычислительно невозможно инвертировать $H$» --> потребуется всего несколько миллисекунд, чтобы самостоятельно вычислить все 10 000 хэшей для построения инвертированного индекса. В вашем предложении нет высокоэнтропийных входов в $H$, поэтому говорить об однонаправленности $H$ не имеет смысла.
флаг jp
fho
Отличный ответ! Меня не слишком беспокоит невозможность инвертировать $H$, если игроки хотят сломать игру, они это сделают. У тебя это работает? Например, простое вычисление $a_x || a_y$ для первых полей даст [[0,1],[1,1]] и просмотр вывода для поля 10x10 содержит много повторяющихся чисел.
флаг jp
fho
Продолжая эту мысль: я думаю, этого можно было бы избежать, однозначно идентифицируя каждое отдельное поле. Это вычисление не $H(a_x || a_y || p_x || p_y)$, а $H( (a_x + 10 * a_y) || (p_x + 10 * p_y))$ (для игрового поля 10x10).
флаг jp
fho
(Я думаю, что мы должны проделать один и тот же «трюк» дважды, иначе у нас будет та же самая проблема усиления... так что это будет $H((a_x + 10 * a_y) + (p_x + 10 * p_y) * 100) $ Теперь возникает вопрос, нужна ли еще какая-либо хеш-функция (за исключением, возможно, запутывания вывода).
флаг jp
fho
@PaulUszak Не могли бы вы прокомментировать $p_x || p_y$ одинаковы для нескольких комбинаций $p_x$ и $p_y$ (например, $p_x = 1, p_y = 0$ и $p_y = 0, p_y = 1$)?
Morrolan avatar
флаг ng
@fho $||$ — операция конкатенации.Таким образом, $0 || 1 = 01$, но $1 || 0 = 10$. Таким образом, входные данные хеш-функции не равны.
флаг jp
fho
@Morrolan В этом больше смысла. Я не был знаком с этой нотацией и предположил, что это должно быть ИЛИ или XOR.
Paul Uszak avatar
флаг cn
@fho О Боже, извини. Это конкатенация. Что немного двусмысленно - см. https://crypto.stackexchange.com/a/71784/23115.
флаг jp
fho
@PaulUszak Спасибо за ответ! Я немного поиграю с этим. Я предполагаю, что было бы довольно легко «предварительно зашифровать» позиции на доске (просто чтобы запутать вещи) и не использовать какую-либо (интенсивную по вычислениям) хеш-функцию. Тогда просто $p_{fid} + a_{fid} * 100$ ($x_{fid}$ означает идентификатор поля), чтобы получить (несколько) случайное число для поиска в буклете. То есть, если вы не имеете в виду хеш-функцию, которую было бы тривиально вычислить несколько раз вручную.
флаг ph
Я действительно не понимаю, как это решает проблему. Кто вычисляет этот хэш, и почему бы вместо этого просто не выполнить вычисление расстояния на входах?
флаг jp
fho
@ bmm6o Цель состоит в том, чтобы скрыть фактическое положение ИИ на игровом поле. Таким образом, на карте нет фигуры/маркера, который бы его представлял. Хэш нужно будет вычислить при создании игры, чтобы заполнить кодовую книгу мультиплетами (hash(player, ai), Distance). Затем самим игроком проверить, близок ли он к ИИ. Используя Manuel Blums HCMU, это действительно возможно.
флаг ph
Я понимаю, что книга будет выпущена заранее. Кто производит хэш для поиска во время игры?
флаг jp
fho
@ bmm6o В идеале игроки. Можно сократить расчеты до одного сложения и применения хэш-функции. HCMU на самом деле довольно просто вычислить, особенно если входные данные короткие.
флаг ph
Если вы думаете, что это решит вашу проблему, я не собираюсь с вами спорить. Но этот ответ не проясняет, как игроки будут вычислять функцию, вход которой включает позицию противника, не зная позиции противника. Разве не процедура заключается в том, что кто-то должен вычислять $H(p_x||p_y||a_x||a_y)$ каждый ход?
флаг jp
fho
Давайте [продолжим это обсуждение в чате](https://chat.stackexchange.com/rooms/133414/discussion-between-fho-and-bmm6o).
флаг jp
fho
@PaulUszak Извините, что не принял ваш ответ. Я был убежден, что должен уточнить свой вопрос, а не открывать новый.

Ответить или комментировать

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