Лучший способ хранения паролей в dotnet core
От: vaa  
Дата: 24.11.21 03:25
Оценка:
Допустим есть пароль для доступа к стороннему сервису.
Логично его сохранить. В открытом виде не охота.
Хоть и хранится все на сервере. Или норм?
Какие используете варианты?
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re: Лучший способ хранения паролей в dotnet core
От: Shmj Ниоткуда  
Дата: 24.11.21 04:17
Оценка: 10 (1) -4
Здравствуйте, vaa, Вы писали:

vaa>Допустим есть пароль для доступа к стороннему сервису.

vaa>Логично его сохранить. В открытом виде не охота.
vaa>Хоть и хранится все на сервере. Или норм?
vaa>Какие используете варианты?

Сейчас на .Net Core можно писать исключительно серверные приложения — все, больше ничего нет.

Это раньше, когда писали десктопные приложения — то юзали Windows Protected Storage — там смысл был, чтобы если несколько юзеров используют один комп (каждый под своей учеткой) — то никто не смог бы спереть твой пароль.

А теперь хранить в базе данных, вестимо. Шифровать можно просто ключом, который храните в конфиге приложения.
Отредактировано 24.11.2021 4:17 Shmj . Предыдущая версия .
Re[2]: Лучший способ хранения паролей в dotnet core
От: vaa  
Дата: 24.11.21 07:47
Оценка:
Здравствуйте, 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
От: Valeriy_Gourov Украина https://valeriygourovresume.azurewebsites.net
Дата: 24.11.21 07:48
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Здравствуйте, vaa, Вы писали:


vaa>>Допустим есть пароль для доступа к стороннему сервису.

vaa>>Логично его сохранить. В открытом виде не охота.
vaa>>Хоть и хранится все на сервере. Или норм?
vaa>>Какие используете варианты?
Как вариант — службы типа Azure KeyVault, если это применимо архитектурой приложения.

S>Сейчас на .Net Core можно писать исключительно серверные приложения — все, больше ничего нет.

Да ладно! А куда вдруг делись WinForms, WPF, UWP, MAUI, Blazor, Xamarin и т.п. на .NET 6, например? 😱
Re: Лучший способ хранения паролей в dotnet core
От: Ночной Смотрящий Россия  
Дата: 24.11.21 10:36
Оценка: 4 (1)
Здравствуйте, vaa, Вы писали:

vaa>Какие используете варианты?


Все зависит от требований. Если требования предполагают какую либо разновидность сертификации — потребуется специальное решение типа HashiCorp Vault или Azure Key Vault. Если нет — используй ProtectedData с закатыванием пароля туда на стадии деплоймента.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[3]: Лучший способ хранения паролей в dotnet core
От: Shmj Ниоткуда  
Дата: 24.11.21 10:41
Оценка:
Здравствуйте, vaa, Вы писали:

S>>Сейчас на .Net Core можно писать исключительно серверные приложения — все, больше ничего нет.

vaa>ну почему же? Desktop WPF, WinForms, MAUI

Это все в Windows. Ну есть же в Windows Credential Manager:

Re[2]: Лучший способ хранения паролей в dotnet core
От: vaa  
Дата: 24.11.21 10:51
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>Здравствуйте, vaa, Вы писали:


vaa>>Какие используете варианты?


НС>Все зависит от требований. Если требования предполагают какую либо разновидность сертификации — потребуется специальное решение типа HashiCorp Vault или Azure Key Vault.

Сервисы не рассматривал, т.к. сертификация не нужна. Да и хранить пароли за бугром?
Если нет — используй ProtectedData с закатыванием пароля туда на стадии деплоймента.
нужна портабельности путем копирования.
к тому же

Поскольку он зависит от DPAPI, ProtectedData класс поддерживается только на платформе Windows.

☭ ✊ В мире нет ничего, кроме движущейся материи.
Re[4]: Лучший способ хранения паролей в dotnet core
От: vaa  
Дата: 24.11.21 11:23
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Здравствуйте, vaa, Вы писали:


