Tracking Protocol v2
なぜ「量を秘匿したまま」追跡する必要があるのか
Tracking Protocol v1では、ブロックチェーンを使って製品の流通経路を追跡できることを説明しました。しかし、実際のビジネスでは新たな課題があります。
取引量は企業の重要な営業秘密です。
サプライチェーンの参加者は、以下のような情報を競合他社に知られたくありません:
- どの取引先とどれだけの量を取引しているか
- 製造能力(どれだけの原材料を扱えるか)
- 在庫状況や調達量
しかし同時に、以下のことは証明したい:
- 材料が正当なルートで流通していること
- 不正な材料の混入がないこと
- リサイクル材が適切に使用されていること
Tracking Protocol v2は、この一見矛盾する要求を暗号技術で解決します。
Tracking Protocol v2 の特長
Vector Pedersen Commitment による秘匿
本プロトコルではVector Pedersen Commitmentという暗号技術を使用しています。これにより:
- 量の秘匿: 実際の取引量は暗号化され、第三者には見えません
- バランス検証: 量を明かさずに「入力 = 出力」を証明できます
- 複数材料対応: コバルト、ニッケル、マンガンなど複数の材料を同時に追跡できます
3つのオペレーション
サプライチェーン内の様々な業務を、3つの基本オペレーションの組み合わせで表現します。
| オペレーション | 用途 | 例 |
|---|---|---|
| ミント (Mint) | 新しい材料をトラッキングに登録 | 原材料の初回登録、回収物の登録 |
| 移動 (Transfer) | 材料を別のアドレスへ移動 | 企業間輸送、分割・統合 |
| 焼却 (Burn) | 材料を消費済みにする | 加工時の不純物除去、廃棄 |
ユースケース:電池原材料のリサイクル
EUの電池規則など、電池に含まれる重要原材料(コバルト、ニッケル、マンガンなど)のリサイクル証明が求められています。
シナリオ
- 回収業者: 使用済み電池から原材料を回収し、量を登録(ミント)
- リサイクラー: 破砕・精製を行い、次の工程へ輸送(移動)。不純物は除去(焼却)
- 電池メーカー: リサイクル材を受け取り、新しい電池を製造
- 製品メーカー: リサイクル証明付きの電池を使用してEV車などを製造
プライバシーの保護
各企業の取引量は秘匿されたまま:
- 回収業者は実際の回収量を競合に知られない
- リサイクラーは処理能力を秘密にできる
- 電池メーカーは調達量を非公開にできる
それでも、ブロックチェーン上で以下を検証可能:
- 材料が正当なルートで流通していること
- 各工程で材料のバランスが保たれていること(不正な追加や改ざんがないこと)
- 最終製品に含まれる材料がリサイクル由来であること
技術詳細
以下は開発者向けの技術詳細です。
用語
| 用語 | 説明 |
|---|---|
| アイテム (Item) | トラッキング対象のもの。各アイテムはTPOとTTOを1つずつ持つ |
| 材料 (Material) | アイテムを構成する材料。材料名、量、単位を持つ |
| NUMS ポイント | 材料名のダイジェストから得られる楕円曲線上の点。離散対数を誰も知らない |
| ステークホルダー | サプライチェーンの参加者(サプライヤー、製造者など) |
| トラッキングアドレス | ステークホルダーがトラッキングに参加する際のアドレス |
| TPO | Tracking Payload Output - トラッキングペイロードを格納するアウトプット |
| TTO | Tracking Transfer Output - 輸送先を示すアウトプット |
トラッキングトランザクション
トラッキングトランザクションの基本構造はv1と同様ですが、バージョンフィールドに0x02をセットします。
ペイロード構造
| フィールド | サイズ | 内容 |
|---|---|---|
| マーカー | 2バイト | 0x5450(”TP” = Tracking Protocol) |
| バージョン | 1バイト | 0x02 |
| ペイロードサイズ | CompactSize | ペイロードのサイズ |
| オペレーション | 1バイト | Mint: 0x01, Transfer: 0x02, Burn: 0x03 |
| コミットメント | 33バイト | Vector Pedersen Commitment |
Vector Pedersen Commitment
基本的なPedersen Commitment
量をv、ブラインドファクターをrとした場合:
c = rG + vH
- r: ランダムな値(秘密鍵)
- G: 楕円曲線のベースポイント
- H: NUMSポイント(離散対数を誰も知らない点)
複数材料への拡張
複数の材料(例:コバルト300g、ニッケル330g、マンガン350g)を扱う場合:
c = rG + 300H_Co + 330H_Ni + 350H_Mn
各材料に対応するNUMSポイント(H_Co、H_Ni、H_Mn)を用意することで、複数の量を1つのコミットメントで表現できます。
バランス検証
インプットのコミットメントの合計からアウトプットのコミットメントの合計を引いた結果が無限遠点(0)であれば、バランスが保たれていることを証明できます。
\[\sum_{k=1}^n C_k - \sum_{k=1}^m C'_k = 0\]重要なのは、この検証において実際の量は一切公開されないことです。
NUMSポイントの導出
材料ごとのNUMSポイントは、材料名と単位からハッシュ関数を使って導出します:
require 'h2c'
dst = "Tapyrus-Tracking-material-with-secp256k1_XMD:SHA-256_SSWU_RO_"
h2c = H2C.get(H2C::Suite::SECP256K1_XMDSHA256_SSWU_RO_, dst)
msg = "Co|g" # 材料名|単位
p_co = h2c.digest(msg)
トレースルール
登録者の決定
ミントオペレーションを持つトランザクションの最初のインプットを登録者とします。
輸送元の決定
インプットが参照するUTXOのうち、トラッキングペイロードが適用されるUTXOをすべて輸送元とします。
輸送先の決定
TPOの直後のアウトプット(TTO)を輸送先とします。
焼却
TPOに対応するTTOが存在しない場合、そのアイテムは焼却され、以降の流通は不可能になります。
共有値
ステークホルダー間でトランザクションを作成する際、輸送元は輸送先に以下の情報を共有する必要があります:
- コミットメントに含まれる材料と量と単位
- ブラインドファクター r の値
- アウトポイント(txid と index)
この情報を「共有値 (Shared Value)」と呼び、暗号化された安全な通信経路で共有します。
開示値と検証
ステークホルダーは取引相手や監査機関に対して、コミットメントの内容を開示できます。開示値には以下が含まれます:
- コミットメントに含まれる材料と量と単位
- R = rG の値
- アウトポイント
- ブラインドファクターを秘密鍵として使用した署名
これにより、ブロックチェーン上のコミットメントと開示された内容が一致することを第三者が検証できます。
まとめ
Tracking Protocol v2は、企業の営業秘密を守りながら、サプライチェーンのトレーサビリティを実現する革新的なプロトコルです。
- 秘匿性: 取引量は暗号化され、競合他社には見えない
- 検証可能性: 量を明かさずにバランスを検証可能
- 信頼性: ブロックチェーンによる改ざん不可能な記録
基本的なトレーサビリティが必要な場合はTracking Protocol v1を、営業秘密の保護が重要な場合はv2をご検討ください。