- PVSM.RU - https://www.pvsm.ru -

Хэш-стеганография с использованием vkapi

Привет. Некоторое время назад решил разобраться, что такое стеганография, в чем её смысл и какая она бывает. И спустя несколько ссылок наткнулся на интересную статью [1] про хэш-стеганографию. Возник вопрос — а почему бы не попробовать реализовать такой способ передачи на практике? Для начала — в виде proof of concept.
image

Хэш-стеганография?

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

Тут на помощь приходит хэш-стеганография. Смысл прост — мы берем контейнер (лучший вариант — картинку с котиками) и берем от неё хэш. Отрезаем от хэша 1 (2,5,10) символ — допустим, получили букву z. Берем еще 25 картинок и если нам повезло, то мы получили некий словарь, содержащий в себе 26 записей вида "буква" — "картинка". Если не повезло, придется перебрать больше картинок. Таким образом, имеем алфавит, который можно использовать для отправки сообщений. Загружаем на сервер 10 определенных котиков, получатель их загружает с сервера, получает хэш, отрезает по 1 символу и получает "HelloWorld". А если еще и зашифровать это...

image

Что из этого получилось и причем здесь vkapi?

Итак, задача ясна — нужна программа, которая будет получать на вход сообщение, сжимать его, шифровать, превращать в котиков, отправлять на сервер. На той стороне нужно получать картинки, превращать в буквы, расшифровывать, "разжимать".

Теперь нужен удобный интернет сервис, который давал бы возможность свободно (в известной степени) загружать картинки на сервер и обратно. Я выбрал vk.com. Все нужно для нас там есть — удобные альбомы, которые сохраняют порядок загруженных фотографий, приятный api.

И последнее — нам где-то нужно хранить очень много картинок. Была выбрана MongoDB. Там хранятся записи вида "путь к картинке — хэш картинки — дата последнего использования". Находим нужный хэш, выбираем картинку, которая использовалась давно, загружаем, используя представленный путь.

И это работает?

Да, и это действительно работает. После загрузки [2] и установки запускаем программу:

python vkhs.py -e -l [login] -aid [album id] -m HelloHabr

Password:
message = HelloHabr
len = 10

chip = b'....'
len = 18

upload message?
Total uploaded: 18

Бежим смотреть, что у нас получилось:

Хэш-стеганография с использованием vkapi - 3 [3]

Мы получили сообщение, состоящее из 18 картинок. Это не вызывает подозрений — особенно если картинки на одну тему.

Теперь нужно получить наше сообщение:

python vkhs.py -l [login] -aurl [albumxxxxxxxx_xxxxxxxxx]

Password:
Login success
1
2
3
4
...
message: HelloHabr
очистить папку с фалами?

Вуаля, скрытый чат работает.

Проблемы

Вот некоторые из них:

  1. Алгоритм сжатия — как видно на предоставленных скринах, сообщение длинной в 11 символов превращается в сообщение длинной в 18 символов. На большой длине сообщения, этот алгоритм работает прекрасно, уменьшая больше чем в два раза исходный текст. На маленькой — ужасно.
  2. БД. Её нужно регулярно обновлять. Однако vk использует весьма интересный способ хранения фотографий. Когда мы заливаем туда фотографию, сервер автоматически её сжимает — значит изменяется и хэш. Однако, есть фотографии, хэш которых не изменяется. Причины я так и не понял. И поэтому заполнение БД происходит по следующему алгоритму — загружаем из интернета картинки (в идеале — сами фотографируем красивые пейзажи в парке). Затем заливаем их на сервер вк, загружаем обратно. Теперь снова заливаем, сохраняя хэши в бд, снова загружаем обратно. Проверяем изменившиеся, удаляем и повторяем процедуру. После "просеивания" остаются те фотографии, которые "нравятся" серверу. Их и загружаем в БД.
    Как можно увидеть, операция не очень приятная, нужно подумать, как сделать получше. Однако существуют так называемые сравнимые хеши. Например на хабре была классная статья [4]. Для обхода данной "случайной атаки" вместо обычного хеша можно брать сравнимый хеш.

Заключение

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

Все материалы, касающиеся этого проекта представлены в моем репозитории [2].

Хочу выразить благодарность пользователю PavelMSTU [5] за помощь в разработке концепции программы и данной статьи.

Автор: romabibi

Источник [6]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/python/275917

Ссылки в тексте:

[1] статью: https://habrahabr.ru/post/272935/

[2] загрузки: https://github.com/RomaLash/vkhs_POC

[3] Image: https://habrastorage.org/webt/hk/1m/pi/hk1mpidufztjecmhyxohmtuvask.png

[4] классная статья: https://habrahabr.ru/post/120562/

[5] PavelMSTU: https://habrahabr.ru/users/pavelmstu/

[6] Источник: https://habrahabr.ru/post/351370/?utm_source=habrahabr&utm_medium=rss&utm_campaign=351370