设定:
问题:
我已经使用Bouncycastle成功执行了加密和解密。但它涉及尝试从pubring和secring文件中读取公钥和私钥。 为了安全起见,我宁愿不让java应用程序直接访问密钥环文件。
我有什么选择。 Bouncycastle中是否有任何选项在不读取密钥环或将密钥导出到单独文件的情况下执行此操作?
注意:不需要使用Bouncy城堡。
答案 0 :(得分:1)
您的Java应用程序可以使用执行应用程序当前所具有的任何权限来调用gnupg。幸运的是,gnupg支持丰富的command-line options,允许您提供所有必要的参数并读取/收回状态和结果,例如-batch
,-options
或-status-fd
。您可以使用Java调用程序并使用Java的ProcessBuilder或更高级别的库(例如Plexus Utils
另一方面,至少有一个java-based wrapper library与GnuPG可执行文件直接对话。虽然依赖于平台,但这可能比为每个事务生成流程具有速度优势;并且可能会为您节省大量的实现工作量来确定命令行选项。
请注意,使用GnuPG完全绕过BouncyCastle - 您可以自动调用GnuPG,有效地将其用作您的"库"。
答案 1 :(得分:1)
BouncyCastle需要直接访问密钥文件,包括公钥和私钥。
如果您想阻止Java应用程序访问密钥文件,但仍然使用它进行加密和解密,您可能会成功使用GnuPG 2.1将需要访问私钥的所有操作卸载到gpg-agent
。可能有用的设置看起来有点像:
gpg-agent
gpg-agent
套接字,但不能访问私钥文件在Linux中,您可以考虑对套接字和密钥环文件使用chroot
或适当的权限。在Windows中,可能会出现类似沙盒解决方案的内容。
与小权重gpg-agent
类似,您可以编写自己的守护程序来处理所有密钥操作,同时不会同时暴露密钥(因此您已经拥有了很多小守护程序)较低的严重错误机会;而大型,可能不安全和暴露的主应用程序可以向“代理”应用程序发送加密/解密请求。