2010-07-23 31 views
13

我目前正在處理一個應用程序,我們收到私人健康信息。最大的問題之一是SSN。目前,我們並未將SSN用於任何事情,但將來我們希望能夠使用它來跨多個設施唯一識別患者。我能看到可靠地做到這一點的唯一途徑就是通過SSN。但是,我們(除了我們的客戶)真的不想存儲SSN。散列SSN和其他有限的域信息

所以很自然地,我想到了SHA哈希值,因爲我們只是用它來識別。問題是,如果攻擊者知道問題域(SSN),那麼他們可以專注於該域。所以計算十億個SSN要容易得多,而不是幾乎不限數量的密碼。我知道我應該使用鹽和鹽,但是我還有什麼可以做的,以防止攻擊者泄露SSN?我沒有使用SHA,而是計劃使用BCrypt,因爲Ruby有一個好的庫,它可以自動處理可擴展的複雜性和醃製。

它不會被用作密碼。本質上,我們從許多設施獲取消息,並且每個設備都描述一位患者。接近患者全球唯一標識符的唯一東西是SSN號碼。我們將使用散列來識別多個設施中的同一位患者。

+2

您可能不希望以這種方式使用SSN:人們可能會在表單上誤寫它,或者它可能會[隨時間而改變](http://www.ssa.gov/pubs/10064.html) 。 – sarnold 2010-07-23 03:32:21

+2

我第二個sarnold。我已經看到這種SSN信息的使用剛好失敗 - 另一種情況是當沒有SSN(立即)可用時。 – 2010-07-23 03:37:49

+0

這是一個很好的觀點,但這是爲了更多的模糊解決方案,它不一定100%是正確的。此外,當沒有SSN可用時,該功能不會爲該患者工作。唯一的其他建議選項是使用他們的保險信息,這些信息在準確性和可用性方面有其自身的問題。 – 2010-07-23 03:41:16

回答

7

生成社會安全號碼的算法是在黑客的概念之前創建的,因此他們是extremely predictable。使用SSN進行身份驗證是一個非常糟糕的想法,使用什麼密碼原語或鹽值有多大並不重要。在這一天結束時,你試圖保護的「祕密」並沒有太多的熵。

如果你永遠不需要知道純文本,那麼你應該使用SHA-256。 SHA-256是一個用於密碼的非常好的功能。

+0

SHA-256是一種很好的散列函數,但對於這種情況它的速度相當快。我需要一些可以控制複雜性的東西,比如bcrypt或PBKDF2。我擔心即使所有的鹽漬特徵都不足以防止逆轉。 – 2010-07-23 19:00:07

+0

@Preston Marshall如果你想要一個緩慢的消息摘要函數,那麼你很困惑他們爲什麼如此有用。 NIST永遠不會批准慢速消息摘要功能。整個觀點是,這個函數在一個方向上非常快,但是在計算上很複雜。應該用鹽來解決暴力問題。 – rook 2010-07-23 19:38:08

+0

@Preston Marshall當真實值小於9999時,使用加密函數並不重要。 – rook 2010-07-23 19:39:01

0

首先,多數掌聲和好評存儲SSN的散列。

看起來好像您將SSN預留爲一種「備份用戶名」。在這種情況下,除了用戶名之外,您還需要另一種形式的身份驗證 - 密碼,駕照號碼,護照號碼,居住證明等等。另外,如果你擔心攻擊者會預測出1984年在亞利桑那州出生的病人的前10000個SSN並嘗試其中的每一個,那麼你可以在你的應用程序中投入一個指數級增長的速率限制器。*對於額外的防禦,建立一個通知系統,當系統管理員出現異常高的失敗登錄嘗試次數時提醒系統。**

*指數增加速率限制器示例: 每個失敗請求,將下一個請求延遲(1.1^N)秒,其中N是來自該IP的失敗請求數。在數據庫表中跟蹤IP和失敗的登錄嘗試;不應該增加太多的負擔,這取決於您的應用程序的受衆(您是否爲Google工作?)。

**在攻擊者可以訪問多個IP的情況下,通知會提醒系統管理員可以使用他或她的判斷來查看你是否有大量愚蠢的用戶或它是惡意嘗試。

+0

它不會被用作密碼。本質上,我們從許多設施獲取消息,並且每個設備都描述一位患者。接近患者全球唯一標識符的唯一東西是SSN號碼。我們將使用散列來識別多個設施中的同一位患者。 – 2010-07-23 18:57:07

+3

對於存儲SSN的長散列,沒有任何觀點/鼓掌/好評。它在功能上等同於存儲SSN。 – Slartibartfast 2010-08-05 03:34:19

+0

@slartibarfast:功能相當是的。在他們的數據庫被盜用或被盜的情況下,他只是阻止他的公司泄露身份信息。 – 2010-08-05 21:48:10

3

如果你認真想哈希以安全的方式一個社會安全號碼,這樣做:

  1. 找出多少熵是 的SSN(提示:很少有 遠小於。一個隨機選擇的數字號碼)。
  2. 使用任何哈希算法。
  3. 保留少於(half?)的位數比 SSN中有熵。

結果:

  • 臨:因爲 大量哈希衝突的SSN的安全散列。
  • 專業:你的哈希短小,易於存儲。 Con:哈希碰撞。
  • Con:由於Con#1,您不能將其用於唯一的 標識符。
  • 專業:這很好,因爲你真的需要 真的不需要使用SSNs作爲 標識符,除非你是社會 安全管理。