我想让一个守护进程类型的进程(即无用户交互)访问共享密钥,以便它可以访问共享的加密数据文件。访问相同加密数据的用户应用程序将共享密钥存储在用户的OS密钥链中(例如OS X keychain或Gnome Keyring等)。操作系统密钥链反过来用用户的登录(或其他特定于用户的)密码保护密钥。
这里的加密用于在服务器和客户端之间传输公共网络时保护数据。所讨论的数据是来自科学实验的原始数据。大多数都是无价值的(即不太可能吸引攻击者来推测性地破坏加密并浏览数据),但其中一些可能非常有价值,用户希望在选择公开共享其详细信息之前将其保密(即保护其免受网络上的临时观察者的攻击)。如果没有科学分析,很难确定数据的价值,因此在用户传输未加密的线路时观察用户的活动(包括查询)将为观察者提供有关数据价值的一些线索。
守护进程是系统的查询服务器。它从共享数据中读取数据,处理查询,并将结果集的标识符返回给客户端,然后客户端从共享存储中提取已标识的数据。
我们允许将加密数据同步到用户的本地工作站/笔记本电脑,所以磁盘上的数据加密对决心坚定的攻击者来说至多是一件麻烦事。我们也允许用户在本地运行查询服务器(仍然由init.d/launchd启动),所以我想尽我所能保护与守护进程一起存储的密钥。主要风险是,确定的恶意用户能够从其系统上的守护程序中发现密钥。暴露该密钥需要我们更改密钥,更新所有用户的密钥,然后重新加密数据库。
存储守护进程的共享密钥的最佳方法是什么?我可以将密钥放在磁盘上并在磁盘上加密文件,但守护进程必须有密钥才能解密该文件。这似乎等同于只拥有原始加密数据的共享密钥。我天真的做法是将密钥存储在应用程序的二进制文件中,但我无法想象这是最好的选择。有什么建议吗?