Comments 89
Спасибо! Оставлю в закладки
А чем ваш подход отличается от обычной стеганографии?
Это она и есть.
Технические реализации могут быть разными, естественно.
Тем, что это не стеганография. Задача стеганографии в сокрытии самого факта существования скрытой информации, даже если известен алгоритм сокрытия. Тут ничего подобного, банальное подмешивание в младший бит, даже на хабре уже десятки статей по этому методу.
А разве есть способ отличить скрытое таким способом сообщение от шума?
Шум должен быть естественный. Любой шум там, где его не должно быть - уже сам как признак.
Согласен. Готовить сообщение к сокрытию тоже надо с умом.
А как отличить шум естественный от неестественного?) А что если речь идет о пограничных значениях EbNo? Какой конкретно тип канала связи будет использоваться, какой корректирующий тип кода будет использоваться итд итп. Все это очень сложная инженерная задача, которая не решается одной идеей о замене младших битов в ргб канале.
Ставлю на то, что энтропия наружу вылезет при простейшем статистическом анализе, показав сжатие меньшее типового.
Превращение того же jpeg в png проходит по разным алгоритмам с разным размером в итоге, так что размер не демаскирующие фактор. При большом размере скрываемого размер png может быть очень большим. Сам факт наличия нескольких всегда крупных png файлов вычисляется легко и подозрителен. Перед записью в файл данные следует зашифровать, так что если пароль будет разный, то даже дни те же данные будут шуметь различно. Сам файл можно заподозрить лишь по факту существования, испортить или удалить. Но мр3 для стеганографии удобен не меньше. Да и в jpeg можно много спрятать при старании
Задача стеганографии в сокрытии самого факта существования скрытой информации, даже если известен алгоритм сокрытия.
А это как? Если есть 100 картинок и в одной из них с помощью стеганографии скрыта информация, при известном алгоритме разве нельзя все их проверить и найти ту самую?
Тут как в криптографии: известен алгоритм, неизвестен ключ - секретная часть, обеспечивающая скрытность. Алгоритмы в стеганографии создают таким образом, чтобы без знания ключа невозможно было не только прочитать скрытую информацию, но даже определить, в какой именно из этих ста картинок что-то спрятано.
На ум приходит, например, такое же складывание информации в младшие биты, но не операцией "or" в очищенный бит, а операцией "xor" в оригинальный. Ключом к получению информации станет оригинал картинки. Думаю, что будет достаточно сложно найти факт замешивания информации и еще сложней ее выцепить (если картинка для хранения информации была фотографией, конечно)
А в качестве второго дна можно использовать картинку с куаркодом.
Уж не знаю как с точки зрения вульгарного прагматизма, но с художественной точки зрения "это красиво". Прям напомнило, как в эпоху DOS и дефицита оперативки, восхищались, решением кешировать оперативные данные в видеопамять, которая в текстовом режиме "все равно простаивала" .
Эх, а во времена ZX-Spectrum (вот где реальный дефицит памяти был!) некоторые программы часть своего кода и данных в видеопамяти держали! Например, ленточные копировщики. Вот на этом скриншоте под цифрами "44032" и серым фоном - часть данных копируемых файлов (но они невидимые, потому что цвет фона и "текста" в этих "знакоместах" (т.н. атрибутах) совпадают. Да еще эти данные и сжимались на лету прямо в процессе чтения с ленты. Каким-то очень простым алгоритмом, что-то вроде RLE, но в реальном времени при чтении с ленты - на 3,5Mhz это было невероятно (и цифры вот эти тоже кстати в реальном времени в процессе чтения менялись)

А принцип «видеопамять == write-only» потом появился, с аппаратными ускорителями? Видеопамять никто не проектировал для чтения, и чтение из неё тормозит, так было написано во всех учебниках по графике.
Да она и тормозила :) Всё равно лучше, чем с MFM-харда или дискетки подгружать :)
А ещё были специальные платы памяти, которые эти же адреса занимали нормальной оперативкой. Правда, всё равно через шину, но даже это лучше, чем ничего :) Текстовый режим — работаем с этой платой, графический — с видеопамятью.
Самое интересное — дровишки, вестимо. Как оно там всё работало, переключалось и т. д. Было бы неплохо отреверсить — но пока я там всплеска энтузиазма не вижу.
Очень интересно. Писали, что современные копиры оставляют какие-то невидимые точки для идентификации, они шифруют свой номер, или координаты или что-то ещё?
на цветных аппаратах точки весьма себе видимые под определенным углом, печатаются бледно-желтым цветом
Побочные эффекты этой восхительной фичи

