Да, уважаемый читатель, вы правильно прочитали: совершенно секретная. Причем, прошу заметить, совершенно секретная в самом строгом математическом смысле: совершенно секретная по Кашену, ибо расстояние Кульбака — Лейблера в моей математической конструкции будет равно нулю; причем не «почти нулю», а всамделишному нулю, без всяких «бесконечно малых» и иных вульгарных приближений!

Каким образом? А очень просто — я вообще не буду ничего вкраплять в стегоконтейнер. Действительно, если мы ничего не вкрапляем, то пустой контейнер неотличим от стегоконтейнера, верно?

«Подождите, но ведь если мы совсем ничего не вкрапляем, то мы совсем ничего не передаем!!!» — разумно поспорит со мной читатель.

Абсолютно верно! Вкраплять мы и не будем! Есть способ, не искажая контейнер, тем не менее передать информацию. Как?

Cхематично Хеш-стеганографию ??
можно представить так:



Текстовое пояснение к картинке под катом.



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



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

Теперь берем некую хорошую хеш-функцию. Из всех свойств «хорошести» хеш-функции нас интересует только равновероятность; то есть можно даже взять (с криптографической точки зрения) не самое лучшее хеш-преобразование, например MD5, справедливо потерявший доверие общественности.

Прогоняем все картинки через хеш-функцию, данные заносим в таблицу:
картинка --> хеш

Например:
  • котик1.jpg --> 0xd131dd02c5e6eec4693d9a0698aff95c
  • котик2.jpg --> 0x55ad340609f4b30283e488832571415a


Фиксируем некое целое число n.
Например n=2.

Составляем новую табличку, выбирая первые (или последние, кто как любит) n нибблов(полубайтов) из хеш'а.
Для нашего примера:
  • котик1.jpg --> 0xd1
  • котик2.jpg --> 0x55
  • ...


Так как без определений уже не обойтись, введем понятие хеш-кода.
Хеш-код — это первые n нибблов хеш'а изображения.
Фунцию вычисления обозначим за H(...).
Для примера: H(котик1.jpg) = 0xd1; H(котик2.jpg) = 0x55

