powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Криптографический покер
25 сообщений из 156, страница 5 из 7
Криптографический покер
    #39584577
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvpРешаемо. Например, для 4х игроковА теперь подумайте, что три участника и крупье - жулики и за пределами протокола обмениваются любой доступной информацией.

Я даже молчу что уже исходная постановка "нам пофигу сговор между игроками" полностью ущербна: одна из обязанностей казино - не допускать мошенничества игроков.
Сговор (игра команды против одиночного игрока) уже несправедлив, даже если "честное" казино не позволяет жуликам знать больше того, что у них на руках.

Хочу видеть протокол, устойчивый к ситуации "все, кроме одного игрока - жулики".

P.S. Никто, что ли, не играл в преферанс в чужой компании?
Там даже мошенничать не требуется - правила позволяют играть на одну руку и это достаточно сложно доказать.
...
Рейтинг: 0 / 0
Криптографический покер
    #39584582
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvpBasil A. Sidorovпропущено...
Если каждую карту шифровать индивидуальным кодом, то колоду нельзя тасовать - неизвестно, какой код потребуется, когда понадобится "следующая карта". А если за столом всего один честный участник и мы не знаем, кто это - тасовать колоду должны все.

Решаемо. Например, для 4х игроков:

Карты создаются в виде: {ID}, шифруются по кругу в виде {{ID, CRC1}^K1, CRC2}^K2, CRC3}^K3, CRC4}^K4}, после шифрования колоды запоминается кто её зашифровал последний (N). При этом ключи для всех 52х карт сохраняются.
Когда надо расшифровать карту, то просто начинают с игрока N и идут обратно по кругу, каждый игрок расшифровывает текущую карту всеми ключами по-очереди пока не совпадёт CRC. Для того чтобы остальные игроки не могли подобрать ключ шифрования перебором - для CRC использовать какой-нибудь хэш с солью в виде того же самого ключа.

И да, если карта на руках у игрока N3, например, то он в свою очередь расшифровывает не всю карту, а только блоки CRC1, CRC2 и CRC3, после чего передаёт её дальше. А саму карту он расшифровывает последним.

При таком подходе тасовать зашифрованные карты может кто угодно и сколько угодно раз.
Не понял эту схему. ID шифруем, но оставляем нешифрованное CRC каждого игрока?
...
Рейтинг: 0 / 0
Криптографический покер
    #39584590
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. SidorovСговор (игра команды против одиночного игрока) уже несправедлив, даже если "честное" казино не позволяет жуликам знать больше того, что у них на руках.
ИМХО эта задача нерешаема. Запретить общение другими каналами между игроками невозможно. Для этого в казино видеокамеры стоят.

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

Мой вариант в два прохода 21108345 эту проблему не решает, ломается легко. Возможно алгоритм alekcvp с CRC решает, но я не понял как он работает.
...
Рейтинг: 0 / 0
Криптографический покер
    #39584600
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TНе понял эту схему. ID шифруем, но оставляем нешифрованное CRC каждого игрока?
Да, я там затупил, не будет работать :)
...
Рейтинг: 0 / 0
Криптографический покер
    #39584617
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvpВы не видите противоречия в этой фразе? Кто-то должен исключить из колоды взятые карты, т.е. этот кто-то однозначно будет знать какие карты были взяты из колоды, при этом никто не должен знать какие именно карты взяты. При исходном условии что обмен информацией возможен между любыми сущностями за столом - это нерешаемая задача.

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


maytonМы плавно подходим к изобретению блокчейна.

Блок-чейн может помочь от подтасовки, но никак не может помочь от раскрытия информации. В ситуации с деньгами, блог-чейн защищает транзакции как раз за счёт распределения информации. Если информацию скрывать то никакой чейн не имеет смысла.
...
Рейтинг: 0 / 0
Криптографический покер
    #39584619
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как я понимаю общий принцип решения должен быть таким: т.к. доверия нет никому, то необходимо чтобы любую карту расшифровать мог только тот, у кого она на руках, при этом в расшифровке обязательно должны принимать участие ВСЕ остальные игроки.

До чего я додумался на данный момент:

