2014-10-12 4 views
0

Я создаю для себя программу, которая сохранит мои пароли. Теперь у меня есть следующие вопросы. Поскольку у меня много компьютеров (один для работы, три для меня самого), я хочу, чтобы пароли синхронизировались с сервером. Но теперь мой вопрос: Какой самый безопасный способ отправки данных через Интернет с помощью C#? Возможно ли сделать соединение настолько безопасным, что я могу отправлять ему пароли? И, возможно, любые предложения для приложения.отправить данные через Интернет безопасным способом

+1

Я отредактировал ваше название. Пожалуйста, смотрите: «Если вопросы включают« теги »в их названиях?] (Http://meta.stackexchange.com/questions/19190/), где консенсус« нет, они не должны ». –

+1

Вы слышали о WCF? –

+0

Thx для названия, и я просматриваю часть WCF :) – kevingoos

ответ

1

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

(Очевидно, что существует множество уже существующих услуг (например, 1Password, passpack и т.д.), но я предполагаю, что вы знаете, что уже.)

Я рекомендую вам сосредоточиться на синхронизации и UI и оставить безопасность проверенным библиотекам. Одним из таких решений является использование SSH с аутентификацией RSA и известными ключами хоста. Это используется на многих производственных площадках, и AFAIK считается достаточно безопасным (хотя в одной из самых популярных реализаций, OpenSSH, несколько лет назад, был один hole, что было довольно неплохо). Протокол SSH можно использовать в качестве носителя для всех видов разных протоколов, включая собственный протокол синхронизации паролей (для этого вы могли бы просто использовать SOAP или JSON-RPC или что-то подобное, что для этого существует множество библиотек).

Вы можете интегрировать непосредственно с C# с помощью клиентской библиотеки SSH (https://sshnet.codeplex.com был первым хитом Google). Однако у меня нет опыта использования C#, чтобы говорить SSH. Обычно я делаю это, чтобы позволить существующему клиенту SSH (например, PuTTY) открыть порт вперед, а затем использовать обычные TCP-сокеты. Все зависит от того, насколько вы хотите использовать приложение синхронизации, но поскольку вы пишете его только для себя, я бы пошел с последним.

Если вы умеете писать свое приложение, вам не нужна серверная часть, кроме вашей собственной (например, SSH реализует SFTP для хранения файлов).

Аналогичная идея заключается в использовании SSL. Если вы доверяете цепочке сертификатов, это можно сделать достаточно безопасным, но мой опыт заключается в том, что API-интерфейс SSL-сокета по умолчанию на C# слишком сильно связан с архитектурой Windows, что упрощает работу с проверкой сертификата. Использование публично открытого сервера для вашей службы (непосредственно через IIS) также открывает множество новых векторов атак.

+0

Heartbleed - это отверстие в OpenSSL, а не OpenSSH. http://security.stackexchange.com/questions/55300/do-i-need-to-worry-about-my-ssh-keys-if-my-system-was-vulnerable-to-heartbleed – Krumelur

+0

Phew .. проклятье аббревиатуры .. sry. – alk

Смежные вопросы