每个平台上的XML,PDF和Office文档的数字签名

时间:2014-03-12 15:44:24

标签: javascript cross-platform client-side digital-signature private-key

我正在尝试开发一个在客户端执行数字签名的网站,然后将签名的文档发送到服务器端。 我想在客户端上进行签名,因为不会发送用户的私钥。该密钥(理论上)必须始终与用户一起使用,并且不得将其发送到Web(例如,即使受SSL保护)。

我希望每个平台都可以签署文件。我已经使用签名算法开发了一个Java Applet,但iOS或Android不支持Java。在.NET中也是不可能的。所以我认为我只限于JavaScript,但我不知道任何签署XML,PDF和Office文档的JavaScript库。我该怎么办?只有Javascript每个平台都有效..

你帮我吗?

此致 威廉。

1 个答案:

答案 0 :(得分:2)

披露:我为CoSign工作。

解决方案是使用安全的硬件数字签名设备。

您提出了在网络“边缘”对数据进行数字签名的常见问题。

由于您讨论的原因,在客户/边缘签名的想法祝你好运。忘了Javascript,它是completely insecure from the cryptography point of view

你是对的,签名者的私钥不应该被发送到任何地方。

好消息:还有一种替代架构:

  • 不要求将私钥发送到任何地方
  • 保护私钥
  • 启用所有类型客户端的签名,包括移动,Android,.Net,iOS等。
  • 通过集中密钥和密钥管理来降低管理成本

答案:使用集中签名设备。设备在硬件级别进行了强化:如果您尝试打开该框,则会破坏密钥。签名设备由我公司和其他一些人制作。

在此系统中,文档(或更好,只是其散列)从边缘设备发送到集中签名设备。用户还使用设备进行身份验证(使用多种技术中的任何一种)。设备保存私钥。它签署哈希,并将数字签名返回给边缘客户端。

根据客户端的功能,它可以:

自行组装签名文档(将数字签名与源文档合并)。好处:需要在边缘客户端和签名设备之间发送更少的数据。问题:客户需要更多sw。或者:

设备可以返回完整的签名文档。在客户端上实现更简单的实现,但要求将文档从边缘客户端发送到签名设备。

请注意,不必发回整个PDF文档 - PDF数字签名只是附加到源文档。所以流程可以是:

  1. 发送整个PDF进行签名。 (或者只是在客户端可以计算它时发送哈希值。)
  2. 收回整个PDF(已签名),或只是一个“尾部”,当附加到源PDF时会创建签名文档。
  3. 多种数据类型 我公司支持开箱即用签名PDF,Word,Excel,XML和其他文档类型。例如,Word文档使用Word“标准”进行签名 - 数字签名的Word文档可以由收件人(依赖方)验证,而不安装Word之外的任何内容。没有插件等。

    签名者身份验证 签名者需要使用集中式设备进行身份验证。我的公司支持多种类型的身份验证,包括OTP和2FA。