我正在编写一些需要进行电子签名的内容。
有些用户会像我一样是极客,已经拥有自己的PGP密钥。大多数人不会,并且也不想折腾安装或维护它。
作为解决方案的权宜之计,我想要做以下几件事情:
- 为用户创建一个公共/私有密钥对,使用单独的“签名”密码。
- 当我需要用户签署某些内容时,将明文与其他信息(如时间戳和其他参考信息)一起提供给用户,并让他们使用我存储的私钥进行签名。
基本上有两种方法可以实现这一点(适用于没有自己的PGP密钥的用户)。
- 用户通过SSL向我提交签名密码。我在服务器端生成私钥对,并在需要签名时暂时解锁私钥。我根本不存储密码,并尽快销毁已解锁的私钥。
- 用户使用JavaScript生成公/私钥。他们向我发送公钥和加密的私钥,并在本地存储中保留一份副本。当他们需要签署某些内容时,我会确保他们的本地存储中有它(如果没有,则进行推送),他们使用JS在本地解密和签署文本。我从未见过他们的签名密码或解锁的私钥。
无论哪种方式,我也会使用服务器密钥签署结果。但我需要一种用户唯一、不可抵赖的方式来签署文本,让他们拥有我维护的PGP密钥是最简单的方法。
选项1要简单得多,足以满足我的最低需求。
选项2要更加可靠,因为除非我篡改JS(我仍然可以这样做),否则我无法使用他们的私钥。
然而,为了实现它,我需要一个JavaScript库,它可以:
- 生成公/私钥对
- 解密私钥以供使用
- 使用该私钥签署一段文本
哪些库可以完成这个功能?
P.S. 请注意,我不需要将内容加密到给定的公钥。我需要用户使用他们自己的(作为存储的加密)密钥进行签名。