ビットコインを小額で多数送るようなスパム攻撃は可能か? サトシらが議論

小宮自由

ビットコインのフラッド攻撃の予防について

ビットコインを発明し、未だその正体が分かっていないサトシ・ナカモト。そんなサトシが残した約2年間の文章を、小宮自由氏の解説と共に紹介する連載「サトシ・ナカモトが残した言葉〜ビットコインの歴史をたどる旅」の第49回。

まずサトシのメールの前に、本連載の元になっている書籍『ビットコイン バイブル:サトシナカモトとは何者か?』の著者フィル・シャンパーニュ氏の解説も掲載する。

フィル・シャンパーニュ氏の解説

ここで取り上げられている問題は、ビットコインネットワークへのサービス妨害攻撃と言えるもので、例えば、一人が一取引当たり1サトシ(0.00000001 BTC)のような小額を百万の送金先に送るケースである。このスレッドは他のスレッドよりも技術的性格が濃いため、投稿の全ては掲載せず、テーマに関連するもの、サトシが言及した問題点に関するものに限った。

サトシ・ナカモトの投稿

それではサトシの投稿をみていこう。

=======================

フラッド攻撃 0.00000001 BC

投稿:Mionione 2010年07月12日 午後12時04分24秒

(注:斜体部分は、サトシ以外の者の質問を指す)

こんにちは、誰かが0.00000001 BC*1 を百万のアドレスに送ったら何が起きますか?

⇒ネットワークの全てのピアが全ての取引を保存しないといけないですか?
⇒0.00000001 BTCの全ての所有者/ハッシュが全てのピアでブロックに保存されますか?

ビットコインのシステムがビットコイン通貨の小数値をどう扱うか、実際よく理解できていません。

Re:フラッド攻撃 0.00000001 BC

投稿:Gavin Andresen 2010年07月12日 午後12時08分45秒

ソースコードから:

main.h://To limit dust spam, require a 0.01 fee if any output is less than 0.01(ごみスパムの制限のために、出力が0.01以下の場合は0.01の取引手数料を要求する)*2

Re:フラッド攻撃 0.00000001 BC

投稿:llama 2010年07月12日 午後02時23分46秒

ん~、そこにそのコードがあるとは気づきませんでした。実際、そのアプローチはあまり好きではありません。

それだと、真の小額支払にビットコインを使う可能性をかなり損なってしまいます。クライアントがスパムIPを無視するだけでよくないですか? 確かに攻撃者は多くを獲得できますが、何百万も獲得はできません。

Re:フラッド攻撃 0.00000001 BC

投稿:Gavin Andresen 2010年07月12日 午後02時45分54秒

でも、「合法的な小額決済IP」と「私はビットコインに多大な帯域を使わせて誰も稼動したくなくなるようにしてやりたい」スパムIPをどう区別しますか?

非常に小さな小額決済は本当に難しい問題だと思いますし、ビットコインでは、あまりに多くの難しい問題点を一挙に解決しようとすべきではないと思います。

Re:フラッド攻撃 0.00000001 BC

投稿:Gavin Andresen 2010年07月12日 午後02時45分54秒

でも、「合法的な小額決済IP」と「私はビットコインに多大な帯域を使わせて誰も稼動したくなくなるようにしてやりたい」スパムIPをどう区別しますか?

Re:フラッド攻撃 0.00000001 BC

投稿:Insti 2010年08月04日 午後02時58分31秒

この0.01 BTCの取引手数料で「解決」される「ごみスパム」とは正確には何のことですか?bytemasterが提案する例のように、これでは小額決済の実装が妨げられるため、利益より害の方が大きくなりそうです。

既存の取引ボリュームの負荷によってネットワークがひずみを生じるとは気づきませんでした。大量の取引を送りたい人はすでに、X BTCを多数回に渡って自分自身に送っているでしょう。

Re:フラッド攻撃 0.00000001 BC

投稿:サトシ 2010年08月04日 午後04時25分36秒

引用:Insti 2010年08月04日 午後02時58分31秒

bytemasterが提案する例のように、これでは小額決済の実装が妨げられるため、利益より害の方が大きくなりそうです。

