我正在研究Hyperledger Fabric的架构。我很好奇认可的同行如何在本地验证交易的起源。
根据文档,当提交客户端向支持对等方发送交易时,每个支持对等方验证客户端的签名。据我所知,签名是由客户端私钥加密的消息。要验证签名,签署对等方需要客户端的公钥。
所以,我的问题是,从认可对等方获取客户的公钥的位置?我猜公钥是在configtxgen
工具生成的通道的创世块内部,因为同一通道上的所有对等体都有这个创世块。这是对的吗?或者事务是否包含客户端的公钥(例如客户端的证书),如https连接? (但是,根据文档,客户的消息格式的公钥没有空间。)
提前谢谢。
答案 0 :(得分:2)
不,创世块没有网络节点的公钥,只有根CA和中间CA的公钥。
在交易中,客户端的身份被编码。 Fabric v1.0仅带有基于x509证书的标识。 公钥在证书内。
签名不包含证书。它只是签名本身。 证书包含在事务的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;
}