Skip to content

トランザクションの基本的な仕組み

Mimblewimbleではビットコインと同じように楕円曲線暗号を用いますが、MWのトランザクションには「送金額が秘匿化される」という特徴があります。

送金額が秘匿化されるということは、「インプットとアウトプットの額が一致することを確認する」作業に工夫が必要になることを意味します。

Confidential Transaction

まずは秘匿化の仕組みについて見ていきましょう。こちらのGrin公式ドキュメントを参照しています。

MWトランザクションのインプットとアウトプットは

rG + vH

で表現されます。

Note

r :ランダムな秘密鍵(blinding factor)
G :楕円曲線上の座標
v :送金額
H :楕円曲線上の座標(※ G とは異なる座標)

秘密鍵と楕円曲線上の座標の積は公開鍵として使われますので

Note

rG :秘密鍵 r に対応する公開鍵

となります。

rvは秘匿化されますので、上の式における秘密鍵と送金額が、トランザクションに関与しない外部の人間に漏れることはありません。

rG + vH はPederen Commitmentと呼ばれます。

2つのインプットと1つのアウトプットを生成する場合、

vi1 + vi2 = vo3

こちらの式が満たされます。

Note

vi1 :インプット1
vi2 :インプット2
vo3 :アウトプット

これらに対してPedersen Commitmentを適用すると、

(ri1G + vi1H) + (ri2G + vi2H) = (ro3G + vo3H)

このようになり、送金額においてインプットの総量とアウトプットの総量は同値になりますから(vi1 + vi2 = vo3)、残った式を H で割ると

ri1 + ri2 = ro3

が成り立つはずです。

CTの実例

アリスからボブに3Grinを送るケースについて考えてみましょう。ボブはblinding factorとして28を選んでいます。

X = 28G + 3H

Note

28 :ボブの秘密鍵(blinding factor)
G :楕円曲線上の座標
3 :送金額
H :楕円曲線上の座標(※ G とは異なる座標)

Warning

実利用においてはblinding factorには大きな数字が使われ、28のような小さい数字が使われることはありません。

Tip

秘密鍵(=28)はボブだけが知っていて、送金額(=3)はアリスとボブしか知らないことに注意して下さい。

この3Grinをボブからキャロルに送るとします。

Xi => Y

Note

Xi :先程のXを使ったインプット
Y :キャロルのアウトプット

キャロルはインプットとアウトプットが同値であることを証明しなければならないので、秘密鍵28と送金額3の情報を知っていなければなりません。

ここで、

Y - Xi = (28G + 3H) - (28G + 3H) = 0G + 0H

差額がゼロであることを確認して、コインが無から生み出されていたり、消失したりしていないことを確認できます。

Warning

後述するように、このままだと「キャロルのコインがボブの秘密鍵で管理されているので、ボブもこのコインを使えてしまう問題」と「output(5) + output(-3) = input (2)のように負の値を使うことでコインを無から生み出せる問題」の2つの問題がまだ残っています。

秘密とexcess

上記の式でインプットとアウトプットが同値であることが確認できるわけですが、この3Grinはキャロルが所有するものであるにも関わらず、ボブが選んだ秘密鍵28が使われています。このままではキャロルの3Grinをボブも使うことができてしまいます。

この問題を回避するために、キャロルはキャロル自身が選んだ秘密鍵を使用します。キャロルが秘密鍵として113を選んだとしましょう。

Y - Xi = (113G + 3H) - (28G + 3H) = 85G + 0H

Note

113 :キャロルの秘密鍵(blinding factor) 28 :ボブの秘密鍵(blinding factor) ボブのインプット:Xi = 28G + 3H
キャロルのアウトプット:Y=113G + 3H

今度の式では結果が0にはならず 85G が残っています。これを excess と呼びます。

ここで最初の式に戻ってみましょう。

秘密鍵と楕円曲線上の座標の積は公開鍵として使われますので

rG :秘密鍵 r に対応する公開鍵

となります。

秘密鍵とGの積は公開鍵として使われるのでした。

85G は秘密鍵85に対応する公開鍵ですから、いかなるxとyに対しても y=0 であるときのみ、xG + yHはG上の有効な公開鍵になります。

excess = 85G

キャロルはボブの秘密鍵28とキャロルの秘密鍵113の差異を使って、公開鍵85Gに対応する秘密鍵85の情報を獲得し、秘密鍵85の所有権を証明することで3Grinを使用することが可能になります。

excess も含めて計算することで、

Y - Xi - 85G= (113G + 3H) - (28G + 3H) - 85G = 85G + 0H - 85G = 0

であることを確認できます。

excess の情報はexcess valueを用いた署名やマイニング手数料に関するデータとともにトランザクションカーネルという領域に保存されます1

Range proof

参考文献

  1. grin/intro.md at master · mimblewimble/grin
  2. Confidential Transactions - Investigation | elementsproject.org

コメント