2

我正在开发一个 Web 应用程序,我想对流程中的某个步骤进行数字签名

也就是说,应用程序的用户执行某个操作,我希望对该事件进行数字签名。

用户在发出操作以对其进行数字签名时应使用和 usb 令牌。

我想知道你推荐哪种方法来做这样的事情。

例如:

签署数据库记录(你如何完成它?)(缺点:你必须用应用程序本身来验证它,我猜)

创建一个说明事件和用户的 pdf,并对 pdf 进行数字签名(亲:pdf 独立于应用程序)

创建和签名以及 xml 文档(如何完成它?数字签名存储在哪里?)

任何其他???

萨卢多斯

sas

4

4 回答 4

2

我目前正在开展一个项目,该项目的要求与您在问题中列出的要求几乎相同。

我们正在使用 USB 设备来生成签名。该设备来自一家名为IronKey的公司,它非常安全并符合许多安全标准。该设备具有硬件生成的密钥对,可用于签名和验证。

当用户使用我们的应用程序提交数据时,我们将数据封装成一个 xml 文档,接下来我们使用 sha256 生成一个哈希,最后我们通过 pkcs11 使用设备对哈希进行签名。然后将签名和数据存储在客户端数据库中,然后提交到我们的服务器,在那里我们可以使用来自用户令牌的公钥(在颁发令牌时存储在我们的服务器数据库中)执行验证。

由于必须执行令牌的客户端访问,因此不使用 Web 应用程序执行此操作。

希望这会有所帮助,我错过了很多细节,如果您有任何其他问题,请告诉我!

于 2010-07-16T02:11:59.637 回答
1

在您的情况下,每个用户都将拥有它的公钥和私钥。用户将使用他的私钥签署数据库记录(字符串等)、pdf 或 xml 文档。

你会得到一个签名的数据库记录(签名的字符串等)、签名的 pdf 或 xml 文档。

您现在将已签名的数据库记录作为二进制记录存储在数据库中。您将签名的 pdf 或 xml 作为普通文档存储在您的存储位置。并且可能您需要在数据库中添加一个字段以将此文件集成到您的应用程序中。

对于进行签名的库,您可以使用 AES,在这里您可以使用各种语言的实现库:http ://en.wikipedia.org/wiki/AES_implementations

无论如何,我不确定是否有任何关注安全性的用户会给您的应用程序他/她的签名私钥。人们通常使用受信任的应用程序在传递某些东西之前对其进行签名。

于 2010-07-16T01:55:13.640 回答
1

您可以使用浏览器扩展对“UserId|Action|TimeStamp”进行数字签名并发送到服务器执行,服务器可以使用已经注册的公钥验证签名。(作为注册过程的一部分,您可能需要注册用户的公钥)。浏览器扩展支持使用 USB 令牌或智能卡进行数字签名。

您可以参考帖子中的 JavaScript:https ://stackoverflow.com/a/55757349/9659885

这有两种方法来注册证书和签名令牌或任何字符串。

于 2019-05-24T12:02:29.770 回答
0

在开始考虑实现之前,您应该阅读和理解公钥密码学的一些很好的介绍。

根据您的问题水平,您甚至还没有足够的知识来提出正确的问题,并且您最微不足道的误解,整个安全系统都崩溃了。您可能需要考虑确保专家的服务,因为 99.9% 正确的做法只是浪费精力。

于 2010-07-16T01:47:50.183 回答