Защищают ли фильтры Блума от постоянного подслушивания?

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

Предположим, что злоумышленник может отслеживать множество спецификаций фильтра Блума, отправляемых клиентом SPV своим одноранговым узлам. Сможет ли он в конечном итоге устранить все ложные срабатывания, выполнив сопоставление подмножеств для всех транзакций, соответствующих фильтрам?

В качестве примера пусть набор всех транзакций представляет собой целые числа от 1 до 100, и предположим, что клиент заинтересован в транзакциях 4, 8 и 15. При первом подключении к сети он передает соответствие фильтра Блума ( 1, 4, 7, 8, 15, 27, 44, 73); во второй раз его фильтр соответствует (3, 4, 6, 8, 15, 27, 66). Злоумышленник сразу сможет сузить количество возможных транзакций до (4, 8, 15, 27); после еще нескольких вызовов он находил правильный ответ.

Я неправильно понимаю, как работают фильтры Блума (например, ложные срабатывания не меняются между соединениями), или это теоретическая или даже практическая проблема?

Ответы (2)

Да, вы неправильно понимаете, как работают фильтры ванильного/канонического цветения. Для стандартного определения ложные срабатывания не меняются между подключениями — набор, возвращаемый по второму запросу, если он отличается, будет надмножеством первого набора.

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


Тем не менее, существуют методы создания структур, подобных фильтрам Блума, которые являются более надежными/имеют более сильные характеристики безопасности. Я не верю, что какие-либо из них применялись к реализации биткойнов.

Биткойн-спецификация фильтров Блума, по-видимому, содержит случайный ввод в хеш-функции (ntweak) — это также не влияет на ложные срабатывания?
@lxgr быстро просматривая код, мне кажется, что значение ntweak предназначено для того, чтобы помочь лучше распределить использование хеш-функций и, в конечном итоге, уменьшить количество ложных срабатываний, которые вы получаете (еще больше снижая значение безопасности, которое фильтр Блума может предоставить, но повысить его эффективность в качестве кеша) - вы правы, реализация неканоническая в том смысле, что она может возвращать случайные ложные срабатывания при последовательных вызовах.