我正在尝试开发一个在客户端执行数字签名的网站,然后将签名的文档发送到服务器端。 我想在客户端上进行签名,因为不会发送用户的私钥。该密钥(理论上)必须始终与用户一起使用,并且不得将其发送到Web(例如,即使受SSL保护)。
我希望每个平台都可以签署文件。我已经使用签名算法开发了一个Java Applet,但iOS或Android不支持Java。在.NET中也是不可能的。所以我认为我只限于JavaScript,但我不知道任何签署XML,PDF和Office文档的JavaScript库。我该怎么办?只有Javascript每个平台都有效..
你帮我吗?此致 威廉。
答案 0 :(得分:2)
披露:我为CoSign工作。
解决方案是使用安全的硬件数字签名设备。
您提出了在网络“边缘”对数据进行数字签名的常见问题。
由于您讨论的原因,在客户/边缘签名的想法祝你好运。忘了Javascript,它是completely insecure from the cryptography point of view。
你是对的,签名者的私钥不应该被发送到任何地方。
好消息:还有一种替代架构:
答案:使用集中签名设备。设备在硬件级别进行了强化:如果您尝试打开该框,则会破坏密钥。签名设备由我公司和其他一些人制作。
在此系统中,文档(或更好,只是其散列)从边缘设备发送到集中签名设备。用户还使用设备进行身份验证(使用多种技术中的任何一种)。设备保存私钥。它签署哈希,并将数字签名返回给边缘客户端。
根据客户端的功能,它可以:
自行组装签名文档(将数字签名与源文档合并)。好处:需要在边缘客户端和签名设备之间发送更少的数据。问题:客户需要更多sw。或者:
设备可以返回完整的签名文档。在客户端上实现更简单的实现,但要求将文档从边缘客户端发送到签名设备。
请注意,不必发回整个PDF文档 - PDF数字签名只是附加到源文档。所以流程可以是:
多种数据类型 我公司支持开箱即用签名PDF,Word,Excel,XML和其他文档类型。例如,Word文档使用Word“标准”进行签名 - 数字签名的Word文档可以由收件人(依赖方)验证,而不安装Word之外的任何内容。没有插件等。
签名者身份验证 签名者需要使用集中式设备进行身份验证。我的公司支持多种类型的身份验证,包括OTP和2FA。