2012-12-28 67 views
3

我正在爲我的應用程序編寫身份驗證服務。客戶端將通過HTTP連接到這個認證服務來註冊或連接。他們連接後,他們會收到一個會話密鑰,他們可以使用加密TCP/UDP數據包發送到輔助服務器。這仍然是WIP,只是爲了給你一個全面的概述。Windows商店應用程序中的密碼哈希處理

Serverside,我使用BCrypt來散列傳入的密碼。並將其存儲在數據庫中。 Serverside,我還使用BCrypts驗證方法來檢查存儲的散列的任何傳入密碼。所以這基本上有效。

但是,我自然不想在電線上傳輸一個未經處理的密碼。沒有BCrypt的Windows Store應用程序,但我發現了一些MSDN示例代碼演示瞭如何使用新的加密API的Windows Store應用程序哈希字符串,像這樣:

public static string Hash(string password) 
    { 
     HashAlgorithmProvider provider = 
      HashAlgorithmProvider.OpenAlgorithm(HashAlgorithmNames.Sha512); 

     CryptographicHash hash = provider.CreateHash(); 

     IBuffer buffer = CryptographicBuffer.ConvertStringToBinary(password, BinaryStringEncoding.Utf16BE); 
     hash.Append(buffer); 
     IBuffer hashedBuffer = hash.GetValueAndReset(); 

     return CryptographicBuffer.EncodeToBase64String(hashedBuffer); 
    } 

我打算有連接各種客戶端到服務,不僅僅是Windows商店應用程序(也是傳統的Windows桌面應用程序)。所以自然我想要「一種」哈希密碼客戶端的方式。

我需要關於額外安全機制的建議,如果使用SHA512對密碼客戶端進行哈希處理(如上面的代碼所示),在將其傳輸到服務器時「足夠」(在存儲之前再次哈希和鹽化) 。

+0

我認爲沒有SSL無法保護您的安全......您無法保護它免受中間人攻擊。 – Reno

+0

爲什麼不使用非對稱密鑰? http://msdn.microsoft.com/en-us/library/5e9ft273(v=vs.71).aspx – Paparazzi

+0

@Blam能否詳細說明一下?你的意思是我應該創建一個不對稱的「會話」鍵? – UrbanEsc

回答

0

在沒有TLS保護的情況下執行任何類型的身份驗證都會給您帶來漏洞。 Bcrypt服務器端可以爲您提供有限的保護,防止對被盜數據庫的攻擊。然而,通過線路發送(散列)未受保護的密碼應被視爲安全風險。


應該有可能向客戶端引入至少一種鹽和工作因子。這些參數可以從服務器端檢索,因爲它們需要保持不變。然後你可以使用brypt客戶端。你說它在API中不可用,但那不應該與你有關。 Bcrypt只是一種算法,將會有在線實現。

攻擊者(竊聽者)仍然可以使用暴力攻擊和字典攻擊,但這些攻擊很難完成,從而爲具有適度強密碼的用戶提供有限的保護(如果客戶端代碼可信)。