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

More Related Content

Viewers also liked

Системный администратор Vkontakte. Как? / Антон Кирюшкин (Vkontakte)
Системный администратор Vkontakte. Как? / Антон Кирюшкин (Vkontakte)Системный администратор Vkontakte. Как? / Антон Кирюшкин (Vkontakte)
Системный администратор Vkontakte. Как? / Антон Кирюшкин (Vkontakte)Ontico
 
Современные архитектуры диалоговых систем / Анатолий Востряков (Segmento)
Современные архитектуры диалоговых систем / Анатолий Востряков (Segmento)Современные архитектуры диалоговых систем / Анатолий Востряков (Segmento)
Современные архитектуры диалоговых систем / Анатолий Востряков (Segmento)Ontico
 
Как HeadHunter удалось безопасно нарушить RFC 793 (TCP) и обойти сетевые лову...
Как HeadHunter удалось безопасно нарушить RFC 793 (TCP) и обойти сетевые лову...Как HeadHunter удалось безопасно нарушить RFC 793 (TCP) и обойти сетевые лову...
Как HeadHunter удалось безопасно нарушить RFC 793 (TCP) и обойти сетевые лову...Ontico
 
Сети передачи данных в Интернете вещей / Олег Артамонов (Unwired Devices LLC)
Сети передачи данных в Интернете вещей / Олег Артамонов (Unwired Devices LLC)Сети передачи данных в Интернете вещей / Олег Артамонов (Unwired Devices LLC)
Сети передачи данных в Интернете вещей / Олег Артамонов (Unwired Devices LLC)Ontico
 
Отрисовать за 16 мс / Глеб Михеев (Beta Digital Production)
Отрисовать за 16 мс / Глеб Михеев (Beta Digital Production)Отрисовать за 16 мс / Глеб Михеев (Beta Digital Production)
Отрисовать за 16 мс / Глеб Михеев (Beta Digital Production)Ontico
 
События, шины и интеграция данных в непростом мире микросервисов / Валентин Г...
События, шины и интеграция данных в непростом мире микросервисов / Валентин Г...События, шины и интеграция данных в непростом мире микросервисов / Валентин Г...
События, шины и интеграция данных в непростом мире микросервисов / Валентин Г...Ontico
 
5 способов деплоя PHP-кода в условиях хайлоада / Юрий Насретдинов (Badoo)
5 способов деплоя PHP-кода в условиях хайлоада / Юрий Насретдинов (Badoo)5 способов деплоя PHP-кода в условиях хайлоада / Юрий Насретдинов (Badoo)
5 способов деплоя PHP-кода в условиях хайлоада / Юрий Насретдинов (Badoo)Ontico
 
Aviasales: миграция поискового движка в docker / Дмитрий Кузьменков (Aviasales)
Aviasales: миграция поискового движка в docker / Дмитрий Кузьменков (Aviasales)Aviasales: миграция поискового движка в docker / Дмитрий Кузьменков (Aviasales)
Aviasales: миграция поискового движка в docker / Дмитрий Кузьменков (Aviasales)Ontico
 
NVMf: 5 млн IOPS по сети своими руками / Андрей Николаенко (IBS)
NVMf: 5 млн IOPS по сети своими руками / Андрей Николаенко (IBS)NVMf: 5 млн IOPS по сети своими руками / Андрей Николаенко (IBS)
NVMf: 5 млн IOPS по сети своими руками / Андрей Николаенко (IBS)Ontico
 
Python & Web: От простого к сложному
Python & Web: От простого к сложномуPython & Web: От простого к сложному
Python & Web: От простого к сложномуIlya Bolkhovsky
 
django-and-postgresql
django-and-postgresqldjango-and-postgresql
django-and-postgresqlOleg Churkin
 
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6Nikolay Samokhvalov
 
PG Day'14 Russia, PostgreSQL в avito.ru, Михаил Тюрин
PG Day'14 Russia, PostgreSQL в avito.ru, Михаил ТюринPG Day'14 Russia, PostgreSQL в avito.ru, Михаил Тюрин
PG Day'14 Russia, PostgreSQL в avito.ru, Михаил Тюринpgdayrussia
 
