Skip to content

本記事はBEAMの許可を得て翻訳・公開しています。

原文:Mimblewimble explained like you’re 12 – BEAM-MW – Medium

サルでも分かるMimbleWimble

Image

Mimblewimbleは、ふざけた名前ではありますが、ブロックチェーンから個人情報が漏れないようにするテクノロジーです。Mimblewimbleは、人々が秘密を漏らすのを防ぐハリーポッターの呪文にちなんで名付けられました。

Image
Harry Potter — Warners Bros — Mimblewimble

Satoshi NakamotoのBitcoin論文には「プライバシー」の節があり、Nakamotoはビットコインが持つプライバシー機能の限界については割り切っていました。この限界に関連する状況は、敵対者がビットコイン関連のデータを使ってビットコインユーザーを晒したり、身元を暴いたりする技術を向上させるに伴って、より悪化してきました。このような状態はビットコインの使用にあたっては名前を公開する必要がないために、ビットコインはプライベートなものであると信じでいた人々を驚かせました。どのようなデータがなぜ暴露されているのか見ていきましょう。

Bitcoinは2つの要件を満たすために3つの秘密を漏らす

Image

Bitcoinは、すべての取引について3つの秘密を公開します。

  • 差出人のアドレス
  • 送ったコインの量
  • 受取人のアドレス

ビットコインがこれらの情報を公開するのは、ビットコインがプライバシーを嫌悪しているからではありません。これらの情報を公開する理由は、金や現金、物々交換などの貨幣制度においては、次の2つの要件を満たす必要があるためです。

受け取った金額と送られた金額が等しいことを検証する必要がある。仮にあるアドレスからコインを1単位送信し、別のアドレスで2単位を受け取るトランザクションを作成することができれば、暗号通貨のシステムは救いようがなく破綻したものになってしまいます。私があなたに1万円を贈与した場合、1万円が私の手からあなたの手へと移動します。私は1万円を失うため、この贈与の過程で、無からお金が生まれたり、逆に1万円が消え去ってしまうこともありません。 私はあなたの銀行口座にあるお金を勝手に送金することはできず、私が操作できるのは私の銀行口座にあるお金のみです。デビットカードとPIN、またはオンラインバンキングのパスワード、暗号通貨の場合は秘密鍵の所有者によってトランザクションが作成されたことを検証しなければなりません。 Bitcoinは上記の3つの秘密を公開することによって、これらの2つの要件を満たしています。

ビットコイン取引には、送金額と受取人のアドレスが平文で含まれています。これにより最初の要件が満たされます。 例えば5BTCが送られ、5BTCが受け取られたことが明らかになります。

2番目の要件が満たされていることを確認するために、ビットコインでは秘密鍵とそれに対応する公開アドレス(≠公開鍵)を使用します。パブリックアドレスによってビットコインは保管されます。送信者は、公開アドレスに対応する秘密鍵を使用して署名を生成し、自分の取引に署名します(繰り返しますが、送金額と受信者のアドレスが平文で含まれています)。誰もが「コインを保管している公開アドレスを生成した秘密鍵から署名が生成されていること」を確認できます。この方法によって、トランザクションを開始する権限を持つ人物から署名がなされたことを確認できるわけです。

Mimblewimbleに関する私の主張は、Mimblewimbleはこれらの3つの秘密を守りながら、2つの要件を満たせるということです。

これについて、まず10歳の小学生でも分かるような単純な数学を用いて説明し、それから12歳の小学生でも分かるようなやや発展的な数学を用いて説明していきます。

乗算は易く、因数分解は難し

Image

数学に恐怖心を抱いており、書籍などで数式などが出てきた際には、その部分を飛ばしてしまう人もたくさんいます。しかし、以下の数式はどうでしょうか。

Image

髪とペンがあれば2分で解けると思います。数字を掛け合わせるのは単純です。コンピュータは、小型のポケットコンピュータでも、ボタンを押すのと同じくらいの速さで数百万と数百万に掛け合わせることができます。

少し変更を加えて、疑問符を反対側に移動させましょう。

Image

この場合であっても、髪とペンさえあれば2分で解くことができるでしょうか。おそらく難しいと思います。ここで行ったのは計算の方向を切り替えることだけでしたが、その操作によって数式は格段に難しくなりました。

