Хеш-стеганография в dataset-ах. На этот раз быстрая

Всех с пятницей! В своём прошлом посте про хеш-стеганографию я предложил иной подход в стеганографии — не вкраплять никакой информации в контейнер, а просто упорядочивать контейнеры в нужном порядке и тем самым передавать скрытую информацию. Два дня назад romabibi опубликовал proof of consept для хеш-стеганографии в соц.сети вКонтакте.

Однако в использовании картинок как контейнеров есть важный изьян. Цитирую коммент alekseev_ap:

Всё это очень интересно, но КПД такой системы чрезвычайно низкий. Сколько надо отправить десятков (а то и сотен) килобайт чтобы передать строку из нескольких слов?!

Действительно, если изображение весит условно 0.5 — 2 Мбайт, а на каждое изображение мы передаем от 1 до 3 нибллов, то получаемая скорость очень мала: от 0.5 до 6 B/MB

Поэтому для практического применения нужно найти такой контейнер, который обладал бы следующими свойствами:

  1. был бы очень мал;
  2. при большом количестве контейнеров, стоящие друг за другом; не вызывал бы «подозрений»;
  3. при смене порядка контейнеров, они бы не вызывали «подозрение».

Итак, капитан-очевидность решение: необходимо осуществлять хеш-стеганографию в больших датасетах. Одна строка — один ниббл (полубайт).

Идея

Идея проста и очевидна:

  1. Берём очень большой датасет с данными.
  2. Хешируем каждую строку, берем первые n бит данных — это набор контейнеров для хеш-стеганографии
  3. Сообщение сжимаем, шифруем, разбиваем на блоки по n бит
  4. Упорядочиваем в соотвествии с передаваемым сообщением.

Пример csv-донора

В качестве примера возьмём CSV с координатами городов world-cities.csv.

Каждая строка содержит:

  • название города
  • страну
  • регион (штат, область и т.д.)

В среднем одна запись имеет длину в 33 байта.
Это в моём датасете. Вы можете в качестве «донора» взять другой. Однако порядок цифр будет тем же.
Если мы передаем по одному нибблу (4 бита), то итоговая стеганографическая скорость будет аж ~16000 B/MB, что на три порядка (sic!) больше, чем в хеш-стеганографии с картинками!!!

CHS

Пример называется CHS (Csv Hash Steganography).

Сгенерировать CSV файл с сообщением:

$ python3 chs.py -m "Хабр, привет!" -i data/world-cities.csv -o stego.csv

Извлечь сообщение:

$ python3 chs.py -i stego.csv

При генерировании и извлечении следует указать один и тот же пароль, естественно.

Пример

Генерирование

~$ python3 chs.py -m "Хабр, привет!" -i data/world-cities.csv -o stego.csv Run chs 2018-03-23 09:33:03.242100 Введите пароль: 12345 header:: 'name,country,subcountry,geonameid' 65 --> 'Soignies,Belgium,Wallonia,2786420' 129 --> 'Lagoa do Itaenga,Brazil,Pernambuco,3396769' 196 --> 'Dubai,United Arab Emirates,Dubai,292223' 138 --> 'Qarqīn,Afghanistan,Jowzjān,1129516' 94 --> 'Arroyo Seco,Argentina,Santa Fe,3865385' 44 --> 'Shahrak,Afghanistan,Ghowr,1125896' 48 --> 'Palpalá,Argentina,Jujuy,3842190' 235 --> 'Lashkar Gāh,Afghanistan,Helmand,1134720' 39 --> 'Karukh,Afghanistan,Herat,1137807'пишите 23 --> 'Uíge,Angola,Uíge,2236568' 166 --> 'La Paz,Argentina,Entre Rios,3432079' 240 --> 'Monte Caseros,Argentina,Corrientes,3430598' 121 --> 'Berat,Albania,Berat,3186084' 48 --> 'Amstetten,Austria,Lower Austria,2782555' 206 --> 'Ansfelden,Austria,Salzburg,3323063' 101 --> 'Kuçovë,Albania,Berat,3185060' 43 --> 'Morayfield,Australia,Queensland,2156934' 198 --> 'Río Ceballos,Argentina,Cordoba,3838902' 9 --> 'Esperanza,Argentina,Santa Fe,3856022' 168 --> 'Goris,Armenia,Syunik Province,174895' 119 --> 'Posadas,Argentina,Misiones,3429886' 187 --> 'San Miguel de Tucumán,Argentina,Tucumán,3836873' 89 --> 'San Pedro,Argentina,Jujuy,3836772' 61 --> 'Mādārīpur,Bangladesh,Dhaka,1337245' 1 --> 'Caxito,Angola,Bengo,2242001' 13 --> 'Tres Isletas,Argentina,Chaco,3833794' 192 --> 'Nivelles,Belgium,Wallonia,2790101' 25 --> 'Fier,Albania,Fier,3185672' 5 --> 'Botevgrad,Bulgaria,Sofiya,733014' 239 --> 'Ārt Khwājah,Afghanistan,Takhār,1148106' 41 --> 'Masis,Armenia,Ararat Province,616435' 178 --> 'Schwechat,Austria,Lower Austria,2765388' 

Извлечение

~$ python3 chs.py -i stego.csv Run chs 2018-03-23 11:34:12.443084 Введите пароль: 12345 Извлечённое сообщение:'Хабр, привет!'

Нюансы

Можно ли обнаружить стеганографию? Самый тонкий момент — это «донорский csv». В идеальном случае сгенерировать его самому и после каждого использования — уничтожать. Таким образом если для каждой передачи данных мы будем использовать уникальный и перед стеганографией использовать надёжные криптосистемы, то систему хеш-стеганографии можно считать надёжной.

Так же искомый CSV, желательно не должен подразумевать никакую «упорядоченность». Например данные с треком мыши разумно упорядочить по времени. Что касается файла world-cities.csv, то возможно было бы логично упорядочить либо по странам либо по городам в алфавитном порядке. (Кстати, файл упорядочен по городам;) )

Исходники

Выложил на гитхабе: https://github.com/PavelMSTU/CHS

Это Proof-Of-Concept. Там нет защиты от дурака и очень красивой гуидины.
Спасибо за внимание.

Орфография не моя сильная сторона. Если увидите ошибку — не поленитесь и напишите в личку, пожалуйста.

FavoriteLoadingДобавить в избранное
Posted in Без рубрики

Добавить комментарий