注意: この記事はLLMによって英語から翻訳されたものです。正確性については保証いたしかねますので、あらかじめご了承ください。英語の原文はこちら。
Monero(XMR)はZCoinと並び、最も広く使われているプライバシー重視の暗号通貨の一つである。最近では、暗号通貨で送金したいが追跡を避けたいと考える人々の間で注目を集めているようだ。とりわけ、Bitcoinミキサーの代替としていくつかのダークウェブフォーラムで推奨されることが多く、WannaCryの作者が資金洗浄に使用したことでも知られている。
本記事では、Moneroの仕組みと、BitcoinやほかのCurrencyよりも匿名性を高めるメカニズムについて、比較的高レベルな概要を提供することを目的としている。数学的・マイニング的な詳細には踏み込まないが、記事の内容は比較的高レベルながらも、Bitcoinについて少なくとも基本的な知識があることを前提としている。
2014年4月にローンチされたMoneroは、Bytecoin(Bitcoinではなく、Bytecoinである)のフォークをベースとしているが、ジェネシスブロックからスタートしている(つまり、XMRの台帳にはBytecoinのトランザクションは含まれていない)。Proof of Workに基づいているが、Bitcoinとは異なりアルゴリズムがCPUフレンドリーであるため、マイニングがより多くの人にとって身近なものとなっている。コインの供給量は無限である。2022年5月頃には約1,800万コインに達し、その後はブロックあたり0.6 XMRが生成される(現在の約1.5と比較して)。1ブロックのマイニングには平均約2分かかり、固定の最大サイズは設けられていない。
アドレスと鍵#
まず最初に、Moneroで取引するにはアドレスが必要である。ほとんどのほかの暗号通貨では、アドレスを作成する際に公開鍵と秘密鍵のペアが生成される。Moneroの場合はもう少し複雑で、4つの鍵(2つのペア)が生成される:
- 公開ビュー鍵(public view key) はMoneroアドレスの後半部分である。送金したい人がこの鍵を使用する。
- 秘密ビュー鍵(private view key) は台帳をスキャンして、他者が送ってきたトランザクションを見つけることを可能にする。この鍵を公開することもできるが、その場合すべてのトランザクションが誰にでも見えるようになる。
- 公開スペンド鍵(public spend key) はMoneroアドレスの前半部分である。リングフェーズで使用される(詳細は後述)。
- 秘密スペンド鍵(private spend key) はトランザクションに署名するために使用する鍵である。この鍵は決して共有してはならない。
トランザクションの実行#
鍵が揃ったところで、資金を受け取る準備ができた。Bobが我々にお金を借りていて、Moneroで返済するとしよう。以下のプロセスが行われる:
- 我々のアドレスをBobに伝える。
- Bobは我々の公開ビュー鍵と公開スペンド鍵を使って、ワンタイム(またはステルス)アドレスを作成し、そこに資金を送る。このアドレスにより、我々の実際のアドレスが台帳に表示されることがなくなり、第三者が我々の保有資金を知ることが不可能になる。
- 次にBobはトランザクションを作成する。ここでリング署名が登場する。Bobは台帳上の他のトランザクションから発行された10個(プロトコル要件)のアウトプット(またはミキシン)を取得し、資金の送信元である実際のインプットとともにインプットとして使用する。これにより、第三者がトランザクションの資金源がどのインプットであるかを知ることが防止される。Ring CT(機密トランザクション)も使用され、トランザクション内で送金額を隠すことができる。
- 秘密ビュー鍵を使ってブロックチェーンをスキャンし、自分宛のトランザクションを見つけると、Bobが生成したワンタイムアドレスが確認でき、支払いを確認できる。その後、秘密スペンド鍵を使ってこれらの資金を使用できるようになる。
このプロセスが完了すると、Bobと我々の双方にプライバシーが確保される:
- Bobは我々の保有資金を見ることができない。なぜなら、彼が知っているのは自分が作成したワンタイムアドレスだけであり、我々の秘密ビュー鍵を持っていないため台帳をスキャンして他のアドレスを見つけることができないからだ。
- 我々はBobがどこから資金を送っているかを確実に知ることができない。複数のインプットがあり、どれがBobのものか確認できないためだ。
- Bobは我々がいつ資金を使い、どこに送るかを知ることができない。その理由は、我々のアドレスが他のユーザーのリング署名ラウンドで使用される可能性があるからだ。
さらなる詳細#
リング署名とRing CT#
ここまで読んだ方は、おそらくこのような疑問を持つだろう:「送金額が隠されていて、どのインプットが資金の出所かも分からないなら、マイナーはどうやってトランザクションが有効かどうかを判断するのか?」
この問題を解決するために、数学と暗号学に基づいて2つのものが生成される:
- キーイメージ(Key Image) はトランザクションのために生成される公開鍵である。トランザクションのインプットの一つが有効であることを、どれかを明かすことなく確認でき、二重支払いの発生を防止する。
- Pedersenコミットメント はインプットとアウトプットの値の合計が等しく、したがってトランザクションが有効であることをネットワークに伝える。
インプットとアウトプット#
Bitcoinと同様に、Moneroではトランザクション内ですべてのインプットを使い切る必要があるため、お釣りアドレスの作成が必要となる。複数のアウトプットへの支払いや複数のインプットの使用も可能である。
トランザクションで使用する実際のインプットごとにリング署名が存在する。したがって、常に少なくとも10個の偽のアウトプットと1個の真のアウトプットが存在することになる。
出典と参考資料#
本記事の執筆時に使用した出典と、いくつかの参考資料を以下に示す。リング署名などについてより詳細な情報を提供しているものもあるので、興味がある方はぜひ確認してほしい。
- A low-level explanation of the mechanics of Monero vs Bitcoin in plain English
- Understanding Monero Cryptography, Privacy – Introduction
- Understanding Monero Cryptography, Privacy Part 2 – Stealth Addresses
- Cryptonote protocal Whitepaper
- Moneropedia
- Breaking Monero 06: Unusual Ringsize
- Zcash VS Monero: Comparative Privacy Coin Guide
- Monero Documentation
- What is Monero? (XMR)
- Stack Exchange: What is a key image?
- Stack Exchange: Monero terminologies
- Addresses Generation and Checking Tool
- Transaction Checker Tool