Вы должны войти, чтобы создавать сообщения и темы.

Бастион V16 - Шифрование

1◄Страница 10 из 24► 24

Андрей, привет!
Дважды попробовал зашифровать и расшифровать .exe файл размером 200 Мб, успешно расшифровывает

Опиши свои действия

Цитата: dehote9223 от 07.09.2025, 12:08

Андрей, привет!
Опиши свои действия

Так чего описывать. Перетаскиваю файл (папку) с зажатым ALT в открытое окно программы. Файл (папка) шифруется по указанному мной пути. Далее при перетаскивании зашифрованного файла в окно программы требует двойной пароль для дальнейшего шифрования. Проверил прошлую версию, там работает правильно.

Режим "Сохранить как..." при шифровании с зажатой клавишей Alt

Зажмите клавишу Alt и перетащите файл или папку в окно программы.
После ввода пароля для шифрования появится окно "Сохранить как...".

Есть несколько сценариев

1. Стандартное сохранение:

Программа предложит название по умолчанию, и ваш файл или папка будут сохранены с корректным расширением .v16 (например, Документ.doc.v16 или СекретнаяПапка.v16).
Просто нажмите "Сохранить".

2. Маскировка данных:

В окне сохранения вы можете изменить название и расширение на любое другое.
Например, можно сохранить зашифрованный контейнер (неважно, был это файл или папка) как System32.dll, семейное_фото.jpg или просто notes без расширения.

Это позволяет скрыть сам факт наличия зашифрованных данных.

"Бастион" при открытии проанализирует содержимое и сам поймет, что его нужно расшифровать, независимо от названия.

3. Перезапись исходного файла:

Если хотите заменить оригинальный файл его зашифрованной версией, просто выберите этот исходный файл в окне "Сохранить как...".
Это удобный способ быстро защитить файл на его же месте.

Ссылка та же

Андрей, спасибо, пришлось немного повозиться!

Лайкнул Андрей
Андрей

В какие форматы лучше всего маскировать зашифрованные файлы

Главный принцип — правдоподобное отрицание.
Зашифрованный файл не должен вызывать вопросов: ни его расширение, ни размер, ни содержимое не должны выглядеть аномальными.

Он должен органично вписываться в папку хранения, как будто создан самой программой или системой.

Подходящие форматы

1. "Бесформенные" (универсальные, без строгой структуры)
Эти расширения позволяют любые данные — бинарные, случайные или большие.
Они не привлекают внимания, так как ассоциированы с системными или промежуточными файлами.

.dat (Data File): Универсальный вариант.
Может содержать что угодно — от баз данных до бинарных дампов.
Идеален для папок приложений.

.tmp (Temporary File): Временный "мусор" — бинарные данные выглядят естественно.

.bak (Backup File): Резервная копия любого формата и размера.
Подходит для больших файлов в папках бэкапов.

.cache (Cache File): Кэш часто бинарный, случайный и объемный.
Не вызывает подозрений в кэш-папках браузеров или ПО.

Пример

session.dat в папке настроек приложения (например, %AppData%\YourApp) или user_cache.cache в каталоге кэша (например, браузерный кэш).

2. "Специфичные для ПО" (требуют специализированного просмотра)

Эти форматы привязаны к приложениям, где содержимое бинарное и непрозрачное без соответствующего ПО.
Идеальны, если у вас установлена такая программа.

.sav / .save: Сохранения игр — всегда бинарные, с уникальной структурой.
Размер варьируется, никто не откроет без игры.

.pak / .res / .asset: Игровые ресурсы (текстуры, звуки, модели).
Большие бинарные контейнеры, ассоциированные с движками вроде Unity/Unreal.

.proj / .blend: Файлы проектов в графических/3D-программах (например, Blender для .blend).
Выглядят органично в папках проектов.

Пример

slot1.sav в папке сохранений игры (обычно Documents\My Games или AppData).
Для разработчиков — project_backup.proj в папке с кодом или активами.

Главное правило: файл должен быть естественным для своего расположения.
Правильная маскировка — это эффективный способ минимизировать риски обнаружения, но важно помнить, что она не защищает от целенаправленного криминалистического анализа (например, анализа энтропии файла).

