與H2

2014-02-23 20 views
2

注意安全方面的考慮:雖然我提到H2,這可以適用於任何DBMS,與H2

  1. ,使您可以存儲在一個文件中的整個數據庫;

  2. 使其源代碼公開可用。

我的關注:

是否有可能通過執行類似下面打入加密H2數據庫?

  1. 在某個表中存儲一個非常大的,歸零的BLOB,大小爲幾個100 KB。

  2. 檢查新的H2數據庫文件二進制文件,並在頁面/塊邊界附近查找重複模式。頁面/塊大小可以從H2源代碼獲得。如此獲得的重複模式將是用於加密H2數據庫的密碼密鑰。

  3. 一旦密鑰暴露出來,黑客只需要足夠的專注,然後進一步深入H2源並找出其表,列和行的確切結構。換句話說,從這一點來看,所有東西都是暴露出來的。

我沒有親自研究H2的源代碼,我也不是一個密碼學專家,但在這裏就是爲什麼我認爲上面的 - 或者沿着上面的紋路一些黑客 - 可能的工作:

  1. 由於性能方面的原因,所有DBMS都以塊(512或8 KB大小的頁面或塊)讀取/寫入數據,H2也是如此。

  2. 由於數百KB大小的BLOB將遠遠超過DBMS的頁面/塊大小,因此可以預期加密圖形密鑰(使用用戶密碼在內部生成)以重複模式顯示尺寸小於頁面/塊大小。

+1

暴露所描述行爲的任何密碼都被設計破壞了。 –

回答

3

一個好的密碼算法不會受到這種攻擊。

明文中的模式(這裏是零的BLOB)將在密文中消散。祕密密鑰在密文中不會以模式或其他方式顯示。使用分組密碼的一個經典技術是根據前一個分組的密文對分組進行加密。這裏我所指的塊是密碼算法中使用的塊,通常是128位長度。

例如,您可以將明文塊與先前塊加密的結果進行異或運算,以下是維基百科針對CBC模式的模式,該模式將當前塊與加密前的結果進行異或。

CBC mode

正如你所看到的,即使你給每個明文塊都是零,你會最終有一個完全隨機尋找的結果。

這些僅僅是示例,H2中使用的實際混淆機制可能更復雜或涉及,具體取決於它們使用的算法。

+0

但即使每個加密塊在CBC中都不同,對於整個數據庫頁面(通常是>加密塊),我確實希望看到重複模式。我關心的不是密碼算法的健全性,而是H2如何使用它來防止上述類型的攻擊。由於H2的源代碼是公開的,因此任何黑客都可以找出正在使用的混淆機制,因此......關注。 – Harry

+1

使用包含相同數據的兩個數據庫頁面不會產生相同密文的方案是可能的和可取的。例如,當使用像TrueCrypt這樣的磁盤加密軟件時,這是很明顯的,其中512字節的磁盤扇區通常包含相同的數據,但應該加密成不同的密文。 –

+2

代碼是開源的這個事實在理論上是一件好事,任何東西都應該公開,除了密鑰。我們可以假設攻擊者無論如何都可以訪問專有代碼,所以最好是公開和同行評審。我將嘗試挖掘H2中使用的加密技術,希望AES-XTS或類似技術。但是實施通常是最弱的地方。 –