
HIDEAGEM экспериментальная платформа стеганографии.
888 888 8888888 8888888b. 8888888888 d8888 .d8888b. 8888888888 888b d888
888 888 888 888 "Y88b 888 d88888 d88P Y88b 888 8888b d8888
888 888 888 888 888 888 d88P888 888 888 888 88888b.d88888
8888888888 888 888 888 8888888 d88P 888 888 8888888 888Y88888P888
888 888 888 888 888 888 d88P 888 888 88888 888 888 Y888P 888
888 888 888 888 888 888 d88P 888 888 888 888 888 Y8P 888
888 888 888 888 .d88P 888 d8888888888 Y88b d88P 888 888 " 888
888 888 8888888 8888888P" 8888888888 d88P 888 "Y8888P88 8888888888 888 888
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
▄ ____ ______ ____ ▄ ▄
█ / / \ \ HIDEAGEM STEGANOGRAPHY PLATFORM █ . . █
█ /___ /________\ ___\ █ .-. .-. '.___.' █
█ \ \ / / ASTRAL SOFTWARE FROM THE FUTURE █ (_ \ / _) .' `. █
█ \ \ / / █ | : : █
█ \ \ / / COPYRIGHT 2024 WWW.CYBERGEM.NET █ | : : █
█ \ \ / / █ | `.___.' █
█ \/ LET'S DO COMPUTER STUFF ALL DAY █ █
█ █ █
█ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ █ ._____. .--. █
█ MMMMMSSSSSSSSSSSSSSSSSSSSSSSSSSddMMMMMSSSSSSMSSSSSSSSSS; █ | | / _`. █
█ MMMMSSSSSSSSSSSSSSSSSMSSSSS; ;SSdMMMMSSSSSSMMSSSSSSSSSS, █ | | (_) ( ) █
█ MMSSSSSSSMSSSSSMSSSSMMMSS."-.-":MMMMMSSSSMMMMSSMSSSMMSS █ _|_|_ '. / █
█ MSSSSSSSMSSSSMMMSSMMMPTMM;"-/\":MMM^" MMMSSMMMSSMM █ ' ' `--' █
█ SSSSSSSMMSSMMMMMMMMMP-.MMM : ;.;P dMMMMMMMMMP' █ █
█ SSMSSSMMMSMMMMMMMMMP :M;`: ;.'+"""t+dMMMMMMMMMMP █ _ █
█ MMMSSMMMMMMMMPTMMMM"""":P `.\// ' ""^^MMMMMMMP' █ .--. ' `:--.--. █
█ MMMMMMPTMMMMP="TMMMsg, \/ db`c" dMMMMMP" █ ( ) | | |_ █
█ MMMMMM TMMM d$$$b ^ /T$; ;-/TMMMP' Let's █ (_) / | | | ) █
█ MMMMM; .^`M; d$P^T$$b : $$ ::MMMMP hide some █ (_, | | |/ █
█ MMMMMM .-+d$$ $$$; ;. $$ ;;MMMP, Gems ! █ (J █
█ MMMMMMb _d$$$ $$$$ :$$$; :MMMMMMp. █ █
█ MMMMMM" " T$$$._.$$$; T$P.'MMMSSSSSSb █ _ █
█ MMM`TMb -")T$$$$$$P' `._ "" :MMSSSMMP' █ __ ' `:--.--. █
█ MMM / \ ' "T$$P" / :MMMMMMP' █ ___.' '.___ | | | █
█ MMSb`. ; " :MMMMMM' █ ____________ | | | █
█ MMSSb_lSSSb. .___. MMMMMP ,d88b.d88b, █ | | | .., █
█ MMMMSSSSSSSSb. .MMMMMM. 88888888888 █ `--': █
█ MMMMMMMMMMMSSSb .dMMMMMMMP `Y8888888Y' █ █
█ MMMMMMMMMMMMMSS; .dMMMMMMMMMM' `Y888Y' █ ... _ █
█ MMMMGEMMAMMMMb`;"-. .dMMMMMMMMMMP' `Y' █ .': \ /_) █
█ MMMMMMMMMMMMMMb: `'--.___.dMMMMMMMMMPP' █ .' \ /`. █
█ MMMMMMMMMMMMMMMb; dMMMMMMMMPPR █ `..' \ / ; █
█ ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ █ .'`. \/ __.' █
█ █ █
█ ░░░░░░░░ ▒▒▒▒▒▒▒▒ ░░░░░░░░ █ █
█ ▓▓▓░░ ████████ ███▒▒ ▓▓▓▓▓▓▓▓ ▓▓▓░░ ████████ █ `-. .-' █
█ ▒▒▒▓▓ ░░ ██ ▒▒▒▒▒▒░░░██ ▒▒ ▓▓ ░░░░░░▒▒▒▓▓ ░░ ██+§¥µ██ █ .-"-._.-"-._.- : : █
█ ███▒▒ ▓▓ ░░░██ ▒▒ ▓▓▓░░ ██ ▒▒▒▓▓ ░░ ███▒▒ ▓▓ ░░░██$@¢¶██ █ .-"-._.-"-._.- --:--:-- █
█ ██ ▒▒ ▓▓▓▓▓▓███▒▒ ▓▓ ░░ ██████▓▓▓░░ ██ ▒▒ ▓▓▓▓▓▓████████ █ : : █
█ ██ ▒▒▒▒▒▒▒▒ ▒▒▒▓▓ ░░░░░░░░ ░░░██ ▒▒▒▒▒▒▒▒ █ .-' `-. █
█ ████████ ▓▓▓▓▓▓▓▓ ████████ CYBERGEM █ █
▀ ▀ ▀
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
HIDEAGEM — это экспериментальный инструмент для сокрытия файлов внутри изображений.
Он написан на C++ и может использоваться через Python CLI и пользовательские узлы в ComfyUI для Stable Diffusion.
ПРЕДУПРЕЖДЕНИЕ: HIDEAGEM — экспериментальное программное обеспечение! В нем могут быть неизвестные ошибки или уязвимости. Используйте на свой страх и риск!
ПРЕДУПРЕЖДЕНИЕ: HIDEAGEM еще не изучался на предмет устойчивости к стеганализу (например, инструментам, определяющим вероятность наличия скрытого сообщения в изображении). Поэтому предполагайте, что противники могут обнаружить, что изображение является «подозрительным».
Подробное объяснение алгоритмов и дизайна HIDEAGEM см. в этом посте.
Обновления разработки и поддержка доступны на Discord.
Теперь HIDEAGEM можно использовать в браузере на WWW.HIDEAGEM.COM !
Стеганография — это сокрытие присутствия сообщения; это сокрытие самого факта существования коммуникации.
HIDEAGEM стремится стать стеганографической платформой нового поколения, объединяющей современные криптографические и стеганографические методы для быстрого, безопасного и надежного сокрытия информации в носителях.
Помимо традиционной цели стеганографии (скрытая связь), исследуются и другие свойства безопасности сокрытия битов сообщения в больших коллекциях битов.
HIDEAGEM разработан как расширяемая и адаптируемая платформа, с которой можно запускать различные стеганографические алгоритмы и методы для сокрытия данных в разнообразных типах носителей.
Со временем в программу могут быть добавлены новые стегоалгоритмы для поддержки большего количества типов файлов и использования новых методов.
Список общих функций и возможных направлений будущего развития.
Текущие возможности | Будущее развитие
------------------------------------|---------------------------------------------------
Пароли Unicode | Ключевые файлы
Защита от взлома данных Gem | Мобильное приложение
512-битный симметричный ключ | Больше стегоалгоритмов
Безопасная работа с памятью | Больше типов носителей
Несколько файлов на один пароль | Разделение файлов между изображениями
Несколько паролей на одно изображение | Веб-приложение (локальное выполнение)
Устойчивость к офлайн-брутфорсу | Расширение для браузера (например, извлечение Gem из контекстного меню)
Используйте любые сумасшедшие символы Unicode в паролях: вы даже можете использовать любимые эмодзи; никто вас не остановит! 🐬
Примечание: Информация ниже относится только к текущим алгоритмам пространственной области HIDEAGEM, совместимым только с форматами изображений без потерь, такими как PNG, TIFF и BMP.
Если Gem успешно извлечен и имеет правильный хеш Gem, то практически гарантированно, что это бит-в-бит тот же Gem, который вы спрятали в изображении.
Если хотя бы один бит пикселя Gem (пикселя, содержащего данные Gem) будет поврежден, извлечение Gem завершится неудачей.
Защита от взлома достигается ценой хрупкости: небольшие изменения изображений Gem могут сделать данные невосстановимыми. Они хрупки и могут быть повреждены изменением размера, обрезкой или мутацией пикселя, содержащего данные Gem.
HIDEAGEM использует экспериментальную систему симметричных ключей, разработанную для совместной работы со своими стеганографическими алгоритмами.
512-битный ключ генерируется с помощью функции хеширования паролей Argon2id из libsodium и пароля, предоставленного пользователем.
Argon2id был выбран, поскольку он предлагает настраиваемые параметры устойчивости к брутфорсу (такие как требования к памяти) и устойчивость к атакам брутфорса с помощью GPU.
Данные Gem шифруются с использованием 256-битного ключа, полученного из 512-битного ключа, а затем скрываются в носителе с использованием 512-битного ключа. Сначала необходимо использовать 512-битный ключ для извлечения всего зашифрованного Gem, прежде чем 256-битный ключ можно будет использовать для дешифровки каких-либо его битов.
Вы можете узнать больше о системе ключей здесь.
ПРИМЕЧАНИЕ. Конечная надежность ключа зависит только от надежности пароля. Очень
длинный/случайный пароль требуется для использования всех 512 бит ключа.
Чтобы достичь 512 бит энтропии с паролем, использующим набор символов ASCII,
пароль должен быть >= ~74 символов, и каждый символ должен быть идеально случайным.
Чтобы попытаться смягчить потенциальные атаки по побочным каналам, используются функции управления памятью низкого уровня из libsodium для безопасного стирания памяти ключей, файлов Gem и других конфиденциальных данных, создаваемых в процессе встраивания/извлечения.
Это также используется для предотвращения выгрузки конфиденциальных данных, таких как ключи, на диск.
Изображения можно рассматривать как зашифрованные одноразовые файловые папки или архивы.
Вы можете спрятать любое количество файлов в изображении, используя один пароль, ограниченное только емкостью встраивания изображения. Все они будут извлечены одновременно при вводе правильного пароля.
Gem Stream имеет накладные расходы в 52 байта, а каждый файл Gem — 8 байт.
HIDEAGEM пытается сжать все файлы Gem с помощью miniz (zlib) перед шифрованием, что иногда может значительно уменьшить количество встраиваемых байтов.
Максимальный размер файла для одного файла Gem и максимальное количество байтов, которые можно встроить в один Ocean, составляет 16 эксабайт.
В настоящее время HIDEAGEM поддерживает сокрытие нескольких наборов файлов с использованием нескольких паролей и одного изображения, однако пользовательский интерфейс для этой функции еще не разработан.
Способ работы также несколько специфичен: он иерархический: чтобы получить доступ к следующему набору файлов, вам понадобятся все пароли, которые были до него, в дополнение к паролю набора файлов.
Так что считайте это скрытой функцией, которая, вероятно, пока бесполезна.
Функция хеширования паролей Argon2id используется для генерации ключей на основе пароля, предоставленного пользователем.
Главный ключ генерируется с использованием параметров ключа INTERACTIVE, что обеспечивает значительную устойчивость к брутфорсу паролей по сравнению с использованием обычной хеш-функции для генерации ключа.
HIDEAGEM написан на C++ и может использоваться в Python через небольшой API.
Доступны пользовательские узлы для платформы ComfyUI Stable Diffusion, что упрощает интеграцию в рабочие процессы 2D-генеративного ИИ.
Используются следующие внешние библиотеки:
Все криптографические операции, такие как шифрование данных Gem, хеширование и генерация случайных чисел, выполняются с помощью функций libsodium.
Генерация ключей: хеш-функция BLAKE2b и алгоритм хеширования паролей Argon2id
Шифрование данных Gem: алгоритм симметричного шифрования XChaCha20-Poly1305 (256-битный ключ + 192-битный nonce)
Реализация CSPRNG: хеш BLAKE2b и потоковый шифр XChaCha20 (256-битное зерно + 192-битный nonce)
Кроме того, функции управления памятью низкого уровня из libsodium используются для управления конфиденциальными данными, такими как ключи и файлы Gem.
Небольшая библиотека для работы со строками Unicode. Она используется для нормализации паролей Unicode, чтобы они работали согласованно между разными системами.
Сжатие данных Gem выполняется с помощью miniz (реализация zlib) перед шифрованием.
Сохраняйте старые версии HIDEAGEM на случай, если потребуется перенести данные.
Небольшие изменения в коде HIDEAGEM на этом раннем этапе разработки могут нарушить обратную совместимость. Новые версии HIDEAGEM могут не извлекать Gems, скрытые более старыми версиями.
Эта проблема исчезнет, когда код будет считаться стабильным, так как система версий будет с этого момента использоваться для обеспечения обратной совместимости со всеми предыдущими версиями.
HIDEAGEM v.1 поставляется с некоторыми узлами для ComfyUI. Вы можете использовать их для сокрытия Gems в изображениях, созданных ИИ, или в любых изображениях, сохраненных на диске.
🚨 ПРЕДУПРЕЖДЕНИЕ: Узел сохранения изображений по умолчанию в ComfyUI показывает, что HIDEAGEM был использован в метаданных PNG !!!
Важно использовать узел SAVE IMAGE от HIDEAGEM, так как он не сохраняет эти метаданные в выходное изображение Gem PNG.
Узлы поставляются с примерами рабочих пространств, показывающими, как их использовать.
При поиске Gems в окне консоли потребуется ввод данных пользователем для сохранения Gems на диск, поэтому после запуска поиска Gem переключитесь на консоль ComfyUI, чтобы увидеть результат.
Как скомпилировать HIDEAGEM и все зависимости из исходного кода:
HIDEAGEM\builds\visual_studio\2022Бинарные файлы будут созданы в HIDEAGEM\bin
Для тестирования установите Python, затем:
pip install -r requirements.txt
python HIDEAGEM.py demo
Нажмите CTRL + C для выхода из демо.
Сначала установите cmake и make, затем:
git clone --recurse-submodules https://github.com/CYBERGEM777/HIDEAGEM
cd HIDEAGEM
make
Бинарные файлы будут созданы в HIDEAGEM/bin
Для тестирования установите python3, затем:
pip install -r requirements.txt
python HIDEAGEM.py demo
Нажмите CTRL + C для выхода из демо.
После сборки HIDEAGEM можно использовать через HIDEAGEM.py:
cd HIDEAGEM
pip install -r requirements.txt
python HIDEAGEM.py [ аргументы ]
HIDEAGEM может скрывать Gems (файлы) внутри любого другого файла, который HIDEAGEM называет битовым океаном (bit Ocean).
HIDEAGEM.py попытается определить, является ли входной Ocean файлом изображения, и если да, то будет использовать только байты пикселей изображения в качестве битового океана. Остальная часть файла изображения будет полностью отброшена, а изображение Gem будет сохранено в указанную выходную директорию как изображение .png с тем же именем файла, что и входное изображение.
Чтобы спрятать Gem, просто передайте HIDEAGEM Ocean, один или несколько файлов Gem и пароль. Если выходная директория не указана, сокрытие Gem будет выполнено, но результат не будет сохранен на диск.
python HIDEAGEM.py hide --ocean MORIA.JPEG --files RUBY.TXT EMERALD.TXT SAPPHIRE.TXT --output gem_images/ --password mellon
Текстовые файлы Gem будут скрыты внутри байтов пикселей, скопированных из MORIA.JPEG, и результирующее изображение Gem MORIA.PNG будет сохранено в директорию gem_images.
Если в качестве Ocean используется изображение RGBA, байты альфа-канала и RGB-байты полностью прозрачных пикселей не будут записаны.
Поиск Gems прост ( если у вас есть пароль ! ):
python HIDEAGEM.py find --ocean MORIA.PNG --output gem_images/ --password mellon
HIDEAGEM будет искать Gems в Ocean MORIA.PNG с паролем "mellon", и если они будут найдены, сохранит их в gem_images.
Если поиск Gem запущен без выходной директории, файлы Gem будут извлечены (если найдены), но ничего не будет сохранено на диск.
ПРЕДУПРЕЖДЕНИЕ: Экспериментальная функция !!! Используйте на свой страх и риск !
HIDEAGEM может наложить заклинание временной ловушки на Gems, чтобы усложнить брутфорс пароля.
Временные ловушки имеют уровень от 0 до 7, который изменяет время, необходимое для извлечения Gem и проверки пароля.
Уровень 0 не добавляет дополнительного времени: встраивание и извлечение Gem занимает столько же времени, сколько и без временной ловушки.
Уровни 1–7 имеют более длительное время извлечения: 1 — самое короткое, 7 — самое длинное.
При вводе правильного пароля Gem извлекается с использованием уровня временной ловушки, указанного при сокрытии Gem.
При вводе неправильного пароля из Ocean извлекается случайный уровень временной ловушки с высокой вероятностью поймать самый медленный:
УРОВЕНЬ 7 = 50% (1/2)
УРОВЕНЬ 6 = 25% (1/4)
УРОВЕНЬ 5 = 12.5% (1/8)
УРОВЕНЬ 4 = 6.25% (1/16)
УРОВЕНЬ 3 = 3.125% (1/32)
УРОВЕНЬ 2 = 1.5625% (1/64)
УРОВЕНЬ 1 = 0.78125% (1/128)
УРОВЕНЬ 0 = 0.39062% (1/256)
Около половины попыток брутфорса пароля выберут уровень 7, независимо от того, какой уровень был использован для сокрытия Gem (даже уровень 0).
Можно спрятать Gems, которые извлекаются менее чем за секунду, но попытка одного подбора пароля займет несколько минут.
Цена временной ловушки — удобство: случайный ввод неправильного пароля может стоить много времени, поэтому она не подходит для использования в контекстах, где требуется немедленная обратная связь о неправильном пароле.
Чтобы добавить временную ловушку к Gem, просто добавьте флаг --timetrap с необязательным уровнем от 0 до 7 (если не указан, выбирается 0):
python HIDEAGEM.py hide --ocean MORIA.JPEG --files DIAMOND.TXT --output gem_images/ --password mellon --timetrap [level]
Для поиска Gem с временной ловушкой просто добавьте флаг --timetrap (уровень указывать не нужно):
python HIDEAGEM.py find --ocean MORIA.PNG --output gem_images/ --password mellon --timetrap
Обратите внимание, что HIDEAGEM find не ищет автоматически Gems с временными ловушками, если его об этом не попросить.
Если вы хотите посмотреть, как HIDEAGEM генерирует случайные печати Gem, скрывая случайные данные в случайном Ocean, вы можете запустить демо-режим:
python HIDEAGEM.py demo
Если вы хотите увидеть, как HIDEAGEM максимально быстро прячет и находит Gems, вы можете запустить модульные тесты:
python HIDEAGEM.py unit
Нажмите CTRL + C для выхода из обоих режимов.
HIDEAGEM лицензирован по разрешительной лицензии + MAGIC AI LICENSE [ MAGIC-AL]