1. Один игрок генерирует 52 {ID}, шифрует их (каждый своим ключём), перемешивает и передаёт следующему игроку. Список открытых {ID} с номиналами публикуется всем игрокам.
2. Каждый следующий игрок снова шифрует каждый {ID} отдельным ключём и снова перемешивает их.
3. ВСЕ игроки сохраняют ВСЕ 52 ключа.
4. Когда кому-то необходимо расшифровать карту из колоды - он отправляет её по кругу В ТОМ ЖЕ направлении, в котором шифровалась колода. Это необходимо чтобы при сговоре игроков 1 и 2, например, они не могли составить список {ID} - {ID^K1^K2} и узнать карту при расшифровке.
5. Следующий игрок расшифровывает эту карту всеми своими ключами и отправляет дальше список из 52х {ID}.
6. Каждый следующий игрок расшифровывает ВСЕ полученные {ID}' ВСЕМИ своими ключами и отправляет дальше список из N*52 {ID}.
7. Последний игрок расшифровывает каждый ID из получившегося списка размером (для 5 игроков) в 52^(5-1) = 7311616 ID каждым своим ключём по-очереди, до тех пор пока не получит допустимый ID из колоды.

В результате при размере ID карты в 16 байт (UUID, для исключения коллизий при расшифровке), размер рассылаемых данных для расшифровки одной карты составит на ~120 мегабайт.

Для шифрования используется шифр Вернама (одноразовый блокнот).

Вроде уязвимостей пока не вижу, но возможно я что-то упустил.

Таким образом задача решаема в теории, но вот практическая реализация...
...
Рейтинг: 0 / 0
Криптографический покер
    #39584628
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvp1. Один игрок генерирует 52 {ID}, шифрует их (каждый своим ключём), перемешивает и передаёт следующему игроку. Список открытых {ID} с номиналами публикуется всем игрокам.
alekcvp4. Когда кому-то необходимо расшифровать карту из колоды - он отправляет её по кругу В ТОМ ЖЕ направлении, в котором шифровалась колода. Это необходимо чтобы при сговоре игроков 1 и 2, например, они не могли составить список {ID} - {ID^K1^K2} и узнать карту при расшифровке.

Здесь проблема в том, что самый первый игрок по запросу ключа или расшифровки будет знать ID карты (номинал), даже если не будет знать кому именно она досталась.

Может быть все игроки поделятся друг с другом своим набором 52x публичных ключей? Вариант «по кругу» самый устойчивый, так как позволяет восстанавливать порядок карт на каждом этапе, не раскрывая это другим участникам. Но вот слабое звено это самый первый участник.