Производительность Unity3D: подводные камни / Алексей Чубарь (BIT.GAMES)
Производительность Unity3D: подводные камни / Алексей Чубарь (BIT.GAMES)Производительность Unity3D: подводные камни / Алексей Чубарь (BIT.GAMES)
Производительность Unity3D: подводные камни / Алексей Чубарь (BIT.GAMES)Ontico
 
Владимир Бородин - PostgreSQL
Владимир Бородин - PostgreSQLВладимир Бородин - PostgreSQL
Владимир Бородин - PostgreSQLYandex
 
Remote Highload / Андрей Смирнов (Virtustream)
Remote Highload / Андрей Смирнов (Virtustream)Remote Highload / Андрей Смирнов (Virtustream)
Remote Highload / Андрей Смирнов (Virtustream)Ontico
 
HHVM: Efficient and Scalable PHP/Hack Execution / Guilherme Ottoni (Facebook)
HHVM: Efficient and Scalable PHP/Hack Execution / Guilherme Ottoni (Facebook)HHVM: Efficient and Scalable PHP/Hack Execution / Guilherme Ottoni (Facebook)
HHVM: Efficient and Scalable PHP/Hack Execution / Guilherme Ottoni (Facebook)Ontico
 
Красиво и не тормозит! Анимация без ущерба для производительности приложений ...
Красиво и не тормозит! Анимация без ущерба для производительности приложений ...Красиво и не тормозит! Анимация без ущерба для производительности приложений ...
Красиво и не тормозит! Анимация без ущерба для производительности приложений ...Ontico
 
Быстрое прототипирование бэкенда игры с геолокацией на OpenResty, Redis и Doc...
Быстрое прототипирование бэкенда игры с геолокацией на OpenResty, Redis и Doc...Быстрое прототипирование бэкенда игры с геолокацией на OpenResty, Redis и Doc...
Быстрое прототипирование бэкенда игры с геолокацией на OpenResty, Redis и Doc...Ontico
 

Viewers also liked (20)

Системный администратор Vkontakte. Как? / Антон Кирюшкин (Vkontakte)
Системный администратор Vkontakte. Как? / Антон Кирюшкин (Vkontakte)Системный администратор Vkontakte. Как? / Антон Кирюшкин (Vkontakte)
Системный администратор Vkontakte. Как? / Антон Кирюшкин (Vkontakte)
 
Современные архитектуры диалоговых систем / Анатолий Востряков (Segmento)
Современные архитектуры диалоговых систем / Анатолий Востряков (Segmento)Современные архитектуры диалоговых систем / Анатолий Востряков (Segmento)
Современные архитектуры диалоговых систем / Анатолий Востряков (Segmento)
 
Как HeadHunter удалось безопасно нарушить RFC 793 (TCP) и обойти сетевые лову...
Как HeadHunter удалось безопасно нарушить RFC 793 (TCP) и обойти сетевые лову...Как HeadHunter удалось безопасно нарушить RFC 793 (TCP) и обойти сетевые лову...
Как HeadHunter удалось безопасно нарушить RFC 793 (TCP) и обойти сетевые лову...
 
Сети передачи данных в Интернете вещей / Олег Артамонов (Unwired Devices LLC)
Сети передачи данных в Интернете вещей / Олег Артамонов (Unwired Devices LLC)Сети передачи данных в Интернете вещей / Олег Артамонов (Unwired Devices LLC)
Сети передачи данных в Интернете вещей / Олег Артамонов (Unwired Devices LLC)
 
Отрисовать за 16 мс / Глеб Михеев (Beta Digital Production)
Отрисовать за 16 мс / Глеб Михеев (Beta Digital Production)Отрисовать за 16 мс / Глеб Михеев (Beta Digital Production)
Отрисовать за 16 мс / Глеб Михеев (Beta Digital Production)
 
События, шины и интеграция данных в непростом мире микросервисов / Валентин Г...
События, шины и интеграция данных в непростом мире микросервисов / Валентин Г...События, шины и интеграция данных в непростом мире микросервисов / Валентин Г...
События, шины и интеграция данных в непростом мире микросервисов / Валентин Г...
 
5 способов деплоя PHP-кода в условиях хайлоада / Юрий Насретдинов (Badoo)
5 способов деплоя PHP-кода в условиях хайлоада / Юрий Насретдинов (Badoo)5 способов деплоя PHP-кода в условиях хайлоада / Юрий Насретдинов (Badoo)
5 способов деплоя PHP-кода в условиях хайлоада / Юрий Насретдинов (Badoo)
 
