【问题标题】:It's safe to send public-key along with signature发送公钥和签名是安全的
【发布时间】:2019-04-01 23:25:48
【问题描述】:

我正在创建一个区块链,交易消息有一个发送者和接收者字段,它们只是公钥(不是地址),以及一个 RSA 签名字段。签名是使用发送者的私钥生成的。 要验证消息签名,您应该使用消息发件人字段。 因此,要更改签名,您应该更改发件人字段,然后更改消息所有者。

这样安全吗?这能防止虚假消息吗?

type TransactionBody struct {
    Sender    rsa.PublicKey `json:"sender"`
    Recipient rsa.PublicKey `json:"recipient"`
    ...
}

【问题讨论】:

标签: cryptography blockchain digital-signature packet


【解决方案1】:

为了验证数字签名,建议发送者的公钥,或在使用证书的情况下其根 CA,在接收者的信任库中可用(之前已通过其他方式添加)

验证过程应验证签名消息的公钥在信任库中是否可用,以确保它来自受信任的颁发者。如果没有,任何人都可以生成一对密钥并通过包含他们的公钥来签署有效的消息。

总之你需要一种机制来验证公钥是否可信,否则数字签名不会提高安全级别

【讨论】:

  • 那么,接收节点必须事先与发送节点交换签名公钥?
  • 是的,收件人必须拥有发件人的公钥来验证数字签名是否来自受信任的颁发者。或者,您可以使用受信任实体颁发的数字证书。在这种情况下,您只需要信任根证书,但这似乎不是您的情况
  • 为什么我的解决方案不安全?既然你不能伪装成某人。
  • 假设中间人捕获交易消息并替换sender字段并使用自己的私钥签名。签名验证将是正确的,那么,收件人如何验证消息来自有效的发件人?
  • 我现在明白了。 @pedrofb 已解决。谢谢
猜你喜欢
  • 2012-02-12
  • 1970-01-01
  • 1970-01-01
  • 2018-05-22
  • 1970-01-01
  • 2014-06-21
  • 2015-04-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多