我正在写一些需要做电子签名的东西。
有些用户会像我一样是极客,并且已经拥有自己的 PGP 密钥。大多数人不会,也不想安装或维护它。
作为一种解决方法,我想执行以下操作:
- 为使用单独的“签名”密码的用户创建一个公钥/私钥对。
- 当我需要用户签署某些东西时,向用户提供明文以及其中的一些其他信息,例如时间戳和其他引用,并让他们使用我存储的私钥对其进行签名。
基本上有两种方法可以做到这一点(对于没有自己的 PGP 密钥的用户)。
- 用户通过 SSL 向我提交签名密码。我在服务器端生成私钥对,并在需要签名时临时解锁私钥。我根本不存储密码,我尽快摆脱解锁的私钥。
- 用户在 Javascript 中生成 pub/priv 密钥。他们将公钥和加密私钥发送给我,并在本地存储中保留一份副本。当他们需要签署某些东西时,我确保他们的本地存储有它(如果没有,则推送),他们使用 JS 在本地解密和签署文本。我从来没有看到他们的签名密码,也没有看到他们解锁的私钥。
无论哪种方式,我还使用服务器的密钥对结果进行签名。但我也需要有一种用户唯一的、不可否认的方式让用户签署文本,并且让他们拥有我维护的 PGP 密钥是最简单的方法。
选项 1 操作起来要简单得多,并且可以很好地满足我的最低需求。
选项 2 更值得信赖,因为除非我颠覆 JS(我仍然可以这样做),否则我自己不能使用他们的私钥。
但是,为了做到这一点,我需要一个 JavaScript 库,它可以
- 生成一个 pub/priv 密钥对
- 解密私钥以供使用
- 使用该私钥签署一段文本
哪些图书馆可以做到这一点?
PS请注意,我不需要加密给定的公钥。我需要用户使用他们自己的(加密存储的)密钥进行签名。