Вы любите информационную безопасность? Я - нет. Это нужно думать, что окружающие тебя люди не просто глупые, но ещё и злые. Но есть вещи, которые я люблю. Например -
Magic: The Gathering. Представьте, есть как минимум два игрока играющие в игру на манер MtG через
джаббер. То есть условно говоря пишут в чат о том какие карты они показывают и что они с ними делают. Нужно понять какими ещё данными им надо обмениваться чтобы гарантировать что игроки говорят правду о наличие той или иной карты в месте невидимом для оппонентов (то есть не меняют по необходимости их значение или последовательность), а с другой стороны исключить возможность узнать оппонентам хоть что-то о картах рассказывающего, включая их тождественность между собой. После игры вскрыть оставшиеся карты нельзя.
Наивное решение: хэшируем id каждой карты с большой случайной солью и каждый ход отдаём эти хэши оппонентам. Перемешивание осуществляется на стороне оппонентов. Карта показывается вместе с её солью и каждый оппонент может убедиться в том что она там лежала всегда. Если игрок хочет изменить карту в стопке, ему нужно чтобы id + соль новой карты совпадали с анонсированными, что весьма не просто даже с учётом того, что соль может варьироваться. Всё здорово.
Очевидные недостатки такого подхода:
1) При попытке добавить карту в режиме «я показываю карту и убираю её в стопку с анонимными картами» в стопку добавляется новый уникальный хэш, который явным образом указывает на новую карту (и на её положение в стопке).
2) Континум карт велик, но конечен. Если соль будет не очень большой то вполне возможен брутфорс хэшей со стороны оппонентов. Хотя бы с целью узнать о наличие в стопке одной - двух карт по которым, зная игрока, можно судить об игре которую он будит строить.
3) Если соль будет слишком велика, то не исключено, что уже игрок, имея больший диапазон безнаказанно изменяемых значений, сможет проще выискивать коллизии в хэш функции.
Если последние два вопроса сводятся к выбору хорошей хэш-функции, то первый - большая алгоритмическая дырка.