Ссылка та же

Шифрование текста в PNG (Стеганография)

Теперь можно зашифровать текст и скрыть его непосредственно в пикселях PNG-изображения.
Для постороннего наблюдателя это будет выглядеть как обычная картинка, но "Бастион" сможет извлечь и расшифровать спрятанное сообщение.

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

Как зашифровать и спрятать текст в PNG-изображении

Запустите "Бастион V16" и укажите желаемое количество раундов KDF в поле "Раунды", раундов пермутации "Губки" и значение "Рэйт".
Эти настройки будут использованы для шифрования и сохранены внутри самого изображения для корректной расшифровки в будущем.

Рекомендуется сразу ввести и подтвердить пароль в полях ввода в верхней части окна.
Если вы пропустите этот шаг, программа все равно запросит пароль позже в отдельном диалоговом окне.

В главное текстовое поле введите или вставьте сообщение, которое хотите зашифровать.

Перетащите PNG-изображение на окно программы "Бастион".

Программа последовательно задаст вам два вопроса

Сначала может появиться стандартное сообщение:
"Есть несохраненные изменения. Сохранить их перед открытием нового файла?".
Это происходит потому, что вы ввели новый текст.
Нажмите "Нет".

Сразу после этого появится вопрос:
"Хотите зашифровать текущий текст в изображении [имя файла.png]?".
Нажмите "Да".

Ваш текст будет зашифрован с указанными параметрами и паролем, а затем внедрен в пиксели PNG-изображения.
Исходный файл изображения на вашем диске будет перезаписан новой версией, содержащей скрытые данные.

Как расшифровать текст из PNG-изображения

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

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

Разное

Устранен дублирующийся код в функциях для работы с реестром.
Шесть функций для управления интеграцией с контекстным меню (для файлов и папок) были объединены в три универсальные функции.

В диалоговой процедуре BenchWaitDlgProc был удален обработчик сообщения WM_COMMAND.
Этот блок кода был недостижим, так как соответствующее диалоговое окно не содержит элементов управления (кнопок), способных генерировать данное сообщение.

Ссылка та же

Лайкнули Nemiro56, Андрей и OnePunchMan
Nemiro56АндрейOnePunchMan

Улучшена проверка емкости PNG-изображений перед шифрованием

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

Ссылка та же

Лайкнул Андрей
Андрей

Устранено ограничение на объем вставляемого текста

При вставке в основное текстовое поле большого объема данных (более 64 КБ, что составляло примерно 1700 строк кода), текст обрезался.
Лимит на максимальный объем текста в поле ввода был снят.
Это исправлено путем замены устаревшей команды EM_SETLIMITTEXT на EM_EXLIMITTEXT, что позволяет приложению корректно обрабатывать тексты практически неограниченного размера.

Ссылка та же

Лайкнул Андрей
Андрей

dehote9223, 
Привет. Сейчас экспериментировал с шифрованием папок и файлов. Понял,что можно не заморачиваться с перетаскиванием с зажатым ALT. Просто перетащить файл (папку) на ярлык, зашифровать. Затем удалить у файла .V16. У зашифрованных папок сменить .V16 на своё. Ну это кто хочет по быстрому, не открывая окно программы.

Оптимизация криптографического ядра "SpongeV16"

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

Внутреннее состояние шифра теперь хранится в std::array вместо std::vector.
Это исключает медленные операции выделения памяти в куче (heap allocation) при каждом создании объекта и улучшает локальность данных, что делает работу процессорного кэша более эффективной.
Тесты показывают прирост скорости только от этого изменения примерно на 3-4%.

Ручное преобразование байтов в 32-битные слова заменено на современную комбинацию memcpy и std::byteswap (C++23).
Это позволяет компилятору использовать высокопроизводительные специализированные инструкции процессора (bswap), дополнительно ускоряя обработку данных.

Эффективное управление памятью

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

Ключевые функции были переписаны для работы с существующими буферами памяти через std::span вместо постоянного создания и возврата новых векторов.
Это значительно сокращает количество медленных операций выделения памяти и уменьшает её фрагментацию при длительной работе.

Качество кода и рефакторинг

