Привет, Хабр.  Хочу представить вам небольшой проект по стеганографии, сделанный в свободное от учебы время.  Я сделал проект по скрытому хранению информации в файловой системе (далее ФС).
Это можно применить для кражи конфиденциальной информации в образовательных целях.  В виде опытного образца была выбрана весьма старенькая линуксовая ФС ext2.  Если хорошо "раздраконить" стандарт ext2, то можно заменить, что в ФС существует так называемый Superblocks, в котором дана основная информация о системе. После мной были найдены Block Bitmap и Inode Table. Почти сразу родилась идея записи информации в пустые на данный момент блоки ФС. Теперь стоило продумать защиту от программиста, вооруженного hex-редактором.  Если хранить скрываемую информацию без шифрования, то, даже несмотря на ее размытость по ФС, она будет все равно слишком бросаться в глаза, особенно если программист будет знать, что следует искать. Поэтому было принято решение шифровать все блоки исходного файла. Я выбрал блочный шифр AES, но как вы понимаете, это не принципиально. Для отделения нужных блоков от всех остальных при чтении в каждый блок было решено добавить по специальному маркеру в начало блока. Этот маркер шифровался в зависимости от номера блока в исходном файле. Такая уловка сразу позволила не только находить нужные блоки, но и узнавать их правильный порядок. Общий принцип работы системы.  По пунктам: Ниже представлена блок-схема алгоритма записи. На вход алгоритм получает четыре файла:
-Образ изменяемой файловой системы;
-Файл, подлежащий стеганографии;
-Файл с ключом шифрования для AES;
-Файл с маркером.
 Сразу стоит отметить, что у данного алгоритма есть один недостаток: после записи файла в ФС, нельзя записывать в ФС что-либо новое, так как любая новая информация может попасть в те блоки, которые мы отвели нашему застеганографированному файлу, правда это же открывает возможность «быстрого заметания следов».  Но достаточно очевидно как это можно исправить: необходимо перезаписать алгоритм записи блоков в ФС. Это понятная, но невероятно трудоёмкая задача.
Для Proof Of Consept я это не реализовывал. В результате получатся следующие изменения в ФС, так выглядит ФС до стеганографии (предварительно был записан аудиофайл).

А так выглядит ФС с уже застеганографированной информацией.
 По пунктам: Ниже представлена блок-схема алгоритма записи. На вход алгоритм получает три файла:
-Образ файловой системы;
-Файл с ключом шифрования для AES;
-Файл с маркером.
 После работы программы появляется файл Read, который и будет извлеченным из стеганографированной ФС файлом, если ключ или маркер были указаны неверно, то файл Read будет пуст.
(для любителей красивостей можно вкраплять не только файл, но "шапку", содержащую метаинформацию: имя файла, права, время последнего изменения и т.д.) Для удобства были написаны bash скрипты, автоматизирующие запуск на Linux (тестировалось на Ubuntu 16.04.3 LTS).
Разберем запуск по шагам.
Запись: Чтение: Данный метод стеганографии, вероятно, нуждается в доработке, дополнительном тестировании и расширении на более популярные файловые системы, такие как Fat32, NTFS и ext4.
Но целью данной работы было показать принцип, с помощью которого можно осуществить скрытое хранение информации в файловой системе.
С помощью подобных алгоритмов можно безбоязненно хранить информацию, и если при знании ключа такую систему взломать возможно не полным перебором (но весьма долгим алгоритмом), то без знания ключа данная система мне представляется абсолютно стойкой, впрочем это может послужить поводом для отдельной статьи. Весь код реализован на языке Python версии 3.5.2. Пример работы представлен на моем youtube канале. Полный код проекта выложен на github.
(Да-да, я знаю, что для production версии нужно писать на чём-нибудь "быстром", например на Си ;) )
В данной реализации размер входного файла для стеганографии не должен превышать 1000 кБ. Хочу выразить благодарность пользователю PavelMSTU за ценные советы при планировании исследования и рекомендации по оформлению статьи.