Бастион V16 - Шифрование
Цитата: dehote9223 от 21.08.2025, 14:33Теперь QR коды сохраняются в разрешении 2115x2115 пикселей
Сохранить QR-код в виде BMP-файла можно, как и раньше, сделав двойной клик левой кнопкой мыши по его изображению.
Вы можете легко изменить целевое разрешение, отредактировав значение константы targetSize в функции SaveQrCodeAsBBmp:
const int targetSize = 2160;Вы могли заметить, что итоговое разрешение (например, 2115x2115) немного меньше целевого значения 2160, указанного в коде.
Это не ошибка, а намеренное поведение для сохранения идеальной четкости QR-кода.QR-код состоит из сетки маленьких квадратов (модулей).
Чтобы изображение было максимально четким и легко читалось сканерами, каждый такой модуль должен быть увеличен до идеального квадрата из пикселей (например, 15x15 пикселей, а не 15.3x15.3).
Программа берёт целевой размер 2160 и вычисляет самый большой возможный размер изображения, который позволяет сохранить эту идеальную квадратную структуру.
В результате получается разрешение, максимально близкое к целевому, но с гарантированно четкой геометрией.Ссылка та же
Теперь QR коды сохраняются в разрешении 2115x2115 пикселей
Сохранить QR-код в виде BMP-файла можно, как и раньше, сделав двойной клик левой кнопкой мыши по его изображению.
Вы можете легко изменить целевое разрешение, отредактировав значение константы targetSize в функции SaveQrCodeAsBBmp:
const int targetSize = 2160;
Вы могли заметить, что итоговое разрешение (например, 2115x2115) немного меньше целевого значения 2160, указанного в коде.
Это не ошибка, а намеренное поведение для сохранения идеальной четкости QR-кода.
QR-код состоит из сетки маленьких квадратов (модулей).
Чтобы изображение было максимально четким и легко читалось сканерами, каждый такой модуль должен быть увеличен до идеального квадрата из пикселей (например, 15x15 пикселей, а не 15.3x15.3).
Программа берёт целевой размер 2160 и вычисляет самый большой возможный размер изображения, который позволяет сохранить эту идеальную квадратную структуру.
В результате получается разрешение, максимально близкое к целевому, но с гарантированно четкой геометрией.
Ссылка та же
Цитата: dehote9223 от 22.08.2025, 09:49Двухуровневая маскировка
Ранее зашифрованные сообщения имели постоянное и узнаваемое начало (например, AABOIBgg...).
Эта особенность создавала уникальную "цифровую сигнатуру", которая позволяла системам анализа трафика (DPI) мгновенно и с высокой точностью определить, что текст зашифрован именно программой "Бастион".Это как если бы все секретные донесения отправлялись в одинаковых ярко-красных конвертах.
Даже не зная содержания, любой наблюдатель поймет, что это — секретное донесение, и сможет его отфильтровать.
Для решения этой проблемы была внедрена двухуровневая маскировка.Уровень 1: Рандомизация заголовка (включено всегда)
Служебные параметры (раунды, губка, рейт) были убраны из начала сообщения.
Теперь каждое сообщение начинается с криптографически случайных байт (соль и nonce).Устранен самый очевидный "отпечаток", префикс AABOIBgg... исчез навсегда.
Однако, хотя "цвет конверта" теперь всегда разный, у него все еще оставалась узнаваемая структура:
[длинный блок Base64].[короткий блок HEX-символов].Это все еще могло служить зацепкой для продвинутых систем анализа.
Уровень 2: Полная структурная маскировка (опция "Маска")
Это продвинутый уровень, который активируется чекбоксом "Маска" и обеспечивает максимальную скрытность.
Когда опция "Маска" включена, программа берет весь итоговый шифротекст (включая точку-разделитель и HMAC-подпись) и применяет к нему вторичное кодирование в Base64.Структура сообщения полностью скрывается
Без маски: +e2pA...iaOdYAAE4gGCAdQg==.2c5124...7537
С маской: K2UycEEuLi5pYU9kWUFB...jVTM0Y3NTM3==На выходе получается единый, монолитный блок Base64-символов без каких-либо разделителей, ассоциирующихся с программой "Бастион".
Такой текст становится неотличим от огромного количества других легитимных данных в интернете:
API-ключей, токенов авторизации, встроенных медиа-данных и т.д.Ключевые преимущества двухуровневой системы
1. Базовая рандомизация усложняет простую блокировку, а режим "Маска" делает ее практически невозможной.
2. Сообщение не просто шифруется, но и скрывает сам факт использования конкретной программы шифрования.
3. Пользователь сам выбирает необходимый уровень скрытности.Безопасность vs. Скрытность
Эти изменения не делают само шифрование математически более стойким.
Они повышают практическую скрытность и "живучесть" сообщения в агрессивной сетевой среде, приближая программу к принципам стеганографии.Полная обратная совместимость
Новая версия "Бастиона" сохраняет полную обратную совместимость и расшифровывает сообщения, созданные в предыдущих версиях программы.
Внутренние улучшения
Логика для команд "Вырезать", "Копировать", "Вставить", "Удалить" и "Выделить всё" была вынесена в единую вспомогательную функцию, что улучшило чистоту и читаемость кода.
Ссылка та же
Двухуровневая маскировка
Ранее зашифрованные сообщения имели постоянное и узнаваемое начало (например, AABOIBgg...).
Эта особенность создавала уникальную "цифровую сигнатуру", которая позволяла системам анализа трафика (DPI) мгновенно и с высокой точностью определить, что текст зашифрован именно программой "Бастион".
Это как если бы все секретные донесения отправлялись в одинаковых ярко-красных конвертах.
Даже не зная содержания, любой наблюдатель поймет, что это — секретное донесение, и сможет его отфильтровать.
Для решения этой проблемы была внедрена двухуровневая маскировка.
Уровень 1: Рандомизация заголовка (включено всегда)
Служебные параметры (раунды, губка, рейт) были убраны из начала сообщения.
Теперь каждое сообщение начинается с криптографически случайных байт (соль и nonce).
Устранен самый очевидный "отпечаток", префикс AABOIBgg... исчез навсегда.
Однако, хотя "цвет конверта" теперь всегда разный, у него все еще оставалась узнаваемая структура:
[длинный блок Base64].[короткий блок HEX-символов].
Это все еще могло служить зацепкой для продвинутых систем анализа.
Уровень 2: Полная структурная маскировка (опция "Маска")
Это продвинутый уровень, который активируется чекбоксом "Маска" и обеспечивает максимальную скрытность.
Когда опция "Маска" включена, программа берет весь итоговый шифротекст (включая точку-разделитель и HMAC-подпись) и применяет к нему вторичное кодирование в Base64.
Структура сообщения полностью скрывается
Без маски: +e2pA...iaOdYAAE4gGCAdQg==.2c5124...7537
С маской: K2UycEEuLi5pYU9kWUFB...jVTM0Y3NTM3==
На выходе получается единый, монолитный блок Base64-символов без каких-либо разделителей, ассоциирующихся с программой "Бастион".
Такой текст становится неотличим от огромного количества других легитимных данных в интернете:
API-ключей, токенов авторизации, встроенных медиа-данных и т.д.
Ключевые преимущества двухуровневой системы
1. Базовая рандомизация усложняет простую блокировку, а режим "Маска" делает ее практически невозможной.
2. Сообщение не просто шифруется, но и скрывает сам факт использования конкретной программы шифрования.
3. Пользователь сам выбирает необходимый уровень скрытности.
Безопасность vs. Скрытность
Эти изменения не делают само шифрование математически более стойким.
Они повышают практическую скрытность и "живучесть" сообщения в агрессивной сетевой среде, приближая программу к принципам стеганографии.
Полная обратная совместимость
Новая версия "Бастиона" сохраняет полную обратную совместимость и расшифровывает сообщения, созданные в предыдущих версиях программы.
Внутренние улучшения
Логика для команд "Вырезать", "Копировать", "Вставить", "Удалить" и "Выделить всё" была вынесена в единую вспомогательную функцию, что улучшило чистоту и читаемость кода.
Ссылка та же
Цитата: dehote9223 от 22.08.2025, 13:59
Цитата: dehote9223 от 22.08.2025, 18:01Внедрена более строгая и эффективная проверка целостности зашифрованных сообщений.
Ссылка та же
Внедрена более строгая и эффективная проверка целостности зашифрованных сообщений.
Ссылка та же
Цитата: Андрей от 22.08.2025, 18:46Привет. В последней версии так и не увидел бы чекбокс "маска", если бы не растянул интерфейс. Можно это как то оптимизировать, чтоб влезали все кнопки.
Привет. В последней версии так и не увидел бы чекбокс "маска", если бы не растянул интерфейс. Можно это как то оптимизировать, чтоб влезали все кнопки.
Цитата: dehote9223 от 22.08.2025, 20:49Андрей, привет!
Программа запоминает размеры окна, можно растянуть по ширине до нужного размераПока так
Андрей, привет!
Программа запоминает размеры окна, можно растянуть по ширине до нужного размера
Пока так
Цитата: dehote9223 от 23.08.2025, 09:39Внесены изменения в расположение элементов интерфейса, а также обновлен дизайн чекбоксов.
Устранена проблема, из-за которой при вставке отформатированного текста (например, из LibreOffice) в темной теме он оставался темным и был нечитаем.
Теперь цвет вставленного текста автоматически приводится в соответствие с выбранной темой оформления.Ссылка та же
Внесены изменения в расположение элементов интерфейса, а также обновлен дизайн чекбоксов.
Устранена проблема, из-за которой при вставке отформатированного текста (например, из LibreOffice) в темной теме он оставался темным и был нечитаем.
Теперь цвет вставленного текста автоматически приводится в соответствие с выбранной темой оформления.
Ссылка та же
Цитата: dehote9223 от 23.08.2025, 16:48Ранее были устранены неэффективные операции с памятью в главном цикле шифрования, что дало прирост производительности в 2.5 раза по сравнению с первоначальной версией.
Проведена дополнительная микро-оптимизация на уровне машинных инструкций.
Внутренние циклы алгоритма шифрования были "развернуты" вручную, что снижает накладные расходы на их выполнение и лучше использует конвейер современных процессоров.Это позволило получить еще 10-12% производительности сверх уже достигнутого ускорения
На первый взгляд, 10-12% — это скромный результат, но получить его поверх уже достигнутого 2.5-кратного ускорения — это признак предельной оптимизации.
Это та самая "финальная полировка", которая выжимает из кода максимум возможного, не жертвуя ни совместимостью, ни надежностью.Ссылка та же
Ранее были устранены неэффективные операции с памятью в главном цикле шифрования, что дало прирост производительности в 2.5 раза по сравнению с первоначальной версией.
Проведена дополнительная микро-оптимизация на уровне машинных инструкций.
Внутренние циклы алгоритма шифрования были "развернуты" вручную, что снижает накладные расходы на их выполнение и лучше использует конвейер современных процессоров.
Это позволило получить еще 10-12% производительности сверх уже достигнутого ускорения
На первый взгляд, 10-12% — это скромный результат, но получить его поверх уже достигнутого 2.5-кратного ускорения — это признак предельной оптимизации.
Это та самая "финальная полировка", которая выжимает из кода максимум возможного, не жертвуя ни совместимостью, ни надежностью.
Ссылка та же
Цитата: dehote9223 от 24.08.2025, 06:43Переход на аутентифицированное шифрование (AEAD)
AEAD (Authenticated Encryption with Associated Data) — это режим шифрования, который одновременно обеспечивает три столпа криптографической защиты:
1. Данные невозможно прочитать без ключа
2. Данные невозможно незаметно изменить
3. Данные были созданы именно владельцем ключаРаньше эти задачи решались в два этапа:
сначала данные шифровались, а затем для шифротекста отдельно создавалась цифровая "пломба" (HMAC) для проверки целостности.AEAD можно сравнить с современным сейф-контейнером.
Один поворот ключа одновременно и запирает его (шифрование), и активирует встроенную, несъемную пломбу (аутентификацию).Ключевые преимущества
AEAD исключает целый класс потенциальных ошибок в реализации, которые могли бы возникнуть при раздельном использовании шифрования и MAC-кодов.
Это обеспечивает "безопасность по умолчанию", невозможно зашифровать данные, не защитив их от подделки.Как это реализовано в Бастионе V16
Ключ, получаемый из вашего пароля и соли с помощью KDF, теперь делится на две независимые части:
1. Ключ шифрования
Используется для обеспечения конфиденциальности данных.2. Ключ аутентификации
Используется для создания тега аутентификации, гарантирующего целостность.Такое разделение полностью изолирует процессы шифрования и аутентификации, обеспечивая дополнительный слой защиты от гипотетических будущих атак.
Сначала данные сжимаются и шифруются, и только после этого от получившегося шифротекста вычисляется тег аутентификации.Все новые данные, которые вы шифруете, будут создаваться с использованием AEAD.
Сохранена обратная совместимость.Ссылка та же
Переход на аутентифицированное шифрование (AEAD)
AEAD (Authenticated Encryption with Associated Data) — это режим шифрования, который одновременно обеспечивает три столпа криптографической защиты:
1. Данные невозможно прочитать без ключа
2. Данные невозможно незаметно изменить
3. Данные были созданы именно владельцем ключа
Раньше эти задачи решались в два этапа:
сначала данные шифровались, а затем для шифротекста отдельно создавалась цифровая "пломба" (HMAC) для проверки целостности.
AEAD можно сравнить с современным сейф-контейнером.
Один поворот ключа одновременно и запирает его (шифрование), и активирует встроенную, несъемную пломбу (аутентификацию).
Ключевые преимущества
AEAD исключает целый класс потенциальных ошибок в реализации, которые могли бы возникнуть при раздельном использовании шифрования и MAC-кодов.
Это обеспечивает "безопасность по умолчанию", невозможно зашифровать данные, не защитив их от подделки.
Как это реализовано в Бастионе V16
Ключ, получаемый из вашего пароля и соли с помощью KDF, теперь делится на две независимые части:
1. Ключ шифрования
Используется для обеспечения конфиденциальности данных.
2. Ключ аутентификации
Используется для создания тега аутентификации, гарантирующего целостность.
Такое разделение полностью изолирует процессы шифрования и аутентификации, обеспечивая дополнительный слой защиты от гипотетических будущих атак.
Сначала данные сжимаются и шифруются, и только после этого от получившегося шифротекста вычисляется тег аутентификации.
Все новые данные, которые вы шифруете, будут создаваться с использованием AEAD.
Сохранена обратная совместимость.
Ссылка та же
Цитата: dehote9223 от 24.08.2025, 08:39Полное устранение криптографических отпечатков
После перехода на современный режим шифрования AEAD (Authenticated Encryption) была обнаружена особенность:
присутствовали статические блоки данных (криптографические "отпечатки").Эти отпечатки, хоть и не ослабляли стойкость самого шифрования, теоретически могли позволить идентифицировать трафик или файлы, обработанные программой "Бастион".
В этом обновлении данная особенность полностью устранена
NT+/ztRmUTPVvB1LmqJjiE2KaCh/9Pj+hegoo7o53+RnEtLiEuMKZJKanQ/7RjM9HtsfaUZqvbZ59mzR
pZcRBfnuyF9xsT9Gc+Y2/JFE+TpUSpu7LaMSfVEJfAi5F0nbxk/0cSkTRcWHgfqTo5gY8l4Dvpy/9MTf
eWapB3PFi8DijXH9Mh3uaXFmSR/z5PmphtPFAEAM4WkQuTipkqdWPxi+MwMunnRsBw+Kp2B/BuaAHjGoТеперь все служебные данные, включая маркер версии и параметры шифрования, маскируются с использованием уникального для каждого сообщения случайного числа (nonce).
В результате каждый новый шифротекст, созданный программой, является уникальным от первого до последнего байта.Визуально он неотличим от случайного набора данных, что лишает любого наблюдателя возможности сделать какие-либо выводы о программе, с помощью которой он был создан.
Шифр теперь выглядит как что-то абсолютно рандомное.Роль режима "Маска"
Несмотря на это значительное улучшение, режим "Маска" остается актуальным и рекомендуется для использования в сценариях, требующих максимальной скрытности.
Режим "Маска" (двойное кодирование Base64) маскирует сам факт того, что перед вами зашифрованное сообщение, представляя его как обычный текстовый блок, который может быть чем угодно — например, частью токена, ключа API или технического лога.
Ссылка та же
Полное устранение криптографических отпечатков
После перехода на современный режим шифрования AEAD (Authenticated Encryption) была обнаружена особенность:
присутствовали статические блоки данных (криптографические "отпечатки").
Эти отпечатки, хоть и не ослабляли стойкость самого шифрования, теоретически могли позволить идентифицировать трафик или файлы, обработанные программой "Бастион".
В этом обновлении данная особенность полностью устранена
NT+/ztRmUTPVvB1LmqJjiE2KaCh/9Pj+hegoo7o53+RnEtLiEuMKZJKanQ/7RjM9HtsfaUZqvbZ59mzR
pZcRBfnuyF9xsT9Gc+Y2/JFE+TpUSpu7LaMSfVEJfAi5F0nbxk/0cSkTRcWHgfqTo5gY8l4Dvpy/9MTf
eWapB3PFi8DijXH9Mh3uaXFmSR/z5PmphtPFAEAM4WkQuTipkqdWPxi+MwMunnRsBw+Kp2B/BuaAHjGo
Теперь все служебные данные, включая маркер версии и параметры шифрования, маскируются с использованием уникального для каждого сообщения случайного числа (nonce).
В результате каждый новый шифротекст, созданный программой, является уникальным от первого до последнего байта.
Визуально он неотличим от случайного набора данных, что лишает любого наблюдателя возможности сделать какие-либо выводы о программе, с помощью которой он был создан.
Шифр теперь выглядит как что-то абсолютно рандомное.
Роль режима "Маска"
Несмотря на это значительное улучшение, режим "Маска" остается актуальным и рекомендуется для использования в сценариях, требующих максимальной скрытности.
Режим "Маска" (двойное кодирование Base64) маскирует сам факт того, что перед вами зашифрованное сообщение, представляя его как обычный текстовый блок, который может быть чем угодно — например, частью токена, ключа API или технического лога.
Ссылка та же
Цитата: dehote9223 от 24.08.2025, 13:16Возврат к лучшему
Версия "без аллокаций", имеющая простую и понятную структуру циклов, показала значительный прирост производительности с флагом -march=native.
Версия с "развернутыми" вручную циклами, которая была немного быстрее в стандартной компиляции, с новым флагом оказалась медленнее.
Это произошло потому, что ручные изменения помешали компилятору применить его собственные, более совершенные эвристики, включая авто-векторизацию (использование SIMD-инструкций).Тестирование кода ("без аллокаций") на 1 000 000 итераций:
Без -march=native: ~3643 мс
С -march=native: ~3005 мсОсновываясь на этих данных, было принято решение вернуть код криптографического ядра к версии "без аллокаций".
Этот вариант, будучи скомпилированным с флагом -march=native, является абсолютным чемпионом по производительности, оставаясь при этом 100% совместимым и надежным.
Рекомендуемые команды для сборки с помощью Clang
32-битная версия (x86):
clang++ -Wall -Wextra -O3 -march=native -std=c++20 -s -o "$(NAME_PART).exe" "$(FILE_NAME)" "qrcodegen.cpp" "miniz.c" -static -mwindows -municode -lcomctl32 -lgdi32 -luser32 -lbcrypt -lmapi32 -lshlwapi -lwer -lpsapi
64-битная версия (x64):
clang++ -m64 -Wall -Wextra -O3 -march=native -std=c++20 -s -o "$(NAME_PART)_x64.exe" "$(FILE_NAME)" "qrcodegen.cpp" "miniz.c" -static -mwindows -municode -lcomctl32 -lgdi32 -luser32 -lbcrypt -lmapi32 -lshlwapi -lwer -lpsapi
Ссылка та же
Возврат к лучшему
Версия "без аллокаций", имеющая простую и понятную структуру циклов, показала значительный прирост производительности с флагом -march=native.
Версия с "развернутыми" вручную циклами, которая была немного быстрее в стандартной компиляции, с новым флагом оказалась медленнее.
Это произошло потому, что ручные изменения помешали компилятору применить его собственные, более совершенные эвристики, включая авто-векторизацию (использование SIMD-инструкций).
Тестирование кода ("без аллокаций") на 1 000 000 итераций:
Без -march=native: ~3643 мс
С -march=native: ~3005 мс
Основываясь на этих данных, было принято решение вернуть код криптографического ядра к версии "без аллокаций".
Этот вариант, будучи скомпилированным с флагом -march=native, является абсолютным чемпионом по производительности, оставаясь при этом 100% совместимым и надежным.
Рекомендуемые команды для сборки с помощью Clang
32-битная версия (x86):
clang++ -Wall -Wextra -O3 -march=native -std=c++20 -s -o "$(NAME_PART).exe" "$(FILE_NAME)" "qrcodegen.cpp" "miniz.c" -static -mwindows -municode -lcomctl32 -lgdi32 -luser32 -lbcrypt -lmapi32 -lshlwapi -lwer -lpsapi
64-битная версия (x64):
clang++ -m64 -Wall -Wextra -O3 -march=native -std=c++20 -s -o "$(NAME_PART)_x64.exe" "$(FILE_NAME)" "qrcodegen.cpp" "miniz.c" -static -mwindows -municode -lcomctl32 -lgdi32 -luser32 -lbcrypt -lmapi32 -lshlwapi -lwer -lpsapi
Ссылка та же
Цитата: Андрей от 24.08.2025, 13:44Привет. Вот такая ошибка.
https://www.upload.ee/files/18512270/2025-8-24_13-28-45.png.html
https://www.upload.ee/files/18512273/Screenshot_250824_133116.png.html
Привет. Вот такая ошибка.
https://www.upload.ee/files/18512270/2025-8-24_13-28-45.png.html
https://www.upload.ee/files/18512273/Screenshot_250824_133116.png.html
Цитата: dehote9223 от 24.08.2025, 15:56Андрей, привет!
А что за процессор на компьютере?https://drive.google.com/drive/u/1/folders/1IBgKxU5VDPVZuJikVevHNUxz1x01vOmI
Андрей, привет!
А что за процессор на компьютере?
https://drive.google.com/drive/u/1/folders/1IBgKxU5VDPVZuJikVevHNUxz1x01vOmI
Цитата: Андрей от 24.08.2025, 16:08DualCore Intel Core i3-2120, 3300 MHz (33 x 100)
DualCore Intel Core i3-2120, 3300 MHz (33 x 100)

