数字签名流程的策略?
Posted
技术标签:
【中文标题】数字签名流程的策略?【英文标题】:strategy for digitally signing a process? 【发布时间】:2010-07-16 01:32:06 【问题描述】:我正在开发一个网络应用程序,我想对流程中的某个步骤进行数字签名
也就是说,应用程序的用户执行了某个操作,我希望对该事件进行数字签名。
用户在发出数字签名操作时应使用和 usb 令牌。
我想知道你推荐哪种方法来做这样的事情。
例如:
签署一个数据库记录(你如何完成它?)(缺点:你必须用应用程序本身来验证它,我猜)
创建一个说明事件和用户的 pdf,并对 pdf 进行数字签名(亲:pdf 独立于应用程序)
创建并签名和xml文档(如何完成?数字签名存储在哪里?)
还有其他???
感谢
sas
【问题讨论】:
【参考方案1】:我目前正在从事的项目与您在问题中列出的要求几乎相同。
我们正在使用 USB 设备来生成签名。该设备来自一家名为IronKey 的公司,它非常安全并符合许多安全标准。该设备具有硬件生成的密钥对,可用于签名和验证。
当用户使用我们的应用程序提交数据时,我们将数据封装到一个xml文档中,接下来我们使用sha256生成一个哈希,最后我们通过pkcs11使用设备对哈希进行签名。然后将签名和数据存储在客户端数据库中,然后提交到我们的服务器,在那里我们可以使用用户令牌中的公钥(在颁发令牌时存储在我们的服务器数据库中)执行验证。
由于需要执行令牌的客户端访问,因此不使用 Web 应用程序执行此操作。
希望对您有所帮助,我遗漏了很多细节,如果您有任何其他问题,请告诉我!
【讨论】:
非常感谢您的回复,我们知道通过网络应用程序很难实现签名过程。如果我理解正确,最终用户无法通过自己的方式执行验证,他们必须依赖您的应用程序您是否考虑过生成 pdf 并对其进行数字签名?这样(如果我理解正确的话)任何拥有 pdf 的人都可以检查签名... @opensas :我们的数据,包括签名,作为xml文档存储在本地客户端数据库中,与pdf文档无关。我们的应用程序还从客户端数据生成 pdf 文档,这是未签名的,我们一直使用 iTextSharp 生成 pdf 文档,可以使用 Bouncy Castle API 以编程方式对其进行签名。【参考方案2】:在您的情况下,每个用户都将拥有它的公钥和私钥。用户将使用他的私钥签署数据库记录(字符串等)、pdf 或 xml 文档。
你得到一个签名的数据库记录(签名的字符串等),签名的 pdf 或 xml 文档。
您现在将已签名的数据库记录作为二进制记录存储在您的数据库中。 您将签名的 pdf 或 xml 作为普通文档存储在您的存储位置。并且您可能需要在数据库中添加一个字段来将此文件集成到您的应用程序中。
对于签名的库,你可以使用 AES,这里你使用各种语言的实现库:http://en.wikipedia.org/wiki/AES_implementations
无论如何,我不确定是否有任何关注安全性的用户会给你的应用程序他/她的签名私钥。人们通常使用受信任的应用程序在传递某些东西之前对其进行签名。
【讨论】:
【参考方案3】:您可以使用浏览器扩展对“UserId|Action|TimeStamp”进行数字签名并发送到服务器执行,服务器可以使用已经注册的公钥验证签名。 (作为注册过程的一部分,您可能需要注册用户的公钥)。浏览器扩展支持使用 USB 令牌或智能卡进行数字签名。
您可以参考帖子中的 javascript:https://***.com/a/55757349/9659885
这有两种方法来注册证书和签名令牌或任何字符串。
【讨论】:
【参考方案4】:有很好的introductions 到Public Key Cryptography,您应该在开始考虑实施之前阅读和理解这些内容。
根据您的问题级别,您甚至还没有足够的知识来提出正确的问题,并且您最微不足道的误解,整个安全系统都崩溃了。您可能需要考虑获得专家的服务,因为 99.9% 的正确率只是浪费精力。
【讨论】:
以上是关于数字签名流程的策略?的主要内容,如果未能解决你的问题,请参考以下文章
NestJS JWT 策略认证。有效载荷对所有用户使用相同的安全密钥进行签名