Стеганография: прятать данные в картинках

Шифрование делает сообщение нечитаемым, но видно, что оно есть. Стеганография идёт дальше: она прячет сам факт сообщения. Письмо как будто и не отправляли.
Шифрование скрывает СОДЕРЖАНИЕ. Стеганография скрывает само СУЩЕСТВОВАНИЕ сообщения.

Древняя идея

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

Как прячут данные в картинке

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

# Демонстрация на числах-«пикселях» (без графической библиотеки)
pixels = [120, 200, 50, 90, 255, 33, 18, 240, 64, 130, 77, 199, 12, 211, 5, 160]

def to_bits(text):
    bits = []
    for ch in text:
        bits += [int(b) for b in format(ord(ch), '08b')]
    return bits

message = "Hi"
bits = to_bits(message)
print("Секрет в битах:", bits)

# Прячем по одному биту в младший разряд пикселей
stego = list(pixels)
for i, bit in enumerate(bits):
    stego[i] = (pixels[i] & ~1) | bit   # заменили младший бит

print("Было: ", pixels)
print("Стало:", stego)
print("Пиксели изменились максимум на 1 — глаз не увидит")

Как достать сообщение обратно

stego = [120, 201, 50, 90, 255, 32, 18, 240, 64, 131, 77, 198, 13, 210, 4, 161]

# Собираем младшие биты
bits = [px & 1 for px in stego]
print("Извлечённые биты:", bits)

# Превращаем каждые 8 бит в символ
chars = []
for i in range(0, len(bits) - 7, 8):
    byte = bits[i:i+8]
    value = int(''.join(str(b) for b in byte), 2)
    chars.append(chr(value))
print("Скрытый символ:", ''.join(chars))

Стеганография и шифрование — вместе

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

  • Шифрование — «я тебе не скажу, что внутри».
  • Стеганография — «я даже не признаюсь, что что-то передал».

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

Вывод:

Стеганография прячет сам факт сообщения, записывая биты в младшие разряды пикселей — глаз не замечает. Это не шифрование: содержимое не защищено, скрыто лишь его существование. Лучше всего работает в паре с шифрованием.
Проверьте себя
1. Чем стеганография принципиально отличается от шифрования?
AСтеганография делает текст нечитаемым
BШифрование скрывает содержание, а стеганография скрывает сам факт существования сообщения
CЭто одно и то же
DСтеганография работает только с числами
2. Как обычно прячут данные в картинке методом стеганографии?
AУдаляют половину пикселей
BЗаписывают биты сообщения в младшие разряды значений пикселей, почти не меняя цвет
CШифруют картинку паролем
DДобавляют текст поверх изображения
Поддержать проект