レース攻撃
レース攻撃は
二重支払いの一種です。攻撃者は同じ資金を使う競合した2つのトランザクションを作成し、受取人を欺く目的でほぼ同時にブロードキャストします。
加盟店に支払いを受けたと信じ込ませることを目的としています。その裏で、競合するもう一方のトランザクションが同じコインを攻撃者自身または別のアドレスへと送り返します。
ネットワーク上でどちらが有効なトランザクションかがまだ確定していないため、攻撃者に結果を操作するわずかな時間を与えます。そのため、即時決済により加盟店が商品やサービスをすぐに提供する場合、特にこの攻撃を受けやすくなります。
典型的な手口では、攻撃者はまず加盟店宛てにトランザクションを送信し、ほぼ同時に、同じコインを自分自身に送る競合トランザクションをブロードキャストします。ネットワーク上のノードはそれぞれ異なる経路でトランザクションを受信するため、2つのトランザクションはノードごとに異なる
メモリープール(メンプール)に取り込まれます。
ノードは2つのトランザクションを異なる順序で受信する場合があるため、ネットワーク全体では一時的にどちらが正当なトランザクションか定まらない状態になります。
最終的にブロックに取り込まれるトランザクションは1つだけです。マイナーがコインを攻撃者へ送り返すトランザクションを承認した場合、加盟店への支払いは無効になります。
攻撃者は成功率を高めるため、加盟店のノードに直接接続して支払い用のトランザクションを送り込む一方で、競合するトランザクションはネットワークの他の部分に広く拡散させます。加盟店が承認を待たずに支払いを受け入れると、何も受け取れない可能性があります。
レース攻撃のリスクを抑える最も効果的な方法は、支払いを最終的なものとみなす前に、1つ以上のブロック
承認を待つことです。トランザクションがブロックに取り込まれ、その上にさらにブロックが積み重なるにつれて、取り消しはますます困難でコストの高いものになります。
高額取引を扱う加盟店は、取り消される確率を下げるために数回の承認を待つことが一般的です。レース攻撃は
51%攻撃とは異なります。51%攻撃はネットワークのマイニングパワーの過半数を掌握する必要があり、すでに承認済みのトランザクションさえ書き換えることができます。これに対してレース攻撃はそれほどの資源を必要としませんが、一般に成功するのはゼロ承認の状態で支払いが受け入れられた場合に限られます。
実務では、承認を待ち、競合するトランザクションを監視し、未承認の支払いを即座に受け入れないことで、レース攻撃が成功する可能性を大幅に減らせます。