2

我的问题是——是否可以直接对文件的哈希值而不是文件进行数字签名。

我必须通过电子令牌在 Web 环境中对 xml 文件进行数字签名。所以我必须将文件从服务器下载到客户端,然后在客户端机器上从 e-token usb 获取证书并签署文件并将其上传到服务器上。

但问题是,如果文件太大,那么在客户端下载会花费太多时间(取决于互联网速度),并且文件的安全性也会出现一些泄漏。

因此,不要将文件发送到客户端机器,而是仅发送文件哈希值(文件的内部哈希值被签名而不是文件作为数字签名过程的一般流程)。

还是有其他替代解决方案?

4

2 回答 2

1

@Eugene 提出了一些关于安全传递哈希的细节的有效观点。

由于您有一个 eToken,您可以使用它在客户端和服务器之间建立一个 2-way SSL 会话。此会话可用于将哈希传输到客户端,并将生成的签名传回服务器。

要在 Java 客户端对哈希进行签名,您可以使用签名算法 likeNONEwithRSA而不是 like SHA256withRSA

“NONE”指定原始数据(在这种情况下是哈希)将被签名并且不会被算法再次哈希。

于 2013-09-11T00:05:43.107 回答
0

好吧,当然可以将哈希传递给客户端并在那里签名,但细节是魔鬼——在这种分布式签名的情况下,您需要设计一种真正安全的方式来传递哈希和签名并在客户端安全地签名。此外,您需要在服务器上有代码,让您计算哈希,将其传递给客户端,然后将签名嵌入到您选择的签名格式中。

我们公司为我们的 SecureBlackbox 产品开发了一个分布式密码学插件,可以解决上述所有问题。有关详细信息,欢迎您在 StackOverflow 上查看此答案。

于 2013-09-10T14:03:27.390 回答