通过互联网以安全的方式发送数据

时间:2014-10-12 11:37:18

标签: c# sockets

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

1 个答案:

答案 0 :(得分:1)

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

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

我建议您专注于同步和用户界面,将安全保留给已经过验证的库。一种这样的解决方案是使用具有RSA认证的SSH和已知的主机密钥。这在许多生产站点上使用,AFAIK被认为是相当安全的(虽然在最流行的实现之一中有一个hole,OpenSSH,几年前非常糟糕)。 SSH协议可以用作各种不同协议的载体,包括你自己的密码同步协议(为此你可以使用SOAP或JSON-RPC或类似的东西,有很多库)。

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

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

类似的想法是使用SSL。如果您预先信任证书链,那么这可以保证足够安全,但我的经验是,C#中的默认SSL套接字API与Windows体系结构过于紧密相关,使得自定义证书验证更加棘手。使用公开的服务器(直接通过IIS)也会打开许多​​新的攻击媒介。