шифрование данных и управление ключами в c # - PullRequest
15 голосов
/ 11 апреля 2011

Какой путь выбрать, какие плюсы и минусы, какой более безопасный.

1) Сгенерируйте ключ AES, зашифруйте его, а затем зашифруйте ключ AES с помощью RSA, сохраните зашифрованные данные.и зашифрованный ключ AES в файл и пару ключей RSA в KeyContainer.

2) Или используйте класс DPAPI ProtectedData, чтобы зашифровать данные и сохранить их в файл, а затем сохранить энтропию, которую я использовал с ProtectedData.Protect() длягде-то .. (может быть, также зашифровать его с помощью RSA, сохранить пару ключей RSA в KeyContainer и зашифрованную энтропию в файл с данными?)

РЕДАКТИРОВАТЬ: просто для получения дополнительной информации: нам нужно защитить файл наших приложенийСистема использования.Поэтому любой файл, который приложение хранит в файловой системе, мы хотим, чтобы он был зашифрован.Скорее всего, файл используется тем же приложением или другим компонентом того же стека приложений.

Ответы [ 4 ]

4 голосов
/ 24 апреля 2011

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

Если только одинсерверу потребуется доступ к данным, тогда DPAPI должен быть достаточно хорош для ваших целей.Безопасность обеспечивается учетными данными пользователя, которые в этом контексте будут учетными данными, выполняющими ваш стек приложений.Вы можете добавить дополнительную энтропию (или «соль»), жестко запрограммированную в вашем приложении, чтобы повысить безопасность, чтобы она не зависела только от учетных данных конечного пользователя.Это просто реализовать, и вам не нужно иметь дело с экспортом / импортом ключей.

Если нескольким серверам потребуется доступ к одним и тем же файлам / данным, тогда лучше использовать метод RSA Key Container.Один и тот же ключ можно экспортировать на несколько серверов, и они могут совместно использовать одни и те же зашифрованные файлы.Ключ также может быть зарезервирован для целей восстановления.У вас нет такой опции с DPAPI.

Безопасность в одном методе не лучше, чем в другом, так как они используют аналогичные схемы, и оба ключа, в конце концов, защищены учетными данными пользователя.DPAPI использует учетные данные для защиты внутренних ключей RSA, которые он использует, и Windows также будет контролировать доступ к контейнерам ключей RSA с помощью учетных данных.

2 голосов
/ 25 апреля 2011

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

Является ли приложение службой Windows или приложением EXE, запущенным в контексте пользователя? Кому принадлежат данные, которые вы хотите зашифровать: приложение, пользователь? Распределяются ли данные между пользователями? Вы сохраняете данные на локальном жестком диске или на сервере (на смешанном)? Вы сохраняете данные как часть профиля пользователя?

Самым важным является вопрос: где вы планируете держать клавишу ? Проблема в том, что ключ похож на ключ от вашего дома: вы хотите, чтобы только вы (или ваши близкие друзья) имели доступ к ключу, но никто другой. Тем не менее, часто можно найти ключ где-то рядом с замком: под ковриком, лежащим у двери. Один делает это, потому что есть другая проблема: что делать, если ключ будет утерян? Все вопросы являются частью «управления ключами».

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

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

1 голос
/ 22 апреля 2011

DPAPI ограничивает дешифрование ключом, который привязан к машине или даже к пользователю на этой машине.

с AES и RSA у вас нет такого ограничения ... вы могли бы дажерасшифровать на совершенно другой платформе + здесь вы знаете, как работает система ... в отличие от DPAPI

вы, вероятно, захотите взглянуть на this

1 голос
/ 11 апреля 2011

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

ссылка MSDN на DPAPI

...