Бастион 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
 
Исправлена ошибка повреждения архива

При одновременном шифровании нескольких папок, расположенных в корневом каталоге (например, C:\Folder1, C:\Folder2), возникала ошибка, которая приводила к искажению имён папок после расшифровки.
Проблема была вызвана некорректным вычислением относительных путей при создании ZIP-архива в памяти.

В облаке
disk.yandex.ru/d/pSxwq7mMhKsOwg
 
Сборка программы теперь использует флаг -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

В облаке
disk.yandex.ru/d/pSxwq7mMhKsOwg
 
Снижено пиковое потребление оперативной памяти во время расшифровки примерно на 20.1%
Это было достигнуто за счёт своевременной очистки промежуточных буферов данных, которые теперь не накапливаются в памяти.

В облаке
disk.yandex.ru/d/pSxwq7mMhKsOwg
 
Исправлена ошибка, приводившая к зависанию программы при уничтожении больших файлов

Полностью переработана функция многопоточного уничтожения файлов (ShredSingleStream).
Предыдущая реализация могла приводить к ошибкам записи и взаимной блокировке потоков (deadlock) на файлах большого размера (например, 256+ МБ), из-за чего программа переставала отвечать на запросы.
Новая версия использует более надежный метод буферизованной записи, улучшенную синхронизацию потоков и централизованную обработку ошибок.

В облаке
disk.yandex.ru/d/pSxwq7mMhKsOwg
 
Снижено пиковое потребление оперативной памяти во время расшифровки примерно на 31%

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

В облаке
disk.yandex.ru/d/pSxwq7mMhKsOwg
 
Повышение надежности функции уничтожения файлов

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

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

Полный путь уничтожения файла в "Бастионе"

Шаг 1: Подготовка и снятие защиты

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

Шаг 2: Уничтожение временных меток

Программа перезаписывает метаданные файла, связанные со временем: дату создания, дату последнего изменения и дату последнего доступа.
Все эти метки устанавливаются в нулевое значение (00:00:00, 1 января 1601 г.).
Это первый удар по криминалистической информации, который не позволяет узнать, когда файл был создан или использовался.

Шаг 3: Зачистка альтернативных потоков данных (ADS)

В файловой системе NTFS файлы могут иметь скрытые "карманы" данных, называемые альтернативными потоками.
Вредоносное ПО часто использует их для сокрытия своей активности.
"Бастион" находит все такие потоки, связанные с файлом, и уничтожает их содержимое с помощью трехпроходной перезаписи: сначала нулями (0x00), затем единицами (0xFF) и, наконец, криптографически стойкими случайными данными.
Это гарантирует, что никаких скрытых следов не останется.

Шаг 4: Полная перезапись содержимого

Это ключевой этап, который выполняется в три прохода для максимальной надежности:

Проход 1 (Нули): Весь файл, от первого до последнего байта, перезаписывается нулевыми байтами (0x00).
Проход 2 (Единицы): Затем файл полностью перезаписывается байтами 0xFF.
Проход 3 (Усиленные случайные данные): На последнем проходе содержимое перезаписывается криптографически стойкими случайными данными.

Для максимальной непредсказуемости этот процесс состоит из двух этапов:

Сначала запрашиваются данные у системного генератора (BCryptGenRandom).
Затем эти данные дополнительно перемешиваются с помощью криптографической губки SpongeV16 вместе с энтропией (случайной информацией), собранной из различных источников системы (например, списки процессов, таймеры высокого разрешения).

После этого шага исходное содержимое файла физически уничтожено (на HDD) или логически замещено (на SSD).

Шаг 5: Усечение файла и вызов TRIM (ключевое улучшение для SSD)

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

Шаг 6: Маскировка и сокрытие (переименование)

Теперь, когда файл пуст, программа начинает уничтожать его "личность". Файл трижды переименовывается в случайные, ничего не значащие имена (например, shd_A8F1.tmp), генерируемые в системной временной папке.
Эта операция перезаписывает запись о файле в главной файловой таблице (MFT), стирая его первоначальное имя.
С точки зрения системы, файл Секретные_Планы.docx перестает существовать, вместо него появляется временный файл-пустышка.

Шаг 7: Окончательное удаление

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

Если выбрана папка

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

В облаке
disk.yandex.ru/d/pSxwq7mMhKsOwg
 
Запись зашифрованных аудиосообщений (Alt + R)

Добавлена возможность создавать зашифрованные аудиозаписи, которые можно хранить или передавать, не опасаясь прослушивания.

Для чего это может пригодиться

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

Как это работает

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

Как записать

Нажмите кнопку с красным кружком (●) или сочетание клавиш Alt + R, чтобы начать запись.
Во время записи на кнопке будет отображаться таймер, произнесите вашу речь в микрофон.

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

Как прослушать

1. Перетащите файл .v16a на значок программы или на её открытое окно.

2. Откройте файл двойным кликом, для этого должна быть настроена ассоциация файлов:
Нажмите на кнопку с иконкой "вилки" (
🔌
) для интеграции с системой.
Если интеграция была включена в предыдущей версиии программы, отключите её (нажав на кнопку ещё раз), а затем включите снова.
Это необходимо, чтобы зарегистрировать новый формат аудиофайлов .v16a в системе.

После ввода верного пароля начнется циклическое воспроизведение аудио.
Чтобы остановить его, просто нажмите на кнопку, которая теперь будет отображать таймер воспроизведения (■).

В облаке
disk.yandex.ru/d/pSxwq7mMhKsOwg

Снимок.webp
 
Улучшение безопасности аудиосообщений

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

В облаке
disk.yandex.ru/d/pSxwq7mMhKsOwg
 
Справа от кнопки записи аудио (●) добавлена кнопка паузы (||)

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

В облаке
disk.yandex.ru/d/pSxwq7mMhKsOwg

Безымянный.webp
 
Добавлена возможность сохранять расшифрованное аудио

Для сохранения нажмите горячую клавишу Alt + S во время прослушивания аудиосообщения.
Откроется стандартное диалоговое окно "Сохранить как...".

Аудиоданные из оперативной памяти будут сохранены в формате .wav.
Это позволяет прослушивать файл в любых стандартных плеерах (MPC, VLC и др.) или проводить его детальный анализ в аудиоредакторах (например, Adobe Audition).

Улучшена потокобезопасность механизма записи звука

Существовала потенциальная гонка данных при доступе к буферу g_rawAudioBuffer.
Поток, отвечающий за запись звука (waveInProc), мог модифицировать буфер одновременно с тем, как основной поток программы пытался его прочитать и обработать после остановки записи.

Реализована синхронизация доступа к аудиобуферу с использованием критической секции (CRITICAL_SECTION).
Это гарантирует, что запись и чтение буфера никогда не происходят одновременно.

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

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