我正在开发一个Web应用程序,我想在流程中的某个步骤进行数字签名
也就是说,该应用的用户执行某项操作,我希望该事件能够进行数字签名。
用户在发出动作时应使用和usb令牌进行数字签名。
我想知道你建议做哪种方法。
例如:
签署数据库记录(你如何完成它?)(缺点:你必须用应用程序本身验证它,我猜)
创建一个pdf,说明事件和用户并对pdf进行数字签名(亲:pdf独立于应用程序)
创建并签名和xml documento(如何完成它?数字符号存储在哪里?)
任何其他???
saludos
SAS
答案 0 :(得分:2)
我目前正在开发一个项目,其要求与您在问题中列出的要求几乎相同。
我们正在使用USB设备生成签名。该设备来自一家名为IronKey的公司,它非常安全,符合许多安全标准。该设备具有硬件生成的密钥对,可用于签名和验证。
当用户使用我们的应用程序提交数据时,我们将数据封装到xml文档中,接下来我们使用sha256生成散列,最后我们通过pkcs11使用设备来签署散列。然后将签名和数据存储在客户端数据库中,然后提交给我们的服务器,我们可以使用用户令牌中的公钥进行验证(在发出令牌时存储在我们的服务器数据库中)。
由于必须执行令牌的客户端访问,因此不使用Web应用程序执行此操作。
希望这有帮助,我错过了很多细节,如果您有任何其他问题,请告诉我!
答案 1 :(得分:1)
在您的情况下,每个用户都将拥有公钥和私钥。用户将使用他的私钥对数据库记录(字符串等),pdf或xml文档进行签名。
您将获得已签名的数据库记录(已签名的字符串等),已签名的pdf或xml文档。
您现在将已签名的数据库记录存储为数据库中的二进制记录。 您将签名的pdf或xml作为普通文档存储在存储位置。您可能需要在数据库中添加一个字段以将此文件集成到您的应用程序中。
要让图书馆进行签名,您可以使用AES,在这里您可以使用各种语言的实施库:http://en.wikipedia.org/wiki/AES_implementations
无论如何,我不确定任何担心安全问题的用户会给你的应用程序他/她的私钥进行签名。人们通常会使用受信任的应用程序在传递之前对其进行签名。
答案 2 :(得分:1)
您可以使用浏览器扩展对“ UserId | Action | TimeStamp”进行数字签名,然后发送给服务器执行,服务器可以在其中使用已注册的公共密钥来验证签名。 (作为注册过程的一部分,您可能需要注册用户的公共密钥)。浏览器扩展支持使用USB令牌或智能卡进行数字签名。
您可以在帖子中参考JavaScript:https://stackoverflow.com/a/55757349/9659885
这两种方法都有注册证书和签名令牌或任何字符串的方法。
答案 3 :(得分:0)
在开始考虑实施之前,您应该阅读并理解introductions到Public Key Cryptography。
根据您的问题的级别,您还不知道甚至不能提出正确的问题,而您所犯的最轻微的误解和整个安全系统都会崩溃。您可能需要考虑保护专家的服务,因为99.9%的权利只是浪费精力。