S>>>Сейчас на .Net Core можно писать исключительно серверные приложения — все, больше ничего нет.

vaa>>ну почему же? Desktop WPF, WinForms, MAUI

S>Это все в Windows. Ну есть же в Windows Credential Manager:


S>Image: 1638009640


https://cisoclub.ru/poluchenie-uchetnyh-dannyh-windows-credential-manager/ тут говорят не очень надежно.
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re[3]: Лучший способ хранения паролей в dotnet core
От: Ночной Смотрящий Россия  
Дата: 24.11.21 12:42
Оценка:
Здравствуйте, vaa, Вы писали:

vaa>Сервисы не рассматривал, т.к. сертификация не нужна. Да и хранить пароли за бугром?


Vault это прежде всего онпрем решение.

vaa>нужна портабельности путем копирования.


Портабельность куда?

vaa>

vaa>Поскольку он зависит от DPAPI, ProtectedData класс поддерживается только на платформе Windows.


Кроссплатформенного решения штатно нет. Есть моновская реализация, она кроссплатформенна, но секурность ее — так себе, существенно хуже DPAPI.
Ну, либо самому реализовать, например так.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[4]: Лучший способ хранения паролей в dotnet core
От: vaa  
Дата: 24.11.21 13:36
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>Портабельность куда?

Может быть для web-приложения достаточно мастер-пароль хранить в конфиге в открытом виде?
портабельность в том плане нужен способ хранить мастер-ключ. быть может в код зашить?
НС>Ну, либо самому реализовать, например так.
да хороший пример, но он для вычисления хешей. а мне нужно именно шифрование.
допустим мастер-пароль хранится в конфиге, а шифрованые данные в базе.
насколько будет легко сломать такую защиту.
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re[5]: Лучший способ хранения паролей в dotnet core
От: Ночной Смотрящий Россия  
Дата: 24.11.21 13:57
Оценка: 9 (1) +1
Здравствуйте, vaa, Вы писали:

НС>>Портабельность куда?

vaa>Может быть для web-приложения достаточно мастер-пароль хранить в конфиге в открытом виде?

Это бессмысленно. Либо ты секрет каким либо образом закидываешь при деплойменте, а в репе его нет, либо не морочишь никому голову и хранишь свои пароли в открытом виде. А все эти security by obscurity это только имитация бурной деятельности.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re: Лучший способ хранения паролей в dotnet core
От: Vladek Россия Github
Дата: 24.11.21 13:59
Оценка:
Здравствуйте, vaa, Вы писали:

vaa>Допустим есть пароль для доступа к стороннему сервису.

vaa>Логично его сохранить. В открытом виде не охота.
vaa>Хоть и хранится все на сервере. Или норм?
vaa>Какие используете варианты?

В продакшене переменные окружения, для разработки секреты.
Re[2]: Лучший способ хранения паролей в dotnet core
От: vaa  
Дата: 25.11.21 00:36
Оценка:
Здравствуйте, Vladek, Вы писали:


V>В продакшене переменные окружения


их же нельзя изолировать.
любой может набрать в консоли set/env
уж лучше файл.
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re[3]: Лучший способ хранения паролей в dotnet core
От: Ночной Смотрящий Россия  
Дата: 25.11.21 09:06
Оценка: 4 (1) +1
Здравствуйте, vaa, Вы писали:

vaa>их же нельзя изолировать.

vaa>любой может набрать в консоли set/env
vaa>уж лучше файл.

Переменные среды — штатный способ передачи параметров в контейнер. И штатный же способ передачи кредов к Azure KeyVault в ажурную ВМ. Т.е. во взрослом решении будет примерно так:
в переменные среды передаются креды (сгенерированные автоматически при деплойменте и известные только сисадмину) к сервису хранения паролей, и из этого сервиса достаются уже пароли целевые.
А доступ к консоли сервиса человека, который не имеет права читать пароли — это не то, от чего защищаются.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.