【问题标题】:Create a PGP Compatible Signature in NodeJS using the Crypto Library使用 Crypto 库在 NodeJS 中创建 PGP 兼容签名
【发布时间】:2017-07-01 02:26:17
【问题描述】:

在看Crypto Library I see it has the capability to sign data.

有谁知道 PGP 兼容的签名是否像加密库的签名命令输出的 ASCII 装甲一样简单?

我有一个应用程序需要使用 PGP 签署并且只签署数据。我看过 OpenGPGJS 项目; but it blows up when I Webpack my application.

我一直在尝试使用 kbgpg,但他们的文档不是那么好,当我尝试使用 Kleopatra 验证一切是否正确时,when I follow their default example on signing data 甚至没有将签名识别为签名。即使我将“GPG MESSAGE”块更改为“PGP SIGNATURE”块也是如此。

由于我不需要加密,只需要签名,我认为直接使用 Crypto 库可能是这里最简单的解决方案,但我很难找到文档来验证它是否可以轻松完成。

【问题讨论】:

  • 您是否曾经成功地创建过 OpenPGPjs 和 kbpgp 的替代方案?我也在寻找一种在 JavaScript 中验证 PGP 签名的方法。

标签: node.js cryptography sign pgp node-crypto


【解决方案1】:

虽然 OpenPGP 使用一种特殊的加密操作模式(OpenPGP CFB 模式),但没有用于签署文档的特殊算法。 RFC 4880, OpenPGP 定义了 OpenPGP 消息必须如何组成——理论上,这就是以 OpenPGP 格式导出消息所需知道的全部内容。您甚至可以跳过许多特殊情况,特别是如果您还可以控制使用哪些密钥(及其技术细节)来签署信息。

但是您必须编写自己的代码来编写 OpenPGP 消息格式,这几乎是 OpenPGPJS 和其他人已经在做的事情。但是做正确的密码学是非常复杂的,而且有很多方法可以做错事。 Don't write your own crypto code,尤其不是作为一个副项目。

最后,看看代码,我很确定 kbpgp 不会导出 BEGIN GPG MESSAGE 标头。它可能会打印BEGIN PGP MESSAGE 标头,当签名与签名内容结合时,这是正确的标头。将此更改为 BEGIN PGP SIGNATURE 将导致消息内容的标头无效。

【讨论】:

  • 我完全没有兴趣推出自己的加密货币。我只是想找出阻力最小的路径,以便尽快以标准方式进行 PGP 签名。谢谢你证实了我的怀疑,使用加密库比最初看起来更复杂。
  • 如果您不确定 kbpgp 出了什么问题,请查看 gpg --list-packetspgpdump 的输出以了解 kbpgp 的输出。两者都以不同的非常技术性的表示形式打印相同的信息,但使您能够了解消息中的确切内容(并有助于了解您是否以及为什么没有得到预期的输出)。无论如何,您将不得不深入研究 RFC 4880。我无法帮助您决定使用哪个库——我既没有使用任何库的经验,也根本不是 JavaScript 开发人员。
猜你喜欢
  • 1970-01-01
  • 2014-01-15
  • 1970-01-01
  • 1970-01-01
  • 2021-08-10
  • 2017-06-29
  • 1970-01-01
  • 1970-01-01
  • 2014-01-12
相关资源
最近更新 更多