про побочные эффекты вспомнилось, что была программа, которая добавляла EURion constellation к печатаемому тексту, чтобы его нельзя было копировать и обрабатывать в графических программах.
Спасибо. Вспомнил, как мне толковал один программист в далёком прошлом о том, как стереть данные об изображении: его надо распечатать и отсканировать. Оказывается, это тема не рабочая. Можно предположить, что и сканер добавляет какую-нибудь инфу в файл, а подключенный к сети сливает и сами файлы.
HP, помню, не давал сканить доллары
У сканеров реакции на "кольца Евриона" не встречал, хотя со сканерами знаком с начала 90-х, а вот цветные копиры - многие замечены за выдачей пустоты или чёрной плашки на месте банкноты. Лично не видел, но слышал о данной функции и у каких-то принтеров.
Лично видел такую функцию у цветного струйника (модель уже не помню). Самое смешное, что это было в банке, и как раз надо было напечатать цветные плакаты про новые купюры, чтобы кассиры их изучили. Когда принтер доходил до созвездия Евриона - заливал кусок образца банкноты чёрным прямоугольником.
Потом в интернетах видел рассказ про эти принтеры, там можно было в драйвере поправить пару байт (типа JE xx на NOP NOP, ЕВПОЧЯ), чтобы он игнорировал обнаруженное созвездие. Это всё было ещё под Windows XP.
полагаю, тот программист имел в виду метаданные в файле изображения.
Спасибо друг, теперь становится понятен механизм генерации. С какой скоростью такая информация может осознаваться при взгляде на экран, сколько процентов яркости, цветности, размеры: пикселей, между такими точками символами ?
Серийник оставляют. Сделано в древние времена для поиска утечек с предприятий, но не взлетело из-за высокой сложности поиска этих самых точек и пропиетарного кодирования, которое зависело от производителя.
Побольше таких статей!!!
Вы просто не умеете искать: https://habr.com/ru/companies/first/articles/676282/
А что будет при переводе из RGB в другое цветовое пространство?
В png можно спрятать даже архив или воркфлоу генерации картинки нейросетью типа comfyui, просто вклеив дополнительную информацию в файл.
Автор, стенография и стеганография все же разные вещи, поправьте тэги
Эм.. Берёшь нужные файлы, добавляешь в запароленный архив. Открываешь его в hex-редакторе, открываешь картинку тоже в hex. Копируешь код картинки в конец кода архива и сохраняешь. Меняешь расширение на картиночное - картинка, меняешь на архивное - архив ;)
Не всё так просто. Некоторые хостинги уже научились вычислять rarjpg и отсекать архивную часть от картинки. Склеиваешь, заливаешь, скачиваешь - а там пусто...
запрятать все свои пароли в фотографию с любимым
вождемкотом.
Поправил, так душевнее)
А вообще статья огонь! Реквестирую что-либо подобное про преобразования text-2-text (особенно eng в rus).
Total Commander умеет склеивать/резать файлы кликами мышкой, без hex-редакторов. И лучше приклеивать архив к картинке - тогда архиватор (по крайней мере WinRAR) открывает такой архив даже без смены расширения, а картинка видна во всех браузерах и просмотрщиках.
А можно поподробней?
А мне вот интересно: фотография PNG-24 (без потерь) была до этого JPEG/AVIF/JXL более высокого разрешения. И при сжатии и уменьшении больше всего страдает (сглаживается) как раз этот самый LSB (как самый невидимый, но добавляющий при этом кучу энтропии в данные, сильно мешая сжатию). И по идее отделив этот самый LSB и увидев что там "белый шум" сразу закрадутся подозрения, что "это-жж-ж неспроста"?
Да, так и есть, когда меняется LSB изображения в каждом канале, при анализе это очень заметно. На самом деле техник для внедрения информации в изображение огромное множество. Я как раз в универе занимаюсь опытами с внедрением информации на основе субполосных преобразований (метод по сути аналогичен jpeg2000, только вместо вейвлет используется субполосная матрица).
Я 25 лет назад похожей штукой в универе занимался. DCT или какое другое преобразование, потом в средних частотах внедрял что нужно, потом обратное DCT. В итоге информация размазывается по пикселям блока изображения, хотя в спектре блока остаётся сосредоточена в одной полосе.
В том и проблема, что это остаётся заметно на спектре, в то время как при этом методе информация равномерно размазывается на все субполосы изображения, и отследить её довольно трудно. Но честно говоря, я бы вместо этого лучше бы чем-нибудь более практичным после работы занимался :)
Можно взять сам жпег и при квантовании все «граничные случаи» округлять не в честную сторону, а в коварно заинтересованную. Псевдошумовой паттерн плюс достаточно большая статистика…
Хотя нет, не нужно. Сейчас все уроды пережимают картинки, убивая то, что казалось вечным. «Цифровой износ», да. Не надо давать уродам дополнительную мотивацию быть уродами.
Старенькая игра Spore использует данный метод для сохранения пользовательских творений (существ/зданий/транспорта и т.д.) в виде PNG картинки этого творения.
И японские игры 18+, где таким же образом созданные пользователями персонажи передаются
А зачем так извращаться? PNG поддерживает текстовые чанки и туда можно запихать любые данные
Меня действительно удивило предельно малое кол-во информации на данную тему.
Потому что вы ошиблись в слове "стеганография". Если бы не ошиблись, то увидели бы, что нет смысла писать очередной такой материал на Хабр, их десятки уже.
Спасибо за короткий и понятный материал!
Я бы еще отметил, что LSB позволяет делать хрупкий водяной знак. Например, если попробуем перегнать картинку из PNG и JPG, то все, спрятанный контент потеряется.
Вот еще вариант,интересно, насколько он хорош в плане криптостойкости:
https://github.com/DanilShein/secret
Спасибо! Делал такую же штуку, пока тренировался в Rust. Выглядит как идеальная задача для его комбинаторов итераторов — склеить, разделить на чанки и т.п.
https://github.com/deliro/injet
К сожалению (или к счастью), при попытке проделать что-то подобное с картинкой из другого домена немедленно напарываешься на CORS
Писали такое на первом курсе для изучения C и стеганографии. Вообще был интересный случай с трояном, который управлялся через мемы в твиттере. Там выкладывался мем со вшитой внутрь командой, а твиттер не обрезал метаданные и не сжимал картинку, в итоге все данные оставались неизменными. И трояну надо было только скачать картинку, извлечь команду и исполнить. Ну и следовательно задетектить такого трояна было сложнее
Самое интересное, что после всех манипуляций у картинок даже отличие в весе будет минимальным.
Так отличий в весе и не должно быть
Самое интересное, что после всех манипуляций у картинок даже отличие в весе будет минимальным
Попробуйте ради интереса проделать эти манипуляции с монотонной картинкой PNG.
Если картинки - скриншоты экрана компьютера или рисунки, на которых много залитых одним цветом областей, то отличие в размере/весе будет заметно.
PNG хорошо умеет сжимать однородные или регулярные области, а при отличиях в каждом пикселе коэффициент сжатия получится намного хуже.
Количество цветов увеличится. Особенно заметно будет, если придётся вместо 256-цветной палитры перейти на 24-битный RGB - размер файла сильно вырастет.
Конкретно PNG формат позволяет просто добавлять чанки данных каких угодно без потери работоспособности.
Правильно я понимаю, что любые сервисы (в частности соц.сети) делают подобные способы - бесполезными из за пережатия/оптимизации?
Правильно
А разве существуют сервисы, пережимающие PNG с потерей качества? Но вообще, в стеганографии существуют алгоритмы и на такие случаи.
Существуют. Пример - https://tinypng.com/, они пытаются менять цвета пикселей и уменьшать количество цветов, чтобы и не очень заметно для человеческого глаза получилось, и в PNG лучше жалось.
У внедрения информации в изображения/видео кроме скрытной передачи большого массива информации есть ещё две области применения.
Первая - скрытая передача метки об авторе или о конкретном владельце изображения. Тогда, например, из утёкших сканов документа будет понятно, у кого конкретно из имевших допуск этот скан увели. Или автор фотографии сможет предъявить иск к тем, кто спиратил фото и не заплатил. При этом способ внедрения может предусматривать какую-то устойчивость к повороту, обрезке и масштабированию картинки (условно, алгоритм подписи автора сможет пережить поворот на ±5 градусов, обрезку на 10% и масштабирование сторон с коэффициентом от 0.8 до 1.2). Закономерно, что чем выше устойчивость - тем меньше информации удастся записать.
Вторая область применения специально использует хрупкость и неустойчивость к изменению даже одного пикселя картинки как пруф, что никто не модифицировал изображение на пути от источника к получателю. То есть такой себе невидимый контроль целостности картинки.
В общем, это аналогия "обычным" ЭЦП с их функциями подписи и контроля целостности.
В далёком 2004 году в институте у нас были лабораторные работы по стеганографии. Мы прятали текст в младшие биты цветов файла формата bmp.
вы интересное начали. скрывать трафик от снифферов и блокираторов это полезно. но нужно в комплексе апи создать: 1) поиск рандеву сервера через специальные, нерелевантные запросы через яндекс и гугл, и нахождение нужных данных в поисковой выдаче по какому-то ключу в нмх спрятанному. 2) обмен данными через передачу файлов png, jpg 3) ввод вывод системных денег через выигрыш или проигрыш на какой-либо популярной бирже. задача - создать инструмент для написания секретных чатов и приложений. чтоб например роскомнадзор думал что вы чёрный страпон с кисточкой ищете , и картинки всякие смотрите, а вы коннектитесь к секретному чату и ставки на события всякие делаете, и никто не может ваши протоколы запретить или сервак забанить , потому что тогда надо будет весь хттп и все форматы картинок банить в принципе.....
Но эту пикчу никуда не выложить, так как какая-нибудь телега возьмёт да пережмёт и всё
Во времена Windows 98, если не 95, была программка которая это делала, ещё и пароль ставила. Если пароль не знаешь текст из картинки вытащить было невозможно.
берешь wav файл, пихаешь туда производьный чанк (главное, чтоб не data назывался) и прячь туда что попало.
Часть мудозвонов таким образом наращивала объем своих продоваемых звуковых библиотек, чтоб поувесистей казалось.
В древние времена узнал о стеганографии из статей Fravia. Чтобы до них дойти, нужно было взломать его же сайт. Этому он учил на предыдущих уроках.
Во времена были....
Ну и комментариев здесь... А я без сторонних библиотек сделал. На чистом JS
Потенциальные 5мб спонтанных данных разместятся на 5000х5000
Подожди, а как ты это посчитал? Это 25000000 пикселей, и если каждый может хранить 3 бита, получается 75000000 бит. Переводим в байты - 9375000 байт или чуть менее 9 МБ. Откуда у тебя вышло только 5?
Как спрятать любые данные в PNG