Skip to content

Security ru RU

ArchiBot edited this page Mar 15, 2026 · 34 revisions

Безопасность

Шифрование

ASF на данный момент поддерживает следующие методы шифрования, как значения ECryptoMethod:

Значение Имя
0 PlainText
1 AES
2 ProtectedDataForCurrentUser
3 EnvironmentVariable
4 Файл

Их полное описание и сравнение вы найдёте ниже.

Настройка

Для создания зашифрованного пароля, например для использования в SteamPassword, вам нужно выполнить команду encrypt с соответствующим типом шифрования и вашим паролем в виде открытого текста. После этого, установите полученную зашифрованную строку в качестве значения для параметра SteamPassword, и, наконец, измените значение параметра PasswordFormat на соответствующее вашему методу шифрования. Некоторые форматы не требуют команды encrypt, например EnvironmentVariable или Файл, просто укажите для них соответствующий путь.


PlainText

Это самый простой и небезопасный способ хранения пароля, который определён как ECryptoMethod равный 0. ASF ожидает что строка будет в виде открытого текста - пароль в его явном виде. Это самый простой в использовании, и 100% совместимый со всеми конфигурациями, а потому и используемый по умолчанию способ хранения секретных данных, совершенно небезопасный для хранения.


AES

Считающийся безопасным по современным стандартам, способ хранения пароля AES определён как ECryptoMethod равный 1. ASF ожидает что строка будет base64-кодированнаой последовательностью символов, которая после декодирования даст AES-зашифрованный массив байт, который можно будет расшифровать используя вектор инициализации и ключ шифрования ASF.

Описанный выше метод гарантирует безопасность при условии что атакующему неизвестен встроенный ключ AES-шифрования, используемый для для шифрования и расшифровки паролей. ASF позволяет вам задать ключ с помощью аргумента командной строки --cryptkey, который вам следует использовать для максимальной безопасности. Если вы решите опустить его, ASF будет использовать свой собственный ключ, который известен и жёстко запрограммирован в приложении, и кто угодно может расшифровать пароль зашифрованный ASF. Это всё равно требует некоторых усилий и не так просто сделать, однако это возможно, и поэтому вам всегда следует использовать шифрование AES со своим собственным --cryptkey, который вы храните в секрете. Метод шифрования AES, используемый в ASF, предоставляет безопасность, которая должна удовлетворить желание сбалансировать простоту PlainText и сложность ProtectedDataForCurrentUser, однако настоятельно рекомендуется использовать его с пользовательским --cryptkey.

При правильном использовании (длинный, пользовательский --cryptkey), гарантирует высокую безопасность для безопасного хранения.


ProtectedDataForCurrentUser

будучи признана безопасной по современным стандартам, DPAPI способ хранения пароля определяется как ECryptoMethod из 2. Главное достоинство этого метода это одновременно и главный его недостаток - вместо использования ключа шифрования (как в методе AES) данные шифруются с помощью учетных данных пользователя, вошедшего в систему, а это значит что расшифровка данных возможна только на той же машине где они зашифрованы, и в добавок к этому только тем пользователем, который выполнил шифрование.

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

Пожалуйста, обратите внимание, на данный момент эта опция доступна только на машинах под управлением ОС Windows.


EnvironmentVariable

Memory-based хранилище, определенное как ECryptoMethod из 3. ASF будет считывать пароль из переменной среды с заданным именем, указанным в поле пароля (например, SteamPassword). Например, установка пароля SteamPassword на ASF_PASSWORD_MYACCOUNT и PasswordFormat в 3 приведет к оценке переменной среды ${ASF_PASSWORD_MYACCOUNT} и использованию того, что назначено ему в качестве пароля учетной записи.

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


Файл

Хранилище на основе файлов (File-based storage, возможно, вне директории ASF), определенное как ECryptoMethod из 4. ASF будет считывать пароль из пути к файлу, указанного в поле пароля (например, SteamPassword). Указанный путь может быть либо абсолютным, либо относительно "домашним" местоположения ASF (папка с конфигурацией внутри, принимая во внимание --path аргумент командной строки). Этот метод может использоваться, например, с помощью Docker secrets, , которые создают такие файлы, но также могут быть использованы вне Docker если вы сами создаете соответствующий файл. Например, установка SteamPassword в /etc/secrets/MyAccount.pass и PasswordFormat в 4 вызовет чтение ASF /etc/secrets/MyAccount.pass и использование всего, что записано в этот файл в качестве пароля учетной записи.

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


Рекомендации по шифрованию

Если совместимость для вас не проблема, и вы отлично понимаете, как работает метод ProtectedDataForCurrentUser , это опция рекомендована для сохранения пароля в ASF, так как она обеспечивает максимальную безопасность и удобство. Метод AES это хороший выбор для людей, которые хотят использовать свои конфигурационные файлы на любой машине, а PlainText это самый простой метод хранения пароля, если вы не против что любой может посмотреть его в файле JSON.

