【问题标题】:Verify signature with public key node用公钥节点验证签名
【发布时间】:2014-06-09 14:14:22
【问题描述】:

我有一个签名数据与十六进制格式的公钥一起传递到我的服务器,该数据是用它签名的。所有请求的哈希算法都是相同的 sha-256,但是每个请求的公钥都不一样,因为客户端会生成 rsa public+private 对。

所以我的问题是 - 如何使用十六进制格式的公钥验证签名?在节点的crypto 文档中,我看到我需要一个 pem 格式的文件,但我没有。而且实际上这种请求会很多,所以创建这些文件是不好的。

【问题讨论】:

  • 这实际上取决于数据签名的格式。我们需要更多信息来帮助您。此外 - 如果在客户端为每个请求重新生成签名密钥 - 服务器无法知道它们是什么,甚至无法验证 what。您需要一种方法来获得持久密钥,即使是通过会话,也可以有任何验证的希望。否则,你所有的加密货币都是无用的。
  • 嗨,@Avery。基本上,在客户端我有一个字符串str。然后生成一对私钥和公钥,并使用私钥创建签名sig = sha256(str)。在下一步{str,sigpublic_key 十六进制格式} 被发送到服务器。在服务器上我需要验证签名。
  • 为什么?如果您要发送带有签名数据的公钥,那么拦截器(我猜您正在尝试保护它)也可以更改密钥。你不能在这里使用 diffie-hellman 算法吗?它可以让您确定数据来自哪里,并且它确实有效。
  • 你的意思是拦截器可以把str改成他喜欢的任何东西,然后用自己的密钥签名并发送到服务器吗?有可能,但是在我的情况下,str 包含一些他不知道的额外数据(比如......专门生成的伪随机数)。但是,他可以更改str 的其他部分。所以我需要用 sha256 对其进行哈希处理以验证 + 使用密钥签名以提高安全性
  • 但是你没有加密。你在签字。 巨大的差异。不要尝试制作自己的加密货币,它不可避免地会回来咬你。去查找如何进行正确的密钥交换(例如,diffie-hellman)并正确加密您的数据。如果可以,只需使用预制的 SSL/TLS 系统来保护一切。

标签: node.js rsa public-key-encryption


【解决方案1】:

不要。严重地。别。滚动你自己的密码will be bad

改为使用 https,或者,如果您真的必须自己做,请尝试实施 Diffie-Hellman。至少对于 DH,您不会创建自己的算法。至于为什么这很糟糕,请考虑想要读取您的数据的攻击者。如果你只是签名,那真的和现实生活中的签名没有什么不同。这是你的签名,而且(大多数情况下)没有人能做到。但是,如果我偷了你的那封信,写下我自己的并用 my 签名(使用你的名字)签名,收件人就会知道这不是你写的。可是等等!如果您以前从未联系过此收件人怎么办?他们不会知道谁在用你的名字写作和签名。真的是你吗?还是我?您需要进行密钥交换以防止这种情况发生。

【讨论】:

    猜你喜欢
    • 2013-05-28
    • 2017-11-22
    • 2012-07-26
    • 1970-01-01
    • 2013-08-17
    • 1970-01-01
    • 2015-03-08
    • 2019-08-11
    • 2019-09-06
    相关资源
    最近更新 更多