Как я превратил 24-часовой проект Python в первую стабильную стеганографическую библиотеку Rust

Как это началось

Идея этого проекта возникла, когда я был на хакатоне в Монреале, Канада, с Джастином Леже и @icefalcn. Наш план состоял в том, чтобы скрыть конфиденциальные файлы в скромных, вроде отпускных фотографий и PDF-файлов. Хотя нам удалось спрятать файлы в простой в использовании системе, реализация была хорошо… хакерской. Нашим решением было зашифровать конфиденциальный файл и добавить его в конец изображения. Глядя на изображение в средстве просмотра, вы не выдадите зашифрованный файл, добавленный в конец, но глядя на размер файла или cat просмотр изображения определенно выдадут. Когда пришел и прошел еще один хакатон, я решил правильно его реализовать.

Почему ржавчина

Я выбрал Rust, потому что у него была хорошая библиотека для манипулирования изображениями, он без проблем работал как на моем Chromebook, так и на Windows, и, что наиболее важно, я хотел получить опыт работы с языком.

Получая мои хватки

Библиотека начиналась просто с чтения и записи буферов в альфа-канал изображения. Он вырос по мере того, как я добавил служебные функции, конвертирующие String в массив байтов и читающие или записывающие их. Затем я добавил преобразование целых файлов в байтовые массивы. И я кое-что понял: моя библиотека начала заниматься кодированием вещей в виде байтовых массивов для чтения / записи в альфа-канал. Речь должна была идти о добавлении реальных стеганографических методов.

Большой рефактор AKA: 1.0.0 (стабильный)

Я разделил программу на 3 модуля: Кодировщик, Декодер и Утилита. Я переместил все «дополнительные функции» преобразования данных в байтовые массивы в модуль Util. Ядро библиотеки, собственно стеганография, теперь существует в Encoder и Decoder. Поскольку функциональные возможности библиотеки были красиво разделены, было очень легко добавить некоторые новые функции! Помимо кодирования байтов в альфа-канал изображений, я также добавил байты кодирования в качестве изображения.

Если вы внимательно посмотрите на нижнюю часть mspaint.exe, то увидите несколько приятных моментов.

Следующие шаги

В краткосрочной перспективе высшим приоритетом является добавление интерфейса командной строки.

При кодировании байтов прямо в альфа-каналы можно легко обнаружить подозрительность. Итак, я хотел бы добавить несколько устоявшихся стеганографических методов, таких как F5, JSteg и LSB.

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

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

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