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

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

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

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

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

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

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

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

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

Скачать можно в облаке
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, что ваш код справедливо не проверяет, так как это не критично).
 
Мы в соцсетях:

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