:(
...
Рейтинг: 0 / 0
Криптографический покер
    #39584635
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttalekcvp1. Один игрок генерирует 52 {ID}, шифрует их (каждый своим ключём), перемешивает и передаёт следующему игроку. Список открытых {ID} с номиналами публикуется всем игрокам.
alekcvp4. Когда кому-то необходимо расшифровать карту из колоды - он отправляет её по кругу В ТОМ ЖЕ направлении, в котором шифровалась колода. Это необходимо чтобы при сговоре игроков 1 и 2, например, они не могли составить список {ID} - {ID^K1^K2} и узнать карту при расшифровке.

Здесь проблема в том, что самый первый игрок по запросу ключа или расшифровки будет знать ID карты (номинал), даже если не будет знать кому именно она досталась.

:(

А никто не будет запрашивать у него конкретный ключ. Ему прилетит от 1го до ~140 тысяц зашифрованных {ID}', после чего ему необходимо расшифровать КАЖДЫЙ из них КАЖДЫМ из своих 52х ключей и отправить дальше от 52х до ~7 миллионов расшифрованных {ID}, но при этом каждый их них всё ещё будет зашифрован ключём того игрока, у которого на руках эта карта.
...
Рейтинг: 0 / 0
Криптографический покер
    #39584644
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvp5. Следующий игрок расшифровывает эту карту всеми своими ключами и отправляет дальше список из 52х {ID}.
Можно разом спалить все 52 ключа если известно что дали на вход и что было на выходе. При игре втроем элементарно.
...
Рейтинг: 0 / 0
Криптографический покер
    #39584673
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima Talekcvp5. Следующий игрок расшифровывает эту карту всеми своими ключами и отправляет дальше список из 52х {ID}.
Можно разом спалить все 52 ключа если известно что дали на вход и что было на выходе. При игре втроем элементарно.
Ну значит надо выбрать более стойкий алгоритм.
...
Рейтинг: 0 / 0
Криптографический покер
    #39584685
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvpDima Tпропущено...

Можно разом спалить все 52 ключа если известно что дали на вход и что было на выходе. При игре втроем элементарно.
Ну значит надо выбрать более стойкий алгоритм.
Кроме XOR с ключом ничего не подходит.
...
Рейтинг: 0 / 0
Криптографический покер
    #39584701
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TКроме XOR с ключом ничего не подходит
какие-нибудь повороты в каких-то там пространствах тоже коммутативны, слышал я ...
...
Рейтинг: 0 / 0
Криптографический покер
    #39584752
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TИМХО эта задача нерешаема. Запретить общение другими каналами между игроками невозможно. Для этого в казино видеокамеры стоят.

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

Мне кажется мы все время ходим по кругу и решаем одну задачу. А именно как получить "круговой"
контроль над карточным столом. Мне кажется в нашей схеме это невозможно. Должен быть кто-то
арбитром. Сервером. Или доверительным хранилищем где можно что-то сохранить. Или кто-то должет
раздать всем одно приложение (протокол) которому все остальные доверяют.

Я-бы начал со следующего. Есть три физических хоста. (А)лиса, (Б)об и (К)ларк. (A,B,C).
Они знают IP адреса друг друга. И они решили поиграть в покер.

И??...
...
Рейтинг: 0 / 0
Криптографический покер
    #39584754
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonИ??...... hVostt хочет исключить доверие всем, включая казино.
А доверие это не про IP-адреса и алгоритмы ...
...
Рейтинг: 0 / 0
Криптографический покер
    #39584755
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Остается "колода". Как ей доверять?
...
Рейтинг: 0 / 0
Криптографический покер
    #39584761
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonОстается "колода". Как ей доверять?Колода находится у крупье в казино, которому мы тоже не доверяем.
Я покрутил в голове несколько сценариев и некоторые даже опубликовал, но, всё, что я придумал - принципиально нерабочее.
...
Рейтинг: 0 / 0
Криптографический покер
    #39584778
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мой вариант 21108345 нерабочий, т.к. по результату первого прохода можно легко получить общий ключ и узнать где какая карта: берем нешифрованную карту 1, делаем XOR со всеми шифрованными, затем тоже с картой 2, ищем совпавшие результаты - это ключ.

Чтобы этого избежать надо разбавить карту мусором, т.е. формат карты должен быть таким чтобы неизвестно было ее исходное бинарное представление.
Например: мусор + мусор^карта , где "мусор" случайное число размером с карту.

Алгоритм перемешивания такой:
1. Первый игрок перемешивает, добавляет в каждую карту мусор и шифрует своим ключом (один на все карты).
2. Второй игрок перемешивает, проставляет ID и шифрует каждую карту ключом из блокнота (отдельный ключ на каждую карту).
3. Третий (и последующие) перемешивает, шифрует каждую карту ключом из блокнота (отдельный ключ на каждую карту).
4. Первый расшифровывает ключом из п.1 и шифрует каждую карту ключом из блокнота (отдельный ключ на каждую карту).

ID не шифруется. В остальном работа по алгоритму alekcvp 21107902
...
Рейтинг: 0 / 0
Криптографический покер
    #39584784
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T1. Первый игрок перемешивает, добавляет в каждую карту мусор и шифрует своим ключом (один на все карты).
2. Второй игрок перемешивает, проставляет ID и шифрует каждую карту ключом из блокнота (отдельный ключ на каждую карту).
3. Третий (и последующие) перемешивает, шифрует каждую карту ключом из блокнота (отдельный ключ на каждую карту).
4. Первый расшифровывает ключом из п.1 и шифрует каждую карту ключом из блокнота (отдельный ключ на каждую карту).Карты замусорены, перемешаны и зашифрованы индивидуальными ключами.
Требуется расшифровать первую карту полученного мусора. Какие конкретно ключи для должен предоставить каждый из участников?
Идентификаторы не шифруются? А зачем тогда вообще тасовать?
Вот этот мусор - идентификатор сорок три, а у нас есть мошенник, который знает, какой карте соответствует и этот идентификатор и все остальные.
...
Рейтинг: 0 / 0
Криптографический покер
    #39584796
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. SidorovТребуется расшифровать первую карту полученного мусора. Какие конкретно ключи для должен предоставить каждый из участников?
Для расшифровки игрок запускает карту по кругу, где каждый расшифровывает своим ключом для конкретного ID. Последним расшифровывает сам игрок и узнает что это за карта.

Basil A. SidorovИдентификаторы не шифруются? А зачем тогда вообще тасовать?
ID это номер ключа которым расшифровывать карту.
Тасовать чтобы карты не шли по порядку.

Basil A. SidorovВот этот мусор - идентификатор сорок три, а у нас есть мошенник, который знает, какой карте соответствует и этот идентификатор и все остальные.
Если у нас один мошенник, то никто не знает какая карта под каким ID. Но если их двое (первый и второй игроки) то они будут знать, т.е. не поможет мой алгоритм.

PS Надо обдумать вариант alekcvp 21108634 с добавлением мусора, у него ID шифруется.
...
Рейтинг: 0 / 0
Криптографический покер
    #39584803
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T1. Первый игрок перемешивает, добавляет в каждую карту мусор и шифрует своим ключом (один на все карты).
2. Второй игрок перемешивает, проставляет ID и шифрует каждую карту ключом из блокнота (отдельный ключ на каждую карту).
3. Третий (и последующие) перемешивает, шифрует каждую карту ключом из блокнота (отдельный ключ на каждую карту).
4. Первый расшифровывает ключом из п.1 и шифрует каждую карту ключом из блокнота (отдельный ключ на каждую карту).

а как можно расшифровать после операций 2-3? назначение нового ID каждым игроком позволяет делать запрос ключа, не раскрывая информацию для других участников, это хорошо
...
Рейтинг: 0 / 0
Криптографический покер
    #39584806
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TДля расшифровки игрок запускает карту по кругу, где каждый расшифровывает своим ключом для конкретного ID. Последним расшифровывает сам игрок и узнает что это за карта.

Может таблица ссылок:

A_ID[B_ID[C_ID...]]] ?
...
Рейтинг: 0 / 0
Криптографический покер
    #39584810
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttDima T1. Первый игрок перемешивает, добавляет в каждую карту мусор и шифрует своим ключом (один на все карты).
2. Второй игрок перемешивает, проставляет ID и шифрует каждую карту ключом из блокнота (отдельный ключ на каждую карту).
3. Третий (и последующие) перемешивает, шифрует каждую карту ключом из блокнота (отдельный ключ на каждую карту).
4. Первый расшифровывает ключом из п.1 и шифрует каждую карту ключом из блокнота (отдельный ключ на каждую карту).

а как можно расшифровать после операций 2-3? назначение нового ID каждым игроком позволяет делать запрос ключа, не раскрывая информацию для других участников, это хорошо
ID проставляет только 2-й, остальные используют то что он проставил. Но есть проблема: если первый и второй в сговоре, то они будут знать под каким ID какая карта.
...
Рейтинг: 0 / 0
Криптографический покер
    #39584813
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttDima TДля расшифровки игрок запускает карту по кругу, где каждый расшифровывает своим ключом для конкретного ID. Последним расшифровывает сам игрок и узнает что это за карта.

Может таблица ссылок:

A_ID[B_ID[C_ID...]]] ?
Можно, только что это меняет? Допустим A знает соответствие своего ID каждой карте, его ID не шифрован. Проблема не решилась.
...
Рейтинг: 0 / 0
Криптографический покер
    #39584820
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне с XOR идея показалась интересной.

