2010-01-21 67 views
13

我正在構建一個內部具有健康信息的應用程序。這個應用程序將面向消費者,對我來說是新的。我希望有一種方法可以讓隱私問題完全放心。當我審查在公開可訪問的數據庫中保護敏感數據的方法時,我經常遇到數據庫半透明的概念。關於這個問題有the original bookexcellent tutorial on the subject from Oriellynet半透明數據庫

我擔心的是,在我認爲非常現代化的編程站點(比如這個)中,我看到關於這個想法的信息非常少。似乎沒有關於維基百科這個想法的文章。這裏沒有關於這個主題的問題,也沒有關於這個主題的最近的教程或文章。簡單地說,這個想法是某些數據對於系統的某些用戶是清楚的,而其他用戶可以通過密碼方式阻止訪問該數據,即使他們有管理員訪問權限也是如此。

我已經在提供半透明數據訪問的原型數據庫上做了大量工作。我遇到了一個相當大的問題:要真正半透明,就沒有密碼恢復的機制。如果管理員可以重置用戶密碼,則他們可以短暫訪問用戶數據。要真正半透明,用戶必須永遠不要丟失密碼。

在使用這些強大的加密系統時,我們使用強大的加密技術來保護我們日常生活中的私人數據(技術上可以肯定)。如果單詞「blowfish」是你日常詞彙的一部分,那是一回事,但是一個以消費者爲中心的網站?我擔心用戶不會願意圍繞「真正爲您加密」的概念隱瞞真正的數據庫半透明。我擔心以「我丟失密碼」開頭的支持電話,並以「我無能爲力」爲結束。

我的問題:我應該在我的應用程序中實現此方法嗎?是否有其他開源應用程序沿着這條路線走下去,我可以比較數據庫設計(尤其是使用php/MySQL)?我有其他人追求這種真正安全但真正不方便的功能集?是否還有另一種更流行和現代的數據庫安全模式,我錯過了?數據庫半透明是我應該擁抱的時尚還是合法的數據庫設計方法?雖然我總是很欣賞討論,但我更喜歡客觀的答案,我可以利用我的設計。

回答

1

回覆:半透明數據庫。我想,你可以使用指紋。燒傷受害者或最終失去指紋的人怎麼樣?哎呀。這是否值得一小部分用戶?

熟悉HIPAA,特別是涉及到技術。 請記住,除了天網之外,沒有任何系統是真正安全的,看看發生了什麼!人類負責。當你在一家醫療公司工作時,你簽署了一份保密協議,表明你不會公開你所學習的任何信息,因爲它是保密的。 將有人重置人員的密碼。事情就是這樣,因爲不是每個人都有技術上的能力,而且現在就是這樣。 HIPAA說,你只需要實現安全性。

  • 事實上,還有一個真正安全的系統:它從網絡和電力都被拔出,並且它被關閉。
+0

我不敢想像一個系統,是從網絡和電力插電,但仍然是對的。 – Amy 2010-01-21 23:14:19

+0

我正在考慮一臺筆記本電腦,但一臺有感知力的計算機的圖像超出了我的想象。 – Trevoke 2010-01-22 13:40:33

+0

如果仍然有人認爲從網絡上拔下的計算機是安全的,可能還沒有看到這些傢伙:http://lasecwww.epfl.ch/keyboard/ – ercan 2010-01-22 16:45:53

2

我應該在我的應用程序中實現此方法嗎? 就像生活中的其他事物一樣,這是一種折衷:)它可能更安全但更難建成。

是否有其他開源應用程序沿着這條路線走下去,我可以比較數據庫設計(特別是使用php/MySQL)?

不知道,我猜這些工具還有自己做:)

是任何人都追求這幾樣真正安全的,但真的很不方便的功能集?

是的,但它似乎仍處於不成熟的狀態,就像您描述的有關丟失密碼的問題。

是否還有另一種數據庫安全模型更流行且現代,我錯過了?

