2014-10-12 94 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