2011-05-09 11 views
5

我有一個通過安全/ SSL套接字連接到服務器的客戶端應用程序。用戶需要在應用程序啓動時登錄。現在我需要將實際密碼發送到服務器(通過SSL加密),而不是發送密碼散列的首選方法。如此一來,如何安全地將密碼存儲在客戶端內存中,以便在客戶端由於丟失連接而需要重新連接到服務器後面的服務器時重新使用此密碼?如何在Java客戶端中存儲服務器密碼以便以後重新連接?

我可以很容易地加密密碼,甚至可以把它放到一個KeyStore中,然後在重新連接時檢索它,但是,即使我這樣做,在我看來黑客可以檢索密碼,如果他有權訪問在調試器中應用。當人們需要暫時將密碼存儲在客戶端時,這僅僅是一個事實嗎?

實現相同目標是否有更好的/首選的方式(即允許客戶端重新連接到服務器而不需要用戶在首次登錄後再次輸入密碼)?從服務器發送的過期登錄令牌是否是更好的方式(我可以在重新連接時將此過期令牌傳遞迴服務器而不是密碼)?

最後,一般來說,在應用程序正確「剝離」調試符號時,有人將調試器連接到Java桌面或Android上的正在運行的應用程序有多容易?我是否甚至需要擔心這種情況,或者Java會保護我的發貨應用程序不讓調試器或其他內存分析器連接到它?

回答

0

對於應用程序中的(系統範圍)密鑰記錄器,您無能爲力。因此,將密碼存儲在內存中的風險比會話令牌風險小,但風險較小:

黑客可以使用僞造SSL /安全重新連接並強制令牌的惡意客戶端。這種方法比將密碼存儲在內存中會帶來更多的風險。

+1

我不明白爲什麼一個令牌比黑客試圖暴力破解密碼更容易受到暴力攻擊? – 2011-05-09 22:43:57

+0

因爲通常,令牌比密碼更具結構。也;令牌按原樣發送(因爲它應該映射到服務器端的會話),而密碼可以被散列(相同的密碼映射到相同的「未知」數據;可預測性較差)。另一個風險在於開發工作;必須創建會話和令牌認證層,而使用相對「簡單」的密碼技術則需要更少的工作量。假設程序員每5分鐘引入一個bug。實施時間較短意味着更少的錯誤。 – Pindatjuh 2011-06-21 13:58:41

1

如果黑客可以在調試器中訪問應用程序,則可以檢索密碼。

正確。黑客通過用他們的肉眼觀察用戶的身體肩膀來觀看用戶類型時也可以訪問密碼。

黑客在用戶計算機上存儲鍵盤記錄後就可以訪問了。

這只是一個事實,當一個人需要在臨時存儲客戶端的密碼?

另一種方法是你親自拜訪每個用戶,告訴他們不要使用調試器來破壞安全性。

讓我們來考慮用戶(知道密碼的用戶)在調試器中啓動應用程序以學習密碼的用例。他們已經知道了。

考慮到用戶啓動在調試器下運行的客戶端應用程序的唯一用例,我不確定安全性是否「破損」,因爲他們已經知道密碼。

我猜測Henry Hacker可能會在調試器中啓動應用程序,隱藏在另一個顯示器上關閉電源,然後運行以獲取真實用戶並讓他們在開發工作站上輸入密碼有一臺顯示器關閉。那是你在談論的「調試器中對應用程序的訪問」嗎?

難道我甚至需要擔心這種情況下,

不是真的

或將Java的保護我的送貨申請由具有調試器,或其他存儲分析儀,重視它?

不,Java不保護您的用戶。常識保護您的用戶。

如果調試器正在運行,他們不應該使用計算機。

而99%的時間,他們不會得到一個調試器開始。

1%的時間,他們會不小心運行調試器 - 因爲用戶點擊隨機圖標。其中1%實際上會讓您的應用程序在調試器下運行。再次點擊隨機圖標。其中1%將實際到達他們可以通過點擊屏幕上的隨機圖標來輸入密碼的地方。

可能發生,用戶可以以某種方式在調試器下運行您的客戶端。但。由於他們已經知道密碼,所以沒有必要擔心這一點。


這與中間人攻擊或遠程控制攻擊完全不同。

如果有人需要遠程控制用戶的計算機,運行調試器並觀察事務,那完全是分開的。這被防火牆和操作系統阻止。不是Java。


把它變成一個密鑰存儲和以後檢索它重新連接

那是你所能做到的所有。應用程序無法阻止「連接調試器」場景。操作系統的工作是提醒用戶調試器正在連接。

如果您擔心責任,請不要存儲密碼。責任終止。

+0

調試器也可以用作沒有GUI的病毒使用的API。 – Pindatjuh 2011-05-09 20:41:15

+0

@S。洛特,我不同意,我認爲這應該是一個問題(儘管對此沒有太多可以做到)。您可以離開您的電腦,隨身攜帶調試器或內存分析器 – 2011-05-09 21:06:13

+0

如果用戶離開辦公桌或移動設備的情況下,黑客無法將調試器或內存分析儀附加到已運行的應用程序中,在應用程序登錄時竊取用戶的手機? – 2011-05-09 22:38:09

0

我會做你的建議,在服務器端創建某種類型的會話令牌。將其與用戶相關聯,並將其發送回客戶端。

取決於你的意思。我認爲調試Java應用程序相當容易,即使它們沒有調試符號。如果它們被混淆,甚至可以調試它們。

相關問題