Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Поиск совпадений и дедупликация в потоке / Леонид Юрьев (Positive Technologies)

623 views

Published on

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

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

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

Published in: Engineering
  • Login to see the comments

  • Be the first to like this

Поиск совпадений и дедупликация в потоке / Леонид Юрьев (Positive Technologies)

  1. 1. Сегментация и Поиск совпадений в бинарном потоке Леонид Юрьев Positive Technologies
  2. 2. О чем этот доклад? 1 000 000 000 файлов Выявление совпадающих фрагментов В потоке, без произвольного доступа Проблема сегментации бинарного потока данных Идея решения Метод конструирования резака
  3. 3. Что считать совпадением? Что и как сравнивать… Размер и полезность:  2 бита, 3 байта, 10 раз по 4  42 подряд, 1 Килобайт Устойчивость к искажениям:  Обратный порядок, Инверсия  Разбавить «пробелами»… Оперируем байтами Равенство двух подстрок Видеть 42 и больше*
  4. 4. Где возникает такая задача? 1. Дедупликация 2. Предотвращение утечек 3. Обнаружение утечек
  5. 5. Ликбез-0: Работа с дайджестами блоков 1. Нарезаем на блоки 2. Считаем хэш-функцию (SHA1, MD5…) 3. Оперируем дайджестами (4…32 байта) Полное равенство или хэш-коллизия Видим поблочно Точность  размер блоков
  6. 6. Ликбез-1: Блоками равного размера 1. Подряд на равные блоки 2. Последний дополняется или отбрасывается 3. Границы кратны размеру Хорошо для backup При вставке или удалении «хвост отваливается»
  7. 7. Ликбез-2: Шинглирование слов  Черепица съешь ещё этих мягких французских булок, да выпей чаю съешь ещё этих мягких ещё этих мягких французских этих мягких французских булок мягких французских булок, да выпей французских булок, да выпей чаю 1. 2. 3. 4. 5.  9459da43  7237602b  56aef20f  01a31914  74890a17
  8. 8. Ликбез-3: Шинглирование слов 1. По границам слов 2. Несколько слов в блоке 3. Блоки с наложением Хорошо для текстов Нужны границы слов
  9. 9. Задача и штатные решения Набор образцов  Много, Большие  Конфиденциальны Обнаруживать фрагменты  В других файлах  В потоке Данные произвольны Только дайджесты  Сжатие объёма  Конфиденциальность Штатные варианты  Фиксированными блоками  Шинглирование слов – не подходят…
  10. 10. Что делать нам? Сложности  Хвост не должен отваливаться  Нет структуры и слов Идея  Смотрим – как на утку сквозь прицел  Стреляем – когда ходит и крякает, как утка 1. Скользящее окно 2. Оценочная функция 3. Отмечаем границы Про вероятность  Схема детерминирована  Но данные произвольны
  11. 11. На простом примере 1. Скользящее окно в 10 байт 2. Считаем MD5 3. Обозначаем границу, когда дайджест кратен 42 1. В среднем каждая 42 позиция будет границей 2. Границы зависят только от содержимого окна и синхронизируются 3. Замечаем совпадения длиной «Окно + Блок»
  12. 12. Что тут плохо? Длина блоков  Отрицательное биноминальное распределение  𝑃 𝑛 = 𝑝 ∙ 1 − 𝑝 𝑛 Хочется  Другое распределение  Учитывать эвристики 1 20 40 60 80 100 𝑷 𝟏 = 𝟏 𝟒𝟐 𝑷 𝟏𝟎𝟎 = 𝟏 𝟒𝟐 𝟒𝟏 𝟒𝟐 𝟗𝟗 𝑷 𝒏 𝒏
  13. 13. Ключи к решению 1. Комбинировать несколько функций 2. Со снижением вероятности «плохих случаев» 3. Без внутреннего состояния, строго от содержимого скользящего окна 4. Мелкие блоки тоже нужны
  14. 14. Суть решения 1. Вложенное скользящее окно 2. Упорядоченный набор оценивающих функций 3. Просматриваем вперед до первой «утки» 𝐹1 = 𝐹2 = 𝐹 𝐾 = +1 +2 … +N-1+3+0 
  15. 15. Свойства 1. Зависимость границ только от данных 2. Любые подходящие функции 3. Для худшего случая 𝑃 𝑤𝑜𝑟𝑠𝑡 = ς𝑖=1 𝐾 (1 − 𝑃𝑖) 𝑁 𝐹1 = 𝐹2 = 𝐹 𝑲 = +1 +2 … +N-1+3+0 
  16. 16. + Распределение размеров блоков 1. Дойдём до nой позиции внутри строки 2. Если все предыдущие строки пустые 3. Сумма по всем функциям для позиции 𝑃 𝑛 = σ𝑖=1 𝐾 𝑃𝑖(1 − 𝑃𝑖) 𝑛 × ς 𝑗=1 𝑖−1 (1 − 𝑃𝑗) 𝑁 , при заданных 𝑵 и 𝑷 𝟏 … 𝑷 𝑲 𝐹1 = 𝐹2 = 𝐹 𝑲 = P1 P2 +1 +2 … +N-1+3+0 3 1 2 PK ?
  17. 17. Пример распределения 𝑃 𝑛 = ෍ 𝑖=1 𝐾 𝑃𝑖(1 − 𝑃𝑖) 𝑛× ෑ 𝑗=1 𝑖−1 (1 − 𝑃𝑗) 𝑁 𝑷 𝟏 ≈ 𝑷 𝟒𝟐 ≈ 𝟏 𝟒𝟐 𝑷 𝟏𝟎𝟎 ≈ 𝟎 1 42 100 𝟏 𝟒𝟐 𝐹1 = 𝐹2 = 𝐹 𝑲 = P1 P2 +1 +2 … +N-1+3+0 PK ? 𝑷 𝒏 𝒏
  18. 18. Возможности 1. Шинглировать мелкие блоки 2. Эвристики и разные типы блоков 3. Разные размеры вложенных окон
  19. 19. Точность и Достоверность Достоверность  Вероятность коллизии  Ширина дайджестов Точность  Размер окна + размер блока 𝒏  Плотность вероятности 𝑷(𝒏) Баланс детализации  Мера влияния 𝑷 𝒏 ∙ 𝒏  Максимизация для желаемого 𝒏 1 20 42 60 80 100 𝑷 𝒏 ∙ 𝒏 𝒏 0 = lim 𝑛→∞ 𝑃 𝑛 ∙ 𝑛 𝑁 = න 𝑛=1 𝑁 𝑃 𝑛 ∙ 𝑛 42
  20. 20. Связь с размером Индекса Точнее или Достовернее – больше Индекс Размер Индекса – предел по Колмогорову для результатов Меньше Индекс – больше пропусков, меньше достоверность Ошибка от внутренней Меры Жордана – функция от сжатия
  21. 21. В чем новизна? Аналогов (пока) не найдено:  Патенты  Научные работы и алгоритмы  Давайте искать вместе Принципиальные отличия: 1. Нарезка бинарного потока, а не поиск подстрок 2. «Колмогоровское шинглирование» 3. Гибкость
  22. 22. Спасибо! Леонид Юрьев Positive Technologies SecurityLab.ru www.ptsecurity.ru Вопросы ?

×