Шифрование с открытым / закрытым ключом приложения в .net - PullRequest
5 голосов
/ 04 февраля 2010

-новый- Я нашел другое применение. Есть некоторые данные, представленные мне через данные HTTPS POST, и я хотел бы сохранить их в моей базе данных (например, девичья фамилия матери, которую службе поддержки клиентов может потребоваться прочитать позже вместо неправильной проверки орфографии, если хеш совпадает) Мне нужен только этот раздел в зашифрованном виде, а не вся БД, и использование отдельной БД может не стоить того. Вопрос: Как я могу использовать готовый открытый ключ для шифрования симметричного ключа + текста с помощью .NET? (остальное для контекста, я просто хочу получить ответ, плз)

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

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

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

-edit- это просто ударил меня. Пользователь / пароль не будет секретом. Поэтому я должен был бы зашифровать свои резервные копии перед передачей. Как зашифровать симметричный ключ с помощью открытого ключа с помощью .NET. Тогда расшифруй это на моей стороне. Шифрование файла с симметричным ключом, я знаю, как это сделать.

Ответы [ 3 ]

14 голосов
/ 04 февраля 2010

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

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

Для шифрования потока в C # эта страница может помочь:

http://support.microsoft.com/kb/307010

ОБНОВЛЕНИЕ:

Безусловно, ДА, вам необходимо зашифровать файлы , прежде чем они попадут на сайт, который, по вашему мнению, скомпрометирован .

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

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

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

Без обид, но совершенно очевидно, что вы недостаточно знаете о крипто, чтобы решить эту проблему с любым разумным шансом защитить ее от реальных злоумышленников. Тут нечего стыдиться; У меня тоже нет этого знания . Скорее, Я обладаю достаточными знаниями, чтобы знать, что эта проблема за мной. Нет ничего плохого в попытке узнать больше о крипто; Я настоятельно рекомендую это. Но если у вас есть реальная угроза здесь, и вы пытаетесь смягчить ее с помощью профессиональных криптоинструментов, не катите свое собственное решение . Пойдите и наймите эксперта-консультанта в этой области, который может посоветовать вам, как правильно поступить, учитывая реальные угрозы, с которыми вы сталкиваетесь.

1 голос
/ 11 февраля 2010

Вы можете использовать алгоритм симметричного ключа (AES, DES, Triple-DES), чтобы выполнить шифрование вашего кода и сохранить его в своей базе данных (в поле nvarchar).Так как вам нужно передать это в зашифрованном виде кому-то еще, вам не нужно использовать какой-либо ассиметричный алгоритм (например, RSA, ElGamal и т. Д.). Если вы что-то вроде RSA, вам также следует рассмотреть возможность подписи с данными с использованием чего-то вроде PGP.

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

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

http://www.obviex.com/samples/Encryption.aspx

1 голос
/ 04 февраля 2010

Вы шифруете симметричным ключом, затем шифруете симметричный ключ открытым ключом, а затем отбрасываете симметричный ключ. Только владелец соответствующего закрытого ключа (вы) может впоследствии расшифровать симметричный ключ и, следовательно, документ. Там нет секрета, хранящегося в приложении. Хорошая новость заключается в том, что для решения этой проблемы достаточно тонны готовых продуктов (pgp) и протоколов (s-mime).

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