Вы должны войти, чтобы создавать сообщения и темы.

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

1◄Страница 6 из 24► 24

Теперь QR коды сохраняются в разрешении 2115x2115 пикселей

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

Вы можете легко изменить целевое разрешение, отредактировав значение константы targetSize в функции SaveQrCodeAsBBmp:
const int targetSize = 2160;

Вы могли заметить, что итоговое разрешение (например, 2115x2115) немного меньше целевого значения 2160, указанного в коде.
Это не ошибка, а намеренное поведение для сохранения идеальной четкости QR-кода.

QR-код состоит из сетки маленьких квадратов (модулей).
Чтобы изображение было максимально четким и легко читалось сканерами, каждый такой модуль должен быть увеличен до идеального квадрата из пикселей (например, 15x15 пикселей, а не 15.3x15.3).
Программа берёт целевой размер 2160 и вычисляет самый большой возможный размер изображения, который позволяет сохранить эту идеальную квадратную структуру.
В результате получается разрешение, максимально близкое к целевому, но с гарантированно четкой геометрией.

Ссылка та же

Двухуровневая маскировка

Ранее зашифрованные сообщения имели постоянное и узнаваемое начало (например, AABOIBgg...).
Эта особенность создавала уникальную "цифровую сигнатуру", которая позволяла системам анализа трафика (DPI) мгновенно и с высокой точностью определить, что текст зашифрован именно программой "Бастион".

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

Уровень 1: Рандомизация заголовка (включено всегда)

Служебные параметры (раунды, губка, рейт) были убраны из начала сообщения.
Теперь каждое сообщение начинается с криптографически случайных байт (соль и nonce).

Устранен самый очевидный "отпечаток", префикс AABOIBgg... исчез навсегда.

Однако, хотя "цвет конверта" теперь всегда разный, у него все еще оставалась узнаваемая структура:
[длинный блок Base64].[короткий блок HEX-символов].

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

Уровень 2: Полная структурная маскировка (опция "Маска")

Это продвинутый уровень, который активируется чекбоксом "Маска" и обеспечивает максимальную скрытность.
Когда опция "Маска" включена, программа берет весь итоговый шифротекст (включая точку-разделитель и HMAC-подпись) и применяет к нему вторичное кодирование в Base64.

Структура сообщения полностью скрывается

Без маски: +e2pA...iaOdYAAE4gGCAdQg==.2c5124...7537
С маской: K2UycEEuLi5pYU9kWUFB...jVTM0Y3NTM3==

На выходе получается единый, монолитный блок Base64-символов без каких-либо разделителей, ассоциирующихся с программой "Бастион".

Такой текст становится неотличим от огромного количества других легитимных данных в интернете:
API-ключей, токенов авторизации, встроенных медиа-данных и т.д.

Ключевые преимущества двухуровневой системы

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

Безопасность vs. Скрытность

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

Полная обратная совместимость

Новая версия "Бастиона" сохраняет полную обратную совместимость и расшифровывает сообщения, созданные в предыдущих версиях программы.

Внутренние улучшения

Логика для команд "Вырезать", "Копировать", "Вставить", "Удалить" и "Выделить всё" была вынесена в единую вспомогательную функцию, что улучшило чистоту и читаемость кода.

Ссылка та же

Лайкнул OnePunchMan
OnePunchMan

Помимо облака Яндекс

Файлы Бастиона продублированы в облаке Гугл

Внедрена более строгая и эффективная проверка целостности зашифрованных сообщений.
Ссылка та же

Привет. В последней версии так и не увидел бы чекбокс "маска", если бы не растянул интерфейс. Можно это как то оптимизировать, чтоб влезали все кнопки.

Андрей, привет!
Программа запоминает размеры окна, можно растянуть по ширине до нужного размера

Пока так

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

Устранена проблема, из-за которой при вставке отформатированного текста (например, из LibreOffice) в темной теме он оставался темным и был нечитаем.
Теперь цвет вставленного текста автоматически приводится в соответствие с выбранной темой оформления.

Ссылка та же

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

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

Это позволило получить еще 10-12% производительности сверх уже достигнутого ускорения

На первый взгляд, 10-12% — это скромный результат, но получить его поверх уже достигнутого 2.5-кратного ускорения — это признак предельной оптимизации.
Это та самая "финальная полировка", которая выжимает из кода максимум возможного, не жертвуя ни совместимостью, ни надежностью.

Ссылка та же

Переход на аутентифицированное шифрование (AEAD)

AEAD (Authenticated Encryption with Associated Data) — это режим шифрования, который одновременно обеспечивает три столпа криптографической защиты:

1. Данные невозможно прочитать без ключа
2. Данные невозможно незаметно изменить
3. Данные были созданы именно владельцем ключа

Раньше эти задачи решались в два этапа:
сначала данные шифровались, а затем для шифротекста отдельно создавалась цифровая "пломба" (HMAC) для проверки целостности.

AEAD можно сравнить с современным сейф-контейнером.
Один поворот ключа одновременно и запирает его (шифрование), и активирует встроенную, несъемную пломбу (аутентификацию).

Ключевые преимущества

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

Как это реализовано в Бастионе V16

Ключ, получаемый из вашего пароля и соли с помощью KDF, теперь делится на две независимые части:

1. Ключ шифрования
Используется для обеспечения конфиденциальности данных.

2. Ключ аутентификации
Используется для создания тега аутентификации, гарантирующего целостность.

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

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

Ссылка та же

Полное устранение криптографических отпечатков

После перехода на современный режим шифрования AEAD (Authenticated Encryption) была обнаружена особенность:
присутствовали статические блоки данных (криптографические "отпечатки").

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

В этом обновлении данная особенность полностью устранена

NT+/ztRmUTPVvB1LmqJjiE2KaCh/9Pj+hegoo7o53+RnEtLiEuMKZJKanQ/7RjM9HtsfaUZqvbZ59mzR
pZcRBfnuyF9xsT9Gc+Y2/JFE+TpUSpu7LaMSfVEJfAi5F0nbxk/0cSkTRcWHgfqTo5gY8l4Dvpy/9MTf
eWapB3PFi8DijXH9Mh3uaXFmSR/z5PmphtPFAEAM4WkQuTipkqdWPxi+MwMunnRsBw+Kp2B/BuaAHjGo

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

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

Роль режима "Маска"

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

Режим "Маска" (двойное кодирование Base64) маскирует сам факт того, что перед вами зашифрованное сообщение, представляя его как обычный текстовый блок, который может быть чем угодно — например, частью токена, ключа API или технического лога.

Ссылка та же

Лайкнул OnePunchMan
OnePunchMan

Возврат к лучшему

Версия "без аллокаций", имеющая простую и понятную структуру циклов, показала значительный прирост производительности с флагом -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

Ссылка та же

Привет. Вот такая ошибка.
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://drive.google.com/drive/u/1/folders/1IBgKxU5VDPVZuJikVevHNUxz1x01vOmI

DualCore Intel Core i3-2120, 3300 MHz (33 x 100)

1◄Страница 6 из 24► 24