Рейтинг:0

Использование хэша данных в качестве доказательства целостности и предотвращения коллизий

флаг us

Вместо того, чтобы хранить пользовательские данные при взаимодействии с приложением, я сохраняю SHA3-256 данных.Это связано с тем, что хранение данных в этой конкретной среде очень ограничено.

Данные могут быть несколькими переменными, например, a, b и c, но вместо того, чтобы сохранять их по отдельности, я сохраняю хэш конкатенации: SHA3(a,b,c).

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

Данные общедоступны, поэтому известны всем. Вопрос, который у меня есть, заключается в том, есть ли проблема безопасности из-за хеширования конкатенации переменных (облегчает ли это пользователям поиск коллизии). Есть ли разница, если вместо этого я хеширую каждую переменную, а затем хеширую конкатенацию хэшей?

Чтобы уточнить вышеизложенное, причина, по которой я думаю, что это может облегчить пользователям поиск коллизий, заключается в том, что a, b и c имеют разные типы и имеют минимальные и максимальные значения; например, если c может принимать только значения от 10 до 1000, пользователи могут просто попробовать все возможные значения C, чтобы без особых усилий проверить наличие удачного столкновения. Это разумное беспокойство?

Обратите внимание, что не важно, кто отправляет данные, просто данные восхождения точно такие же, как и ранее.

SEJPM avatar
флаг us
Классическая атака на это представляет a как один нулевой байт и b как два нулевых байта, а затем меняет местами ассоциацию этих частей данных. Это приведет к идентичным хэшам для случая конкатенации, но другим для случая индивидуального предварительного хеширования.
Jaime avatar
флаг us
Спасибо за комментарий. параметры являются типами с предопределенной длиной, например, "a" может быть 32 байта, "b" 64 байта и "c" 128 байтов. В этом случае атака неприменима, верно? В общем, если длина переменной фиксирована, скажем, до 32 байт, описанная вами атака не может быть выполнена правильно?
SEJPM avatar
флаг us
Да, если вы можете _гарантировать_, что длина по крайней мере всех входных данных, кроме одного, всегда будет фиксированной, тогда вы обычно получаете полные свойства безопасности конструкций типа целостности.
Рейтинг:1
флаг in

Пока надежно сохраненный хеш превышает каноническое представление данных (т. е. переменные и их кодировка не могут перекрываться), тогда хранение хэша является безопасным. Это было бы похоже на безопасность подписи над данными, но они больше. Одна вещь, в которой я хотел бы убедиться, это то, что вы сохраняете хэш с помощью транзакции; в противном случае пользователь может прерваться, и вы не запишете ничего или только часть хэша.

Если вы хотите еще больше усложнить атаку или хотите использовать меньше места для хранения, вы можете вместо этого рассмотреть возможность хранения хэша с ключом, для SHA-3 это будет KMAC. В этом случае вы могли бы, например.используйте 128 битов вывода вместо всех 256 бит, сохраняя при этом 128-битную безопасность, но с тем недостатком, что если вы утечете ключ, то коллизии на выходе оставят вам только 64-битную безопасность.

Рейтинг:0
флаг de

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

Ваша установка определенно не защищена от повторных атак. Вы должны следовать некоторым методам рандомизации или соли

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

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