コンピューティングにおけるDoS攻撃(サービス拒否攻撃)とは、攻撃者がネットワークに接続されたホストのサービスを一時的または無期限に中断することで、マシンやネットワークリソースを本来の利用者が使用できないようにするサイバー攻撃のことである。これがWikipediaによるDoS攻撃の定義だ。
仕組みは至ってシンプルだ。攻撃者が自分のリソースを使い、ネットワーク上の他のマシンの動作を妨害する。
DoS攻撃は、インターネットが存在する限り問題となってきた。一般的に「最初のDDoS攻撃(分散型DoS攻撃)」の一つとして議論されるのは、90年代半ばにインターネットサービスプロバイダー(ISP)のPanixに対する攻撃である。もちろん、それ以前にも古いインターネットサービスにおける多くの技術的事例があったが、これは現代のワールドワイドウェブにおけるこうした攻撃の最初の主要事例の一つであった。
この攻撃では、多数のコンピューターがISPのサーバーとのTCP(Transmission Control Protocol)接続を開始したが、接続を確定させるハンドシェイクプロトコルを完了させなかった。これによりサーバーのネットワーク接続管理リソースが消費され、正当なユーザーがISPのサーバーを通じてインターネットにアクセスできなくなった。
この「最初の」DDoS攻撃以来、DDoS攻撃は自然界における嵐のようにインターネット上で日常的に発生しており、インターネットインフラの大部分はこれらの攻撃から防御するために構築されてきた。
ブロックチェーン
ブロックチェーンはビットコインの中核を成す技術であり、分散型台帳としてのビットコインの機能に必要不可欠な要素である。ビットコイン界隈の多くの人々は、いわゆる「スパム」トランザクションをビットコインブロックチェーンへのDoS攻撃と呼ぶだろう。それをDoS攻撃と呼ぶためには、ブロックチェーンがシステムとして提供する「サービス」を定義し、スパムトランザクションがシステムの設計意図に反して他者へのサービス提供をどのように妨害しているかを説明する必要がある。
スパムがDoS攻撃だと信じる人々の多くは、「ブロックチェーンが提供するサービスは金融トランザクションの処理であり、スパムはそれを行おうとする人々からスペースを奪っている」といったことを言うだろう。問題は、それがブロックチェーンが提供する本来のサービスではないということだ。
ブロックチェーンが実際に提供するサービスは、マイナーがブロックを見つけるたびに定期的に決済されるリアルタイムオークションを通じて、コンセンサス上有効なトランザクションを承認することである。トランザクションがコンセンサス上有効で、マイナーがブロックに含めるのに十分な高い手数料を入札していれば、設計通りにブロックチェーンが提供するサービスを正しく利用していることになる。
これは「ブロックサイズ戦争」の間に何年もかけて行われた意図的な設計判断である。この判断は、Segregated Witnessの有効化と、当時の主要企業が推進したSegwit2xブロックサイズ増加の拒否によって確定した。ブロックチェーンは最も高い手数料を入札したトランザクションを優先し、ユーザーはそのオークションで自由に競争する。これがブロックスペースの配分方法であり、検証可能性を保護するグローバルな制限と自由市場の価格メカニズムを備えている。
恣意的に「スパム」と定義されたトランザクションがこのオープンなオークションで勝つことは、ブロックチェーンのDoS攻撃では全くない。ユーザーがそのリソースを本来の使用方法で利用し、他のすべての人々とともにオークションに参加しているだけである。
リレーネットワーク
大半のビットコインノードは、ネットワークの他の部分に対してトランザクションリレーをサービスとして提供している。ネットワーク上のピアにトランザクションをブロードキャストすれば、彼らはそれを自分のピアに転送し、さらにその先へと続く。どのノードとピアリングするかを決定するピアリングロジックは幅広い接続を保つため、このサービスによりトランザクションはネットワーク全体に非常に迅速に伝播し、特にすべてのマイニングノードに到達できる。
もう一つのサービスはブロックリレーであり、発見された有効なブロックを同じ方法で伝播させる。これは何年にもわたって大幅に最適化され、ほとんどの場合、ブロック全体が実際にリレーされることはなく、ブロックヘッダーとそれに含まれるトランザクションの簡略化された「スケッチ」だけが送られ、自分のメンプールから再構築できるようになっている。言い換えれば、ブロックリレーの最適化は、トランザクションリレーが適切に機能し、有効でマイニングされる可能性の高いすべてのトランザクションを伝播させることに依存している。
ノードがブロック内のトランザクションを既に自分のメンプールに持っていない場合、近隣のノードからそれらをリクエストする必要があり、ブロックの検証にさらに時間がかかる。また、それらのトランザクションをブロックスケッチと共に他のピアに明示的に転送するため、彼らがそれらを欠いている場合に備えて、帯域幅を無駄にする。スパムとして分類されたトランザクションをフィルタリングするノードが多いほど、それらのフィルタリングされたトランザクションを含むブロックがネットワーク全体に伝播するのに時間がかかる。
トランザクションフィルタリングは、これら両方のサービスを実質的に妨害している。トランザクションリレーの場合は、マイナーへの伝播を防ぐのに完全に失敗しており、ブロック伝播の場合は、ネットワーク上でトランザクションをフィルタリングするノードが多いほど、わずかだが目に見えるパフォーマンス低下が生じている。
これらのノードポリシーは、マイナーやネットワーク全体へのトランザクション伝播サービスを明示的に低下させることを目的としている。フィルタリングしている有効なトランザクションをマイナーが含めることを選択した場合、ブロック伝播の低下をペナルティと見なしている。彼らはサービス低下を目標として作り出そうとしており、その試みから生じる別のサービスの低下を肯定的に見ている。
これは実際にDoS攻撃である。システムの設計に反してネットワークサービスを実際に低下させているからだ。
これからどうなるのか?
「フィルタラー」対「スパマー」、すなわちBitcoin Knotsの試みは、結局ビットコインネットワークへの無効なDoS攻撃にしかならなかった。フィルタリングは、スパムトランザクションのブロック取り込みを全く防げていない。マイナーへのトランザクション伝播を妨害するという目標は全く成功しておらず、ブロックリレーの低下もマイナーを抑止するほどの影響もなかった。
私はこれを、ビットコインネットワーク自体のレベルでの検閲や妨害の試みに対するビットコインの堅牢性と回復力の大きな実証と見ている。
それでは、これから何が起こるのか?
P2Pネットワークに対するDoS攻撃が完全な失敗だったことを認識したフィルター支持者たちは、コンセンサス変更へと方針を転換した。匿名の著者によるBIPが提出され、約1年後に期限が切れる一時的なソフトフォークが提案されている。これは、その期間中にビットコイントランザクションに「スパム」を含める多数の方法をコンセンサス上無効にするものだ。多くの人々が2年以上前から必要だと指摘していた通りである。
では、これで問題は解決するのか?答えはノーだ。このフォークを実装しても、「スパマー」は偽のScriptPubKeyを使い、使用不可能なアウトプットにデータをエンコードする方法に切り替えるだけだ。これはUTXOセットを膨張させ、ネットワークにとってより有害である。
つまり、このフォークが圧倒的な支持を得て成功裏に有効化され、チェーン分裂も起こらなかったとしても、目標は達成されない。「スパマー」はネットワークにとって最も有害な方法で「スパム」を送信せざるを得なくなるだけだ。