Составляем индекс по хеш-коду в нашей таблице. Это необходимо, чтобы мы достаточно быстро (а именно за O(log(M), где M — количество картинок в базе) могли найти нужную строку в базе данных по хеш-коду.

Предположим, что мы хотим передать сообщение (в шестнадцатиричном виде): 55d134237598. Разобъем его по n нибблов. В качестве примера мы выбрали n=2, значит следует сообщение 55d134237598 разбить по 2 ниббла. Если «разбивать» будем пробелами, то выглядить это будет так: 55 d1 34 23 75 98. Полученные «кусочки», каждый из которых содержит n нибблов будем называть словами. То есть всего у нас получилось 6 слов.

Далее мы делаем следующее.
  1. Берем слово. Ищем картинку у которой хеш-код совпадает с нашим словом. Если таковых картинок несколько, берем любую из них.
  2. Передаем картинку в канал
  3. берем второе слово, ищем хеш-код совпадающий со вторым словом
  4. Передаем картинку в канал
  5. переходим к третьему слову… и так далее...


Еще раз для понимания посмотрим на GIF'ку, в которой показан принцип передачи 3-х слов: 55 d1 34


Прошу заметить, что если мы возьмем произвольным образом картинку в базе данных, то вероятность того, что
её хеш-код будет совпадать с произвольно заданным словом равна (1 / 2^(4*n)) (эх, почему на хабре до сих пор нет LaTeX'a).

Для n=1 эта величина равна 1/16, для n=2 эта величина равна уже 1/256.
Чем меньше эта вероятность, тем больше фотографий необходимо поместить в базу данных для удовлетворения наших стеганографических потребностей.

С другой стороны, чем больше n, тем больше скорость кода.
К сожалению с увеличением n, скорость увеличивается линейно, а вот потребность в количестве фотографий экспоненциально.

По этой причине хеш-стеганография очень медленна. Тем не менее, для передачи коротких сообщений, она вполне приемлима.

Формальное описание



Теперь давайте дадим формальное описание стегосистемы.

Определим стегосистему как множество объектов I.
Определим множество слов S
Определим функцию H(i), которое для каждого i из I ставит в соответсвие слово s из S.
Назовем эту функцию хеш-кодом.

Для передачи сообщения s1,s2,s3,...,sm следует найти такие i1, i2, i3, ..., im,
для которых справедливо: H(i1)=s1, H(i2)=s2, ..., H(im)=sm.

Вот собственно и вся математическая модель. Как видите — ничего сложного.

Для того, чтобы для каждого слова s не перебирать картинки, пока H(i) не станет равным s
разумно выбрать достаточно большое количество изображений, предварительно рассчитать их хеш-коды, записать в базу данных и построить индекс по хеш-кодам.

Сколько должно быть изображений, чтобы с вероятностью 99.999% можно было передать произвольное сообщение s1,s2,s3,...,sm длины m? Обозначим это число за M.

Для меня этот вопрос открытый… Никаких иных способов, кроме как методом Монте-Карло, для расчета M от m и n я не вижу.

Апгрейды



Заметим, что наша хеш-стеганография, это типичная pure-стеганография, поэтому было бы неплохо сами данные зашифровать. Например, можно использовать потоковый шифр; в этом случае, перед тем как подать искомое стегосообщение на вход стегосистемы, его следует просуммировать с некой гаммой. К примеру искомое сообщение 55 d1 34 23 75 98 можно зашифровать шифром Вернама и уже шифрованную последовательность подавать на вход стегосистемы.

Другой, на мой взгляд важный апгрейд — это удаление картинки из базы данных после её использования; чтобы после использования картинки её повторно не использовать.

Так же можно попытаться поиграть с вероятностями и с надежностью системы. Например что будет, если мы хотим передать слово 0x55, но у нас в базе данных уже закончились изображения с хеш-кодом 0x55?
Пока варианта два: либо передать с ошибкой, либо каким-либо способом нагенерировать много новых фотографий в надежде, что среди них окажется хотя бы одна с хеш-кодом равным 0x55

Однако можно придумать и другой вариант: использовать помехоустойчивое кодирование. Тогда у нас есть возможность совершить несколько ошибок и ECC их исправит.

Ну и, конечно, разбивать можно не на нибблы, а на байты, на биты, на произвольные числа произвольной системы счисления.

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

Примеры




Навскидку несколько примеров конкретной реализации хеш-стеганографии.
  1. Публикация изображений в социальной сети в определенной последовательности.
  2. Передача данных по протоколу BitTorrent в нужной последовательности (чтобы были нужные хеш-коды для передачи нужных слов)
  3. Если в протоколе X есть возможность кодирования одних и тех же данных различными способами, то выбор такого способа кодирования, чтобы передавать нужные слова. Например подойдет протокол ZIP
  4. Совершенно произвольная осмысленная замена в человеческом языке до тех пор, пока не получим нужных хеш-код. Например предложение «Я пошёл в лес и увидел серого волка» можно заменить на аналогичное осмысленное предложение «Я отправился в лес и увидел серого волка». Смысл одинаков, но хеш-код, возможно, окажется другим. Следует производить замену до тех пор, пока не получим нужный нам хеш-код.


Подведем итоги



По пунктам.
  1. Хеш-стеганография не искажает данные контейнера. Поэтому она совершенно секретна (по Кашену)
  2. Хеш-стеганография достаточно медленна. С ростом n увеличивается скорость линейно, а сложность экспоненциально.
  3. Хеш-стеганография не чувствительна к данным контейнера. Не существует LSB для MP3, нельзя применить стеганографию в просодиях для JPEG… Для хеш-стеганографии важно только то, что данные представимы в цифровом виде.
  4. По причине п.1, п.2, п.3 хеш-стеганография может быть неплохим решением для передачи коротких сообщений
  5. Так как хеш-стеганография — это pure стеганография (стеганография без ключа), то для защиты данных необходимо шифрование
  6. Хеш-стеганография может быть «подалгоритмом» другого алгоритма стеганографии. Правда в этом случае нам, скорее всего придется пожертвовать совершенностью. Напрмер в LSB можно изображение разбить на U частей. Берем часть и изменяем в ней 1 бит данных, высчитываем для этой части хеш-код. Если он совпал со словом, то переходим к следующей части и берем следующее слово. Если нет, то пытаемся изменить другой бит данных. Таким образом мы изменили всего U бит данных, но передали 4*U*n бит данных. Увеличивая n и U можно добиться весьма хороших результатов.
Как вы думаете, будет ли на практике использоваться хеш-стеганография

Проголосовало 402 человека. Воздержалось 206 человек.

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.

Комментарии (127)


  1. maaGames
    13.12.2015 15:57
    +26

    Котостенография может использоваться для передачи сообщений террористами! Срочно запретить котиков в интернетах!



    1. mihmig
      14.12.2015 15:09
      +1

      Может вместо борьбы с технологиями начать бороться с причинами появления террористов?
      Ведь с помощью одной книги и вековых устоев ни бомбы(химия), ни автомата(станкостроение) не изготовить…


      1. maaGames
        14.12.2015 15:12
        +5

        Надо запретить секс. Говорят, все террористы появились на свет из-за секса.


      1. PavelMSTU
        14.12.2015 15:33
        +1

        Я думаю maaGames с юмором это сказал. ;))
        Вы, конечно, правы, еще Норберт Винер говорил об этом аж в 1947 году:

        Мы даже не имеем возможности задержать новые технические достижения. Они носятся в воздухе, и самое большее, чего добился бы кто-либо из нас своим отказом от исследований по кибернетике, был бы переход всего дела в руки самых безответственных и самых корыстных из наших инженеров.

        Мощно сказано!
        (пруф под спойлером. Цитата жирным текстом выделена)
        Н.Винер. Кибернетика, 1947, стр 77-80
        Я сказал, что это новое развитие техники несет неограниченные возможности для добра и для зла. С одной стороны, оно делает метафорическое господство машин, о котором фантазировал Сэмьюэл Батлер, самой непосредственной и неметафорической проблемой. Оно дает человеческой расе новый, весьма эффективный набор механических рабов для несения ее трудов. Такой механический труд обладает многими экономическими качествами рабского труда, хотя, в отличие от последнего, он свободен от деморализующего влияния человеческой жестокости. С другой стороны, всякий труд, принимающий условия конкуренции с рабским трудом, принимает и условия рабского труда, а тем самым становится по существу рабским. В этой формуле главное понятие — конкуренция. Быть может, для человечества было бы хорошо, если бы машины избавили его от необходимости выполнять грязные и неприятные работы. А быть может, это было бы плохо — я не знаю. К этим новым возможностям нельзя подходить с точки зрения рынка, с точки зрения сэкономленных денег. Но как раз лозунг свободного рынка — «пятой свободы» — стал лозунгом того сектора американского общественного мнения, который представлен Национальной ассоциацией промышленников и журналом «Сатердей ивнинг пост». Я говорю об американском общественном мнении потому, что как американец, знаком с ним лучше всего; но торгаши не знают национальных границ.

        Быть может, исторические корни настоящего положения вещей станут яснее, если вспомнить, что I промышленная революция — революция «темных сатанинских фабрик» — была обесценением человеческих рук вследствие конкуренции машин. Любая заработная плата, на которую мог бы прожить землекоп в Соединенных Штатах, будет слишком высока, чтобы позволить ему конкурировать с экскаватором. Современная промышленная революция должна обесценить человеческий мозг, по крайней мере в его наиболее простых и рутинных функциях. Разумеется, подобно тому, как квалифицированный плотник, квалифицированный механик или квалифицированный портной пережили так или иначе I промышленную революцию, квалифицированный ученый и квалифицированный администратор могут пережить и вторую. Но представим себе, что вторая революция завершена. Тогда средний человек со средними или еще меньшими способностями не сможет предложить для продажи ничего, за что стоило бы платить деньги.

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

        Те из нас, кто способствовал развитию новой науки — кибернетики, находятся, мягко говоря, не в очень-то утешительном моральном положении. Эта новая наука, которой мы помогли возникнуть, ведет к техническим достижениям, создающим, как я сказал, огромные возможности для добра и для зла. Мы можем передать наши знания только в окружающий нас мир, а это — мир Бельзена и Хиросимы. Мы даже не имеем возможности задержать новые технические достижения. Они носятся в воздухе, и самое большее, чего добился бы кто-либо из нас своим отказом от исследований по кибернетике, был бы переход всего дела в руки самых безответственных и самых корыстных из наших инженеров. Самое лучшее, что мы может сделать, — это позаботиться о том, чтобы широкая публика понимала общее направление и значение этой работы, и ограничиться в своей собственной деятельности такими далекими от войны и эксплуатации областями, как физиология и психология. Как упоминалось выше, есть и такие, кто надеется, что польза от лучшего понимания человека и общества, которое дает эта новая наука, сможет предупредить и перевесить наше невольное содействие концентрации власти (которая всегда — по самим условиям своего существования — сосредоточивается в руках людей, наиболее неразборчивых в средствах). Но я пишу это в 1947 г. и должен заявить, что надежда на такой исход очень слаба.


  1. devpony
    13.12.2015 16:51

    В вашем случае DKL = 0 только тогда, когда распределение сообщений PE также равномерное, что невозможно в реальном мире.


    1. PavelMSTU
      13.12.2015 17:54

      Почему должно быть равномерным? Это достаточное, но не необходимое условие…
      PS неотличим от PE, поэтому D(PS || PE) = 0…

      Или есть ошибка?..


      1. devpony
        13.12.2015 18:10

        Стеганография совершенно секретна, если
        DKL(PC || PS) = 0
        Где PC — распределение передаваемых сообщений без зашифрованной информации — предполагается у вас равномерным.
        Тогда DKL(PC || PS) = 0 <=> PC = PS = PE.

        Чем «менее нормально» распределены исходные сообщения, тем больше величина DKL(PC || PS).

        Говоря более прикладным языком, если у вас в исходных сообщениях байт 0x00 повторяется чаще других, то и некоторые картинки из всего потока будут повторяться чаще других, что позволит наблюдателю делать предположения относительно ключа и того, включён ли сейчас канал или нет.


        1. AllexIn
          13.12.2015 18:26

          не надо повторяющихся картинок. ничто не мешает использовать несколько картинок для кодирования одного и того же числа.


          1. devpony
            13.12.2015 18:37

            Множество таких картинок всё-равно конечно.В итоге вероятности всех изображений этого множества будут отличны от вероятностей остальных картинок и DKL(PC || PS) будет больше нуля.


            1. AllexIn
              13.12.2015 18:48

              Почему оно конечно?


              1. AllexIn
                13.12.2015 18:50

                UPD: Ну, то есть, понятно, что множество конечно. Но множество картинок в интернете несоизмеримо больше чем может понадобится чтобы зашифровать любое разумное сообщение.


                1. devpony
                  13.12.2015 19:03

                  Не важно насколько оно большое. Важно, что оно конечно. Автор утверждает, что DKL(PC || PS) = 0. Я хочу сказать, что если распределение сообщений не нормальное, DKL(PC || PS) никогда не будет равно нулю, а сможет лишь к нему приблизиться.


                  1. PavelMSTU
                    13.12.2015 19:14

                    Нет, по Кашену у вас есть «private random source R», и есть источник пустых контейнеров C (см под спойлером картинку). Плевать на Интернет. Есть он, нет его… Не важно.

                    Схема Кашена


                  1. mayorovp
                    13.12.2015 20:08
                    +6

                    При наличии под рукой кота и фотоаппарата множество возможных картинок — бесконечно :)


                    1. PavelMSTU
                      13.12.2015 22:49

                      А еще лучше шимпанзе вместо кота.
                      Дать обезьяне в руки пальцетык и научить делать селфи…
                      Говорят интеллект у шимпанзе достигает 5-тилетнего ребенка — можно воспользоваться. ;)


        1. PavelMSTU
          13.12.2015 18:33
          +1

          Теперь понял.

          Первое: необходимо чтобы вероятность любого байта в стегосообщении была 1/256, то есть все байты должны быть распределены равновероятно. Для этого стегосообщение (если оно большое) следует пожать, и зашифровать. Или вместо шифрования наложить детерминированную, но хорошо распределенную гамму.

          Второе: сама хеш-функция, по которой вычисляется хеш-код должна быть «хорошей» с точки зрения равновероятности распределения.

          О втором я написал в статье, про первое как-то не подумал.
          Спасибо за замечание!
          Если эти два условия выполняются, то стегосистема совершенна.

          Маленькая ремарка.
          Вы написали: DKL(PC || PS) = 0 <=> PC = PS = PE; но эквивалентность не верна.
          Верно DKL(PC || PS) = 0 <= PC = PS = PE, хотя конечно сложно придумать привести конкретный пример, когда DKL(PC || PS) = 0, но PC != PS


          1. devpony
            13.12.2015 18:42

            Почему эквивалентность не верна?
            DKL(P || Q) = 0 <=> ln(p(x)/q(x)) = 0 <=> p(x)/q(x) = 1 <=> p(x) = q(x) ?x


            1. devpony
              13.12.2015 18:47

              Напомню, что p(x) и q(x) неотрицательны, поэтому все слагаемые суммы больше нуля.


              1. PavelMSTU
                13.12.2015 18:56

                Вы забыли про суммирование.

                Почему все слагаемые больше нуля? ln(p(x)/q(x)) > 0 если p(x)/q(x) > 1 и ln(p(x)/q(x)) < 0 если p(x)/q(x) < 1.
                При чем здесь «неотрицательность» p(x) и q(x)? Например p(x) = 0.1, а q(x)=0.2, тогда p(x)/q(x) = 0.5,
                ln(p(x)/q(x)) <0 будет, потому что логарифм от числа, меньшее 1 будет меньше нуля…

                Теоретически какие-нибудь слогаемые p(x)*ln(p(x)/q(x)) могут быть меньше нуля, а какие-нибудь больше…


                1. devpony
                  13.12.2015 19:14

                  Теоретически, могут. Теоретически даже q(x) могут быть равны нулю для некоторых x и мы получим бесконечное расстояние. Однако такие случаи не имеют смысла. В теоретической информатике определяется, что DKL(P || Q) = 0 <=> P = Q почти всюду.


  1. OldFisher
    13.12.2015 16:52
    +13

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


    1. PavelMSTU
      13.12.2015 17:55

      Это первый шаг :)
      Но в принципе вы правы.

      Использование шифрования перед стеганографией, разумеется, обязательно.


  1. Mercury13
    13.12.2015 18:14
    +5

    Это называется «книжный шифр» с откровенно необычной книгой.


    1. PavelMSTU
      13.12.2015 18:39
      +7

      Нет!

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

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

      Таким образом отправитель и получатель должны иметь разную информацию. У отправителя должна быть база данных, а получателью ничего не нужно, только хеш функция и ключ, при использовании шифрования.


      1. Mercury13
        13.12.2015 20:01
        +3

        Если так…
        С технической стороны: все картинки надо заранее перевести в общую палитру (помните, GIF — 256-цветный формат?) Затем закодировать каким-то простым кодеком — настолько простым, чтобы особенности реализации не мешали и уж от этого брать хэш. Даже в BMP, возможно, слишком много заголовков; больше подходит TGA.

        С шифровальной стороны: это называется «безопасность через неясность», и если способ передачи информации вскроется, он вскрыт. Научная стеганография интересна именно тем, что можно и информацию хранить, и обходить те статистические методы, которыми обнаруживают картинки с подвохом.

        Чем трудна борьба с национальной преступностью? А тем, что трудно выучить язык и трудно посадить «крота». С кротом не наше дело, а язык — та же «неясность».


        1. mayorovp
          13.12.2015 20:12
          +2

          Добавляем общий ключ-соль — и теперь зная алгоритм, но не зная ключа, будет невозможно отличить сообщение от случайной последовательности котиков

          Заодно можно исключить из схемы шифрование.


          1. Mercury13
            13.12.2015 20:14

            А если так — перед нами самое настоящее шифрование.
            С другой стороны, есть и другие способы протащить один байт в картинке, чтобы гэбня не заметила.


      1. icoz
        13.12.2015 23:07
        +3

        Мне одному кажется, что если запостить разом пару сотен картинок, то это может вызвать какие-то подозрения?
        И второе, а что будет, если доблестный facebook, vk и прочие возьмут и пережмут оригинальную картинку? Для оптимизации трафика, например…


      1. michael_vostrikov
        14.12.2015 08:39
        +1

        Это аналог книжного шифра, только в книжном шифре одна книга и разные координаты букв в сообщении, а у вас много книг и одна и та же координата. Книга в данном случае — это одна фотография кота. Вернее, коты здесь даже ни при чем, книга — это хеш передаваемого файла, а сама фотография — просто протокол передачи. Соответственно, все достоинства и недостатки книжного шифра имеют место быть.


        1. mva
          14.12.2015 10:54

          А за что человека минусуют? Он правду говорит: получается книжный шифр «наоборот»:
          в оригинале у обоих «переписывающихся» должна быть книга, а передаются координаты, но, тем не менее, в текущем виде, получателю всё равно нужно знать чем снимать хеш, и сколько и откуда брать нибблов. А это, по сути, то же самое имение книги :)


          1. khim
            14.12.2015 11:50
            +2

            Так всю электронику можно свести к штрику Шеффера или стрелке Пирса и, на этом основании, объяснять что в электронике никакая инновация невозможна.


            1. b_oberon
              14.12.2015 14:13

              Не всю: схемы с памятью одной булевой логикой не опишешь.


              1. qw1
                14.12.2015 17:39
                +2

                Речь шла о сведении элементов к базовым, а не логическом описании
                dic.academic.ru/pictures/wiki/files/82/RS_Trigger_Logic.gif


      1. Loki3000
        14.12.2015 18:04

        только хеш функция и ключ

        Так и в случае с книгой нужен ключ (книга) и правила его применения.


  1. MuLLtiQ
    13.12.2015 21:11
    +4

    Напомнило

    Проходя по Блюменштрассе, Штирлиц увидел шестьдесят четыре утюга, расставленных в шахматном порядке. Он сразу понял, что явочная квартира советского разведчика провалена.


  1. WeslomPo
    13.12.2015 22:07

    А почему обязательно использовать изображения и только изображения.

    Любая папка или архив, с любыми файлами отсортированными в алфавитном или любом другом порядке известному отправителю и получателю. Например «Новая папка (5)» в которой лежат вперемешку отпускные фотографии, какие-то текста статьи, ярлыки, архивы и т.д. Сортируем по какому-то параметру (алфавит, размер, дата создания/изменения и т.д.) вычисляем некий хеш (md5, sha и т.д.) берем какие-то символы из хеша (1 и 3, первый и последний, первые два, последние 4 и т.д., абсолютно любые по алгоритму известному и отправителю и получателю), затем компонуем из этого например байты в шестнадцатеричной системе счисления и вуаля, наша криптоконтейер, который можно расшифровать.

    Похоже на идеальную систему.


    1. PavelMSTU
      13.12.2015 22:35

      А почему обязательно использовать изображения и только изображения.


      Я в главке «Примеры» же написал…

      Примеры
      Навскидку несколько примеров конкретной реализации хеш-стеганографии.
      1. Публикация изображений в социальной сети в определенной последовательности.
      2. Передача данных по протоколу BitTorrent в нужной последовательности (чтобы были нужные хеш-коды для передачи нужных слов)
      3. Если в протоколе X есть возможность кодирования одних и тех же данных различными способами, то выбор такого способа кодирования, чтобы передавать нужные слова. Например подойдет протокол ZIP
      4. Совершенно произвольная осмысленная замена в человеческом языке до тех пор, пока не получим нужных хеш-код. Например предложение «Я пошёл в лес и увидел серого волка» можно заменить на аналогичное осмысленное предложение «Я отправился в лес и увидел серого волка». Смысл одинаков, но хеш-код, возможно, окажется другим. Следует производить замену до тех пор, пока не получим нужный нам хеш-код.


      1. WeslomPo
        13.12.2015 23:11
        +1

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


        1. PavelMSTU
          14.12.2015 10:22

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

          Верно.

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

          При чем здесь кошки? ;) Котики только в качестве примера, т.к. во-первых забавно, во-вторых… традиция.

          Если по сути, то как я уже написал: при увеличении n, скорость растет линейно, а вот требуемое количество вычислений/памяти растет экспоненциально!!! Именно поэтому хеш-стеганографию я назвал медленной.


          1. WeslomPo
            14.12.2015 15:19

            Вы правы, я был невнимателен.


  1. ComodoHacker
    13.12.2015 22:21
    -1

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

    Поэтому вопрос о практичности даже ставить как-то неудобно.


    1. khim
      13.12.2015 22:38
      +5

      Поскольку количество хороших хэш функций весьма ограничено, схема палится на раз профессиональным аналитиком.
      Шта?

      Добавим к этому то, что схема не предусматривает никакого разделяемого секрета, то есть держится исключительно на секретности алгоритма.
      Вау.

      Вы либо троллите, либо вообще ничего не понимаете «в колбасных обрезках». И не читаете комментарии. В частности — этот

      Хороших хеш функций — неограниченное количество (ну хорошо: ограниченное… примерно 2512… для практических использований этого более, чем достаточно). Добавьте к вашей котографии произвольную «соль», обработайте всё это SHA512 — всё, «новая» хорошая хеш функция готова. Дальше — криптоаналитики могут хоть убиться об стену.


      1. ComodoHacker
        13.12.2015 22:55
        -5

        Хороших хеш функций — неограниченное количество (ну хорошо: ограниченное… примерно 2512… для практических использований этого более, чем достаточно)

        2512 это количество всех хэш-функций. А хороших — то есть хорошо изученных и используемых на практике — можно пересчитать по пальцам. Случай применения неизвестной хэш функции «назло всем» давайте рассматривать не будем.

        Добавьте к вашей котографии произвольную «соль», обработайте всё это SHA512 — всё, «новая» хорошая хеш функция готова
        Это будет уже другая схема, не так ли? А я критиковал ту, которая предложена в статье.


        1. hellman
          14.12.2015 19:10
          +3

          Хэш функций (с 512 битным хэшем) бесконечно много, кроме того их даже несчётное число (континуум). И даже если ограничить размер входа, 2^512 будет в экспоненте, т.е. число будет порядка 2^(2^512). И «хороших» хэш функций, в том числе и удобных для вычисления, там достаточно, уж поверьте.


    1. PavelMSTU
      13.12.2015 22:42
      +2

      Нет!

      По пунктам.

      1. Я уже писал про то, что нужно предварительно шифоровать данные. Схема не должна предусматривать разделяемого секрета. Это pure стеганография. Криптография — отдельно Стеганография отдельно.
      2. Можно добавить соль в хеш-функцию.
      3. Из N хороших хеш-функций можно сделать сколько угодно новых хеш-функций путем подачи выход одной на вход другой
      4. И вообще не интересуют криптографические свойства хеш-функции, важно только статистические. И об этом я тоже писал. Так что не важен аналитик...


      1. PavelMSTU
        13.12.2015 22:45

        Хех… пока писал, уже ответили.


      1. ComodoHacker
        13.12.2015 23:03
        -3

        1. Причем здесь шифрование? К надежности вашей стеганографии оно ничего не добавит.
        2. Можно. Какую и как?
        3. Можно. Думаете, аналитики об этом не знают? Или у них нет инструментов автоматизирующих проверку этих цепочек?


        1. mayorovp
          13.12.2015 23:53
          +3

          2. Любую.

          Дана хорошая хеш-функция H(x). Берем любую строку s (эта строка будет общим секретом отправителя и получателя) и формируем функцию H1(x) = H(x + s). Эта функция будет столь же хорошей, что и исходная — но при этом не зная s невозможно отличить последовательность картинок, несущую скрытое послание, от случайной.


          1. ComodoHacker
            14.12.2015 00:18
            -7

            Да, с общим секретом уже лучше. Но насчет «любую» надо ещё подумать.

            H1(x) = H(x + s)
            Слишком примитивно. Known plaintext во все поля.


        1. a_batyr
          14.12.2015 18:36

          1. Причем здесь шифрование? К надежности вашей стеганографии оно ничего не добавит.
          Суть стеганографии лишь в том, чтобы передавать сообщение неявным способом. А о надёжности позаботится криптография.
          3. Можно. Думаете, аналитики об этом не знают? Или у них нет инструментов автоматизирующих проверку этих цепочек?
          Достаточно, например, раз 500 вычислить какой-нибудь CRC16. И попробуй потом догадайся что там было.


    1. mayorovp
      13.12.2015 23:37

      (комментарий был удален)


  1. encyclopedist
    14.12.2015 00:13
    +3

    Я боюсь, что если вы с вашим другом начнётё обмениваться тысячами фотографий котиков, то спецслужбы обратят на вас внимание даже быстрее, чем если бы вы использовали обычное шифрование. Надо прятять в чем-то более обыденном.


    1. Egor3f
      14.12.2015 04:52
      +1

      Тысячи фотокарточек нагих барышень?


      1. PavelMSTU
        14.12.2015 09:50

        Говорят, уже использовали. Не знаю, фейк ли это, но технически возможно не фейк…

        Террористы Аль-Каиды договаривались о терактах с помощью порнокартинок
        Террористы группировки «Аль-Каида» применяли совершенно новые и необычные методы шифровки сообщений. Послания друг другу они оставляли в открытом доступе на порносайтах, а также таких ресурсах, как eBay и Reddit. Информация об этом появилась в новом разделе книги Gideon’s Spies – The Secret History of the Mossad.

        Как сообщает издание New York Times, с помощью закодированных сообщений боевики не только общались друг с другом, но даже координировали свои дальнейшие действия и планировали теракты. Раскрыть действия террористов помогла работа группы дешифровщиков из Израиля, Великобритании и США.

        Как выяснили специалисты, боевики группировки использовали технологию шифрования сообщений на товарах, которые продавались на eBay. Использовали для своих нужд радикалы и порносайты, где сообщения кодировались картинками, а также новостной сайт Reddit, где информация передавалась шестнадцатеричными числами.


    1. lgorSL
      14.12.2015 06:18
      +1

      Не обязательно котиками. Выше в статье приводился пример произвольных замен в тексте. Правда, тут есть косяк: не думаю, что нормальный человек будет этим заниматься. Довольно тяжко подбирать разные слова. Лучше выбирать простейший способ хеширования и передавать в слове бит. Я сейчас попробовал взять чётность количества букв. Ужасно долго:( Куча усилий для передачи даже одного простого слова.


      1. PavelMSTU
        14.12.2015 09:45
        +1

        Смотрите.
        Пока вы правы, т.к. технически сейчас это действительно трудоемко.
        Однако при большой базе; хорошем сервере; распараллеливании (а ведь легко масштабируется!) можно сделать работающее решение даже на этой скудной теории…

        Самый интересный нюанс — это то, что не требуется аналогичных ресурсов у получателя, только у отправителя.

        Говоря на пальцах, связь типа: «ТОЛСТЫЙ штаб» (отправитель) --> «ТОНКИЙ разведчик в Гондурасе» (получатель) вполне возможна.

        На счет теории — интуитивно чувствую, что можно многое улучшить… Но нужно еще подумать. Может быть хабрасообщество подкинет несколько идей…


  1. FishDude
    14.12.2015 00:16

    «Хеш-стеганография не искажает данные контейнера» — ну да, не искажает, — потому что информация находится в другом месте.


  1. alexkuzko
    14.12.2015 00:38

    Можно модифицировать торрент траффик, чтобы передавать определённые последовательности конкретной раздачи. И поди догадайся что ты что-то передал. Либо если зациклиться на той же идее из статьи, можно раздавать не все файлы, а нужные.


    1. PavelMSTU
      14.12.2015 09:46

      Да, я написал об этом в «Примерах», пункт 2.
      Осталось только реализовать…


  1. mihaild
    14.12.2015 01:37

    Кажется что вы просто переложили задачу преобразования распределения на сообщениях в равномерное на какую-то внешнюю хеш-функцию.


  1. Wesha
    14.12.2015 03:57
    +2

    Мне нравится Ваш способ котирования информации!

    (Смайлики, к сожалению, на хабре запрещены.)


  1. janatem
    14.12.2015 04:14
    -2

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

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

    За ссылки в статье спасибо.


    1. Scratch
      14.12.2015 08:50
      +4

      Сигнатуры шифра? Нуканука, давайте я вам дам два фрагмента, один зашифрован AES, второй Twofish, а вы мне скажете где какой?


      1. maximw
        14.12.2015 11:14
        +1

        Вы бы еще предложили AES и Rijndael-256


        1. PavelMSTU
          14.12.2015 11:16
          -1

          Не удержался…
          Простите, но AES и есть Rijndael


          1. mwizard
            14.12.2015 11:19
            +3

            Подозреваю, что это и была шутка от maximw. «Одну строку мы захэшируем SHA3, а другую — Keccak».


            1. PavelMSTU
              14.12.2015 11:21

              Жаль, что текст не передает сарказма ;)
              Этот профессиональный анекдот нужно устно рассказывать…


          1. maximw
            14.12.2015 11:22
            +1

            Да, если быть точным, то не просто Rijndael, а именно Rijndael-256. Это была шутка.


            1. PavelMSTU
              14.12.2015 11:34

              Была 128-битная версия или появилась 512-битная?


              1. maximw
                14.12.2015 11:41
                +1

                Простите, ошибся. Память подвела.

                AES-N, где N — длина ключа.
                Rijndael-M, где M — длина блока.
                AES это Rijndael-128, с вариациями длины ключа.


      1. janatem
        14.12.2015 13:32
        -3

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


        1. mayorovp
          14.12.2015 16:18

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

          А во-вторых, высокая энтропия — это и есть признак шифрованного сообщения, который также надо прятать.


        1. hellman
          14.12.2015 19:17
          +2

          Если вы сможете отличить шифротекст AES от «мусора» — это уже считается взломом AES.


          1. khim
            15.12.2015 02:57

            Да, но что-то зашифрованное AES достаточно просто отличить от, скажем, текста на русском языке. Потому и возникает потребность в стеганографии, собственно…


            1. mwizard
              15.12.2015 03:41

              А это вы не AES обнаруживаете, а энтропию текста глазами меряете. Поэтому в стеганографической передаче высокую энтропию сообщения разбавляют низкоэнтропийным «осмысленным» мусором — котиками.


  1. andreymironov
    14.12.2015 10:04
    -2

    Мне ваша статья почему-то напомнила эту работу (не стеганография). Странный душевный порыв из области иррационального. Извините меня, личное мнение.


    1. PavelMSTU
      14.12.2015 10:32

      А вы самоироничны ;)

      Ограниченность я показал. (экспоненциальный рост памяти/вычислений при линейном росте полезной нагрузки при увеличении n).

      Применимость для малых сообщений очевидна…

      Что в моем посте иррационального?


      1. andreymironov
        14.12.2015 10:37

        В вашем посте иррационального ничего. «Странный душевный порыв из области иррационального» — это я о себе, а не о вас. Читай так: «Мне ваша статья почему-то напомнила эту работу. Странно, с чего бы вдруг?!».


        1. PavelMSTU
          14.12.2015 10:51

          Если это вопрос ко мне, то я не знаю с чего бы вдруг.


          1. andreymironov
            14.12.2015 11:24
            +1

            К счастью, это риторический вопрос!


            1. PavelMSTU
              14.12.2015 11:34

              ;)


  1. b_oberon
    14.12.2015 10:25
    +3

    Поздравляю, Павел, Вы изобрели шифр простой замены. При бесконечном множестве котиков получается что-то, отдалённо напоминающее шифр Вернама. Но стеганография ли это?


    1. PavelMSTU
      14.12.2015 10:37
      -2

      Нет.
      Если удалять котика при использовании, то это уже не шифр простой замены.
      Каждое слово будет кодированно новым котиком.

      Хотя, если вам очень хочется, то можно использовать как шифр простой замены. (Вот только зачем?)

      Но стеганография ли это?

      Если котики никого не смутят, то это стеганография. Например, Egor3f предложил использовать нагих барышень вместо котиков.

      Котики — это пример и дань традициям…


      1. b_oberon
        14.12.2015 10:45

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


        1. PavelMSTU
          14.12.2015 10:49

          Абсолютно верно.
          Вы можете взять хеш от чего угодно. Поэтому можете передавать что угодно.
          То есть данный вид стеганографии работает с любыми контейнерами.

          На счет «подозрительности» — вопрос спорный… Так и не может научное сообщество решить, что считать «подозрительным», а что не считать…


          1. b_oberon
            14.12.2015 10:59

            Для random.org даже хеш не нужен, этот сайт выдаёт истинно случайные последовательности.

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


            1. PavelMSTU
              14.12.2015 11:08

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

              Да неужели? И почему же не рассматриваются?

              Шифры простой замены взламываются частотным анализом. Как вы будете ломать в случае бесконечного выходного алфавита?


              1. b_oberon
                14.12.2015 11:34
                +1

                Потому и не рассматриваются, что бесконечный алфавит — это математическая абстракция, не достижимая в реальности.

                С бесконечным алфавитом конструкция напоминает шифр Вернама, поскольку P(c=b) = P(c=b | m=a) = 0.

                При конечном выходном алфавите Ваш подход вырождается в шифр простой замены: каждому символу открытого текста ставится в соответствие определённое конечное множество, из которого случайным образом выбирается один представитель. Имея достаточный объем шифртекстов, такой алгоритм можно ломать частотным анализом.


                1. PavelMSTU
                  15.12.2015 08:46
                  -1

                  При конечном выходном алфавите Ваш подход вырождается в шифр простой замены

                  Так у меня бесконечный алфавит. Что мешает вам в >2015 году выгрузить по одной сущности на каждое слово?

                  С бесконечным алфавитом конструкция напоминает шифр Вернам

                  Согласно вашим же словам — у меня шифр Вернама…

                  Не понимаю о чем спорим…

                  Мое множество конечное, но количество элементов в этом множестве больше количества всех передаваемых слов. В случае использования одной сущности из множества — эта сущность сразу удаляется.

                  В случае, когда множество «заканчивается», я просто подгружаю новые сущности (котики, ёжики, барышни, можно вообще не картинки, главное, чтобы хеш можно было взять. А хеш берется от всего, заданное в виде последовательности байт...)


                  1. b_oberon
                    15.12.2015 21:26
                    -1

                    При конечном выходном алфавите Ваш подход вырождается в шифр простой замены
                    Так у меня бесконечный алфавит. Что мешает вам в >2015 году выгрузить по одной сущности на каждое слово?
                    С бесконечным алфавитом конструкция напоминает шифр Вернам
                    Мое множество конечное
                    Павел, кажется, я только что испытал мощнейший когнитивный диссонанс. Определитесь, пожалуйста, конечный ли у Вас выходной алфавит. Всё же конечное и бесконечное множества имеют строгие математические определения, а в статье была претензия на мат. модель.

                    Что мешает вам в >2015 году выгрузить по одной сущности на каждое слово?
                    Необходимость спрятать 1 Гб данных. По картинке на каждый байт — это миллиард изображений. Миллиард, Карл! А перебрать придется в худшем случае (все байты сообщения одинаковые) порядка 256?109 изображений (для таких формул LaTeX не нужен). В то же время, запрятать 1 Гб данных в 500 Гб HD-видео вполне можно.

                    Кроме того, объясните мне, пожалуйста:
                    1. Чем хеш-стеганография лучше метода LSB? Могу предложить сразу два варианта LSB: либо шифровать данные перед встраиванием и использовать контейнеры, у которых младшие биты естественным образом имеют равномерное распределение, либо подбирать контейнеры, у которых определенные младшие биты уже совпадают с сообщением.
                    2. Почему я не могу сообщение из вашего примера передать безо всяких котиков просто в виде 0x55 0хD1 0x34 0х23 0x75 0х98? В чем принципиальное отличие?

                    Также напомню, что по Кошену the embedding function F and the distributions of all random variables are known to Eve, т.е. злоумышленник знает способ встраивания, given a covertext distribution, the embedding function F is universal for information embedding, т.е. способ встраивания не зависит от распределения встраиваемых сообщений, и the key has been chosen at random and communicated over a secure channel prior to the use of the stegosystem, т.е. ключ (если Вы будете его использовать) выбирается независимо от сообщения.

                    PS (с надеждой) Это ведь не кандидатская диссертация в МГТУ, правда?


                    1. PavelMSTU
                      15.12.2015 22:00

                      Однако просторно…

                      У меня тоже вышло просторно. Надеюсь ничего не упустил
                      Павел, кажется, я только что испытал мощнейший когнитивный диссонанс. Определитесь, пожалуйста, конечный ли у Вас выходной алфавит.

                      Отвечу кратко. Он уменя «бесконечен по-гречески». «Прямая — это отрезок, который можно бесконечно долго продливать».
                      База данных бесконечна с точки зрения процесса стеганографической передачи данных, но в реальности (разумеется) она конечна. Если у нас не хватает данных — мы добавляем их в базу.

                      Необходимость спрятать 1 Гб данных.

                      Почитайте название. там есть фраза "очень медленная".

                      Чем хеш-стеганография лучше метода LSB?

                      Я не приводил методы сравнения чем хуже, а чем лучше.

                      Почему я не могу сообщение из вашего примера передать безо всяких котиков просто в виде 0x55 0хD1 0x34 0х23 0x75 0х98? В чем принципиальное отличие?

                      Простите, не понял. Как именно? в каком контейнере?

                      у которых младшие биты естественным образом имеют равномерное распределение

                      Я не хочу вас обижать… Но это не верно. Во первых не естественным образом, а во-вторых не равномерное.

                      т.е. ключ (если Вы будете его использовать) выбирается независимо от сообщения.

                      У меня pure-стеганография (стеганография без ключа). Криптография отдельно, стеганография отдельно.

                      PS. моя кандидатская о другом, не переживайте.


                      1. b_oberon
                        15.12.2015 22:46

                        Отвечу кратко. Он уменя «бесконечен по-гречески».
                        Забрал себе в цитаты.

                        Почитайте название. там есть фраза «очень медленная».
                        Вы спросили, что мне мешает использовать по картинке на каждое слово, я ответил.

                        Я не приводил методы сравнения чем хуже, а чем лучше.
                        Изобретать что-то, что во всех отношениях хуже имеющихся аналогов, немного бессмысленно. Следовательно, должны быть какие-то сильные стороны — вот про них и хотелось услышать.

                        Простите, не понял. Как именно? в каком контейнере?
                        Да без контейнера! Если уж следовать Кашену, то злоумышленник знает способ встраивания (см. цитату из его работы выше) и без труда восстановит последовательность хешей. Также напомню, что «так и не может научное сообщество решить, что считать «подозрительным», а что не считать…» (это Ваш ответ), поэтому не вижу отличий в передаче последовательности изображений или последовательности байтов.

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

                        Наконец, если уж говорить о секретности по Кашену, то в вашей системе между пустым и заполненным стегоконтейнерами существует одно огромное отличие: длина пустого контейнера равна нулю, заполненного — количеству байтов (если считать длину контейнера в изображениях). Так что тезис о совершенной секретности тоже не выполняется.

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


                        1. PavelMSTU
                          16.12.2015 09:22

                          Если уж следовать Кашену, то злоумышленник знает способ встраивания (см. цитату из его работы выше) и без труда восстановит последовательность хешей.

                          Он восстановит, потому что у стеганографии нет ключа. Для этого не нужно никаких допущений…
                          Вот только польза какая?

                          длина пустого контейнера равна нулю, заполненного — количеству байтов (если считать длину контейнера в изображениях).

                          Вы меряете длину контейнера как? Пустой контейнер — это котик, в котором ничего не передаем, заполненный — тот, в котором передаем. Как может быть равно нулю? 0_о

                          PS Странно, у вас вообще нет публикаций… По идее, пока вы ничего не разместите, по правилам хабра никто никогда за вас не голосонет. 0_о


                          1. b_oberon
                            16.12.2015 10:38
                            +2

                            Эмм… Странно, что ниже Вы просите привести критику. Мне казалось, что все обсуждение выше — это, собственно, и есть критика.

                            Давайте кратко по пунктам:
                            1. Отсутствие преимуществ перед известными методами при наличии недостатков.
                            2. Отсутствие преимуществ перед передачей исходного сообщения без использования стеганографии (не обеспечивается факт скрытой передачи).
                            3. Ограниченная область применения в связи с низкой скоростью.
                            4. Недостаточная строгость формулировок в статье, из-за чего возникли варианты двойного толкования в комментариях (это затрудняет обсуждение, но на сам метод, разумеется, не влияет).


                            1. PavelMSTU
                              16.12.2015 12:10
                              +1

                              Спасибо, я вас понял.

                              Наверное нужно хорошо обдумать и сделать отдельный пост…
                              Если конечно это кроме меня будет интересно. ;)


                    1. PavelMSTU
                      15.12.2015 22:11

                      (для таких формул LaTeX не нужен).

                      Точно!
                      (1 / 2^(4*n)) можно заменить на (1 / 24?n), тег sup,
                      а как теперь тегами HTML под дробь это убрать?

                      Кто-нибудь знает??


                      1. mayorovp
                        15.12.2015 22:47
                        +1

                        1/24?n

                        Теги sub и sup можно вкладывать друг в друга :)


                        1. b_oberon
                          15.12.2015 22:52
                          +1

                          Также можно использовать отрицательные значения степени.

                          PS Сорри, из-за плевка в карму теперь не могу использовать теги.


                          1. hellman
                            16.12.2015 01:02

                            Интересно, как вы получили минус. Пытаюсь поставить плюс — «Нельзя голосовать за пользователей, у которых нет размещённых публикаций».


                            1. b_oberon
                              16.12.2015 01:18
                              +2

                              Видимо, нельзя голосовать только вверх. Все-таки придётся что-нибудь запостить! Но за попытку большое спасибо!


                              1. PavelMSTU
                                16.12.2015 09:35

                                Не туда. Удалил
                                Вот еще одно правило хабра: предельный рост глубины форума = 12...


                              1. PavelMSTU
                                16.12.2015 09:35

                                Напишите на мою идею критику;)

                                Нет, я серьезно. Критика — это всегда хорошо. А то и у меня и у вас получаются очень просторные комменты…

                                Будем антагонистами. Я за хеш-стеганографию — а вы против.
                                Может быть что-то родиться совместными усилиями…


                        1. PavelMSTU
                          16.12.2015 09:32

                          Гениально! Только это не совсем дробь, это знак / в скобках… ;)) 1<sub>/2<sup>4n</sup></sub> = 1/24n


                          1. mayorovp
                            16.12.2015 12:51
                            +1

                            Я сделал немного по-другому:

                            <sup>1</sup>/<sub>2<sup>4n</sup></sub>


                1. grumbler66rus
                  16.12.2015 09:48
                  +1

                  В статье описан алгоритм с алфавитом, несколько превышающим длину шифротекста. Он не является бесконечным, но по эффективности идентичен ему.


                  1. PavelMSTU
                    16.12.2015 12:15

                    Да, именно это я и имел в виду.
                    Количество картинок много больше количества слов.


  1. mwizard
    14.12.2015 11:23

    А вы, как автор, видите какие-то (пусть даже граничные) сценарии атаки на подобную схему? Что должно пойти не так (кроме хренового генератора случайных чисел на стороне отправителя), чтобы все стало плохо?


    1. PavelMSTU
      14.12.2015 11:46

      1. Никто не отменял side channel attacks в самом широком смысле этого понятия.
      2. Очень трудно формально определить «подозрительность» и «неуместность» передаваемой информации. Однако хеш-стеганография применима для любых цифровых данных, поэтому вряд ли это недостаток. Но это спорный вопрос. Вот например хабрапользователь devpony, как я понимаю, со мной не согласен (см эту переписку)
      3. Важнейший недостаток: скорость. Как я уже многократно писал: линейный рост передаваемой информации при экспоненциальном росте памяти/вычислений


      1. mwizard
        14.12.2015 11:47

        Скорость не проблема, когда речь идет о безопасности — это, конечно, недостаток, но не уязвимость.


        1. PavelMSTU
          14.12.2015 11:51

          Просто если для передачи, скажем 256 байт вам нужно 256 Мегабайт, не всегда это практически применимо…


  1. Almazen
    14.12.2015 11:41
    +1

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


    1. PavelMSTU
      14.12.2015 11:50

      Классно! Прямо как по Томасу Куну, который говорил, что любая идея всегда рождается не реже чем два раза…
      Что ж ничего не написали?..
      Код уже помер, или где-то завалялся?


      1. Almazen
        14.12.2015 12:07

        Думал, что потерял, но нашел. В виду того, что это был мой первый опыт использования c#, да и вообще в программирование я ушел только после диплома, код там… аховый. Но если интересно, могу выслать в личку. Стоит?


        1. PavelMSTU
          14.12.2015 12:11

          Высылайте, я все равно студентам в качестве курсовой дам ;))
          Тут главное не код, главное подход.


          1. Almazen
            14.12.2015 12:16
            +1

            Отправил в личку.


  1. Almazen
    14.12.2015 12:07

    удалено


  1. Loki3000
    14.12.2015 18:00
    -1

    Стеганография подразумевает сокрытие самого факта передачи информации. Передача же большого количества изображений, да еще в определенном порядке, сразу наталкивает на подозрение об использовании кода.


    1. mayorovp
      14.12.2015 18:19
      +2

      Как вы отличите упорядоченный набор котиков от неупорядоченного? :)


    1. igormu
      15.12.2015 06:21
      +2

      Можно постоянно передавать.


      1. khim
        15.12.2015 15:55
        +1

        Военные так и делают, насколько я знаю: по шифрованным каналам всё время гонится «мусор», чтобы по возникновению активности нельзя было понять, что в стране началась подготовка к чему-то…


  1. MichaelBorisov
    15.12.2015 22:12
    -1

    Автор, ваше изобретение не является стеганографией. Как тут уже говорили, вы изобрели шифр простой замены. Какая разница вообще, хеш используется или не-хеш? Можно, например, задать на изображении X такую функцию:

    F(X) = 1, если на картинке изображен кот;
    F(X) = 0 в противном случае.

    Или более сложную функцию:
    F(X)=0, если изображен дом
    F(X)=1, если река
    F(X)=2, если человек
    F(X)=3, если мотоцикл
    и т.д. для произвольных объектов, число которых в нашем мире достаточно велико, чтобы получился алфавит приличного объема.

    Такие функции, кроме прочего, будут весьма устойчивы к помехам, включая многие виды обработки и пережатия изображений, в отличие от хешей. По сути дела главная ваша идея — это задать на множестве изображений {X} функцию a=F(X), множество возможных значений которой существенно меньше множества возможных значений аргумента.

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

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


    1. PavelMSTU
      16.12.2015 09:40

      Не понимаю за что минусуют…

      У меня такая идея тоже была — скрестить кода с ужом: стеганографию & Machine Learning…
      Мне кажется, что хотя бы стоит эту идею развить — а там посмотреть, рабочая она или нет.

      На счет того, что это не простой шифр замены — напишу на выходных FAQ и добавлю в статью.
      Тут уже неоднократно обсуждалось.


  1. mwizard
    16.12.2015 12:47

    Мне кажется, я придумал хорошее практическое применение для подобного механизма. Обычные криптопротоколы, которые используются на данный момент, всегда начинаются с общения открытым текстом — для передачи, например, версии протокола, поддерживаемых алгоритмов шифрования, установления общего секрета DH и т.д. Преступное правительство злонамеренный MITM может использовать эти открытые данные для классификации траффика, разрыва соединения, постановки на карандаш, выезда опергруппы и т.д.

    Вместо этого, открытые данные можно поделить на слова, а каждому восьмибитному слову сопоставить, скажем, 2048 бит случайных данных, подобранных таким образом, чтобы младшие 8 бит sha256 совпадали с требуемым словом. Таким образом, по каналу вообще никогда не передается ничего в открытом виде, и метрик, пригодных для блокировки этого трафика, не существует.


    1. mayorovp
      16.12.2015 12:53

      Это всего лишь означает, что придется в метрики добавлять вычисление младших 8 бит sha256. И ведь добавят как только такой способ станет достаточно популярным.


      1. mwizard
        16.12.2015 12:54

        Ага, но при этом невозможно отличить протокол от случайного совпадения. Будут ложные сработки. Много ложных сработок.


      1. mwizard
        16.12.2015 13:08
        +1

        Еще, как вариант, вычислять хэш не один раз, а, например, 100 тысяч итераций (т.е. использовать принцип PBKDF2). Таким образом, получатель, которому эту операцию нужно будет выполнить единожды для установления подключения, не заметит существенной разницы. А вот РКН MITM захлебнется.

        Хотя да что уж там sha256… Использовать в качестве хэш-функции scrypt, чтобы еще и аппаратные ускорители построить нельзя было.