Исследовательский проект · 7 класс

✉ Невидимые письма

Можно ли спрятать текст прямо внутри обычной картинки так, чтобы глаз не заметил подмены? Да — если менять в каждом пикселе самую незначительную его часть. Эта страница прячет и достаёт письма и измеряет, когда тайник становится заметным.

Шаг 1. Выберите картинку-контейнер

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

Шаг 2. Напишите тайное письмо

1 бит — тайник крошечный, но полностью невидимый. Больше битов — больше текста влезает, но картинка начинает портиться.

Достаём спрятанное письмо

Тот, кто знает правило (сколько младших битов использовано), может прочитать письмо из картинки. Тот, кто не знает, видит просто картинку.

Картинка с тайником
— сначала спрячьте письмо на первой вкладке —

Проверка «как в мессенджере»

Когда вы отправляете картинку в Telegram или WhatsApp как фото, она сжимается, чтобы весить меньше, — и при этом пиксели чуть меняются. Проверим, переживёт ли письмо такое сжатие. Если отправить как файл, картинка не сжимается и письмо сохраняется.

После сжатия (как «фото»)
— нажмите кнопку выше —

Главный эксперимент: сколько влезает и когда становится видно

Берём одну и ту же картинку и прячем в неё максимально длинное письмо, используя от 1 до 8 младших битов. Для каждого случая измеряем вместимость тайника и насколько сильно изменилась картинка (показатель PSNR: чем больше децибел, тем меньше заметно; обычно выше 40 дБ глаз разницы не видит).

Что такое младший бит и почему его не видно

Цвет каждого пикселя — это три числа от 0 до 255: сколько в нём красного, зелёного и синего. Число 200 в двоичной записи выглядит так: 11001000. Самая левая цифра отвечает за 128, самая правая — всего за 1. Эту крайнюю правую цифру и называют младшим битом.

Если поменять младший бит, число 200 станет 201 или останется 200 — цвет изменится на одну двести пятьдесят шестую. Такую разницу глаз не различает. А спрятать в неё можно один бит нашего письма. В картинке миллионы пикселей — значит, миллионы крошечных «ячеек» под тайник.

Буква в кодировке UTF-8 — это 1–2 байта, то есть 8–16 битов. Значит, одна буква занимает тайник в 8–16 пикселей-каналов. Картинка 300×200 даёт 180 000 ячеек — туда поместится целое сочинение.

Почему сжатие ломает тайник

Формат JPEG (и «фото» в мессенджерах) экономит место, слегка огрубляя цвета — он считает, что мелкие детали всё равно не видны. Но именно в этих «незаметных» деталях и спрятано письмо, поэтому после сжатия оно рассыпается. Форматы без потерь (PNG, BMP) и отправка файлом сохраняют пиксели точно — письмо выживает.

Это секретно?

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