2013-06-03 36 views
1

我有一個設置,看起來像:如何保證我連接到我的服務而不是其他人?

enter image description here

我使用Windows身份驗證加密連接。主服務是安全的,沒有人可以訪問它,因此可以安全地存儲每個節點服務的用戶名和密碼,以便在可用時連接它們。

主要服務向每個WCF節點服務發送機密信息。因爲連接是加密的,我知道有人很難解密它。 我的問題是如何確保我連接到我的WCF節點服務而不是其他人?

這裏是描述我的問題 比方說,湯姆是使用在WCF節點服務運行圖左上角的筆記本電腦用戶的情況。 WPF客戶端是管理員(圖中的底層用戶),他們可以在Tom的計算機上執行操作。 Tom需要查看加密文件的內容。 Tom無權解密該文件的密碼;因此,湯姆然後請管理員爲他解密該文件。然後管理員將密碼發送到主要服務加密,主要的wcf服務將找到Tom的計算機,並在Tom的計算機上執行方法UnencryptFile(string location, string password)

如何防止Tom獲取該密碼?如果他用自己替換WCF節點服務替換方法UnencryptFile(string location, string password) ... MesageBox.Show(password),他將能夠獲得密碼。 總之,我知道可以反編譯一個程序,所以我不介意讓湯姆知道我的程序在做什麼。我介意的是連接到一個不屬於我的服務。如果Tom調試WCF節點服務,會發生什麼情況。可以調試一個可執行文件嗎?如果是這種情況,那麼他將能夠以這種方式查看密碼。

+0

我喜歡你的圖形的方式。非常專業:-) –

+0

這是[** DRM **](http://en.wikipedia.org/wiki/Digital_rights_management)發生的問題,對嗎?例如,Netflix如何將電影的字節流式傳輸到計算機,但不能僅僅使用tcpdump來保存電影的字節並在離線後播放。 Valve的Steam可以讓你下載視頻遊戲的全部內容,但是如果你將這些視頻遊戲文件複製到朋友的電腦上,它們將不會運行。只是給你的問題一些更廣泛的背景(這個評論不打算成爲一個答案。) –

+0

@MikeClark你是對的,雖然我不知道有人沒有打破任何DRM。這對於99.9999%的用戶來說是有效的,但總有人可以打破它。希望我們能弄清楚一個傻瓜式的方法,併成爲非常有錢的人:-) –

回答

2

不幸的是,沒有辦法阻止湯姆獲​​取密碼。最終,如果湯姆知道他在做什麼,他可以以這種或那種方式獲得密碼。一些可能性包括在密鑰在內存中時執行內存轉儲,並反向設計二進制文件以將其保存在某處,如前所述。

執行此操作的「正確」方法是讓Tom將文件發送給管理員或主要服務,並讓服務返回未加密的內容。

底線是,如果你發送Tom的密鑰,無論你對客戶做什麼,你都無法阻止Tom恢復密鑰,只要他對RE技術有足夠的瞭解。

+0

+1謝謝你是對的。我會做的是嘗試使WCF節點服務代碼很難反編譯。然後在服務中有一個方法,看起來像'int IsThisMyProgram(int code){if(code == 1)return 423; else if(code == 2)return 893;等等......'某種類似的算法。我只是試圖使代碼難以反編譯......如果我發送2例如,我知道我必須返回893例如。 –

+2

@TonoNam這是一個很好的建議,事實上很多遊戲公司都使用這個技巧。如果你在整個代碼中加入這些檢查,並在檢查失敗時終止,這對於RE來說將是一場噩夢。你也可以發送數百個「密鑰」,其中只有一個是正確的。然後您可以從代碼中多次讀取密鑰,並只使用「正確」的密鑰。這就是所謂的緩衝區塗抹,遊戲公司用它來使生活變得艱難,REs –

+1

準確地說。我會有一個有數百個鍵的桌子。服務器將擁有該表和節點。只要我在服務和節點中對其進行更改,每天都可以更改該表。 –

相關問題