Бастион V16 - Шифрование
Цитата: Андрей от 15.10.2025, 21:29Цитата: dehote9223 от 15.10.2025, 21:12Сохранение атрибутов файлов
Отлично,спасибо.
Цитата: dehote9223 от 15.10.2025, 21:12Сохранение атрибутов файлов
Отлично,спасибо.
Цитата: Андрей от 16.10.2025, 07:00dehote9223, Привет. Если я не пользуюсь Телегой и Тор, можно ли удалить файлы "curl.exe,curl-ca-bundle.crt,libcurl-x64.dll". Не скажется ли это на работе программы?
dehote9223, Привет. Если я не пользуюсь Телегой и Тор, можно ли удалить файлы "curl.exe,curl-ca-bundle.crt,libcurl-x64.dll". Не скажется ли это на работе программы?
Цитата: dehote9223 от 16.10.2025, 08:53Улучшение безопасности
Во всех сценариях, где создаются временные файлы с конфиденциальной информацией (зашифрованной или расшифрованной), реализована логика их безопасного уничтожения с помощью PerformSecureShred.
Улучшение безопасности
Во всех сценариях, где создаются временные файлы с конфиденциальной информацией (зашифрованной или расшифрованной), реализована логика их безопасного уничтожения с помощью PerformSecureShred.
Цитата: dehote9223 от 16.10.2025, 10:42Устранение двойного сжатия при шифровании папок
При шифровании папки программа сначала упаковывала все файлы и подкаталоги в ZIP-архив в оперативной памяти.
На этом этапе происходило внутреннее сжатие каждого файла внутри ZIP-архива с параметром MZ_DEFAULT_COMPRESSION.
Чекбокс "Сжатие" не влиял на этот внутренний процесс, поэтому он происходил всегда.В результате возникал избыточный процесс двойного сжатия:
сначала файлы сжимались при упаковке в ZIP-архив, а затем весь этот архив сжимался ещё раз основным алгоритмом.
Это приводило к лишней нагрузке на процессор и замедляло операцию.Отключено внутреннее сжатие:
В функциях zip_walk и ZipFolderToMemory флаг сжатия MZ_DEFAULT_COMPRESSION заменён на MZ_NO_COMPRESSION.
Теперь ZIP-архив используется исключительно как контейнер для сохранения структуры каталогов и имён файлов, не выполняя сжатия.Внешнее, более эффективное сжатие всего архива по-прежнему контролируется чекбоксом "Сжатие".
Устранение двойного сжатия при шифровании папок
При шифровании папки программа сначала упаковывала все файлы и подкаталоги в ZIP-архив в оперативной памяти.
На этом этапе происходило внутреннее сжатие каждого файла внутри ZIP-архива с параметром MZ_DEFAULT_COMPRESSION.
Чекбокс "Сжатие" не влиял на этот внутренний процесс, поэтому он происходил всегда.
В результате возникал избыточный процесс двойного сжатия:
сначала файлы сжимались при упаковке в ZIP-архив, а затем весь этот архив сжимался ещё раз основным алгоритмом.
Это приводило к лишней нагрузке на процессор и замедляло операцию.
Отключено внутреннее сжатие:
В функциях zip_walk и ZipFolderToMemory флаг сжатия MZ_DEFAULT_COMPRESSION заменён на MZ_NO_COMPRESSION.
Теперь ZIP-архив используется исключительно как контейнер для сохранения структуры каталогов и имён файлов, не выполняя сжатия.
Внешнее, более эффективное сжатие всего архива по-прежнему контролируется чекбоксом "Сжатие".
Цитата: dehote9223 от 16.10.2025, 15:40Цитата: Андрей от 16.10.2025, 07:00dehote9223, Привет. Если я не пользуюсь Телегой и Тор, можно ли удалить файлы "curl.exe,curl-ca-bundle.crt,libcurl-x64.dll". Не скажется ли это на работе программы?
Андрей привет, да, можно смело удалять
Цитата: Андрей от 16.10.2025, 07:00dehote9223, Привет. Если я не пользуюсь Телегой и Тор, можно ли удалить файлы "curl.exe,curl-ca-bundle.crt,libcurl-x64.dll". Не скажется ли это на работе программы?
Андрей привет, да, можно смело удалять
Цитата: dehote9223 от 19.10.2025, 13:32Оптимизация работы с оперативной памятью
Переработан процесс обработки данных при шифровании и расшифровке, чтобы значительно снизить потребление оперативной памяти и повысить общую безопасность приложения.
Как было
При шифровании больших объектов (например, папки размером 100 МБ), процесс создавал в памяти несколько полных копий данных, которые существовали одновременно.
Архивация в RAM (Копия 1):
Программа считывала папку и создавала в памяти ZIP-архив размером ~100 МБ.Сжатие (Копия 2):
Создавалась сжатая версия архива, например, ~70 МБ.
При этом исходный архив (Копия 1) оставался в памяти.100 МБ (Копия 1) + 70 МБ (Копия 2) = ~170 МБ
Шифрование (Копия 3):
Сжатые данные шифровались, создавая еще одну копию в ~70 МБ.
Копии 1 и 2 все еще находились в RAM.100 МБ + 70 МБ + 70 МБ = ~240 МБ
Формирование итогового пакета (Копия 4):
Зашифрованные данные со служебной информацией упаковывались в финальный пакет.Пиковое потребление RAM: > 300 МБ
Нагрузка на оперативную память могла в 3-4 раза превышать размер исходного файла.
Кроме того, незашифрованные данные оставались в памяти дольше, чем это было необходимо.Стало
Как только очередной этап обработки завершен, ненужная копия данных немедленно и безопасно очищается из памяти с помощью функции secure_zero_container, которая перезаписывает данные нулями перед освобождением.
Архивация в RAM (Копия 1):
Создается ZIP-архив на ~100 МБ.Сжатие (Копия 2):
Программа вызывает функцию сжатия, которая принимает Копию 1 (~100 МБ) и создает Копию 2 (~70 МБ).
В этот переходный момент в памяти находятся обе копии.Пиковое потребление RAM: ~100 МБ (Копия 1) + ~70 МБ (Копия 2) = ~170 МБ.
Сразу после успешного создания Копии 2, Копия 1 безопасно очищается.
Итоговое потребление после этого шага: ~70 МБ.Шифрование (Копия 3):
Функция шифрования берет Копию 2 (~70 МБ) и создает зашифрованную Копию 3 (также ~70 МБ).
В этот переходный момент в памяти находятся обе копии.Пиковое потребление RAM: ~70 МБ (Копия 2) + ~70 МБ (Копия 3) = ~140 МБ.
Сразу после успешного создания Копии 3, Копия 2 безопасно очищается.
Итоговое потребление после этого шага: ~70 МБ.Формирование итогового пакета (Копия 4):
Программа создает финальный пакет (Копия 4) и копирует в него зашифрованные данные из Копии 3 (~70 МБ) вместе со служебной информацией.
Пик в этот момент: ~70 МБ (Копия 3) + ~70 МБ (Копия 4) = ~140 МБ.
Сразу после этого Копия 3 очищается.Итоговое потребление: ~70 МБ (только финальный пакет).
Важное примечание
Несмотря на значительную оптимизацию, это не является потоковой обработкой данных.
Программе по-прежнему необходимо полностью загрузить исходный файл или папку (в виде архива) в оперативную память.Если объем свободной оперативной памяти недостаточен, операция будет прервана с ошибкой нехватки памяти (bad_alloc).
Оптимизация работы с оперативной памятью
Переработан процесс обработки данных при шифровании и расшифровке, чтобы значительно снизить потребление оперативной памяти и повысить общую безопасность приложения.
Как было
При шифровании больших объектов (например, папки размером 100 МБ), процесс создавал в памяти несколько полных копий данных, которые существовали одновременно.
Архивация в RAM (Копия 1):
Программа считывала папку и создавала в памяти ZIP-архив размером ~100 МБ.
Сжатие (Копия 2):
Создавалась сжатая версия архива, например, ~70 МБ.
При этом исходный архив (Копия 1) оставался в памяти.
100 МБ (Копия 1) + 70 МБ (Копия 2) = ~170 МБ
Шифрование (Копия 3):
Сжатые данные шифровались, создавая еще одну копию в ~70 МБ.
Копии 1 и 2 все еще находились в RAM.
100 МБ + 70 МБ + 70 МБ = ~240 МБ
Формирование итогового пакета (Копия 4):
Зашифрованные данные со служебной информацией упаковывались в финальный пакет.
Пиковое потребление RAM: > 300 МБ
Нагрузка на оперативную память могла в 3-4 раза превышать размер исходного файла.
Кроме того, незашифрованные данные оставались в памяти дольше, чем это было необходимо.
Стало
Как только очередной этап обработки завершен, ненужная копия данных немедленно и безопасно очищается из памяти с помощью функции secure_zero_container, которая перезаписывает данные нулями перед освобождением.
Архивация в RAM (Копия 1):
Создается ZIP-архив на ~100 МБ.
Сжатие (Копия 2):
Программа вызывает функцию сжатия, которая принимает Копию 1 (~100 МБ) и создает Копию 2 (~70 МБ).
В этот переходный момент в памяти находятся обе копии.
Пиковое потребление RAM: ~100 МБ (Копия 1) + ~70 МБ (Копия 2) = ~170 МБ.
Сразу после успешного создания Копии 2, Копия 1 безопасно очищается.
Итоговое потребление после этого шага: ~70 МБ.
Шифрование (Копия 3):
Функция шифрования берет Копию 2 (~70 МБ) и создает зашифрованную Копию 3 (также ~70 МБ).
В этот переходный момент в памяти находятся обе копии.
Пиковое потребление RAM: ~70 МБ (Копия 2) + ~70 МБ (Копия 3) = ~140 МБ.
Сразу после успешного создания Копии 3, Копия 2 безопасно очищается.
Итоговое потребление после этого шага: ~70 МБ.
Формирование итогового пакета (Копия 4):
Программа создает финальный пакет (Копия 4) и копирует в него зашифрованные данные из Копии 3 (~70 МБ) вместе со служебной информацией.
Пик в этот момент: ~70 МБ (Копия 3) + ~70 МБ (Копия 4) = ~140 МБ.
Сразу после этого Копия 3 очищается.
Итоговое потребление: ~70 МБ (только финальный пакет).
Важное примечание
Несмотря на значительную оптимизацию, это не является потоковой обработкой данных.
Программе по-прежнему необходимо полностью загрузить исходный файл или папку (в виде архива) в оперативную память.
Если объем свободной оперативной памяти недостаточен, операция будет прервана с ошибкой нехватки памяти (bad_alloc).
Цитата: dehote9223 от 20.10.2025, 09:05Функция безопасной очистки памяти при закрытии программы (CleanRamAndSensitiveVariables) была расширена для устранения потенциальных утечек конфиденциальной информации.
Теперь, помимо уже существующих механизмов, она выполняет следующие действия:Добавлено принудительное затирание содержимого основного текстового поля и поля для отправки сообщений в Telegram.
Реализована очистка буферов Undo/Redo для всех текстовых полей.
Ранее в этой истории могли сохраняться фрагменты удаленного или измененного текста, теперь эти данные также уничтожаются.Внедрена очистка сгенерированного QR-кода из памяти, который является полной копией отображаемых данных.
Усиление функции кнопки "Очистить"
Новая реализация выполняет полноценную процедуру безопасного затирания данных перед их удалением с экрана:
Перед очисткой, содержимое всех полей (основной текст, поле ответа Telegram, поля паролей) считывается и принудительно затирается с помощью RtlSecureZeroMemory.
Буферы истории изменений (Undo/Redo) для текстовых полей также сбрасываются.
Путь к текущему файлу теперь очищается через secure_zero_container.Усиление безопасности шредера
В однопоточную (ShredSingleStream_Sequential) и многопоточную (ShredSingleStream) реализации добавлена очистка буфера с помощью RtlSecureZeroMemory после завершения всех проходов перезаписи.
Принцип "Воздушного зазора"
Несмотря на все принятые меры по защите данных внутри программы "Бастион V16", итоговая безопасность вашей информации напрямую зависит от надежности операционной системы, на которой она запущена.
Современный компьютер, подключенный к интернету, всегда подвержен риску заражения вредоносным ПО, таким как клавиатурные шпионы (keyloggers), трояны или программы для удаленного доступа.
Такое ПО может перехватить ваш пароль в момент ввода или скопировать ваш исходный текст ещё до того, как он будет зашифрован.Для максимальной защиты наиболее критичных данных рекомендуется придерживаться следующей практики:
Выполняйте все операции шифрования и расшифровки на компьютере, который физически отключен от интернета и других сетей ("air-gapped" система).
В идеале, этот компьютер должен использоваться только для работы с конфиденциальными данными.Переносите зашифрованные данные (шифротекст) с изолированного компьютера на другие устройства с помощью внешних носителей, таких как USB-накопители или SD-карты.
Этот подход, известный как "воздушный зазор", изолирует сам процесс шифрования от онлайн-угроз.
Функция безопасной очистки памяти при закрытии программы (CleanRamAndSensitiveVariables) была расширена для устранения потенциальных утечек конфиденциальной информации.
Теперь, помимо уже существующих механизмов, она выполняет следующие действия:
Добавлено принудительное затирание содержимого основного текстового поля и поля для отправки сообщений в Telegram.
Реализована очистка буферов Undo/Redo для всех текстовых полей.
Ранее в этой истории могли сохраняться фрагменты удаленного или измененного текста, теперь эти данные также уничтожаются.
Внедрена очистка сгенерированного QR-кода из памяти, который является полной копией отображаемых данных.
Усиление функции кнопки "Очистить"
Новая реализация выполняет полноценную процедуру безопасного затирания данных перед их удалением с экрана:
Перед очисткой, содержимое всех полей (основной текст, поле ответа Telegram, поля паролей) считывается и принудительно затирается с помощью RtlSecureZeroMemory.
Буферы истории изменений (Undo/Redo) для текстовых полей также сбрасываются.
Путь к текущему файлу теперь очищается через secure_zero_container.
Усиление безопасности шредера
В однопоточную (ShredSingleStream_Sequential) и многопоточную (ShredSingleStream) реализации добавлена очистка буфера с помощью RtlSecureZeroMemory после завершения всех проходов перезаписи.
Принцип "Воздушного зазора"
Несмотря на все принятые меры по защите данных внутри программы "Бастион V16", итоговая безопасность вашей информации напрямую зависит от надежности операционной системы, на которой она запущена.
Современный компьютер, подключенный к интернету, всегда подвержен риску заражения вредоносным ПО, таким как клавиатурные шпионы (keyloggers), трояны или программы для удаленного доступа.
Такое ПО может перехватить ваш пароль в момент ввода или скопировать ваш исходный текст ещё до того, как он будет зашифрован.
Для максимальной защиты наиболее критичных данных рекомендуется придерживаться следующей практики:
Выполняйте все операции шифрования и расшифровки на компьютере, который физически отключен от интернета и других сетей ("air-gapped" система).
В идеале, этот компьютер должен использоваться только для работы с конфиденциальными данными.
Переносите зашифрованные данные (шифротекст) с изолированного компьютера на другие устройства с помощью внешних носителей, таких как USB-накопители или SD-карты.
Этот подход, известный как "воздушный зазор", изолирует сам процесс шифрования от онлайн-угроз.
Цитата: dehote9223 от 20.10.2025, 19:56Шифрование нескольких файлов и папок перетаскиванием
Теперь можно зашифровать сразу несколько объектов.
Просто выделите нужные файлы и папки и перетащите на значок программы "Бастион V16" или на окно запущенной программы.
Все выбранные объекты будут упакованы в единый, зашифрованный контейнер.Примечание
Возможность шифрования через контекстное меню (правый клик мыши) по-прежнему позволяет обрабатывать только один файл или одну папку за раз.
Для шифрования нескольких объектов используйте новый метод перетаскивания.
Шифрование нескольких файлов и папок перетаскиванием
Теперь можно зашифровать сразу несколько объектов.
Просто выделите нужные файлы и папки и перетащите на значок программы "Бастион V16" или на окно запущенной программы.
Все выбранные объекты будут упакованы в единый, зашифрованный контейнер.
Примечание
Возможность шифрования через контекстное меню (правый клик мыши) по-прежнему позволяет обрабатывать только один файл или одну папку за раз.
Для шифрования нескольких объектов используйте новый метод перетаскивания.
Цитата: dehote9223 от 21.10.2025, 08:14Улучшена кнопка интеграции с системой
Теперь её значок 🔌 меняет цвет, наглядно показывая, активна ли интеграция в данный момент:
Зелёный — интеграция с Windows включена.
Красный — интеграция отключена.Устранено избыточное диалоговое окно
При шифровании нескольких файлов/папок, после нажатия "Да" в окне с предложением "Уничтожить исходные файлы и папки?", появлялось второе окно "Вы уверены...?".
Теперь подтверждение запрашивается только один раз, как это и было при работе с одиночным файлом/папкой.
Улучшена кнопка интеграции с системой
Теперь её значок 🔌 меняет цвет, наглядно показывая, активна ли интеграция в данный момент:
Зелёный — интеграция с Windows включена.
Красный — интеграция отключена.
Устранено избыточное диалоговое окно
При шифровании нескольких файлов/папок, после нажатия "Да" в окне с предложением "Уничтожить исходные файлы и папки?", появлялось второе окно "Вы уверены...?".
Теперь подтверждение запрашивается только один раз, как это и было при работе с одиночным файлом/папкой.
Цитата: Андрей от 21.10.2025, 20:55Привет. Не корректно шифрует несколько папок. Имеем для шифрования 3 папки
Profiles_1
Profiles_2
Profiles_3После расшифровки получаем
Profiles_1
Profiles_2
Profiles_3
rofiles_1
rofiles_2
rofiles_3Причём первые три пустые.
WIN10x64
Привет. Не корректно шифрует несколько папок. Имеем для шифрования 3 папки
Profiles_1
Profiles_2
Profiles_3
После расшифровки получаем
Profiles_1
Profiles_2
Profiles_3
rofiles_1
rofiles_2
rofiles_3
Причём первые три пустые.
WIN10x64
Цитата: dehote9223 от 22.10.2025, 06:15Андрей, привет!
Я несколько раз попробовал зашифровать и расшифровать папки с аналогичными названиями, такой проблемы нет
Шифровал перетаскиванием трёх папок на значок программы и на окно
Также попробовал расшифровать перетаскиванием на значок программы и на окноКак именно происходит такой баг, твои действия?
Андрей, привет!
Я несколько раз попробовал зашифровать и расшифровать папки с аналогичными названиями, такой проблемы нет
Шифровал перетаскиванием трёх папок на значок программы и на окно
Также попробовал расшифровать перетаскиванием на значок программы и на окно
Как именно происходит такой баг, твои действия?
Цитата: dehote9223 от 22.10.2025, 07:57Андрей, баг выявлен, сейчас исправлю
Андрей, баг выявлен, сейчас исправлю
Цитата: dehote9223 от 22.10.2025, 08:30Исправлена ошибка повреждения архива
При одновременном шифровании нескольких папок, расположенных в корневом каталоге (например, C:\Folder1, C:\Folder2), возникала ошибка, которая приводила к искажению имён папок после расшифровки.
Проблема была вызвана некорректным вычислением относительных путей при создании ZIP-архива в памяти.Андрей, большое спасибо!
Исправлена ошибка повреждения архива
При одновременном шифровании нескольких папок, расположенных в корневом каталоге (например, C:\Folder1, C:\Folder2), возникала ошибка, которая приводила к искажению имён папок после расшифровки.
Проблема была вызвана некорректным вычислением относительных путей при создании ZIP-архива в памяти.
Андрей, большое спасибо!
Цитата: dehote9223 от 22.10.2025, 21:34Сборка программы теперь использует флаг -mssse3 для активации набора инструкций SSSE3.
Это повышает производительность в критически важных операциях (например, кодирование Base64, обработка данных).
Для работы программы необходим процессор с поддержкой SSSE3 (большинство моделей, выпущенных с 2006 года).clang++ -Wall -Wextra -O3 -std=c++23 -mssse3 -s -o "$(NAME_PART).exe" "$(FILE_NAME)" "lodepng.cpp" "qrcodegen.cpp" "miniz.c" "resources.o" -static -mwindows -municode -lcomctl32 -lgdi32 -luser32 -lbcrypt -lmapi32 -lshlwapi -lwer -lpsapi -lole32 -lshell32 -luuid
Сборка программы теперь использует флаг -mssse3 для активации набора инструкций SSSE3.
Это повышает производительность в критически важных операциях (например, кодирование Base64, обработка данных).
Для работы программы необходим процессор с поддержкой SSSE3 (большинство моделей, выпущенных с 2006 года).
clang++ -Wall -Wextra -O3 -std=c++23 -mssse3 -s -o "$(NAME_PART).exe" "$(FILE_NAME)" "lodepng.cpp" "qrcodegen.cpp" "miniz.c" "resources.o" -static -mwindows -municode -lcomctl32 -lgdi32 -luser32 -lbcrypt -lmapi32 -lshlwapi -lwer -lpsapi -lole32 -lshell32 -luuid