Имейте в виду, что все методы шифрования считаются небезопасными , если злоумышленник имеет доступ к вашему компьютеру. ASF должен иметь возможность расшифровать зашифрованные пароли, а если одна программа работающая на машине может это сделать, то любая программа работающая на той же машине тоже способна это сделать. ProtectedDataForCurrentUser это самый безопасный вариант, поскольку даже другой пользователь на том же ПК не сможет его расшифровать, но даже его можно расшифровать если кто-то украдёт ваши учётные данные и информацию о машине в добавок к конфигурационным файлам ASF.

Для продвинутых настроек вы можете использовать EnvironmentVariable и File. Они имеют ограниченную полезность, Окружающая переменная будет хорошей идеей, если вы хотите получить пароль через какое-то пользовательское решение и хранить его исключительно в памяти, а Файл хорош для примера с Docker секреты. Однако оба они не зашифрованы, так что вы в основном переносите риск из файла конфигурации ASF на то, что выберете из этих двух.

В дополнение к методам шифрования, описанным выше, также возможно избежать указания пароля вообще, например использовав пустую строку или значение null в SteamPassword. ASF при необходимости запросит ваш пароль, и не будет его нигде сохранять, только хранить в памяти запущенного процесса, пока вы его не закроете. Хотя это самый безопасный метод работы с паролями (они нигде не сохраняются), но и самый неудобный, поскольку вам нужно вручную вводить пароль при каждом запуске ASF (когда он требуется). Если для вас это не проблема, то это ваша лучшая безопасность, так как вы не можете протестировать то, что не существует.


Расшифровка

ASF не содержит никаких средств для расшифровки уже зашифрованных паролей, поскольку методы расшифровки используются только для внутреннего доступа к данным внутри процесса. Если вы хотите отменить процедуру шифрования, например для переноса ASF на другую машину при использовании ProtectedDataForCurrentUser, просто повторите процедуру с самого начала в новом окружении.


Хэширование

ASF на данный момент поддерживает следующие методы хеширования, как значения ECryptoMethod:

Имя Имя
0 PlainText
1 SCrypt
2 Pbkdf2

Их полное описание и сравнение вы найдёте ниже.

Настройка

In order to generate a hash, e.g. for IPCPassword usage, you should execute hash command with the appropriate hashing method that you chose and your original plain-text password. После этого, установите полученный хеш строки в качестве значения для параметра IPCPassword, и, наконец, измените значение параметра IPCPasswordFormat на соответствующее выбранному вами методу хеширования.


PlainText

Это самый простой и небезопасный способ хеширования пароля, который определён как EHashingMethod равный 0. ASF генерирует хеш, который совпадает с исходной строкой. Это самый простой в использовании, и 100% совместимый со всеми конфигурациями, а потому и используемый по умолчанию способ хранения секретных данных, совершенно небезопасный для хранения.


SCrypt

будучи признана безопасной по современным стандартам, SCrypt способ хэширования пароля определяется как EHashingMethod из 1. Для генерации массива байт ASF будет использовать реализацию SCrypt с использованием 8 блоков, 8192 итерациями, длиной хеша 32 и ключом шифрования в качестве соли. Полученные байты будут затем закодированы в строку в формате base64.

ASF позволяет вам задать соль для этого метода с помощью аргумента командной строки --cryptkey, который вам следует использовать для максимальной безопасности. Если вы решите опустить его, ASF будет использовать свой собственный ключ, который известен и жёстко запрограммирован в приложении, а значит хеширование будет менее безопасным.

При правильном использовании (пользовательский соль, длинный пароль), гарантирует высокую безопасность для безопасного хранения.


Pbkdf2

считая слабыми по нынешним стандартам, Pbkdf2 способ хеширования пароля определяется как EashingMethod из 2. ASF будет использовать реализацию Pbkdf2 с помощью итераций 10000 , 32 в качестве ключа шифрования в качестве соли с SHA-256 в качестве алгоритма hmac. Затем получаемые байты будут закодированы как строка base64.

ASF позволяет указать соль для этого метода через командный аргумент --cryptkey , , который вы должны использовать для максимальной безопасности. Если вы решите опустить его, ASF будет использовать свой собственный ключ, который известен и жёстко запрограммирован в приложении, а значит хеширование будет менее безопасным.


Рекомендации по хешированию

Если вы хотите использовать хеширование для хранения каких-то секретов, таких как IPCPassword, мы рекомендуем использовать SCrypt с пользовательской солью, поскольку это обеспечит приемлемую безопасность от попыток перебора.

Pbkdf2 доступен только из соображений совместимости, в основном потому, что у нас уже есть работоспособная (и необходимая) реализация этого метода для других целей применительно к платформе Steam (например, для ПИНа родительского контроля). Это тоже считается безопасным, но слабым по сравнению с альтернативами (например SCrypt).

Clone this wiki locally