Linux 让应用程序签署文档,但不要';不要让它看到钥匙

Linux 让应用程序签署文档,但不要';不要让它看到钥匙,linux,security,digital-signature,private-key,Linux,Security,Digital Signature,Private Key,我想在Linux服务器上对文档和消息进行数字签名。如何安全地存储私钥和密码短语(如果有) 问题是,如果应用程序被泄露,密钥也会被泄露。如果我可以,但不要让它触碰实际的密钥,这不会完全解决我的问题(因为攻击者在一段时间内仍然可以签署任何东西),但会减少影响(比如,我们不必撤销密钥) 例如,在SSL服务器的情况下,不存在这样的问题,因为通常应用程序不需要访问密钥。因此,它们可以半安全地存储在单独的位置。例如,Web服务器(如nginx)能够读取密钥,但不能读取应用程序 我是不是想得太多了?如果你有非

我想在Linux服务器上对文档和消息进行数字签名。如何安全地存储私钥和密码短语(如果有)

问题是,如果应用程序被泄露,密钥也会被泄露。如果我可以,但不要让它触碰实际的密钥,这不会完全解决我的问题(因为攻击者在一段时间内仍然可以签署任何东西),但会减少影响(比如,我们不必撤销密钥)

例如,在SSL服务器的情况下,不存在这样的问题,因为通常应用程序不需要访问密钥。因此,它们可以半安全地存储在单独的位置。例如,Web服务器(如nginx)能够读取密钥,但不能读取应用程序


我是不是想得太多了?如果你有非常高的安全性需求,你可以考虑把密钥移到一个完全独立的服务器,或者更好地是一个硬件安全模块(但是那些代价很高)。就像你提到的那样,它可以帮助防止密钥丢失,但是如果应用程序被破坏,攻击者仍然可以签署他们想要的任何东西

那么,陷入困境的主要原因是审计。也就是说,如果您让您的签名服务器或设备记录其签名的所有内容,那么如果只有您的应用程序受损,您将能够更好地评估受损程度(假设您的签名服务器未受损)


是的,这是有好处的,但是你的第一个重点应该是正确地保护你的主应用程序,因为一旦你的主应用程序被破坏了,你就已经度过了一个非常糟糕的不好的一天,即使你已经将你的钥匙移到了sperate服务上。

创建一个单独的,轻量级签名应用程序,在UNIX套接字上侦听,并作为独立于主应用程序的用户运行;当你的应用程序想要签名时,它会将文件和任何附加信息扔进该套接字,然后取回已签名的文件

如果应用程序遭到破坏,只要攻击者仍在服务器上,他就仍然能够对文件进行签名,但除非他使用权限提升漏洞获取根权限并复制签名应用程序的密钥,否则他将无法窃取密钥,然后在未连接到服务器的情况下随意签名

您可以用标准TCP套接字替换UNIX套接字,并将签名应用程序放在单独的服务器上以获得额外的安全性;确保在签名应用程序上实施一些基本的访问控制,当然,使用适当的防火墙规则以确保签名服务器永远不会暴露在互联网上,或者通过应用程序调用来简化一些事情,在这种情况下,签名二进制文件将作为具有访问密钥的附加权限的不同用户运行,而webapp本身却没有这样的特权


基本上,您应该实现一个基本的软件HSM。

如果您发现某个应用程序受到了破坏,为什么您会认为没有其他应用程序或文件受到类似的破坏?当然,如果一台机器遭到破坏,不管怎样撤销和重新颁发密钥都是明智的,如果只是绝对确定的话?顺便说一句,这个问题可能值得发布,但请查看他们的第一个问题。@DavidThomas这也是我的问题。我应该为此担心吗?我真的不知道;我很确定一个曾经被破坏的系统不应该被信任(直到完全擦除并重新安装),但是关于安全相关的问题,我不知道。