如何保护密钥免受其他应用程序的侵害?
设置
- 我有一个包含机密用户信息的 SQLite 数据库。
- 该数据库可能会复制到其他计算机上
- 我信任该用户,但不能复制到其他应用程序
- 用户偶尔可以访问全局服务器
安全目标
- 除授权程序(我的)之外的任何程序都无法访问 SQLite 数据库。
- 破坏一台机器上的安全性不会破坏其他机器上的安全性
- 系统必须可更新(这意味着如果某些算法(例如特定密钥生成算法)被证明有缺陷,则可以更改)
建议的设计
使用加密的 SQLite 数据库将密钥存储在操作系统安全存储中。
问题
任何Windows hack都将允许该人访问所有违反目标#2的机器的密钥
注释
- 与此方法类似,如果我将密钥存储在可执行文件中,则会破坏安全性将损害所有系统。
- 另外,我还提到了 Windows 安全存储。虽然,如果有必要,我会采用特定于操作系统的解决方案,但我更喜欢非特定于操作系统的解决方案
关于如何实现设计目标有什么想法吗?
Setup
- I have a SQLite database which has confidential user information.
- This database may be replicated on other machines
- I trust the user, but not other applications
- The user has occasional access to a global server
Security Goals
- Any program other than the authorized one (mine) cannot access the SQLite database.
- Breaking the security on one machine will NOT break the security on other machines
- The system must be updatable (meaning that if some algorithm such as a specific key generation algorithm is shown to be flawed, it can be changed)
Proposed Design
Use an encrypted SQLite database storing the key within OS secure storage.
Problems
Any windows hack will allow the person to access the key for all machines which violates goal #2
Notes
- Similar to this method, if I store the key in the executable, breaking the security will comprimise all systems.
- Also, I have referenced windows secure storage. While, I will go to an os specific solution if I have to, I would prefer a non-os specific solution
Any idea on how to meet the design goals?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我认为您需要使用 TPM 硬件,例如通过 TBS 或类似的东西,才能真正制作一个安全版本。我的理解是,TPM 让应用程序检查它是否没有在软件级别进行调试或跟踪,并且操作系统应该防止任何其他应用程序假装 TPM 模块是您的应用程序。但我可能是错的。
您可以使用某种通过模糊性实现安全性的拼凑技术,但除非您使用 TPM,否则它可以通过调试器破解。
I think you will need to use TPM hardware e.g. via TBS or something similar, to actually make a secure version of this. My understanding is, TPM lets the application check that it is not being debugged or traced at a software level, and the operating system should prevent any other application pretending to the TPM module that it is your application. I may be wrong though.
You can use some kind of security-through-obscurity kludge, but it will be crackable with a debugger unless you use TPM.