
標準だが安全でないトランザクションとは?
このトランザクションはわかりやすい状況で発生します。
それは、コールドウォレットから忽然と全残高が消える現象を生み出している原因がこの「標準だが安全でないトランザクション」です。
概要
トランザクションが発生した場合その特徴は次の4つのタイプに分類されます。
1, 標準かつ安全なトランザクション
2, 非標準だが安全なトランザクション
3, 標準だが安全でないトランザクション
4, 非標準かつ安全でないトランザクション
メモリプールに追加する前のトランザクションチェックはハードコーディングされています。
この過程で、標準か非標準かを区別するために、タイプ2とタイプ4が除外されます。
ところで、タイプ1は通常のトランザクションで、問題がありません。では、残るのはタイプ3ですね?
このタイプ3は動的な性質を持つため、ハードコーディングで除外することができません。
そのため、AIの推論が活用されます。
ところが、トランザクションがメモリプールに入ってしまうと標準的だが安全でないトランザクションをキャンセルするのは難しいことに気付きました。
全ノードでAI監視を行えば、そのようなトランザクションを取り除けると考えていましたがこの考えは甘いという結論に至ります。
トランザクションをキャンセルする操作がAIによって行われたのか、それともそうでないのかを区別できず、
正当なトランザクションが恣意的にキャンセルされてしまいスパムに発展する恐れがあるからです。
そこで、その狙われたノードには推論による監視が実装されていたとします。
「標準だが安全でないトランザクション」をそのノードに放出した場合は確かにその監視がそのようなトランザクションを弾くことで、
メモリプールに放出されることはなく、ブロックに取り込まれることがないため取引は成立しません。
しかし、ブロックチェーンは分散性です。
各ノードはそれぞれ独立し利用者はどのノードを利用してもブロックに取り込めるトランザクションを放出することができます。
つまり、推論による監視が実装されたノードにそのようなトランザクションを放出する必要性がなく、
ハッカーはメモリプールへの受け入れ設定が「ゆるいノード」に、そのようなトランザクションを放出すれば良いことになります。
トランザクション受け入れの厳格さは「ブロックへの取り込み」よりも「メモリプールへの受け入れ」の方が上です。
つまり、メモリプールに入り、そこにマイナーが存在すればブロックに取り込まれるのは「ほぼ間違いない状況」となります。
ブロックチェーンの性質上、ブロックに取り込まれるとその取引は不正であっても成立となります。
それで、不審なトランザクションを検知したとしても残高が失われる状態になるのです。
その検知した段階で、そのようなトランザクションは別のノードから伝播することですでに他のメモリプールに存在する状態となっており、
アラートが出た段階では「ブロックに取り込まれているのが観察できる」はずで、取引は成立しておりすでに手遅れとなります。
さらに、この現象はコールドウォレットの概念すら簡単に突破します。
なぜなら、ウォレット自体は管理しているscriptPubKey(またはECRecover)などから残高を計算しているだけの存在なので、
ウォレット自体はトランザクションや取引に関与していません。
トランザクションを組み立てられればそれをどのノードに放出するのかは自由に選べる状況となっておりウォレットの概念とは独立しております。
