Стеганогра́фия (от греч. στεγανός — скрытый + γράφω — пишу; буквально «тайнопись») — способ передачи или хранения информации с учётом сохранения в тайне самого факта такой передачи (хранения). Этот термин ввел в 1499 году Иоганн Тритемий в своем трактате «Стеганография» (Steganographia), зашифрованном под магическую книгу.
В отличие от криптографии (шифрования), которая скрывает содержимое тайного сообщения, стеганография скрывает сам факт его существования. Как правило, сообщение выглядит как что-либо иное, например, как изображение, статья, список покупок, письмо или судоку. Стеганографию обычно используют совместно с методами криптографии, таким образом, дополняя её.
Преимущество стеганографии над чистой криптографией состоит в том, что сообщения не привлекают к себе внимания. Криптография защищает содержание сообщения, а стеганография защищает сам факт наличия каких-либо скрытых посланий.
Книжный шифр Энея — передача информации с помощью малозаметных пометок в тексте книги или документа, например, игольных дырок, проставленных рядом с буквами, которые в сумме образуют исходный текст секретного сообщения. Например, в предыдущем предложении зашифровано слово «незаметно» :)
Вариант попроще — не игольные дырочки, а числа. Напоминает рисование по точкам. Отлично подойдёт для детей, потому что разгадывается очень легко, при этом с первого взгляда выглядит непонятно. Например, вот так:
Здесь зашифровано «Принимаясь за дело, подумай, стоит ли оно того». Действительно, надо ли было узнавать, где клад, если грамота-то «филькина». Датирована 1753-м годом, а написан на ней отрывок из стихотворения Пушкина «Талисман». А Пушкин родился, между прочим, в 1799.
В шифре Бэкона пометки скрыты более искусно, чем у Энея - в самих буквах. Ниже я опишу вариант шифра Бэкона для русского алфавита.
Как говорил сам сэр Френсис Бэкон, надо взять секретное сообщение, затем закодировать его и после этого скрыть в каком-то открытом сообщении. Допустим, мы хотим зашифровать в тексте гимна СССР фамилию одного из его авторов - Габриэля Аркадьевича Эль-Регистана.
В качестве кодовой таблицы используем таблицу слева. Каждой букве соответствует её номер и последовательность двоичных символов (0-1 или A-B, кому как удобнее). Последовательность шифрования такова: берём первую букву шифруемого сообщения и находим для неё в таблице последовательность нулей и единиц, затем пишем эту последовательность из пяти знаков под пятью буквами открытого сообщения. Повторяем эти действия с каждой буквой шифруемого сообщения.
Открытое сообщение должно быть приблизительно в 5 раз длиннее, чем шифруемое, иначе нам его не хватит для шифровки. Количество символов в гимне приблизительно 700, значит мы можем зашифровать текст длиной 700:5=140 символов. Нам надо зашифровать всего 11 букв, поэтому нужно всего 55 букв открытого текста, т.е. хватит всего-то половинки первого куплета!
Слово «ЭЛЬРЕГИСТАН» нужно зашифровать, «Союз нерушимый республик свободных Сплотила навеки Великая Русь» - открытый текст. Выписываем коды букв под загадываемым словом, затем под цифрами пишем открытый текст и выделяем буквы, стоящие под единичками.
Итак, сообщение закодировано. У нас есть два типа букв открытого текста – помеченные и не помеченные. Теперь надо придумать, как эти отметки запрятать в самом тексте. Можно так, как я сделал выше – толщиной букв. Тогда у нас получится вот такая шифровка:
Слишком заметно :) Можно попробовать использовать курсив:
Вот. Уже лучше. Можно поиграться разными шрифтами (как в оригинале и предлагал Бэкон), то есть символы, помеченные нулями, писать одним шрифтом, а единицами - другим. Например, использовать два шрифта - один с засечками, другой без.
По-моему, великолепный результат :)
А ведь если использовать в качестве открытого текста картинку, в которой носителями информации являются пикселы, то каждые 5 пикселей будут кодировать одну букву. Если нолик - оставляем пиксел как есть, если единица - меняем в пикселе чуть-чуть цвет (например, на единичку в красном канале). Внешне это никак не проявится, а вот если программно потом сравнить оригинальную картинку с шифровкой, то из отличающихся по цвету пикселей можно восстановить битовую матрицу, по которой можно уже расшифровать текст.
На похожем принципе работает множество программ. Например, при помощи одной из них (RedJPEG XT с сайта http://ru-steganography.narod.ru/) я вставил в картинку выше весь текст гимна СССР. Картинка при этом практически не изменилась, и даже её размер увеличился всего на ~400 байт, хотя вставил я почти килобайт текста.
Если хотите расшифровать, что находится в этой картинке, скачайте программу с сайта, указанного выше и используйте для расшифровки пароль 123456 (да-да, даже с паролем, чтобы никто не смог расшифровать, даже если узнает, что в картинке есть, что расшифровывать).
В 1550 году Джероламо Кардано предложил простой способ прятать шифрованный текст внутри другого текста - использовать решётку с отверстиями для отдельных букв или слов. Решётка кладётся на чистый лист бумаги, через окошки пишется нужный текст, затем решётка снимается, и остальное место на бумаге заполняется другим текстом так, чтобы написанные ранее буквы и слова органично вписались в этот «мусорный» текст. Если «мусорный» текст получается не очень глупым, то со стороны вообще будет непонятно, что в нём что-то зашифровано.
Текст записки:
Sir John regards you well and spekes again that
all as rightly 'vails him is yours now and ever.
May he 'tone for past d'lays with many charms.
(Сэр Джон ценит Вас и повторяет, что всё, чем он справедливо пользовался, теперь ваше и навсегда.
Возможно, он искупит вину за прошлые промедления своим обаянием.)
Шифрованное послание:
Spain sails in May to arms.
(Испанские корабли в мае вооружатся)
В таком виде решётка Кардано - это классическая стеганография. Если же решётка Кардано используется для перестановки букв, то есть для криптографии, то такая шифровка является перестановочным шифром.