2016-03-15 189 views
0

我正在開發一個HIPAA項目,並且它已經引起我的注意,我需要加密所有列或含有私人健康信息的列級別數據。這就是說我正在尋找在block_encryption_mode = aes-256-cbc中使用AES_ENCRYPT和AES_DECRYPT。它看起來像我需要爲表中的每一行唯一地有一個IV(初始化向量)。我將需要這個同樣的IV來加密和解密。我應該只是將它存儲在數據庫或其他內容的列中?MySQL CBC加密和存儲初始化向量

另外對於列類型,最好是使用varbinary/blob或HEX加密結果並將其放入varchar/text?

任何其他建議都非常歡迎保持數據儘可能安全。

+0

如果您使用加密數據存儲密鑰,那麼您什麼都沒有做到。它相當於一個銀行保險庫,它的鎖組合在鎖上。加密不僅僅是您可以在營銷清單上覈對的東西。還有一大堆其他的東西需要處理,以至於加密/解密和存儲這些密文的實際機制是你的問題中最少的。 –

+0

我永遠不會用數據存儲密鑰......這很愚蠢。 CBC需要一個密鑰(從未保存在數據庫中的Web應用程序中)和一個IV。記錄IV應該是隨機的和不同的。 –

+0

@MarcB IV(初始化向量)不需要是保密的,通常也不是。 IV不是加密密鑰。 – zaph

回答

0

商店是在一個專欄中,它不需要保密。

我會使用varbinary/blob而不是十六進制編碼數據。

注意:Base64是一個更好的選項,十六進制,存儲開銷較小。

對@Marc的某種程度進行處理:加密密鑰如何被保護?服務器保護和管理訪問有多好。

+0

服務器計劃在一個鎖定的儲藏室中提供冷卻,當然。我們正在計劃磁盤加密以及列級別的加密。至於訪問,它將被鎖定並通過鑰匙和死鎖保護,只有兩個人可以訪問該房間。我們打算在網頁前設置一個防火牆/路由器來阻止訪問,並打開443到Web /數據庫服務器。 至於密鑰本身,它將被包含在服務器上某個位置的文件中,並且加密密鑰將通過web應用程序自身進行加密。 –