2017-11-10 5 views
0

私はHyperledger Fabricのアーキテクチャを研究しています。私は、支持している同業者がトランザクションの起点をローカルでどのように検証できるのかが不思議です。ローカルにピアを承認する際のトランザクションの起点を確認する方法は?

文書によると、提出するクライアントがエンドースしているピアにトランザクションを送信すると、各支持するピアがクライアントの署名を検証します。私が知る限り、署名はクライアントの秘密鍵で暗号化されたメッセージです。署名を検証するために、支持するピアはクライアントの公開鍵を必要とします。

私の質問は、そこからエンドポイントのピアがクライアントの公開鍵を取得する場所ですか?私は公開鍵はconfigtxgenツールによって生成されたチャンネルの起源ブロックの内側にあると思います。なぜなら、同じチャンネルのすべてのピアがこの起源ブロックを持っているからです。それが正しいか?または、トランザクションにhttps接続のようなクライアントの公開鍵(クライアントの証明書)が含まれていますか? (ただし、ドキュメントによれば、メッセージフォーマットにはクライアントの公開鍵の余地はありません)。

ありがとうございます。

答えて

1

いいえ、起源ブロックにはネットワークノードの公開鍵がなく、ルートCAと中間CAだけが公開鍵を持っていません。

トランザクション内では、クライアントのIDがエンコードされます。 ファブリックv1.0にはx509証明書に基づくIDのみが付属しています。 公開鍵は証明書の内部にあります。

署名に証明書が含まれていません。それは単なる署名そのものです。 証明書は、トランザクションの一部である(作成者フィールドの)トランザクションの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; 
} 
+0

ありがとうございました。あなたの答えは私にとって論理的だと感じています。 docによると、 'PROPOSE'メッセージフォーマットは' であり、 'tx'フォーマットはです。私の知る限り、署名はクライアントの秘密鍵で暗号化された他のフィールド(clientID、...など)です。ですから、 'clientSig'には暗号化された他のフィールドに加えてクライアントの証明書も含まれていますか?あるいは、証明書がトランザクションに含まれていますが、ドキュメントは 'PROPOSE'メッセージフォーマットの一部としてそれを言及していませんか? – byron1st

+1

なぜ署名が暗号化されるのですか?目的はすべての所有者の証拠を提供することです、従ってそれは暗号化されませんが誰でも(それはトランザクションを持っています、したがってアイデンティティを持っています、したがって公開鍵を持っています) 私は答えを更新しました – yacovm