Шифрование на C # — как защитить пароль

#c# #security #encryption

#c# #Безопасность #шифрование

Вопрос:

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

Исполняемый файл должен быть автономным, не может подключаться к таким вещам, как база данных SQL или что-либо подобное. Шифр всегда будет одинаковым, что означает, что пароль / соль также не могут быть случайными.

Я знаю, что жесткое кодирование пароля / соли на самом деле не очень хорошая идея, но я борюсь с тем, как безопасно хранить пароль / соль, которые не меняются, в автономном исполняемом файле.

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

Тем не менее, я не уверен, насколько это безопасно, и уверен, что должен быть лучший способ.

Есть предложения?

Редактировать

Единственное место, где это будет использоваться, — это внутри последовательности задач, выполняемой внутри SCCM, что означает, что пользователи вообще не смогут взаимодействовать с компьютером во время выполнения последовательности задач (при условии, что режим отладки не включен, иначе есть гораздо более серьезные причины для беспокойства).

Таким образом, я потенциально мог бы передать его открытым текстом в скрипт, поскольку никто не смог бы его прочитать, поскольку они не могут взаимодействовать с ПК, но тогда SCCM автоматически выводил бы его в журналы, что, очевидно, мне не нужно. Я мог бы написать это в скрипте, что позволило бы избежать его появления в журналах, но если кто-то получит доступ к скрипту, учитывая, что это скрипт, а не скомпилированный код, они будут знать пароль.

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

Комментарии:

1. Честно говоря, это звучит как довольно плохая идея.

2. Если у вас нет других вариантов, кроме как сохранить пароль в исполняемом файле, добавьте еще один уровень безопасности, запутайте код. Ранее я использовал confuser.codeplex.com

3. @AlexInTime Теперь это плохой совет! Не существует такого понятия, как «защита путем обфускации»!

4. В какой среде вы работаете? Вы уверены, что пользователь не может просто найти способ обнаружить аргументы, которые вы передали сценарию powershell, например, через process Explorer, и игнорировать все ваши разговоры о «шифровании»?

5. @ThorstenDittmar Безопасность за счет неизвестности Обычно я бы на 100% поддержал ваше заявление. Но этот конкретный проект, в дополнение к запутыванию, также обеспечивает некоторую защиту от декомпиляторов, а также несколько других приятных защит. Алекс сильно упростил, назвав это просто обфускатором, но все равно это была хорошая рекомендация. Существует также более новая версия, FWIW yck1509.github.io/ConfuserEx .

Ответ №1:

Эта статья может помочь вам решить, как вам нужно спроектировать хранилище паролей

http://flagdefenders.blogspot.in/2012/12/how-to-save-password-securely.html