【问题标题】:Generating PGP keypair, and signing text with an encrypted PGP private key, in Javascript在 Javascript 中生成 PGP 密钥对,并使用加密的 PGP 私钥对文本进行签名
【发布时间】:2012-05-25 15:53:46
【问题描述】:

我正在写一些 needs to do electronic signatures.

有些用户会像我一样是极客,并且已经拥有自己的 PGP 密钥。大多数人不会,也不想安装或维护它。

作为一种变通解决方案,我想执行以下操作:

  1. 为使用单独“签名”密码的用户创建公钥/私钥对。
  2. 当我需要用户签署某项内容时,向用户提供明文以及其中的一些其他信息(如时间戳和其他引用),并让他们使用我存储的私钥对其进行签名。

基本上有两种方法可以做到这一点(对于没有自己的 PGP 密钥的用户)。

  1. 用户通过 SSL 向我提交签名密码。我在服务器端生成私钥对,并在需要签名时临时解锁私钥。我根本不存储密码,我会尽快摆脱解锁的私钥。
  2. 用户在 Javascript 中生成 pub/priv 密钥。他们将公钥和加密私钥发送给我,并在本地存储中保留一份副本。当他们需要签署某些东西时,我确保他们的本地存储有它(如果没有,则推送),他们使用 JS 在本地解密和签署文本。我从来没有看到他们的签名密码,也没有看到他们解锁的私钥。

无论哪种方式,我也会使用服务器的密钥对结果进行签名。但我需要有一种用户唯一的、不可否认的方式让用户签署文本,并且让他们拥有我维护的 PGP 密钥是这样做的最简单方法。

选项 1 操作起来要简单得多,而且效果很好,足以满足我的最低需求。

选项 2 更值得信赖,因为除非我颠覆 JS(我仍然可以这样做),否则我自己不能使用他们的 privkey。

但是,为了做到这一点,我需要一个 JavaScript 库,可以

  1. 生成 pub/priv 密钥对
  2. 解密私钥以供使用
  3. 使用该私钥签署一段文本

哪些库可以做到这一点?

附:请注意,我不需要对给定的公钥加密。我需要用户使用他们自己的(加密存储的)密钥签名

【问题讨论】:

    标签: javascript encryption cryptography pgp openpgp


    【解决方案1】:

    首先,阅读这篇文章:http://www.matasano.com/articles/javascript-cryptography/

    如果你仍然相信 javascript 加密是你正在做的事情的好主意,那么:

    PGP 相当复杂,您不需要 95% 的功能,我建议您改为考虑使用 Ed25519 进行签名 - http://www.flownet.com/ron/code/ed25519.js 提供了一个 JavaScript 版本。这是一个基于椭圆曲线的系统,比 RSA 快得多,具有同等的安全性和更小的密钥。事实上,密钥是如此之小,以至于您可以让用户选择一个“签名密码”,将其提供给 scrypt[1],并将其用户 ID 作为盐,并将输出用作私钥(您只需要frob 三位使其成为有效的 Ed25519 私钥)。

    1. https://github.com/cheongwy/node-scrypt-js

    【讨论】:

      【解决方案2】:

      看看http://openpgpjs.org - 它应该已经实现了您正在寻找的大部分功能。

      【讨论】:

      • 遗憾的是,他们更改了 v5 中的 API 并降低了向后兼容性:(
      【解决方案3】:

      我认为你的文章声称有错误的东西。 例如,它说,没有办法阻止例如 math.RND() 被覆盖 - 但它可以很容易地完成 - 在文件顶部编写带有内联 js 的 html 文件。 在该代码中,您冻结每个对象,openpgp.js 取决于。

      Object.freeze()

      这样您就可以构建一个安全的环境。确实! 使用 ssl 传输 index.html, 冻结重要的东西,防止加载其他js文件, 确保不允许连接到其他服务器等等。

      【讨论】:

        猜你喜欢
        • 2020-12-13
        • 2012-05-06
        • 1970-01-01
        • 2021-09-04
        • 1970-01-01
        • 2019-03-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多