現在のところ、ビットコインはとても小さな小額決済には実用的ではありません。ペイ・パー・サーチ(検索一回ごとの料金支払)やペイ・パー・ビュー(閲覧一回ごとの料金支払)のようなものは総計的な仕組みでないと実用的にはなりません。0.01以下の支払を必要とする取引には実用的ではありません。ごみスパムの制限は、極度に小さな小額決済を意図的に防止する試みの第一歩です。

ビットコインは既存の支払方法よりも小額取引には実用的です。小額決済の世界のトップ、と呼ぶのに十分なぐらい小額、です。ですが、恣意的なまでに小さな小額決済に実用的とは主張できません*3。

Re:フラッド攻撃 0.00000001 BC

投稿:サトシ 2010年08月05日 午後04時03分21秒

小額決済の利点を追加するのを忘れました。現在のところ、小さすぎる小額決済にビットコインが実用的とは思いませんけど、最終的には、ストレージと帯域のコストが下がり続ければ実用的になるでしょう。ビットコインが広範囲に渡って人気を博するようになれば、その頃にはすでに実用的になっているはずです。小額決済が実用的になるもう一つの道は、クライアント限定モードを実装し、ネットワークノードの数が少数のプロフェッショナルなサーバーファームに整理統合されていくときです。どんなサイズの小額決済でも最終的には実用的になります。五年か十年以内には、帯域もストレージも些細なものになっていると思います。

DoS攻撃を受け始めてあちこちで取引浪費の負荷が発生すれば、0.01の最低取引手数料の支払開始が必要になるでしょう。実際、バージョン0.1.5では取引手数料の設定オプションがありましたが、混乱を減らすため除きました。無料取引は素晴らしいですし、濫用されない限りはこの方向で続ければいいです。

そこから疑問が出てきます。もし取引ごとの最低手数料が0.01なら、たったそれだけなら自動的に追加すべきではないですか? 毎回聞かれるのはひどく面倒です。所持額が50で送金額が10なら、10は受取人が受領し、自分の手元には39.99が残るようにします。自動的に付加するほうがいいと思います。この種の他のサービスでは自動的に取引手数料を付けますけど、それに比べれば些細な額です*4。

引用:FreeMoney 2010年08月04日 午後07時30分32秒

手数料を含めると、ハッシュ処理速度が遅くなりませんか?

いいえ、全然なりません。

Re:フラッド攻撃 0.00000001 BC

投稿:サトシ 2010年08月05日 午後04時30分20秒

引用:bytemaster

概して、例えば1 BTCの支払が処理されるのは、接続が閉じて「お釣」が返されるときです。このルールでは、さらなる取引の無い単なる「検索クエリ」への支払を実行することが不可能になります。

代替方法の一つは一括システムの採用です。例えば、千ページ、千の画像、千回のダウンロード、千回の検索などを一括で支払います。千ページを利用したら、次の千ページ分を支払います。一ページのみの利用なら、残りの999ページ分は利用しませんが、千ページの費用でも小額なので、大した問題でありません。

あるいは、一日単位での支払も可能です。ある日にサイトへ初回にアクセスすると、24時間のアクセス分を支払います。

千回分の一括払いや一日分の一括払いなら、購入者が理解するのも容易になるでしょう。購入者が心配するのは項目ごとです。なぜなら、積み重なるのが速すぎると理解が難しくなるからです。24時間無制限なら、費用がいくらになるか分かりやすいです。あるいは、千が多く見えれば、自分が使用しそうな回数より多いので、クリックのたびにコストが増えるという心配がなくなります。

Re:フラッド攻撃 0.00000001 BC

投稿:サトシ 2010年08月05日 午後04時39分58秒

引用:bytemaster 2010年08月05日 午後03時39分19秒

この問題の唯一の解決法は、取引のブロードキャストを「無料にしない」ことです。つまり、自分の取引を私に編入してほしければ、私への支払が必要になります。そのネットな帰結(だじゃれのつもりではないです)*5 がどうなるかというと、クライアントには、ブロックへの編入作業をする個人に対してだけでなく、他のクライアントに対しても、たとえ送金の相手先であっても、支払いが発生することになります。こうして、経済の法則が行き渡り、取引のブロードキャスト・システムへのただ乗りができなくなります*6。

