New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Борьба с коллизиями хэша. #14
Comments
Оставлю здесь ключевые слова для поиска - "Разрешение коллизий", "Разрешение коллизий в хеш-функциях", "Разрешение коллизий в хеш-таблицах". |
В Ранее, я предложил использовать пару
, которая призвана была бы
она была бы |
Тут ещё вот что.
Это старая схема. Если клеить к replyTo, ещё и вторую часть sha256-хэша, а также md5-хэш, |
Судя по этой инфе: https://ru.wikipedia.org/wiki/Коллизия_хеш-функции#Разрешение_коллизий_в_хеш-таблицах
Было решено, что лучше бороться с коллизиями хэшей - исключением их. И действительно. Если новый нанопост, хэш которого вычислен, добавляется в базу, nanoboard/nanodb.exe-source/Captcha/Captcha.cs Lines 553 to 554 in c15199e
и здесь:
хэш поста считается без xmg-вложений (PNG или ZIP). C добавлением тега file, новые вложения не удаляются, их следовало бы удалить. Насчет коллизий файлов-аттачей. Идея черновая, надо имплементировать, разумеется. И на это надо очень, очень, очень, очень - много моих косарей. |
Результат применения хэш-функции от всех комбинаций данных, длины большей, нежели хэш - имеет как минимум одну коллизию (на практике - больше).
Хэш-функция, без коллизий - это утопия, иначе, она позволяла бы сжать данные, бо́льшие по длине, нежели значение хэша.
Если перефразировать всё это, другими словами, то,
пытаясь сжать (прохешировать),
все однобайтные комбинации в 4 бита,
получишь как минимум 2^4 коллизий,
описание которых займёт 4 бита.
Если указать 4-х битный хэш без номера коллизии,
то однозначно восстановить однобайтную инфу не получится - будет многозначность.
В сумме, хэш с номером коллизии - даст 1 байт данных, и данные не получится сжать.
Поэтому, однозначно идентифицировать посты по хэшу
(а в наноборде используется половина sha256 хэша) -
это недальновидно, по причине не исключенной возможности наличия коллизий.
Для решения этой проблемы,
предлагаю идентифицировать посты по паре значений: {Хэш, номер коллизии}.
Если коллизия не найдена, хэш однозначно идентифицирует нанопост (и/или файл-аттач).
Если найдена хотя-бы одна коллизия,
по хэшу возвращается два и более нанопоста (и/или файла-аттача), с номером коллизии.
Тогда, зная номер коллизии,
для однозначной идентификации нанопоста (и/или файла-аттача),
может использоваться пара: {Хэш, номер коллизии}
При этом, номер коллизии - может клеится к хэшу,
формируя единый идентификатор.
Вот, собственно и всё изменение фундаментальных принципов функционирования наноборды.
Я также думаю, что это можно сделать - обратно-совместимым, и опциональным,
если по умолчанию не использовать номер коллизии,
а использовать только тогда, когда хотя-бы одна коллизия была найдена среди нанопостов или файлов-аттачей.
The text was updated successfully, but these errors were encountered: