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

Устранение двойного сжатия при шифровании папок

При шифровании папки программа сначала упаковывала все файлы и подкаталоги в ZIP-архив в оперативной памяти.
На этом этапе происходило внутреннее сжатие каждого файла внутри ZIP-архива с параметром MZ_DEFAULT_COMPRESSION.
Чекбокс "Сжатие" не влиял на этот внутренний процесс, поэтому он происходил всегда.

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

Отключено внутреннее сжатие:
В функциях zip_walk и ZipFolderToMemory флаг сжатия MZ_DEFAULT_COMPRESSION заменён на MZ_NO_COMPRESSION.
Теперь ZIP-архив используется исключительно как контейнер для сохранения структуры каталогов и имён файлов, не выполняя сжатия.

Внешнее, более эффективное сжатие всего архива по-прежнему контролируется чекбоксом "Сжатие".

Скачать можно в облаке
disk.yandex.ru/d/pSxwq7mMhKsOwg
 
Оптимизация работы с оперативной памятью

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

Как было

При шифровании больших объектов (например, папки размером 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).

Скачать можно в облаке
disk.yandex.ru/d/pSxwq7mMhKsOwg
 
Функция безопасной очистки памяти при закрытии программы (CleanRamAndSensitiveVariables) была расширена для устранения потенциальных утечек конфиденциальной информации.
Теперь, помимо уже существующих механизмов, она выполняет следующие действия:

Добавлено принудительное затирание содержимого основного текстового поля и поля для отправки сообщений в Telegram.

Реализована очистка буферов Undo/Redo для всех текстовых полей.
Ранее в этой истории могли сохраняться фрагменты удаленного или измененного текста, теперь эти данные также уничтожаются.

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

Усиление функции кнопки "Очистить"

Новая реализация выполняет полноценную процедуру безопасного затирания данных перед их удалением с экрана:
Перед очисткой, содержимое всех полей (основной текст, поле ответа Telegram, поля паролей) считывается и принудительно затирается с помощью RtlSecureZeroMemory.
Буферы истории изменений (Undo/Redo) для текстовых полей также сбрасываются.
Путь к текущему файлу теперь очищается через secure_zero_container.

Усиление безопасности шредера

В однопоточную (ShredSingleStream_Sequential) и многопоточную (ShredSingleStream) реализации добавлена очистка буфера с помощью RtlSecureZeroMemory после завершения всех проходов перезаписи.

Принцип "Воздушного зазора"

Несмотря на все принятые меры по защите данных внутри программы "Бастион V16", итоговая безопасность вашей информации напрямую зависит от надежности операционной системы, на которой она запущена.
Современный компьютер, подключенный к интернету, всегда подвержен риску заражения вредоносным ПО, таким как клавиатурные шпионы (keyloggers), трояны или программы для удаленного доступа.
Такое ПО может перехватить ваш пароль в момент ввода или скопировать ваш исходный текст ещё до того, как он будет зашифрован.

Для максимальной защиты наиболее критичных данных рекомендуется придерживаться следующей практики:

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

Переносите зашифрованные данные (шифротекст) с изолированного компьютера на другие устройства с помощью внешних носителей, таких как USB-накопители или SD-карты.
Этот подход, известный как "воздушный зазор", изолирует сам процесс шифрования от онлайн-угроз.

Скачать можно в облаке
disk.yandex.ru/d/pSxwq7mMhKsOwg
 
  • Нравится
Реакции: Сергей Попов
Шифрование нескольких файлов и папок перетаскиванием

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

Примечание

Возможность шифрования через контекстное меню (правый клик мыши) по-прежнему позволяет обрабатывать только один файл или одну папку за раз.
Для шифрования нескольких объектов используйте новый метод перетаскивания.

Скачать можно в облаке
disk.yandex.ru/d/pSxwq7mMhKsOwg
 
Улучшена кнопка интеграции с системой

Теперь её значок
🔌
меняет цвет, наглядно показывая, активна ли интеграция в данный момент:
Зелёный — интеграция с Windows включена.
Красный — интеграция отключена.

Устранено избыточное диалоговое окно

При шифровании нескольких файлов/папок, после нажатия "Да" в окне с предложением "Уничтожить исходные файлы и папки?", появлялось второе окно "Вы уверены...?".
Теперь подтверждение запрашивается только один раз, как это и было при работе с одиночным файлом/папкой.

В облаке
disk.yandex.ru/d/pSxwq7mMhKsOwg
 
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab