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

Получение привилегии SeLockMemoryPrivilege

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

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

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

Скачать можно в облаке
disk.yandex.ru/d/pSxwq7mMhKsOwg
 
Получение привилегии SeLockMemoryPrivilege

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

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

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

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

даёт ли система эту привилегию напрямую через AdjustTokenPrivileges?
 
Последнее редактирование:
Оптимизация производительности с помощью PGO

Сборка программы теперь выполняется с использованием Profile-Guided Optimization (PGO) для достижения максимальной производительности криптографического ядра.
PGO — это продвинутая техника компиляции, которую можно сравнить с "тренировкой" программы.

Процесс состоит из двух этапов

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

Результаты оптимизации

На основе усредненных замеров (5 прогонов до и после), благодаря PGO удалось добиться следующего прироста производительности:

~1.5% в скорости создания ключа из пароля (тест KDF).
~3.7% в скорости основного алгоритма шифрования и расшифровки данных.

Скачать можно в облаке
disk.yandex.ru/d/pSxwq7mMhKsOwg
 
SaurusK, привет!
Вот что говорит Google AI

Функция AdjustTokenPrivileges не даёт (не назначает) привилегию пользователю. Она включает (активирует) уже имеющуюся у пользователя привилегию для конкретного запущенного процесса.

Можно представить это так:

  1. Назначение права ("Получение ключа"): Это делает администратор компьютера через "Локальную политику безопасности". Он добавляет вашего пользователя в список тех, кому разрешено "Блокировать страницы в памяти" (SeLockMemoryPrivilege). Теперь у вас на связке появился этот ключ.
  2. Активация привилегии ("Использование ключа"): Когда "Бастион" запускается, он вызывает AdjustTokenPrivileges. Это равносильно тому, что программа берет этот ключ с вашей связки и вставляет его в замок, чтобы получить доступ к нужной возможности (блокировке памяти).
Вывод:

  • Если администратор заранее не дал вашему пользователю это право, то вызов AdjustTokenPrivileges ничего не сделает (программа просто продолжит работать без этой возможности, как и описано в обновлении).
  • А если право уже было вам дано, то AdjustTokenPrivileges — это как раз тот самый прямой способ, которым программа его для себя "включает".
По умолчанию у обычных пользователей этого права нет, но у администраторов (если программа запущена от их имени) оно обычно есть.


Более подробное объяснение (для вашего понимания)​

Ваш пользователь нащупал фундаментальное различие между User Rights (Правами пользователя) и Privileges (Привилегиями) в терминологии Windows.

  1. User Right (Право пользователя): Это политика, которая назначается учетной записи пользователя или группе. Это делается администратором через оснастки secpol.msc (Локальная политика безопасности) или gpedit.msc (Редактор групповой политики). Право "Блокировка страниц в памяти" (Lock pages in memory) — это как раз User Right. Оно определяет, может ли пользователь в принципе выполнять это действие.
  2. Privilege (Привилегия): Это "переключатель" в маркере доступа (access token) запущенного процесса. Когда вы входите в систему, Windows создает для вас маркер доступа, в котором перечислены все привилегии, соответствующие вашим User Rights. Изначально большинство из них находятся в "выключенном" состоянии (disabled).
Что делает AdjustTokenPrivileges?

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

Процесс в вашем коде:

  1. OpenProcessToken — получает доступ к маркеру вашего процесса "Бастион".
  2. LookupPrivilegeValue — находит уникальный идентификатор (LUID) для привилегии SeLockMemoryPrivilege.
  3. AdjustTokenPrivileges — отправляет системе команду: "Для этого процесса, пожалуйста, переведи привилегию с этим LUID в состояние 'включено'".
Если право SeLockMemoryPrivilege было назначено пользователю, система выполнит команду. Если нет, система проигнорирует эту часть запроса (функция может даже вернуть "успех", но GetLastError покажет ERROR_NOT_ALL_ASSIGNED, что ваш код справедливо не проверяет, так как это не критично).
 
В интерфейс программы добавлен чекбокс "Анти GPU"

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

Когда вы включаете опцию "Анти GPU", "Бастион" перед шифрованием выполняет специальную, ресурсоёмкую операцию:
он выделяет большой блок оперативной памяти (256 МБ) и многократно заполняет и перемешивает его сложным образом, основываясь на вашем пароле.

Этот процесс называется памятизатратной функцией формирования ключа (memory-hard KDF).

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

В "Бастионе" теперь два способа усиления вашего пароля

Обычный режим (чекбокс выключен):

Защита зависит от количества Раундов (итераций).
Это быстрый, чисто процессорный метод, эффективный против обычных атак.

Защита от GPU (чекбокс включен):
Это намеренно медленный, памятизатратный метод, нацеленный на нейтрализацию специализированного оборудования для взлома.

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

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