その実装法は分かりません。ブロック作成者に支払う取引手数料には、追加サイズ無しで取引手数料を含めるという特殊なトリックが使われます。取引手数料ごとに取引が発生するならば、取引手数料の取引を実行するための取引手数料というのはどうですか?

Re:フラッド攻撃 0.00000001 BC

投稿:サトシ 2010年08月05日 午後05時49分43秒

引用:bytemaster 2010年08月05日 午後04時46分52秒

ちょうどいま、取引手数料アドレスは「空白」になっていて、これをブロック生成機が埋めます。ここで、ブロック作成をお願いする相手のアドレスをこの空白に入れます。

ブロック作成作業に当たる人数が一人だけならば、何日もかかります。ああ、各ノードに宛てて取引手数料を付け、それぞれに異なる取引を送る 、という意味ですか?

現在の状況がそれです。このブロックを作成した人が取引手数料を獲得します。

必要なら、取引のブロードキャストにビットトレント風の仕返し(tit-for-tat)ができます。支払取引を私に中継して下さい。でないと、私はあなたに中継しません。でも、それはたぶん現実的な問題ではないです。中継に必要なのは一つのノードのみです。これは、ちょうど、貪欲に中継しようとしないその他の七つのノードをキャンセルするのと同じことです*7。

Re:フラッド攻撃 0.00000001 BC

投稿:サトシ 2010年08月11日 午後11時28分50秒

blk*.dat*8 のファイルを可能な限り小さくできたら素晴らしいです。

最終的な解決策は、サイズを気にしないで済むことです。

でも、今のところはまだ小さいので、新規利用者が素早く操作できるように、小さくしておくのが良いです。最終的にクライアント限定モード*9 を実装するときは、サイズは問題ではなくなっているでしょう。

取引手数料についてはもっと作業する必要があります。フラッド攻撃のときは、0.01の取引手数料を払えば、キューを飛ばして次のブロックへの編入が可能です。ただし、そのオプションをUIに追加する時間がまだとれていません。

規模に関係なく、テストネットは同じ反応をしますが、帯域の浪費を抑え、煩雑さも軽減されます。

========================

【訳注】

*1 「BTC」のタイポ。
*2 この「0.01BTCの請求」という実装は2024年現在はもう存在しない。現在においてはビットコインの価格は十分高く、そのため取引手数料もそれなりにかかる(2024年3月17日現在、取引手数料は約7.352ドル = 1,095.79円)ため、このような制限がなくとも通常の手数料の枠組みでごみスパムは十分抑止できる。例えば、0.00000001BTC を 100万人に送るとすると、手数料は7.352*100万 = 735.2万ドルとなり、これだけの金額を浪費できるスパマーはいないと考えていいだろう。
*3 このとき(2010年)のビットコイン価格は0.3ドルを割っており、0.1 BTC <= 0.03 ドルとなり、このときは 1ドル = 86.53円なので、0.1BTC <= 2.5959円であり、少額決済といっても差し支えない。もちろん2024年現在では、0.01BTCでもかなりの額である。
*4 繰り返しになるが、この実装は2010年当時のものであり、2024年現在は取引手数料は市場原理で決定される仕組みに変更されている。すなわち、トランザクションを作成する者が手数料を設定し、マイナーがその手数料を十分だと思えばブロックに取り込むという形式である。
*5 原文の “net result” は、直前の「支払」を受けた経済用語の「正味残高」と、一般的な語義の「最終的な帰結」の掛詞になっている。
*6 取引を伝搬してくれるノードに対しても手数料を払うという仕組みだと考えられる。到底現実的ではない。
*7 ここの「7」という数字に大きな意味はなく、「サボってるノードが沢山いても大丈夫」程度の意味だと考えられる。
*8 ここで言及されている「blk*.dat」ファイルは、ビットコインのブロックチェーンデータを格納するためのファイル。ビットコインのノードがネットワークからダウンロードしたブロックの情報をローカルに保存する際に使用される。これらのファイルは、ビットコインのブロックチェーンの一部を形成し、トランザクションの記録、ブロックのヘッダー、およびその他の重要なデータを含んでいる。「blk*.dat」という命名規則では、「*」はワイルドカードとして機能し、複数のブロックファイルが存在することを示す(例:blk00001.dat、blk00002.datなど)。ビットコインのブロックチェーンは時間とともに成長するため、新しいブロックが生成されるたびにこれらのファイルも更新され、新たなファイルが追加される。
*9 SPVのこと。過去記事参照。

