2009-02-02 56 views
0

我有點奇怪的困境。當我試圖解釋它時,請耐心等待!Forms Auth - 如何防止只知道擴展用戶信息的用戶帳戶?

我正在使用表單身份驗證,並將另外的用戶信息存儲在另一個表中(從Forms Auth,加密的SSN,Salt值引用的UserID)。當用戶註冊到該網站時,我會詢問SSN,DOB和LName,並在創建帳戶之前針對我們的系統進行驗證。我想確定該SSN在表單身份驗證中是否有與其關聯的帳戶。由於SSN是使用salt值加密的,因此我無法查看每一行來進行查找。

我只希望每個SSN有1個用戶帳戶。使用鹽值會破壞這一點。

我看到它的唯一方法就是對SSN使用通用的加密算法。當用戶輸入時,我應用相同的加密算法並查看用戶擴展屬性表中是否有值匹配。

這樣安全嗎?

+0

爲什麼要加密SSN呢? – Treb 2009-02-02 17:18:48

+0

我認爲你有一個與加密混淆的哈希。 – 2009-02-02 22:58:18

回答

0

每次使用相同的鹽。然後你可以比較加密值。

1

而不是使用相同的鹽值,基於其他用戶信息生成鹽,以便它可以重建。因此,您可以在用戶應用後重新生成鹽,並且您可以生成期望的哈希值並在單個查詢中完成工作。

1

如果您希望對SSN值進行加密(而不是散列),將密鑰存儲在Natso指出的同一個表中並不是一個好習慣。這是充滿危險的,因爲密鑰不會與他們保護的數據一起存儲 - 如果攻擊者設法獲得數據庫轉儲,他將能夠解密加密的內容,因爲密鑰存儲在一邊。

應用程序應該從安全密鑰庫中獲取密鑰,然後可以使用該密鑰來加密/解密信息。這樣,您可以繼續在數據庫中存儲敏感信息,從而保護您的信息,並應用不同的機制(通常爲文件系統安全性)來保護您的密鑰存儲區。

這當然假設您的要求是以安全的方式將數據存儲在數據庫中,並在稍後的時間點恢復相同的數據。但是,如果數據一旦通過算法就無法恢復,則應該探索使用散列。

相關問題