Шифрование из приложения c # - PullRequest
4 голосов
/ 08 июня 2010

СИТУАЦИЯ: Мне нужно сделать шифрование между моей удаленной базой данных и моим приложением c #. Я не знаю, что я делаю (никогда раньше не шифровал), и все, что я нашел в Интернете, было для asp.net и касалось файла web.config.

НЕКОТОРЫЕ СООТВЕТСТВУЮЩИЕ ДАННЫЕ: Моя строка подключения содержит информацию о пароле для аутентификации на сервере SQL, есть операторы select и delete. Эти три вещи должны быть зашифрованы.

Я использую SQL Server 2008, Visual Studio 2008 и C #.

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

То, что мне нужно помочь:

  1. Будем весьма благодарны за любые ссылки на шифрование, которые не ограничены asp.net. :)

  2. Я вижу страницу MSDN , и мне кажется, что это неплохое начало, но я немного растерялся. Похоже, именно так 2 приложения будут отправлять файлы друг другу, а не отправлять что-то зашифрованное на SQL Server? Используя это, я не вижу, как SQL Server будет знать, как его расшифровать?

  3. Я ухожу в левое поле и смотрю в System.Security.Cryptography? Есть ли какой-нибудь способ указать шифрование в System.Data.SqlClient или мне придется прибегнуть к возни с созданием хранимых процедур на удаленном сервере?

Заранее спасибо !!! :)

РЕЗЮМЕ:

Спасибо всем за то, что поставили меня на правильный путь, было трудно выбрать только один ответ! :)

Я пришел к выводу, что мне нужно использовать SSL, и, хотя у меня еще много путаницы с практическими рекомендациями, я знаю, что для этого требуется сертификат, и что после настройки сертификата клиент может запросить шифрование, запрашивая «Encrypt = yes» в строке подключения. К счастью, я считаю, что у меня уже есть тот, который я могу использовать.

Еще одна вещь, на которую следует обратить внимание: TDE - это консенсус в отношении того, что хорошо для шифрования данных, которые просто хранятся в базе данных, а SSL - для передачи зашифрованных данных.

Вот пара ссылок, которые я нашел наиболее полезными:

http://blogs.msdn.com/b/sql_protocols/archive/2005/10/04/476705.aspx

http://support.microsoft.com/default.aspx?scid=kb;en-us;316898

Ответы [ 3 ]

5 голосов
/ 08 июня 2010

Для шифрования между приложением и БД лучше всего использовать SSL-сертификат на уровне SQL Server. Вот статья Microsoft KB об этом (для более старой версии SQL Server). http://support.microsoft.com/kb/316898 Это защитит от снифферов.

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

Этот поиск по сайту Microsoft.com поможет вам с более новыми версиями SQL Server.

И эта статья поможет с SQL Server 2008. http://msdn.microsoft.com/en-us/library/cc278098.aspx

4 голосов
/ 08 июня 2010

Что вам нужно, это защитить трафик между вашим приложением и SQL Server. Для этого просто выполните шаги, описанные в Шифрование подключений к SQL Server .

Далее, если вы храните конфиденциальные данные, вы хотите хранить их в зашифрованном виде в базе данных для защиты от случайной потери носителя. На сегодняшний день лучшим решением является использование Transparent Database Encryption .

Ни одно из этих решений не требует каких-либо изменений кода в вашем приложении. Они оба - время развертывания, настройки, контролируемые администратором. Попытка найти собственное решение для криптографии ни к чему не приведет. В криптографии очень легко запутаться по-королевски, и вы об этом даже не узнаете. Намного проще - и гораздо лучше - удовлетворить требования, не меняя приложения, просто используя функции шифрования, предоставляемые SQL (TLS-соединение, TDE-хранилище).

1 голос
/ 08 июня 2010

Я немного запутался по поводу вашего запроса. Вам необходимо зашифровать данные локально или вы хотите зашифровать соединение между вашим приложением и сервером? Или данные хранятся в таблицах базы данных? Или их комбинация?

В любом случае, для шифрования соединения (которое включает в себя аутентификацию), вы можете захотеть взглянуть на функцию шифрования канала в SQL Server. http://blogs.msdn.com/b/sql_protocols/archive/2005/10/04/476705.aspx

Для локальных файлов или строк подключения, а также для шифрования двоичных данных (которые также могут храниться в зашифрованном виде в БД), нужно изучить пространство имен System.Security.Cryptography.

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