1. Каждый участник на раунд придумывает себе XOR ключ. Одна штука.
2. Сервер тасует колоду и показывает её всем участникам.
3. Карты "раздаются" участникам по очереди сверху.
4. Чтобы "открыть" карту участник:
4.1 применяет одноразовый временный XOR
4.2. отправляет по кругу чтобы каждый из участников применил свой постоянный XOR
4.3. к полученному результату опять применяет одноразовый временный XOR
4.4. применяет свой постоянный XOR, и получает правильный номинал карты

Чтобы это работало, надо:

- применение XOR ключа меняет номинал карты
- применив XOR ко всем картам, поменяеются все номиналы карты, но при этом они останутся индивидуальными

Что думаете?
...
Рейтинг: 0 / 0
Криптографический покер
    #39584824
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть казино, шулеры и игрок. Казино в сговоре с шулерами.
Требуется разработать покер, позволяющий сохранить игроку тайну своих карт.
Схема возможна, если оставить за казино только публикацию ходов и раздачу зашифрованных карт участникам.

Каждый участник умеет создавать последовательности уникальных (псевдо)случайных чисел. В духе плагиаторов назовём их гаммами.
Гаммы участников формируются парами. Одна последовательность используется для шифрования (гамма ключей), другая - для идентификации ключей (гамма индексов).
Разрядность элементов гаммы кратна разрядности (симметричного) алгоритма шифрования.

Казино создаёт колоду в виде (одиночной) гаммы и публикует её.
Первый участник тасует колоду, шифрует каждую карту индивидуальным ключом, добавляет индексы и передаёт раздачу следующему.
Следующий участник тасует раздачу, шифрует её элементы, добавляет свои индексы и далее по кругу.

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

Казино получает от последнего участника растасованную колоду и сдаёт по две карты каждому участнику.
Каждый из участников, в обратном порядке, начинает запрашивать ключи шифрования, отправляя индексы владельцу ключей. После первой расшифровки вскрывается очередной слой с очередными индексами и процедура повторяется.
Казино, точно так же, вскрывает карты для стола.

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

Процедуры подписания ходов и сдач, а так же процедура (послеигрового) аудита - не рассматриваются.
...
Рейтинг: 0 / 0
25 сообщений из 156, страница 5 из 7
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Криптографический покер
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]