Хранение и шифрование учетных данных SMTP в реестре - PullRequest
2 голосов
/ 11 августа 2010

У меня есть имя пользователя и пароль для сервера SMTP.В настоящее время они жестко запрограммированы в моем коде:

string userName = "username";
string password = "password";

В настоящее время любой, кто разбирает мою dll, может увидеть эти строки, верно?

Я хочу надежно сохранить их в реестре на случай, еслибудущие изменения на SMTP-сервере и / или учетные данные.Меня не беспокоит безопасность строки адреса сервера smtp.Я беспокоюсь только о безопасности учетных данных.

Как мне это сделать без жесткого кодирования учетных данных в любом месте?Я хочу видеть зашифрованные строки в реестре.

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

Какой самый безопасный способ?

Ответы [ 2 ]

3 голосов
/ 11 августа 2010

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

Я знаю, как разработчики, мы склонны много работать с paranoia = Paranoia.Maximum;, но иногда вам приходится что-то подкреплять.

Тем не менее, есть некоторые вещи, которые вы можете сделать.Если учетные данные должны быть настолько безопасными, рассмотрите возможность их хранения, если это возможно, в удаленной базе данных.Вы можете хранить их в зашифрованном виде на удаленном сервере, чтобы у любого, кто имеет доступ к вашей машине, не было необходимости иметь доступ к БД-серверу.

Если вы действительно хотите увеличить паранойю и обеспечить безопасность ответственности пользователяв то же время попросите их предоставить «безопасное местоположение» для файла, который содержит данные.Затем вы можете порекомендовать, чтобы местоположение было чем-то вроде флэш-диска, который физически удалялся бы из компьютера, когда ваша программа не используется.

В любом случае, с безопасностью, вы хотите думать с точки зренияслои.Ничто из того, что вы делаете, не будет достаточным для действительно хорошего уровня безопасности, но, применяя несколько мер, вы можете повысить уровень безопасности до уровня, достаточного для ваших нужд.

0 голосов
/ 11 августа 2010

Проблема не нова.Операционная система, начиная с Windows XP, имеет учетные данные API, которые могут использоваться в различных сценариях.Например, CredRead (см. Также http://www.pinvoke.net/default.aspx/advapi32/CredRead.html) и CredWrite можно использовать для сохранения в зашифрованном виде любой общей информации о полномочиях. В соответствующих полях CREDENTIAL структура, которую вы можете определить, например, уровень сохраняемости сохраненных учетных данных (сеанс входа в систему, все последующие сеансы входа в систему на этом же компьютере или в другие сеансы входа этого же пользователя на этом же компьютере и сеансы входа для этого пользователя на других компьютерах).

Если вы хотите, чтобы ваше приложение считывало только учетные данные, вы можете использовать CredWrite в отдельной утилите конфигурации, используемой администраторами, или использовать API как часть настройки вашего приложения.

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