Бастион 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 КБ · Просмотры: 10
Переработан алгоритм тестирования производительности

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

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

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

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

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

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