- PVSM.RU - https://www.pvsm.ru -
Привет. Некоторое время назад решил разобраться, что такое стеганография, в чем её смысл и какая она бывает. И спустя несколько ссылок наткнулся на интересную статью [1] про хэш-стеганографию. Возник вопрос — а почему бы не попробовать реализовать такой способ передачи на практике? Для начала — в виде proof of concept.
Если читатель не захотел ознакомиться с упомянутой статьей (очень советую), вкратце передам смысл.
Что мы представляем когда слышим слово стеганография? У нас есть некий контейнер, в который мы вставляем информацию. Вставляем так, чтобы на первый (желательно и на второй) взгляд контейнер не изменился. Но есть ли способ передать информацию не трогая контейнер?
Тут на помощь приходит хэш-стеганография. Смысл прост — мы берем контейнер (лучший вариант — картинку с котиками) и берем от неё хэш. Отрезаем от хэша 1 (2,5,10) символ — допустим, получили букву z. Берем еще 25 картинок и если нам повезло, то мы получили некий словарь, содержащий в себе 26 записей вида "буква" — "картинка". Если не повезло, придется перебрать больше картинок. Таким образом, имеем алфавит, который можно использовать для отправки сообщений. Загружаем на сервер 10 определенных котиков, получатель их загружает с сервера, получает хэш, отрезает по 1 символу и получает "HelloWorld". А если еще и зашифровать это...
Итак, задача ясна — нужна программа, которая будет получать на вход сообщение, сжимать его, шифровать, превращать в котиков, отправлять на сервер. На той стороне нужно получать картинки, превращать в буквы, расшифровывать, "разжимать".
Теперь нужен удобный интернет сервис, который давал бы возможность свободно (в известной степени) загружать картинки на сервер и обратно. Я выбрал 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
Бежим смотреть, что у нас получилось:
Мы получили сообщение, состоящее из 18 картинок. Это не вызывает подозрений — особенно если картинки на одну тему.
Теперь нужно получить наше сообщение:
python vkhs.py -l [login] -aurl [albumxxxxxxxx_xxxxxxxxx]
Password:
Login success
1
2
3
4
...
message: HelloHabr
очистить папку с фалами?
Вуаля, скрытый чат работает.
Вот некоторые из них:
В результате проделанной работы было доказано, что концепция использования котиков хэш-стеганографии имеет право на жизнь. Если исправить проблемы и недочеты в существующей версии можно создать чат, который будет абсолютно безопасен (в теории).
Все материалы, касающиеся этого проекта представлены в моем репозитории [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
Нажмите здесь для печати.