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

Механизм защиты от создания дампов памяти был заменен на штатную, документированную технологию Windows (WerSetFlags).
Теперь, в случае непредвиденного сбоя, операционная система не будет автоматически создавать копию (дамп) памяти процесса, что предотвращает утечку чувствительных данных.

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

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

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

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

Скачать можно в облаке
disk.yandex.ru/d/pSxwq7mMhKsOwg
 
Теперь вы можете не только искать текст (Ctrl + F), но и вносить изменения.

Функция "Заменить" позволяет постепенно заменять найденные символы.
"Заменить всё" заменяет все найденные символы одновременно.

Скачать можно в облаке
disk.yandex.ru/d/pSxwq7mMhKsOwg
 
Генерация QR-кодов (Alt + Q)

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

Максимальный объем текста для кодирования в QR-код составляет 2331 байт

Важно понимать, что количество символов, которое можно закодировать, зависит от языка.
Например, латинские буквы и цифры занимают по 1 байту, в то время как кириллические символы в кодировке UTF-8 — по 2 байта.
Таким образом, в QR-код поместится примерно в два раза меньше кириллического текста, чем латинского.

Следует учитывать, что процесс шифрования значительно увеличивает размер исходного текста из-за добавления служебных данных (соль, nonce, HMAC-тег) и кодирования в Base64.
Поэтому для успешной генерации QR-кода исходный открытый текст должен быть существенно меньше указанного лимита.

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

Вы можете сохранить сгенерированный QR-код как BMP-файл, сделав двойной щелчок левой кнопкой мыши по его изображению.

Скачать можно в облаке, лежит в папке Bastion V16 + QR
disk.yandex.ru/d/pSxwq7mMhKsOwg
 
Создана единая функция DecryptAndVerify для расшифровки данных и проверки их целостности (HMAC).

Ранее схожий код для расшифровки находился в двух местах:
в функции для расшифровки текста в окне (OnDecryptClick) и в функции для проверки сохраненного файла (VerifySavedFile).
Теперь обе функции обращаются к DecryptAndVerify.

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

Скачать можно в облаке
 
Интегрирован архиватор miniz для сжатия данных перед шифрованием

Это значительно уменьшает итоговый размер зашифрованного текста, что особенно полезно при работе с большими объёмами информации и при создании QR-кодов.
Уменьшенный размер шифротекста особенно полезен при генерации QR-кодов, поскольку теперь в один QR-код можно уместить гораздо больше полезной информации.

Сжатие включено постоянно и по умолчанию работает на уровне 6 (Z_DEFAULT_COMPRESSION), что обеспечивает оптимальный баланс между скоростью и степенью сжатия.
Вы можете изменить этот параметр вручную в исходном коде, в функции compress_data, изменив последний аргумент в вызове функции compress2.

Доступные варианты:

MZ_NO_COMPRESSION (0): Без сжатия.
MZ_BEST_SPEED (1): Максимальная скорость, минимальное сжатие.
MZ_DEFAULT_COMPRESSION (6): Оптимальный баланс (используется по умолчанию).
MZ_BEST_COMPRESSION (9): Максимальное сжатие, минимальная скорость.

Сохранена обратная совместимость с предыдущими версиями.

Скачать можно в облаке
disk.yandex.ru/d/pSxwq7mMhKsOwg
 
Устранена проблема в темной теме.
При изменении размера шрифта с помощью Ctrl + колесо мыши приводило к сбросу цвета текста со светлого на черный.

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

Ранее, логика для считывания паролей из полей ввода, проверки их на пустоту и сверки на совпадение была скопирована в двух функциях:
OnEncryptClick (при шифровании) и OnDecryptClick (при расшифровке).

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

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

В дополнение к стандартному переходу вперед по клавише Tab, была реализована возможность перемещаться назад, на предыдущий элемент, с помощью сочетания Shift + Tab.

Скачать можно в облаке
disk.yandex.ru/d/pSxwq7mMhKsOwg
 
SpongeV16 (SV16)

SpongeV16.h - Главный заголовочный файл
SpongeV16.cpp - Файл реализации
miniz.h, miniz.c - Библиотека для сжатия данных
example.cpp - Пример использования
example 2.cpp - Пример использования (раунды KDF и губки)

Интеграция в проект

Скопируйте исходные файлы (SpongeV16.h, SpongeV16.cpp, miniz.h, miniz.c) в папку с вашим проектом.

Подключите заголовочный файл: #include "SpongeV16.h"

При компиляции добавьте SpongeV16.cpp и miniz.c к списку исходных файлов вашего проекта.

Для успешной сборки необходимо подключить следующие системные библиотеки:
bcrypt.lib (для криптографического генератора случайных чисел)
psapi.lib (для сбора дополнительной энтропии)

Пример команды (clang++):
clang++ -o my_app.exe my_app.cpp SpongeV16.cpp miniz.c -lbcrypt -lpsapi
 
Убрана обязательная ручная инициализация


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

Теперь библиотека использует механизм "ленивой (автоматической) инициализации".
Внутренняя подготовка (например, запуск потока для сбора энтропии) выполняется автоматически и потокобезопасно при первом вызове "Encrypt()" или "Decrypt()".
Это реализовано с помощью стандартного механизма C++ "std::call_once".

Преимущества

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

Что нужно сделать

Удалите все вызовы "SpongeV16::Initialize()" из вашего кода.
 
Мы в соцсетях:

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