2014-10-12 85 views
0

我正在构建一个能够保存我的密码的程序。现在我有以下问题。因为我有很多计算机(一个用于工作,三个用于自己),我想保持密码与服务器同步。但现在我的问题是什么是最安全的方式通过互联网发送数据与C#?是否有可能使连接如此安全以至于我可以通过它发送密码?也许对应用程序的任何建议。以安全的方式通过互联网发送数据

+1

我编辑了你的标题。请参阅:“[应该在其标题中包含”标签“](http://meta.stackexchange.com/questions/19190/)”,其中的共识是“不,他们不应该”。 – 2014-10-12 11:41:29

+1

你听说过WCF吗? – 2014-10-12 11:42:21

+0

Thx for the title and I looking into WCF part :) – kevingoos 2014-10-12 11:43:59

回答

1

是的,你可以使它合理安全。首先,我会建议编写自己的协议栈,仅仅因为它非常容易犯一个简单的错误,使得破解安全性变得微不足道。

(显然有很多现有的服务(如的1Password,passpack等),但我想你已经知道了。)

我建议你专注于同步和UI和离开安全以证明文库。一种这样的解决方案是使用带RSA身份验证和已知主机密钥的SSH。这在许多生产站点都有使用,AFAIK认为是合理安全的(尽管在几年前最流行的一种OpenSSH中有一个hole,这非常糟糕)。 SSH协议可以用作各种不同协议的载体,包括你自己的密码同步协议(因为你可以使用SOAP或JSON-RPC或类似的东西,有很多库)。

然后,您可以通过使用SSH客户端库(https://sshnet.codeplex.com是第一个Google命中)直接与C#集成。不过,我没有直接使用C#来谈论SSH的经验。我通常做的是让一个现有的SSH客户端(例如PuTTY)打开一个端口,然后使用普通的TCP套接字。这一切都取决于你想要的同步应用程序的光滑程度,但由于你只是为自己写的,我会选择后者。

如果您很聪明地编写应用程序,则不需要除您自己的服务器部分(例如,SSH实现用于文件存储的SFTP)的服务器部分。

一个类似的想法是使用SSL。如果您预先信任证书链,则可以确保足够安全,但我的经验是,C#中的默认SSL套接字API与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 2014-10-12 14:19:43

+0

Phew ..该死的缩写.. sry。 – alk 2014-10-12 14:24:46