Низкоуровневые reinterpret_cast при работе с файлом настроек заменены на современный и безопасный std::bit_cast (C++20), что повышает надежность кода.
Некоторые функции, принимавшие ранее std::vector, теперь используют std::span, что делает их более гибкими и эффективными.

Ссылка та же

Андрей, конечно, так даже быстрее )

Лайкнул Андрей
Андрей

Функции кодирования и декодирования Base64 (base64_encode, base64_decode) были полностью переписаны.
Устранены ручные манипуляции с индексами и циклами while, которые могли приводить к ошибкам.
Новая реализация использует современный подход с std::span и циклами for с фиксированным шагом.
Это делает код более читаемым, безопасным и декларативным, так как логика обработки порций данных ("чанков") становится очевидной.

В функции потокового шифрования (stream_cipher_process_V16) стандартный цикл for, выполняющий операцию XOR, был заменен на более современный алгоритм std::ranges::transform.
Тестирование показало, что производительность осталась на прежнем уровне, в пределах статистической погрешности.
Это подтверждает, что исходный цикл for уже был скомпилирован максимально эффективно, и скорость операции была ограничена пропускной способностью памяти, а не самими вычислениями.

Ссылка та же

Улучшение точности теста производительности

В тест производительности добавлен обязательный этап "прогрева" для получения более точных и стабильных результатов.
Теперь каждый отдельный замер предваряется короткой подготовительной операцией, которая не учитывается в итоговом времени.

Тест создания ключа (KDF):
Перед основным тестом выполняется предварительный расчет на 10% от заданного числа раундов.

Тест скорости шифрования:
Перед замером скорости для каждой конфигурации (например, "Самый быстрый", "Надежный" и т.д.) выполняется тестовое шифрование небольшого блока данных (128 КБ).

Зачем это нужно

Современные процессоры в целях энергосбережения не работают постоянно на максимальной частоте.
"Прогрев" заставляет процессор выйти на пиковую и стабильную производительность перед началом замера.

Во время прогрева инструкции и данные, необходимые для вычислений, загружаются в быструю кэш-память процессора.
Это исключает "холодный старт", когда первые операции выполняются медленнее из-за ожидания данных из основной памяти.

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

Как запустить тест

С помощью горячих клавиш Alt + B.
Нажав на кнопку со значком секундомера (⏱️) в главном окне программы.

Ссылка та же

Повышение производительности функции создания ключа (KDF)

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

Что было сделано

В наиболее нагруженном цикле функции создания ключа было устранено создание временного массива для счетчика на каждой итерации.
За счет использования современных возможностей C++23 (std::byteswap) и более прямого доступа к памяти удалось значительно снизить накладные расходы.

Криптографические константы были объявлены как constexpr.
Это позволяет компилятору на этапе сборки программы встраивать их значения напрямую в код, что открывает возможности для более агрессивных и эффективных оптимизаций.

Тесты показывают, что производительность функции формирования ключа (KDF) увеличилась примерно на 9%.
Это напрямую ускоряет запуск операций шифрования и расшифровки.

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

Ссылка та же

Полностью переработан и значительно ускорен основной модуль аутентифицированного шифрования DuplexAEAD.
Вместо медленной побайтовой обработки данных теперь используется высокоэффективная пословная обработка (word-by-word), аналогичная той, что применяется в криптографической губке SpongeV16.
Это изменение дало наибольший прирост производительности и напрямую влияет на скорость шифрования и расшифровки больших объемов текста и файлов.

Оптимизирована функция base64_encode, отвечающая за преобразование зашифрованных бинарных данных в текст.
Устранены лишние накладные расходы в основном цикле обработки данных, что ускорило операцию кодирования.
Хотя это изменение менее масштабно, чем оптимизация AEAD, оно вносит свой вклад в общее повышение скорости работы программы, особенно при шифровании текста.

Ссылка та же

Перетаскивание текста (Drag and Drop)

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

Выделенный в Бастионе текст (например, результат шифрования) можно перетащить обратно в браузер.

Возможно, функция будет работать и с другими приложениями, поддерживающими ввод текста (например, десктопной версией Telegram).

Ссылка та же

Лайкнули Psydiant и OnePunchMan
PsydiantOnePunchMan
1◄Страница 10 из 24► 24