【问题标题】:IS Encrypting the whole database more secure than encrypting the data only?加密整个数据库是否比只加密数据更安全?
【发布时间】:2021-08-30 17:52:39
【问题描述】:

我有一个需要保护的 SQLite3 数据库。 我对使用 sqlcipher 加密我在 Electron 应用程序中使用的整个数据库或简单地使用加密依赖项加密数据感到困惑。

欢迎任何澄清或解释。

【问题讨论】:

  • 阅读 CryptDB,您可以在其中发现 Oracle Raw 数据库对观察者的不安全性。您的问题不清楚,也不是无法回答,因为数据库存储在哪里有什么风险,甚至您的数据、数据库方案和查询是什么。
  • 数据库是本地存储的。我在桌面应用程序中使用它。它是一个具有简单查询 (CRUD) 的关系数据库。

标签: sqlite encryption sqlcipher


【解决方案1】:

有两种不同类型的加密:“静态加密”和“行级加密”。

如果有人可以访问您的 SQLite 文件怎么办?他们拥有您的所有数据。 “静态加密”通过加密 SQLite 文件本身来保护您免受这种情况的影响。如果有人窃取了您的 SQLite 文件,这对他们来说毫无用处。 sqlcipher 提供静态加密。总的来说,这是个好主意。

如果有人侵入您的应用程序并注入 SQL 命令怎么办?如果他们select您的所有客户数据怎么办?文件是否加密无关紧要,SQL 连接会对其进行解密。为了防止这种情况,您可以添加一层“行级加密”。这是您的应用程序加密它写入的数据并解密它读取的数据的地方。存储的数据是加密的。这更复杂,对性能的影响更大。 由于插入的数据是加密的,因此搜索和索引更加困难。仅将其用于您可能不必搜索的非常有价值的数据。一般来说,您最好保护您的应用程序免受 SQL 注入攻击。

【讨论】:

  • 那么如果我理解了,我们可以将它们结合起来吗?静态加密和行级加密?
  • @OumaimaAbouElMawahib 您可以将两者结合使用,但您可能应该对行级加密有所选择,因为它会带来严重的性能损失。由于插入的数据是加密的,因此很难搜索或索引。
  • 我还有一个问题,加密/解密整个数据库是否比加密/解密数据更快(ofc 不加密搜索/索引所需的列)?如果我想执行 CRUD 查询,哪种方法更快?
  • @OumaimaAbouElMawahib SQLCipher 说“极快的性能,只需 5-15% 的加密开销”,因此使用 SQLCipher 可能比手动加密每一列更快。它当然更简单,而且简单很重要。加密开销不太可能成为您的性能瓶颈,设计不佳的查询和模式才是。加密的成本是固定费用,而错误查询和错误模式的成本会迅速增加。所以不要用你自己的加密使你的查询和模式复杂化。而且您可以随时关闭 SQLCipher。
猜你喜欢
  • 2011-03-12
  • 1970-01-01
  • 2015-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多