(この記事では例として、8と23という数字を使って、数字を掛け合わせることについてお話します。8と23という数字には個人的に愛着があり、且つ馴染みのある数字であるため理解しやすいからです)実際の用途においては、コンピュータは8と23のような小さな数字は使っていません。実際には、極めて大きな数字を使います。実際のところ、コンピュータは4221を作成するために、どの2つの数字を掛け合わせる必要があるかを計算することができますが、4221のような小さな数字ではなく巨大な数字を使った場合は、現代の強力なコンピュータであっても、どのような数字を掛け合わせたら、その巨大な数字になるのかを計算することは困難です。

読みやすさを重視するため、ここでは楕円曲線については触れません。 実際には、暗号化システムは数値だけではなく、楕円曲線点と呼ばれる特定分野の仕組みを利用します。しかし、単純な数学的性質が背後にあるのは同様です。つまり、「乗算は易く、因数分解は難し」という性質です。

情報を守りながら所有権を検証するために乗算の性質を利用する

以下の数式において、??に当てはまる数字は何でしょうか。

Image

??が左辺にあるため??を探し出すのは困難です。

正解は23と83です。23と83という数字が本当に正しいの検証する必要がありますね。検証するために必要なのは、これらの数字を当てはめて実際に計算してみることだけです。

Image

左辺の計算は簡単に行うことができます。これらの数値の乗算によって20,348,031が算出されます。

Image

仮にこの数字が間違っていれば、右辺の大きな数が一致しないので、すぐに検知できるでしょう。??で表されていた要素について嘘をつくことはできませんし、この要素を推測したり計算したりすることはできません。つまり事前にこれらの数字を知っていなければ、左辺と右辺が同じ値になるような式を完成させることはできないということです。

(ちなみに、右辺の大きな数は、それを構成する左辺のすべての数で割り切れることに注意してください。右辺の数字は83や11など左辺の全ての数字で割り切れます。)この性質は後ほどまた利用します。

これは単なる乗算です。10歳の小学生でも知っています。しかし、暗号通貨に関連する2つの非常に重要なことを達成したのです。

我々は情報を隠したかったのでした。そして今、その方法が分かりました。つまり未知数を乗じることで、情報を隠すことができます。これにより元の要素に分解するのが難しくなります。

また、秘密鍵を所有していることも証明する必要があります。どのようにすれば秘密鍵の所有を証明できるかは既にお分かりでしょう。不明な項であった大きな数字を開示すれば良いのです。乗算の基本的な性質を利用することによって、証明が可能です。

取引額を隠す

以下では情報に秘密の大きな数字を掛けることで、その情報を隠すというトリックを実際に使ってみましょう。ビットコインが漏らしている3つの情報のうちの1つは送金額でした。ビットコインのブロックチェーン上で5BTCを送信すると、その数字は平文で「5」と表示されます。そこで、この数字(ここでは5という数字)と他の数を掛けることによって隠してみましょう。以下では、送金額(=amount)を簡単に開示することはできません。

Image

上の式は、Mimblewimbleにおいて送金額がどのように表されるかに少し似ていますが、厳密には異なります。Mimblewimbleでは、送信者と受信者はそれぞれ次のように送金額、鍵、大きな数字を使います。

Image

これは理由は分かりませんが Pedersenコミットメント と呼ばれます。重要なことは、金額部分(金額自体は大きな数を掛けて隠されます)と秘密鍵部分を含んでいることです。

送信者と受信者の両方がトランザクションの作成に参加していることに注意してください。これはビットコインの仕組みとはかなり異なります。送信者と受信者の両方が協力してトランザクションを作成する仕組みによって、受信者のアドレスを隠す必要性を回避しますが、両者が協力する必要があるので、送信者が何らかの方法で受信者に連絡する必要が生じます。Beamには、送信者と受信者がPedersenコミットメントを交換できるようにするためのセキュアなBBSシステム(Beamのブロックチェーンとは別のシステム)が含まれています。

(簡便性のため、手数料を省いて説明しています。実際には、友人や仕入先にお金を送るときは、常にマイナーにも少しの手数料を支払っています。背後で動いている原理は同じです。また、隠された送金額が負の値ではないことを証明するrangeproofと呼ばれる仕組みも省略しています。rangeproofがなければ、マイナス5BTCを送金することで、5BTCを得ることができてしまいます。)

分配法則を活用する

以下ではこの記事において最も発展的な数学を使います。ここアイルランドでは、12歳になるまでは、学校でこの数学分野を学ぶことはありません。

Image

2と4を3で乗算したい場合は、2と4を足し合わせて最初に6にしてから、その6に3を掛けて18にするか((2+4)×3=6×3=18)、あるいは最初に2と3、4と3で掛けてから、それぞれを足し合わせます(2×3+4×3=6+12=18)。