基本上有兩種數據庫連接。一種選擇爲用戶提供了一個真正的數據庫帳戶,另一種選擇是使用單一登錄到數據庫。在網絡出現之前,在客戶/服務器領域有兩種模式的支持者,但在Web開發人員中,單點登錄方法處於領先地位。

數據庫半透明是我應該擁抱的一種時尚還是合法的數據庫設計方法?

不這麼認爲,在UNIX密碼數據庫,例如,是一個基本的半透明數據庫的一個很好的例子;)

的東西在這裏閱讀link text

+0

關於unix密碼數據庫的優點。你有更多關於你提到的「單點登錄」問題的信息嗎? 謝謝, -FT – ftrotter 2010-01-24 21:48:22

7

所以,我一直在尋找在最近類似的事情上,並且遇到了同樣的問題。我正在考慮實施的解決方案如下:

  • 註冊後,爲用戶創建一個唯一的安全(長)密鑰並使用它來加密其數據。
  • 使用用戶密碼加密此密鑰AES並將其存儲在數據庫中。

此時,如果用戶忘記密碼,他們仍然處於這種狀態。

  • 創建代表貴組織的公鑰/私鑰對,並將公鑰存儲在服務器上。
  • 將密鑰的私人部分分成幾個部分,並將每個部分分配給在公司持續成功中擁有重要股份(最好是財務)的人(例如貴公司的董事)。這樣做可以讓任何兩個或任何三個人聚在一起,並在需要時恢復完整的私鑰。用自己的密碼加密每個人的密鑰。
  • 當用戶註冊以及用他們的密碼加密他們的密鑰時,用組織公鑰對其進行加密並將其存儲在某個地方。
  • 創建一個密碼重置表單,它記錄重置用戶密碼的請求,以及一些用戶是他們所說的人的證明(例如質詢/響應)。
  • 在數據庫中記錄這些重置請求(可選使用公鑰再次加密)。
  • 每小時/每天/每月/每月一次,將必要的密鑰持有者組合在一起,並使用他們的組合密鑰來處理應計的重置請求,解密成功證明他們是誰的用戶的密鑰。

在這方面有很多挑戰和考慮。我對這些大多數都有一些想法,但也會對其他意見感興趣:

  • 如何在多人之間安全地分割密鑰,以便任何人都無法解密存儲的密鑰。
  • 如何最大限度地減少如果'主鑰匙'真正落入不法人手時會暴露的鑰匙數量。
  • 如何確保如果(天堂禁止)您的鑰匙持有人丟失了鑰匙,那麼(a)不存在暴露數據的風險,以及(b)不存在突然重置密碼的能力丟失的風險永遠。
  • 如何成功驗證某人確實是他們所說的那些人,而不會使您的整個安全方法成爲一個明顯的漏洞。你在這個領域實現

任何事情都會降低半透明數據庫的方法的安全性,毫無疑問,但根據您的數據的性質,這可能是一個有價值的妥協。

+0

很好的迴應。我想知道你的方法是否依賴於那些通常是短暫的人。也許有人可以設置一個「密碼重置服務」,它可以提供類似於您的建議的內容,但只需一個簡單的API。例如。如果我有一項發佈其公鑰的服務,允許您加密密碼/密鑰以進行非現場存儲,以及一個API,該API將確定您的用戶需要執行哪些步驟才能使服務使用私鑰解密密碼...例如,在特定的電話號碼回覆短信...等等 – ftrotter 2010-12-21 06:32:17

+0

@保羅,你有沒有實現上述?很想知道你所做的設計決定。我有許多相同的潛在問題類似的問題。獲得更新會很有趣。 – 2011-10-28 20:31:17

+0

@BillEisenhauer,對不起,我沒有 - 我從來沒有把這個項目放到概念階段之外,因爲它需要更多的時間/精力/金錢,而我現在還沒有這個項目。如果你想進一步討論,很樂意多談談......雖然不知道如何最好地做到這一點? – 2011-11-05 22:27:33