簡體   English   中英

將敏感數據安全地存儲在數據庫中

[英]Storing sensitive data securely in a database

我目前正在建立療養院網站。 我已經設計了一種在數據庫中存儲私有數據的方案,但是我希望您對此有意見。

基本上,我有一個就診patient ,它存儲有關病人的公共 (=不敏感)信息。 其他一些信息(例如名稱,地址)是私有信息,需要安全存儲。 我使用由PHP OpenSSL生成並由網站管理員發送的公鑰/私鑰對。 僅允許訪問私人數據的人員(基本上是醫療保健提供者)知道該密碼短語。 我想將它們存儲在另一個表中。 第一個問題BLOB是用於存儲二進制數據的最佳列類型(對於MySQL)。 還是應該轉換它們(例如,使用base64 )並將它們存儲在VARCHAR列中?

我的patient_secure_data表如下所示:

id          INT AUTO_INCREMENT
patient_id  INT (FOREIGN KEY to patient.id)
key         VARCHAR(63)
data        BLOB
env         BLOB

這是一個鍵值表,其中的值由openssl_seal密封。 我需要存儲第三個參數( $env_keys )才能解密數據。 所以第二個問題 ,為什么我需要這個env_keys如果我有當我打電話的私有密鑰的密碼openssl_open

第三個(也是最后一個)問題 ,這是一個安全的數據庫架構嗎? 我的意思是,我可以保證沒有密碼的人都不會看到私人數據嗎?

注意:我還將使用相同的密鑰對來加密磁盤上存儲的文件。 但是,數據庫或文件在安全性方面看不到任何區別。

問候,

紀堯姆。

抱歉,如果我的語言不完美,我不會說英語。我希望我能說清楚一點。

1-BLOB是我的偏愛,因為將其編碼為base64會增加空間和處理時間(因為解密之前您還必須解碼base64)

2- openssl_seal無法為您提供用於加密數據的密鑰。 env_keys的目的是存儲所生成密鑰的加密形式 調用openssl_open時,將為其提供此信封密鑰以及解密該信封密鑰所需的私鑰。 私鑰需要與用於生成信封密鑰的公鑰匹配。

3-如果您的私鑰需要密碼,那么從技術上講您的數據相對安全。 即使他們具有信封密鑰和私鑰,也將無法使用它……但是您的密碼短語有多安全? 要意識到的一件事是,您幾乎永遠不能保證一個完全安全的方案,但是您絕對可以使它對黑客很難。 在這里發揮您的想象力。 順便說一句,您的密碼短語是純文本形式嗎?

  1. 超過500個字符的任何內容都可能是Blob(或Clob)。

  2. 關於密鑰,您應該只將公共密鑰存儲在公共數據庫中。 這樣,您不必擔心任何人(密碼短語或否)都可以解密數據。 密鑰的私有部分應存儲在敏感數據庫中。 您只需要公共部分來解密由私有部分加密的數據。 我不會將包含非敏感信息的整個密鑰(公用+專用)存儲在服務器的磁盤上,因為這會損害密鑰的安全性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM