Как я превратил 24-часовой проект Python в первую стабильную стеганографическую библиотеку Rust
Как это началось
Идея этого проекта возникла, когда я был на хакатоне в Монреале, Канада, с Джастином Леже и @icefalcn. Наш план состоял в том, чтобы скрыть конфиденциальные файлы в скромных, вроде отпускных фотографий и PDF-файлов. Хотя нам удалось спрятать файлы в простой в использовании системе, реализация была хорошо… хакерской. Нашим решением было зашифровать конфиденциальный файл и добавить его в конец изображения. Глядя на изображение в средстве просмотра, вы не выдадите зашифрованный файл, добавленный в конец, но глядя на размер файла или cat
просмотр изображения определенно выдадут. Когда пришел и прошел еще один хакатон, я решил правильно его реализовать.
Почему ржавчина
Я выбрал Rust, потому что у него была хорошая библиотека для манипулирования изображениями, он без проблем работал как на моем Chromebook, так и на Windows, и, что наиболее важно, я хотел получить опыт работы с языком.
Получая мои хватки
Библиотека начиналась просто с чтения и записи буферов в альфа-канал изображения. Он вырос по мере того, как я добавил служебные функции, конвертирующие String в массив байтов и читающие или записывающие их. Затем я добавил преобразование целых файлов в байтовые массивы. И я кое-что понял: моя библиотека начала заниматься кодированием вещей в виде байтовых массивов для чтения / записи в альфа-канал. Речь должна была идти о добавлении реальных стеганографических методов.
Большой рефактор AKA: 1.0.0 (стабильный)
Я разделил программу на 3 модуля: Кодировщик, Декодер и Утилита. Я переместил все «дополнительные функции» преобразования данных в байтовые массивы в модуль Util. Ядро библиотеки, собственно стеганография, теперь существует в Encoder и Decoder. Поскольку функциональные возможности библиотеки были красиво разделены, было очень легко добавить некоторые новые функции! Помимо кодирования байтов в альфа-канал изображений, я также добавил байты кодирования в качестве изображения.
Если вы внимательно посмотрите на нижнюю часть mspaint.exe, то увидите несколько приятных моментов.
Следующие шаги
В краткосрочной перспективе высшим приоритетом является добавление интерфейса командной строки.
При кодировании байтов прямо в альфа-каналы можно легко обнаружить подозрительность. Итак, я хотел бы добавить несколько устоявшихся стеганографических методов, таких как F5, JSteg и LSB.
Ящик должен быть (и остается!) Простым в использовании. Вот почему я вначале отвлекся и потратил так много времени на разработку функций полезности. Я хочу сосредоточиться на стеганографии, но вижу большую выгоду в добавлении некоторых простых функций шифрования в модуль Утилита.
Стеганография не ограничивается только изображениями ... Следующим большим шагом будет добавление методов незаметного кодирования данных в аудио и видео.
Производительный двоичный файл, который может работать на многих платформах, который позволяет использовать расширенные стеганографические методы через простой интерфейс, окажет глубокое влияние на конфиденциальность. Я представляю себе зеркальную камеру, которая может на лету скрывать изображения на других снимках, давая репортерам больше свободы, чтобы не бояться сообщать правду.