Вы определенно хотите иметь возможность изменять пароли на своих машинах, поэтому включите в формулу какой-либо тип даты или счетчика.
В идеале вы также хотите включить в инструмент некоторую форму аутентификации, будь то мастер-пароль, сложная вещь со смарт-картами или что-то еще. Таким образом, когда ваш инструмент попадает в руки злодея, он не обязательно получает все ваши данные.
Если вы идете по пути мастер-пароля, вам нужен план, как справиться с подозрением на утечку. (Включая кого-то, кто знал, что он покидает организацию, поскольку это утечка.)
Пример соломника, который включает:
- Использование даты
- Использование мастер-пароля
- Использование HMAC для обработки имени машины, введенного ключом из мастер-пароля
- Счетчик итераций для PBKDF2, который соответствует современным компьютерам.
.
private static string GeneratePassword(
string masterPassword,
string machineName,
DateTimeOffset lastChangeDate)
{
// Use the date (ignoring time) of the last password change as a salt.
byte[] salt = BitConverter.GetBytes(lastChangeDate.ToUniversalTime().Date.Ticks);
HashAlgorithmName prf = HashAlgorithmName.SHA256;
using (var pbkdf2 = new Rfc2898DeriveBytes(masterPassword, salt, 123456, prf))
{
byte[] key = pbkdf2.GetBytes(256 / 8);
using (HMAC hmac = new HMACSHA256(key))
{
byte[] value = hmac.ComputeHash(
Encoding.UTF8.GetBytes(machineName.ToUpperInvariant()));
// Or however long.
return Convert.ToBase64String(value).Substring(0, 16);
}
}
}
Перегрузка конструктора Rfc2898DeriveBytes, которая принимает HashAlgorithmName для PBKDF2-PRF, является новой в netcoreapp20. Если вы пытаетесь быть netstandard20, вы можете удалить последний параметр и использовать версию на основе SHA-1 с минимальным вредом (поскольку HMACSHA-1 в настоящее время не считается сломанной).
Когда вы собираетесь сменить пароль для машины, вы должны ввести дату последнего поколения, чтобы получить существующий. Затем введите сегодняшнюю дату, чтобы получить новое значение, затем запишите новую дату в любом текстовом файле / электронной таблице / базе данных / заметке, запоминающей эти вещи.
Другой альтернативой является генерация случайных паролей и сохранение их в зашифрованном структурированном файле. Что-то вроде EnvelopedCms
, так как контейнер шифрования предоставляет вам смарт-карту практически бесплатно и позволяет добавлять / удалять считыватели без изменения всех паролей компьютера (добавление легко, удаление может в любом случае оправдать их изменение).
То есть: создать стабильный генератор и развернуть использование очень просто. Это поддерживает это, которое становится хитрым. Поддержание случайности может быть проще, поэтому, возможно, лучше заранее оплатить стоимость.