Screenshot from 2018-01-31 14-05-50

0確認の安全性について

レポート「アルトコイン図鑑」では30種類以上のコインの概要と見通しを解説(詳しく)

0確認の取引は安全かどうか?

ビットコインキャッシュの0確認は安全であり、ビットコインはRBFがあるので安全でない、という話を良くきくことがあります。この話を整理し論点を追ってみます。長文ですがおつきあいください。

0確認とは?

0確認とは、そもそもブロックチェーンに取り込まれていない状況のことを指します。ひとたびブロードキャストしたトランザクションは、マイナーのメモリープールに保持されマイニングされるのを待つことになります。

一度発行したトランザクションをメモリープールから勝手に取り下げる方法はありませんから、いずれすべてのトランザクションがマイニングされるという前提が建てられます。0確認でもいずれマイニングされるだろうという強い予測が可能です。

この強い予測を根拠に、0確認状態でも支払いを受け入れようというのが、0確認の考え方です。

実際に、店舗などその場で支払いと受け渡しをするような業態では、0確認がつかわれれています。ビットフライヤーやコインチェックなどのペイメントプロセッサーが提供する決済では、0確認のままOKとしています。(後述しますが、事故があった場合、ペイメントプロセッサー側が保証する)

0確認への攻撃

当然ながら0確認には攻撃方法があります。ダブルスペンドという方法です。トランザクションを2つ作っておいて、一方は店舗への支払いとし、一方は自分宛ての支払いとします。店舗には支払ったように見せておいて、うまく自分宛てのトランザクションのみをマイニングさせることができるとダブルスペンドが成立します。手法についてはいろいろあるので調べてみてください。

(モナコインでのBlock withholding Attackも、結果としてはダブルスペンドにより、取引所を偽計しました)

そもそもの話ですが、ビットコンとPoWは「ダブルスペンド」という最大の問題を解決するために、マイニングという手法でトランザクションの順序を一意に確定させるという発明でした。

ですので、0確認というのは、そもそもPoWの最初の意義というか、根本のところで、なにかちょと違反している気もしないでもありません。これをどう感じるかはいろいろあると思うので深入りはしません。

0確認の安全性

しかしながら、先程言ったように、店頭や、少額の支払いということでいえば、0確認が悪いということではありません。いちいち10分まつのは現実的ではありませんから、一定のリスクを承知で0確認をうけいれるというのは、合理的な選択です。500円、1000円の受取に、究極のセキュリティはいらないといわれるとそのとおりで、利便性とのトレードオフです。その考え方自体は合理的です。

0確認は安全だとか、問題ない、というような言い方は、受け取る人で解釈のしかたに幅があるとおもわれます。実際は、利便性とのトレードオフにおいて安全という意味で、つまり「取り消されることはめったにないけど、もし被害にあっても少額なんだから我慢できるよね。それより暗号通貨受取ができる利便性のほうが高いよね」という考えに受け取り側が納得している場合は、それでOKです。

ただし、1000円だろうが5000円だろうが、絶対に取り消されたりしたら困る、リスクは負いたくない、金額のもんだいじゃない、と考えているひとにとっては、0確認は問題だということになります。

つまり、運用というか、考え方の問題なので、単純に0確認は安全という言葉だけだと、誰にとって、どういう人にとってという主語の部分が抜け落ちてしまうかもしれません。すべてのひとが、利便性とのトレードオフを自覚しているわけではないので。

BCHでの0確認

ビットコインキャッシュでは、ゼロ確認をより安全に使えるよう、ゼロ確認でも大丈夫な確度を上げる議論(提案)がされていますので、その点について話します。

まず、トランザクションを受け取ったしばらく後に、ランダムなマイニングノードに問い合わせて、そのトランザクションがメモリープールに存在するかを確かめます。ハッシュパワーの大半であるマイニングノードがそれらのトランザクションを保持していれば、非常に高い確率でマイニングが行われると考えることができます。(なお、これは案で、私の理解が正しければ、この機能はまだ実装されてないと思います)

またビットコインキャッシュでは、ブロックがいっぱいにならないように、常にブロックサイズを拡大する方針です。これが適切に行われれば、送金づまりがないため、0確認でも次のブロックに入るという強い予測が得られるでしょう。

この2点がビットコインキャッシュの0確認の安全度が高いという根拠になっています。

ビットコインでの0確認

ビットコインでの0確認ですが、RBFによって0確認が機能しなくなったという話がよくきかれます。その点を確認しましょう。

RBFとは、Replace by feeのことで、あとからより高いFeeを添付したトランザクションで、先行のトランザクションを置き換えることができる機能です。先行して発行したトランザクションを店舗の支払いなどにし、メモリープールにそれがある間に、RBFをつかって送金を置き換えてしまえば、ダブルスペンドが容易にできるようになります。そのような仕様です。

ただし、すべてのトランザクションがRBFであるという誤解もあるようです。RBFはオプトインであり、最初からRBFフラグを立てて発行しないといけません。多くのスマホウォレットなどではRBFのフラグはたてられておらず、RBFでない通常のトランザクションを発行します。通常のトランザクションに対しては、あとからRBFによる置き換えはできません。(Bitcoin Coreクライアントは、0.16.0からRBFがデフォルトになりましたが、オプトアウトも可能です)

そのため、RBFでないトランザクションであれば、トランザクションの形式上はビットコインキャッシュと変わりがないと言えます。

(なお、RBFかどうかは受け取り側が検知できます。ペイメントプロセッサーは、RBFトランザクションであることがわかると0確認ではうけとりません)

では何がちがうかというと、メモリプールの容量です。ご存知の通り、ビットコインにおいては送金づまりが発生することがあり、手数料が低く長い間承認されないトランザクションは、メモリープールから除外されることがあります。

マイナーのメモリープールには容量の上限があるのと同時に、タイムアウトを設定しているマイナーがほとんどです。この値はマイナーによりますが、デフォルトは72時間です。(現実にはもっと長い値になってます)

送金づまりが激しいときには、最終的にトランザクション自体が承認されずに消えてなくなるという自体がおきます。このようになると、いつ承認されるかの予測た立ちづらいので、0確認はあまり役に立たなくなります。

まとめ

0確認自体は、トレードオフを自覚していれば便利なものであり、私個人的には利用したいとおもっています。

しかしながら、そうしたトレードオフへの認識や、危険性の定量的な評価などがないまま、すべてのゼロ確認が安全だという神話ができてしまうと、技術的な問題というより社会的なほうでコミュニケーションミスとかが発生するんじゃないかとも思います。

コインにはそれぞれのポリシーがありますし、セキュリティは利便性とのトレードオフです。その最善点はどこにあるかというのは、コインの利用形態や目的といったものに照らし合わせて、利用者や開発者が選択すべきものとおもいます。

開発者やインフルエンサーにおいては、利用者が誤解なきよう、トレードオフについては正確に伝えるのが最善であることは間違いありません。

ご意見はツイッターや、Newspicksなどにお願いします。

・おしらせ
ビットコイン研究所の有料版サロンでは、平易な言葉で最近の技術や業界事情などについて解説するレポートを毎週配信しています。暗号通貨について、もっと知りたい、勉強をしたいというかたに情報を提供しています。サロン内では疑問点も質問できます。
一度登録いただけると100本以上の過去レポートが読み放題で、大変お得です。レポート一覧がこちらのページありますので、よろしければいちど目をとおしてみてください。(サロンページへ)

Ledger Nano S - The secure hardware wallet