解説

この記事が書かれた当時はビットコインの価格は極めて安かったので、0.00000001 BTC は 0.000000003 ドルに過ぎませんでした。このため、100万人に0.00000001 BTCを送ってもわずか0.003ドルしかかからず、取引手数料をあげなければいつスパム攻撃が起こってもおかしくない状況でした。

訳中に書いた通り、現在はビットコイン価格は十分高いので、市場原理で取引手数料を定めるだけでスパムの脅威はなくなります。

サトシは「(ビットコインは)ストレージと帯域のコストが下がり続ければ実用的になる」「ビットコインが広範囲に渡って人気を博するようになれば、その頃にはすでに実用的になっているはず」「五年か十年以内には、帯域もストレージも些細なものになっている」と述べていますが、現在のところビットコインは多くの帯域とストレージを専有し、また全く実用的ではありません。この予言は外れたといえます。

しかし、サトシがいなくなった後に発案された「ライトニングネットワーク」が普及すれば、少なくとも少額決済はできるようになり、それをきっかけにビットコインの実用性もあがっていくかもしれません。

小宮自由

→この連載の他の記事を読む

関連するキーワード

この記事の著者・インタビューイ

小宮自由

東京工業大学でコンピュータサイエンスを学び、東京大学ロースクールで法律を学ぶ。幾つかの職を経た後に渡欧し、オランダのIT企業でエンジニアとして従事する。その後東京に戻り、リクルートホールディングスでAI(自然言語処理)のソフトウェア作成業務に携わり、シリコンバレーと東京を行き来しながら働く。この時共著者として提出した論文『A Lightweight Front-end Tool for Interactive Entity Population』と『Koko: a system for scalable semantic querying of text』はそれぞれICML(International Conference on Machine Learning)とACM(Association for Computing Machinery)という世界トップの国際会議会議に採択される。その後、ブロックチェーン業界に参入。数年間ブロックチェーンに関する知見を深める。現在は BlendAI という企業の代表としてAIキャラクター「デルタもん」を発表するなど、AIに関係した事業を行っている。
https://blendai.jp/
https://twitter.com/blendaijp
https://twitter.com/BorderlessJpn
https://twitter.com/BorderlessDAO

東京工業大学でコンピュータサイエンスを学び、東京大学ロースクールで法律を学ぶ。幾つかの職を経た後に渡欧し、オランダのIT企業でエンジニアとして従事する。その後東京に戻り、リクルートホールディングスでAI(自然言語処理)のソフトウェア作成業務に携わり、シリコンバレーと東京を行き来しながら働く。この時共著者として提出した論文『A Lightweight Front-end Tool for Interactive Entity Population』と『Koko: a system for scalable semantic querying of text』はそれぞれICML(International Conference on Machine Learning)とACM(Association for Computing Machinery)という世界トップの国際会議会議に採択される。その後、ブロックチェーン業界に参入。数年間ブロックチェーンに関する知見を深める。現在は BlendAI という企業の代表としてAIキャラクター「デルタもん」を発表するなど、AIに関係した事業を行っている。
https://blendai.jp/
https://twitter.com/blendaijp
https://twitter.com/BorderlessJpn
https://twitter.com/BorderlessDAO

この特集のその他の記事

経済的ディスインセンティブが、ビットコイン51%攻撃を防ぐ

ビットコインネットワークに対する著名な攻撃(取引履歴を不正に改ざんすること)に、51%攻撃というものがあります。ビットコインは世界中のコンピュータがその計算能力を使い、取引履歴をブロックとして保存しています。この計算能力・処理能力の51%、つまり過半数を占めてしまえば、不正な取引履歴を正当とみなせるようになります。この問題は理論上取り除くことはできず、サトシもそれを認めています(ビットコイン以外の多くのブロックチェーンも、同じ問題を有しています)。