C# Как надежно сохранить неизменный пароль? - PullRequest
0 голосов
/ 19 июня 2020

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

Я пишу заявку который будет читать данные из защищенного паролем Zip-файла, предоставленного третьей стороной. Этот формат не изменится (поэтому предложения по этому поводу не будут приниматься), как и пароль.

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

Я мог бы над этим подумать, и есть простой вариант, но как я скажем, я потерял прядь в лесу :)

РЕДАКТИРОВАТЬ: Чтобы дать больше информации об ограничениях этой проблемы:

  • Данные, которые я должен прочитать, в виде зашифрованных zip-файлов. Пароль для которого - stati c (например, остается одинаковым для всех файлов)

  • Многие файлы могут пройти за один день и через нерегулярные промежутки времени

  • Пользователь приложения не знает и не имеет права знать пароль zip-файла (ввод не возможен)

  • Приложение должно запустить как службу Windows и обработать эти файлы автоматически по мере их предоставления и без участия пользователя вмешательство.

  • Эти файлы и способ их доставки и форматирования принадлежат третьей стороне, и я не могу изменить эти параметры

Это ограничения, которые мне дали для проекта, и мне нужно найти решение. Я уже знаю, что хранить в коде строку НЕПРАВИЛЬНО. Повторение этого в качестве ответа не является ответом!

Спасибо сообществу за вашу помощь :)

Ответы [ 3 ]

1 голос
/ 19 июня 2020

Нигде. НЕТ СПОСОБА БЕЗОПАСНОГО СОХРАНЕНИЯ ПАРОЛЯ И ПО-прежнему ИСПОЛЬЗОВАТЬ ЕГО. И да, это все заглавные буквы. Вы можете попытаться уменьшить ущерб, но, в конце концов, если ваше приложение может декодировать все, что вы используете для хранения пароля, то может и хакер.

CODE - плохое место - не для безопасности, а потому, что он ДЕЙСТВИТЕЛЬНО неизменен. Но иначе - никак. Просто. Люди пытались что-то скрывать с тех пор, как были изобретены компьютеры. Ни разу не работал.

0 голосов
/ 19 июня 2020

Возможно зашифровать разделы в файле конфигурации . Инструмент работает только с файлами web.config, поэтому, если у вас есть другой тип приложения, просто переименуйте app.config в web.config перед запуском команды, а затем вернитесь к app.config.

Использование машинного хранилища существенно ограничивает доступ администраторов на машине, а использование хранилища пользователей ограничивает доступ только к учетной записи, которая выполнила команду шифрования.

Для шифрования с помощью машинного хранилища:

Для шифрования:

aspnet_regiis.exe -pef "sectionName" "C:\Path\To\Application" -prov "DataProtectionConfigurationProvider"

Для расшифровки:

aspnet_regiis.exe -pdf "sectionName" "C:\Path\To\Application"

Для шифрования с помощью пользовательского хранилища

Добавьте этот раздел в файл конфигурации:

<configProtectedData>
        <providers>
            <add useMachineProtection="false"
                 keyEntropy=""
                 name="CustomDataProtectionConfigurationProvider"
                 type="System.Configuration.DpapiProtectedConfigurationProvider, System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" 
            />      
        </providers>
</configProtectedData>

Для шифрования:

aspnet_regiis.exe -pef "sectionName" "C:\Path\To\Application" -prov "CustomDataProtectionConfigurationProvider"

Для расшифровки:

aspnet_regiis.exe -pef "sectionName" "C:\Path\To\Application" -prov "CustomDataProtectionConfigurationProvider"

Примечание для пользовательского хранилища

Поскольку только пользователь, выполняющий команду, может получить доступ / расшифровать данные, приложению потребуется специальная учетная запись службы , а для запуска команд от имени этого пользователя runas /profile /user:theusername cmd можно использовать для запуска командной строки от имени другого пользователя

0 голосов
/ 19 июня 2020

Я бы предложил здесь одну вещь.

Вы не можете хранить пароль непосредственно в вашем приложении.

Вы всегда можете сделать это комбинацию из чего-то вроде даты рождения + первых 4 символов имени + некоторой другой информации

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...