如何验证本地背书节点的交易来源?
How to verify of the origin of transactions on endorsing peer locally?
我正在研究 Hyperledger Fabric 的架构。我很好奇背书节点如何在本地验证交易的起源。
根据文档,当提交客户端向背书节点发送交易时,每个背书节点都会验证客户端的签名。据我所知,签名是用客户端的私钥加密的消息。要验证签名,背书节点需要客户端的 public 密钥。
所以,我的问题是,背书节点从哪里获得客户的 public 密钥?我猜 public 密钥在由 configtxgen
工具生成的通道的创世块内,因为同一通道上的所有对等点都有这个创世块。这是对的吗?或者交易是否像 https 连接一样包含客户端的 public 密钥(a.k.a 客户端的证书)? (但是,根据文档,在消息格式上没有客户端 public 键的空间。)
提前致谢。
不,创世块没有 public 个网络节点的密钥,只有根 CA 和中间 CA 的密钥。
在交易中,客户的身份是经过编码的。
Fabric v1.0 仅带有基于 x509 证书的身份。
public 密钥在证书中。
签名不包含证书。这只是签名本身。
该证书包含在交易的 SignatureHeader 中(在创建者字段中),它是交易的一部分。
https://github.com/hyperledger/fabric/blob/d9c320297bd2a4eff2eb253ce84dc431ef860972/protos/common/common.proto#L113-L119
message SignatureHeader {
// Creator of the message, specified as a certificate chain
bytes creator = 1;
// Arbitrary number that may only be used once. Can be used to detect replay attacks.
bytes nonce = 2;
}
我正在研究 Hyperledger Fabric 的架构。我很好奇背书节点如何在本地验证交易的起源。
根据文档,当提交客户端向背书节点发送交易时,每个背书节点都会验证客户端的签名。据我所知,签名是用客户端的私钥加密的消息。要验证签名,背书节点需要客户端的 public 密钥。
所以,我的问题是,背书节点从哪里获得客户的 public 密钥?我猜 public 密钥在由 configtxgen
工具生成的通道的创世块内,因为同一通道上的所有对等点都有这个创世块。这是对的吗?或者交易是否像 https 连接一样包含客户端的 public 密钥(a.k.a 客户端的证书)? (但是,根据文档,在消息格式上没有客户端 public 键的空间。)
提前致谢。
不,创世块没有 public 个网络节点的密钥,只有根 CA 和中间 CA 的密钥。
在交易中,客户的身份是经过编码的。 Fabric v1.0 仅带有基于 x509 证书的身份。 public 密钥在证书中。
签名不包含证书。这只是签名本身。 该证书包含在交易的 SignatureHeader 中(在创建者字段中),它是交易的一部分。 https://github.com/hyperledger/fabric/blob/d9c320297bd2a4eff2eb253ce84dc431ef860972/protos/common/common.proto#L113-L119
message SignatureHeader {
// Creator of the message, specified as a certificate chain
bytes creator = 1;
// Arbitrary number that may only be used once. Can be used to detect replay attacks.
bytes nonce = 2;
}