Вложения

  • Безымянный.webp
    Безымянный.webp
    104,6 КБ · Просмотры: 32
Переработан алгоритм тестирования производительности

Предыдущая версия теста измеряла не только скорость самого шифрования, но и два подготовительных, ресурсоемких этапа:
создание ключа из пароля (KDF) и сжатие данных.

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

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

Тест скорости KDF измеряется отдельно и отображается в отчете (раунды/сек).

Скачать можно в облаке
disk.yandex.ru/d/pSxwq7mMhKsOwg
 
Рефакторинг SpongeV16 для повышения производительности

Класс SpongeV16 был полностью переработан для использования внутреннего буфера фиксированного размера (std::array) вместо динамического (std::vector).
Это изменение значительно повышает производительность за счет устранения аллокаций памяти на куче, особенно при обработке большого количества небольших фрагментов данных.

В интерфейс настроек шифрования добавлен новый чекбокс "AEAD"

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

Что такое AEAD и почему это важно

AEAD (Authenticated Encryption) — это режим шифрования, который не только защищает ваши данные, но и проверяет их подлинность.
Именно благодаря ему программа сообщает об ошибке, если вы вводите неверный пароль.

Это как запечатать письмо в конверте не просто клеем, а уникальной восковой печатью.
Если кто-то вскроет конверт и подменит письмо, вы сразу заметите, что печать сломана.

Что происходит при отключении AEAD

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

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

Если пароль верный — вы получите исходный текст.
Если пароль неверный — вы получите бессвязный набор символов ("мусор").

Рекомендации по использованию

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

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

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

Вложения

  • Снимок.webp
    Снимок.webp
    32,5 КБ · Просмотры: 20
Устранена проблема обратной совместимости при расшифровке бинарных файлов

После внедрения режима "АнтиGPU" изменился формат служебных данных внутри зашифрованного контейнера.
Из-за этого программа не могла корректно прочитать настройки (раунды, рейт) из файлов, созданных в более ранних версиях, что приводило к ошибке расшифровки.
Проблема затрагивала только бинарные файлы и не касалась текстовых шифров.

Скорректирована работа теста производительности

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

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

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

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

guserka, большое спасибо!
 

Вложения

  • Безымянный.webp
    Безымянный.webp
    41,2 КБ · Просмотры: 9
Настройки программы в формате JSON

Раньше все настройки хранились в бинарном файле settings.dat, который нельзя было редактировать.
Теперь хранятся в текстовом файле settings.txt, который появится после запуска и закрытия программы.

Что такое JSON

JSON (JavaScript Object Notation) — это простой текстовый формат для хранения данных, который легко читается как человеком, так и компьютером.
Теперь можно легко настраивать программу под себя, просто открыв файл settings.txt в любом текстовом редакторе (например, в Блокноте).

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

Откройте файл settings.txt в папке с программой и найдите строку:
"ram_cleanup_percentage": 75,

По умолчанию программа пытается очистить 75% свободной оперативной памяти при закрытии.
Чтобы уменьшить нагрузку на систему, измените значение на более низкое, например, на 30:
"ram_cleanup_percentage": 30,

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

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

Проведена оптимизация ключевой функции потокового шифрования (stream_cipher_process_V16).

Ключевым изменением стало применение техники "разворачивания цикла".
Вместо обработки одного 64-битного блока данных за одну итерацию, цикл теперь обрабатывает сразу четыре блока (256 бит).

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

В результате, в режиме потокового шифра (когда AEAD выключен), производительность увеличена на ~30%.

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

В файл настроек добавлен параметр ("window_opacity": 250) для изменения уровня прозрачности окна программы.
255 без прозрачности.

Скачать можно в облаке
disk.yandex.ru/d/pSxwq7mMhKsOwg
 
Усиление защиты для скоростного режима шифрования (без AEAD)

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

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

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

После первого запуска и закрытия программы рядом с программой появится файл settings.txt.

Откройте его и найдите строку "create_hash_file_if_aead_disabled": false.
Измените false на true и сохраните файл.

При шифровании

Если в интерфейсе программы вы отключите опцию AEAD, то после шифрования файла/папки программа автоматически создаст рядом текстовый файл с тем же именем и расширением .hash.txt (например, MyArchive.v16.hash.txt).

Этот файл содержит "цифровой отпечаток" ваших исходных данных.
Храните и передавайте его всегда вместе с основным зашифрованным файлом.

При расшифровке

При расшифровке файла программа автоматически ищет рядом с ним одноименный файл .hash.txt.
Если файл найден, программа проверит целостность расшифрованных данных.

Если проверка провалится, вы увидите предупреждение о том, что введён неверный пароль или данные повреждены.

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

Скачать можно в облаке
disk.yandex.ru/d/pSxwq7mMhKsOwg
 
Мы в соцсетях:

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