Допустим есть пароль для доступа к стороннему сервису.
Логично его сохранить. В открытом виде не охота.
Хоть и хранится все на сервере. Или норм?
Какие используете варианты?
Здравствуйте, vaa, Вы писали:
vaa>Допустим есть пароль для доступа к стороннему сервису. vaa>Логично его сохранить. В открытом виде не охота. vaa>Хоть и хранится все на сервере. Или норм? vaa>Какие используете варианты?
Сейчас на .Net Core можно писать исключительно серверные приложения — все, больше ничего нет.
Это раньше, когда писали десктопные приложения — то юзали Windows Protected Storage — там смысл был, чтобы если несколько юзеров используют один комп (каждый под своей учеткой) — то никто не смог бы спереть твой пароль.
А теперь хранить в базе данных, вестимо. Шифровать можно просто ключом, который храните в конфиге приложения.
Здравствуйте, Shmj, Вы писали:
S>Сейчас на .Net Core можно писать исключительно серверные приложения — все, больше ничего нет.
ну почему же? Desktop WPF, WinForms, MAUI, Uno, Eto.Forms, Avalonia.
S>Это раньше, когда писали десктопные приложения — то юзали Windows Protected Storage — там смысл был, чтобы если несколько юзеров используют один комп (каждый под своей учеткой) — то никто не смог бы спереть твой пароль.
Да, но его сильная сторона его же слабость. Что-то случилось с профилем или нужно перенести приложение придется заново настраивать пароль.
S>А теперь хранить в базе данных, вестимо. Шифровать можно просто ключом, который храните в конфиге приложения.
В симметричном шифровании рекомендуют использовать случайный IV.
Дастоточно ли использовать в качестве IV часть Key? Будет ли такой шифрт сгенерированнй из пароля достаточно надежным?
public static Aes CreateKey(string password, byte[] salt = null)
{
using var key = new Rfc2898DeriveBytes(password, salt ?? CreateSalt());
var easAlg = Aes.Create();
easAlg.Key = key.GetBytes(16);
easAlg.IV // <= ???? задать самостоятельно или хранить ???return easAlg;
}
или все же правильно хранить IV+ENC?
Нужно ли также для каждой шифровки создавать и хранить свою соль?
В любом случае сильно ли упростится взлом если для генерации соли не использовать генератор случайных чисел,
а также использовать какую-то фразу(в простом случае тот же пароль)?
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re[2]: Лучший способ хранения паролей в dotnet core
Здравствуйте, Shmj, Вы писали:
S>Здравствуйте, vaa, Вы писали:
vaa>>Допустим есть пароль для доступа к стороннему сервису. vaa>>Логично его сохранить. В открытом виде не охота. vaa>>Хоть и хранится все на сервере. Или норм? vaa>>Какие используете варианты?
Как вариант — службы типа Azure KeyVault, если это применимо архитектурой приложения.
S>Сейчас на .Net Core можно писать исключительно серверные приложения — все, больше ничего нет.
Да ладно! А куда вдруг делись WinForms, WPF, UWP, MAUI, Blazor, Xamarin и т.п. на .NET 6, например? 😱
Здравствуйте, vaa, Вы писали:
vaa>Какие используете варианты?
Все зависит от требований. Если требования предполагают какую либо разновидность сертификации — потребуется специальное решение типа HashiCorp Vault или Azure Key Vault. Если нет — используй ProtectedData с закатыванием пароля туда на стадии деплоймента.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[3]: Лучший способ хранения паролей в dotnet core
Здравствуйте, vaa, Вы писали:
S>>Сейчас на .Net Core можно писать исключительно серверные приложения — все, больше ничего нет. vaa>ну почему же? Desktop WPF, WinForms, MAUI
Это все в Windows. Ну есть же в Windows Credential Manager:
Re[2]: Лучший способ хранения паролей в dotnet core
Здравствуйте, Ночной Смотрящий, Вы писали:
НС>Здравствуйте, vaa, Вы писали:
vaa>>Какие используете варианты?
НС>Все зависит от требований. Если требования предполагают какую либо разновидность сертификации — потребуется специальное решение типа HashiCorp Vault или Azure Key Vault.
Сервисы не рассматривал, т.к. сертификация не нужна. Да и хранить пароли за бугром?
Если нет — используй ProtectedData с закатыванием пароля туда на стадии деплоймента.
нужна портабельности путем копирования.
к тому же
Поскольку он зависит от DPAPI, ProtectedData класс поддерживается только на платформе Windows.
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re[4]: Лучший способ хранения паролей в dotnet core
Здравствуйте, Shmj, Вы писали:
S>Здравствуйте, vaa, Вы писали:
S>>>Сейчас на .Net Core можно писать исключительно серверные приложения — все, больше ничего нет. vaa>>ну почему же? Desktop WPF, WinForms, MAUI
S>Это все в Windows. Ну есть же в Windows Credential Manager:
S>Image: 1638009640
Здравствуйте, vaa, Вы писали:
vaa>Сервисы не рассматривал, т.к. сертификация не нужна. Да и хранить пароли за бугром?
Vault это прежде всего онпрем решение.
vaa>нужна портабельности путем копирования.
Портабельность куда?
vaa>
vaa>Поскольку он зависит от DPAPI, ProtectedData класс поддерживается только на платформе Windows.
Кроссплатформенного решения штатно нет. Есть моновская реализация, она кроссплатформенна, но секурность ее — так себе, существенно хуже DPAPI.
Ну, либо самому реализовать, например так.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[4]: Лучший способ хранения паролей в dotnet core
Здравствуйте, Ночной Смотрящий, Вы писали:
НС>Портабельность куда?
Может быть для web-приложения достаточно мастер-пароль хранить в конфиге в открытом виде?
портабельность в том плане нужен способ хранить мастер-ключ. быть может в код зашить? НС>Ну, либо самому реализовать, например так.
да хороший пример, но он для вычисления хешей. а мне нужно именно шифрование.
допустим мастер-пароль хранится в конфиге, а шифрованые данные в базе.
насколько будет легко сломать такую защиту.
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re[5]: Лучший способ хранения паролей в dotnet core
Здравствуйте, vaa, Вы писали:
НС>>Портабельность куда? vaa>Может быть для web-приложения достаточно мастер-пароль хранить в конфиге в открытом виде?
Это бессмысленно. Либо ты секрет каким либо образом закидываешь при деплойменте, а в репе его нет, либо не морочишь никому голову и хранишь свои пароли в открытом виде. А все эти security by obscurity это только имитация бурной деятельности.
Здравствуйте, vaa, Вы писали:
vaa>Допустим есть пароль для доступа к стороннему сервису. vaa>Логично его сохранить. В открытом виде не охота. vaa>Хоть и хранится все на сервере. Или норм? vaa>Какие используете варианты?
В продакшене переменные окружения, для разработки секреты.
Re[2]: Лучший способ хранения паролей в dotnet core
Здравствуйте, vaa, Вы писали:
vaa>их же нельзя изолировать. vaa>любой может набрать в консоли set/env vaa>уж лучше файл.
Переменные среды — штатный способ передачи параметров в контейнер. И штатный же способ передачи кредов к Azure KeyVault в ажурную ВМ. Т.е. во взрослом решении будет примерно так:
в переменные среды передаются креды (сгенерированные автоматически при деплойменте и известные только сисадмину) к сервису хранения паролей, и из этого сервиса достаются уже пароли целевые.
А доступ к консоли сервиса человека, который не имеет права читать пароли — это не то, от чего защищаются.