直接数字签名文件的哈希值而不是文件

时间:2013-09-10 07:03:07

标签: java hash digital-signature pkcs#11 e-token

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

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

但问题是,如果文件的大小太大,那么在客户端下载需要花费太多时间(取决于网速)以及文件安全性的一些泄漏。

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

或者还有其他替代解决方案吗?

2 个答案:

答案 0 :(得分:1)

@Eugene提出了一些有关安全传递哈希值的详细信息。

由于您有eToken,您可以使用它在客户端和服务器之间建立双向SSL会话。此会话可用于将哈希传输到客户端,并将结果签名传回服务器。

要使用Java在客户端对哈希进行签名,您可以使用NONEwithRSA算法,而不是像SHA256withRSA这样的算法。

“NONE”指定原始数据(在本例中为散列)将被签名,并且不会被算法再次散列。

答案 1 :(得分:0)

嗯,当然可以将哈希值传递给客户端并在那里签名,但是恶魔是详细的 - 如果是这样的分布式签名,你需要设计一种非常安全的方法来传递哈希值和签名并在客户端安全签名。此外,您需要在服务器上安装代码,以便计算哈希值,将其传递给客户端,然后将签名嵌入到您选择的签名格式中。

我们公司为我们的SecureBlackbox产品开发了分布式加密附件,解决了上述所有问题。有关详细信息,欢迎在StackOverflow上查看this answer