Aviasales: миграция поискового движка в docker / Дмитрий Кузьменков (Aviasales)
Aviasales: миграция поискового движка в docker / Дмитрий Кузьменков (Aviasales)Aviasales: миграция поискового движка в docker / Дмитрий Кузьменков (Aviasales)
Aviasales: миграция поискового движка в docker / Дмитрий Кузьменков (Aviasales)
 
NVMf: 5 млн IOPS по сети своими руками / Андрей Николаенко (IBS)
NVMf: 5 млн IOPS по сети своими руками / Андрей Николаенко (IBS)NVMf: 5 млн IOPS по сети своими руками / Андрей Николаенко (IBS)
NVMf: 5 млн IOPS по сети своими руками / Андрей Николаенко (IBS)
 
20070329 Phpconf2007 Training
20070329 Phpconf2007 Training20070329 Phpconf2007 Training
20070329 Phpconf2007 Training
 
Python & Web: От простого к сложному
Python & Web: От простого к сложномуPython & Web: От простого к сложному
Python & Web: От простого к сложному
 
django-and-postgresql
django-and-postgresqldjango-and-postgresql
django-and-postgresql
 
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6
 
PG Day'14 Russia, PostgreSQL в avito.ru, Михаил Тюрин
PG Day'14 Russia, PostgreSQL в avito.ru, Михаил ТюринPG Day'14 Russia, PostgreSQL в avito.ru, Михаил Тюрин
PG Day'14 Russia, PostgreSQL в avito.ru, Михаил Тюрин
 
Производительность Unity3D: подводные камни / Алексей Чубарь (BIT.GAMES)
Производительность Unity3D: подводные камни / Алексей Чубарь (BIT.GAMES)Производительность Unity3D: подводные камни / Алексей Чубарь (BIT.GAMES)
Производительность Unity3D: подводные камни / Алексей Чубарь (BIT.GAMES)
 
Владимир Бородин - PostgreSQL
Владимир Бородин - PostgreSQLВладимир Бородин - PostgreSQL
Владимир Бородин - PostgreSQL
 
Remote Highload / Андрей Смирнов (Virtustream)
Remote Highload / Андрей Смирнов (Virtustream)Remote Highload / Андрей Смирнов (Virtustream)
Remote Highload / Андрей Смирнов (Virtustream)
 
HHVM: Efficient and Scalable PHP/Hack Execution / Guilherme Ottoni (Facebook)
HHVM: Efficient and Scalable PHP/Hack Execution / Guilherme Ottoni (Facebook)HHVM: Efficient and Scalable PHP/Hack Execution / Guilherme Ottoni (Facebook)
HHVM: Efficient and Scalable PHP/Hack Execution / Guilherme Ottoni (Facebook)
 
Красиво и не тормозит! Анимация без ущерба для производительности приложений ...
Красиво и не тормозит! Анимация без ущерба для производительности приложений ...Красиво и не тормозит! Анимация без ущерба для производительности приложений ...
Красиво и не тормозит! Анимация без ущерба для производительности приложений ...
 
Быстрое прототипирование бэкенда игры с геолокацией на OpenResty, Redis и Doc...
Быстрое прототипирование бэкенда игры с геолокацией на OpenResty, Redis и Doc...Быстрое прототипирование бэкенда игры с геолокацией на OpenResty, Redis и Doc...
Быстрое прототипирование бэкенда игры с геолокацией на OpenResty, Redis и Doc...
 

More from Ontico

One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...Ontico
 
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)Ontico
 
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)Ontico
 
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Ontico
 
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...Ontico
 
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)Ontico
 
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...Ontico
 
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...Ontico
 
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)Ontico
 
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)Ontico
 
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...Ontico
 
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...Ontico
 
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...Ontico
 
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)Ontico
 
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)Ontico
 
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)Ontico
 
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Ontico
 
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...Ontico
 
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...Ontico
 
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...Ontico
 

More from Ontico (20)

One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
 
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
 
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
 
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
 
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
 
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
 
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
 
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
 
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
 
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
 
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
 
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
 
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
 
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
 
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
 
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
 
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
 
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
 
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
 
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
 

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

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