Image

頭に入れておきたいのは、2つの数を3つ目の数で乗算するときは、最初に2つの数を足し合わせてから3つ目の数字で掛け合わせるか、1つ目の数字と3つ目の数字をかけ合わせ、次に2つ目の数字と3つ目の数字をかけ合わせ、最後にその2つを足し合わせるという2つの方法があるということです。この2つの過程は同等です。

送った額と受け取った額が同じ値であることの証明 貨幣システムの要件の1つは、受け取った金額から送った金額を引いたものがゼロに等しくなるということでした。私はあなたに1万円を手渡すと、あなたは1万円を手に入れます。1万 - 1万 = 0となります。上記のトリックを使用してこれを証明することができます。

Mimblewimbleトランザクションは、2つのPedersenコミットメントで構成されています。 1つはトランザクションに入っていくコインに対するもので、もう1つは出ていくコインに対するものです。

Image

たとえば、送信者が5(単位)を失い、受信者が5(単位)を得たとします。

Image

ここで、「input-amount」に「big number」を乗算して、次に「output-amount」に「big number」を乗算するように別々に計算するのではなく、次のようにまとめることができます。

Image

5 - 5はゼロですので、何を掛けてもゼロになります。そうすると以下の式が残ります。

Image

あるいは、単に以下のように記述することもできます。

Image

これで金額の部分は消えました。さらに、これ以前の全ての過程においても、送金額には大きな未知数が掛けられ、金額が分からなくなるような措置が取られていました。つまり、送金額の具体的な数字を開示することなく、送られた額と受け取られた額が同じ額であることを検証したのです。

送金額の部分が消えたのは、入金額と出金額が等しいからです。もし入金額と出金額が等しくなければゼロにはなりません。ゼロにならなければ、key-partだけを数式に残すことはできませんでした。

Image

…そしてそれゆえトランザクションカーネルはプライベートキーである23と83では割り切れなくなってしまいます。Beam protocolはこのトランザクションを不正な形式として拒否します。

(この例では、amount-numberがゼロでなかったとしても、amount-number自体が23と83で割り切れるものであれば(例えば1909)、カーネルは23と83で割り切れるでしょう。この偶然の一致は、この記事においては説明のためにあえて小さな数を使っているために生じます。コンピュータが使用しているような素晴らしく巨大な数では、この偶然の可能性はほとんどゼロに近いです。)

結局、key-partだけが残りました。

(※注意)key1 + key2 × big number2となっていますが、厳密には最初の画像の通り[key1 + key2] × big number2が正しいです。

Image

これは、送信者と受信者の秘密鍵を足し合わせ、それに大きな数字を掛け合わせることによって構成されたもう一つの大きな数字です。2つの秘密鍵を使って、この新しい大きな数字を割る切ることが可能です。例えば下記の式において83や23といった秘密(鍵)の数字を使えば、右辺の数字を割り切ることが可能です。

Image

トランザクションカーネルが秘密鍵で割り切れるのには2つの理由があります。

  1. 金額部分がゼロになったから
  2. key-partは、秘密鍵である83と23を含む、たくさんの数字を掛け合わせることによって形成されたから

これらは貨幣システムが満たすべき2つの要件です。

  1. 金額部分がゼロになった場合、それは(出金額 - 入金額)がゼロに等しいことを意味します。言い換えれば、その出金額と入金額が等しいということです。簡単にいえば、お金は消失しなかったし、無から生まれもしなかったということです。これを達成するために、まず出金額と入金額に大きな未知数を掛けることによって隠し、それから大きな未知数によって形成された暗闇の中で、これら2つの数字を足し合わせてゼロにしました。
  2. 2番目の要件は、トランザクションが秘密鍵の所有者によって生成されたことを証明することです。送信者は、自分の秘密鍵がトランザクションカーネルを割り切れることを証明することで、自身が秘密鍵の所有者であることを証明します。これはつまり、秘密鍵自身がトランザクションカーネルを構成している因数であることを意味します。

Image

Mimblewimbleは、間違いなくビットコインそのものよりもビットコインの目標を達成します(プライバシーが目標であれば特に)。ビットコインの構造の上に難読化を追加する匿名コインとは異なり、Mimblewimbleはカッティングを行うことで匿名性を確保します。今年初めに完全な実装を構築し始めたことは非常に刺激的であり、BEAMは2018年末までにローンチされ、Mimblewimbleを用いたブロックチェーンが実現すると予想しています。

※2019年1月3日にローンチされました。。

参考

コメント