修正 2018/2/1 5:27

コインチェックや他の販売所、取引所が、Nakamoto2009で定義されたブロックチェーン技術を使っていないのではと推測されるので、これを検証する。

ここで検証したいのは、コインチェックが顧客の全トランザクションをNEMなどのブロックチェーンに書き出し、マイニングによる取引の認証受理を受けていたか否である。ブロックチェーン技術の安全性の大前提は全ての取引がブロックチェーンに受理され、認証され、記録されることにより、非改竄性を保証した上で、個人の残高が確定することである。ただ、大量のトランザクションが発生する取引所では、個人の取引毎にブロックチェーンに書き込むのではなく、ある程度の時間の取引をまとめた上で、バッチ処理でブロックチェーンに書き出す。それでも全ての個人の取引をブロックチェーンに書き出さない限りは、ブロックチェーンを取引に使ったとは言えない。

私が恐れているのは、今回の不正流出の様子から、社内でブロックチェーン技術は実際には使っていないということだ。また、これがコインチェックだけでなく、国内の仮想通貨業界で広く行われているとしたら早急に改善しなければ第2、第3のコインチェック被害が発生する。

私自身は、まもなく来る量子コンピュータへの耐性、各トランザクションとマイニングの計算量の複雑性によるスケーラビリティの限界(実際そのためにビットコインはフォークした)、プラットフォーム全体におけるトレーサビリティや通貨の代替可能性(fungibility)などから、ブロックチェーンに代わる次世代技術開発をテーマにしているが、正常に運用されたブロックチェーンは現行のコンピューターで破ることは出来ないのは事実である。(もちろん仮想通貨プラットフォーム全体ではあらゆるハッキングポイントがあるので、これはブロックチェーン技術そのものの話である。)

しかしながら、ブロックチェーンを使っていない場合は、内部犯行、外部ハッキング、マルウェアなどあらゆる可能性に対して、安全性が全く保証されない。

私が危惧しているのは、フィンテック企業と称しながら、ただのブロックチェーンのエンドユーザーなのではないかという危惧だ。

簡単に説明しよう、ホンモノのフィンテック企業であるならば、これから簡単に定義説明する複合トランザクションをサーバ上に全売買取引に対して実行し、その結果に対してバッチ処理で一定時間毎に、それぞれのブロックチェーンプラットフォーム毎のスクリプト経由でブロックチェーンに全取引を登録、マイナーによる認証を受け、記録が受理される。

ニセモノの場合は、ブロックチェーン技術による複合トランザクション処理はやらずに、単に、顧客どうし、もしくは、顧客と自身の取引を単なるサーバー上の口座間の足し引き計算として実行する。そして自分自身の持つコインの増減の結果だけをブロックチェーンに登録する。この場合は、コインチェックは、ただのエンドユーザーだ。ブロックチェーンに登録されるアドレスはコインチェックのアドレスだけで、26万人の顧客のアドレスは登録されない。

こういう形態を販売所とか取引所というのなら、ある程度のお金があれば、現在自分でウォレットを管理してる人は明日から商売を始められる。理解してもらえただろうか? 今、仮想通貨を売買してる人は、自分が持つコインを他人に売ったり買ったりして、その増減を別な取引所に持ち込んでブロックチェーンに書き込んでもらえば、明日から販売所や取引所になれるということだ。もちろんこれをWebサイト上でやれば明日から金融庁未登録取引所だ。更に、他取引所を一度経由するのはあまり美味しくないので、ある程度儲かったら、仮想通貨元締め団体にライセンス料を払って、ブロックチェーンに直結すれば、外から見れば、コインチェックと同じだ。ただ、問題は簡単にハッキングされることだが。

私が危惧してるのは、外から見ればではなく、コインチェックが中身もこういうニセモノの可能性である。もちろん、業界他社にもそういう企業があれば大問題である。

ブロックチェーン技術は、サーバー内部で規定通りの複合トランザクション処理が行われれば、それぞれの顧客の秘密鍵さえ盗まれなければ、つまりコールドウォレットであれば、ハッキング耐性はかなり高い。コインチェックの場合は、ホットウォレットであったので、全顧客の秘密鍵を抜かれたからか、ニセモノだったからか否かは、考察しないと主張出来ない。

また、ブロックチェーン技術におけるトランザクションの計算量の複雑性を、ブロックチェーン技術を知らない人のために考察するのであり、ブロックチェーンといいながら、マイニングのために作成されるマークルルートハッシュ二分木ブロックの計算量やマイニングの計算量を考察していないことなどを、プロに指摘されても困る。あくまで、コインチェック社内での計算量をブロックチェーン技術を知らない人に単純化して説明するのが目的だ。

以下、考察


ブロックチェーン技術を前提とした木構造の計算量であるが、マイニングの計算量複雑性は無視するので、同様に、マイニングのためのブロック構造化とマークルルート木計算量は考慮しないのは述べた通り。

定義
PublicKey ー ECDSAなどの公開暗号アルゴリズムによる公開鍵
SecretKeySign ー ECDSAなどの公開暗号アルゴリズムによる秘密鍵による署名
hash ー Sha-3などの暗号的ハッシュ関数
amount ー 通貨量を表す浮動小数点数または整数
address ー PublicKeyからハッシュ関数など一方向性関数で生成される固有識別子

トランザクションの定義
Transaction=
ASecretKeySign(hash(amount, Aaddress→Baddress, BPublicKey))

複合トランザクションの定義
CompoundTransaction=
Money Received
XSecretKeySign(hash (amount, Xaddress→Aaddress, APublicKey))
YSecretKeySign(hash (amount, Yaddress→Aaddress, APublicKey))

Money to Send
ASecretKeySign(hash (amount, Aaddress→Caddress, CPublicKey))
ASecretKeySign(hash (amount, Aaddress→Daddress, DPublicKey))
:
:

Note: X, Y are previous senders to current sender A (denoting money A owns)
→ Denotes transfer of money. In actual implementation, data in a slot position.


このように複合トランザクションは非循環方向木内部構造を取るベクトルである。

上記で示したように、1送金あたり最低一度のECDSA署名、最低一度のSha-3ハッシュが必要である。よって明らかに、複合トランザクションにより26万人のユーザ全員に対してそれぞれにlog NオーダーのECDSA署名とSha-3計算量となる。事前に26万人の残高を1口座にまとめる送金をサーバ内で行なっていたとすれば、長時間の計算中26万人の多くの人が自分の残高がゼロになっていたことに気づいたはずであるので、ハッキング時のリアルタイム複合トランザクションとしてこの計算をハッカーが一気にサーバーでやったということである。

理解して欲しいのは、1. 26万人全員に対して補償をするとコインチェック社が発表したからには、もし、コインチェック社がホンモノのブロックチェーンによるフィンテック企業であったなら、最低26万回の社内送金が一口座に対してあったということ。2. もし実際に、26万送金があったなら、それぞれの送金は複合トランザクション木上のlogNオーダーの計算量が必要であるということ。

推論:

金融庁調査などで知られているコインチェックの計算機能力と不正送金にかかった時間から、社内で上記log N計算が実行されたとは考えられない。

つまり、コインチェックは社内ではブロックチェーン技術によるトランザクション処理はしていない。

結論:

コインチェックは、上で定義したニセモノのフィンテック企業である


危惧:

同業他社にも同様な会社があれば、そこはある程度以上のハッカーがその気になれば、ハッキングされる。マルチシグを使おうが、コールドウォレットを使おうが、その“エンドユーザー”会社のサーバーが乗っ取られれば、外部ブロックチェーンから見れば、コインチェックの例と同様に合法的な送金であり、顧客のお金は原理的に消失する。せいぜい不正送金のアドレスをタギングして、法貨や他通貨に替える前に、交換を止める程度がやれることである。タキング前に他通貨に交換されていれば、完全に消失する。

対策: (と、金融庁への提言)

1. 金融庁は各取引所のソースコード監査をし、ブロックチェーン技術による複合トランザクション処理が実際に行われているかを監査せよ。特にオフチェーン処理と言われているものには、ブロックチェーンで前提とされるセキュリティレベルが一気に下がるものがある。また、オフチェーン上で安全性のみならず、価格操作が不可能であることも検証されなければならない。

2. 社内でブロックチェーン技術による複合トランザクション運用をしていたとしても、顧客の秘密鍵が盗まれた場合は、不正送金がされる可能性がある。ただしこの場合は大量のトランザクションが発生し、端末でモニター可能である。社内不正の検知も必要であり、金融庁は全取引所に全取引がリアルタイムに表示されるモニターの金融庁内設置を義務付け、金融庁は24時間監視せよ。アドレスから個人を逆向きに特定することは出来ないので、プライバシーの問題はない。

3. 勝手な造語で申し訳ないが、日本ブロックチェーン協会と仮想通貨事業者協会の統合に合わせて、参加企業による「仮想通貨ポータビリティ (VCP)制度」の導入を。コインチェックの顧客は現在口座がホールドされ、自身のXEMを動かすことが出来ない。協会統合に合わせて、ポータビリティ制度を導入して、少額の手数料で、会員企業の顧客は、自身の仮想通貨を任意の事業者に移行出来る制度の導入を。どこかの協会参加企業がハッキングされたり倒産しても、顧客は任意の別な事業者に仮想通貨残高を全額移せる制度と、それに必要なシステム構築を。

4. 上記1を義務付けた場合、上で説明したように、一送金あたりlogNオーダーの計算量となり、仮想通貨ブームで数十万人から数百万人顧客を持つような取引所の計算機能力ではリアルタイム送金が出来ない可能性がある。これは、ブロックチェーン技術に内因的な問題であり、実際にビットコインそのものが、これによりフォークしている。これを解決するのは、ブロックチェーン技術によらない、単調性技術が必要である。そういった革新的技術を導入しない限りは、外部のブロックチェーンプラットフォームがいくら強固でも、ハッキングや内部不正で今後も不正送金が続くことになる。上で見たブロックチェーン技術の計算量の複雑性から、いわゆるオフチェーンパッケージソフトを入れて自社ネットワーク内処理している取引所は特に要注意である。自社開発で複合トランザクション処理をやる技術力がないか、あったとしても必要な計算機能力に投資していないということだ。どちらにしてもその手のオフチェーンソフトは、計算量の複雑性から複合トランザクション仕様を満たしていない可能性が高く、上で述べたように、取引の全過程でブロックチェーンの仕様を満たしていないということで、安全ではない。だからこそ、ソースコードレベルで金融庁が監査するべきだ。ソースコードが出せない企業は技術力、資本力、そして信用性が怪しく、国がお墨付きを与えてはいけない。もしも、ブロックチェーン技術を本当に使っていてもマルウェアが仕込まれている可能性だってある。

離散数理的な意味での単調性の定義はここでは割愛するが、過去に遡って改竄出来ない数理的な保証ぐらいに理解してもらえば充分だ。ブロックチェーンは単調性を実現するが、上記に書いたように計算量が大きすぎ、リアルタイム処理に向かない。また、ECDSAやSha-3は量子コンピュータに間違いなく破られる。10年以内に北朝鮮は量子コンピュータを手に入れるだろう。その場合はブロックチェーンは何の役にも立たない。

量子コンピュータを使うハッカーの話はおいておくにしても、現在のハッカーにコインチェックはやられている。私の結論は、コインチェックは、社外送金は“エンドユーザー”としてブロックチェーン技術を利用していたが、社内での口座間取引では、ブロックチェーン技術は使っていなかっただ。これは大変な問題だが、これにはコインチェックの技術レベルの問題は別にしても、ブロックチェーン技術の計算速度がすごく遅いというあまり知られていない現実がある。上記の一方向関数二回と送金毎のlog N問題だ。これは、フィンテックという名前で、仮想通貨以外にもブロックチェーン技術を導入しようとしている人達もよく認識した方がいい。リアルタイム処理をしようとして複合トランザクション処理を省けば、社外でいくら安全でも、社内ネットワーク上では安全ではない。どちらにしても社内まで含めて、全トランザクションがブロックチェーン技術によらなければ、ブロックチェーンを使っているとは言ってはいけない。

これは、私自身がNakamoto2009(いわゆるナカモト論文)よりも20年前も前に、公開暗号鍵やハッシュ関数(当時はメッセージダイジェスト関数と呼んだ)を利用したデータ構造による構造木のセキュア技術を研究していた時から問題にしていたことである。

ところで、この問題を解決する技術は私自身は開発済みであり、要請があれば提供することも可能である。ブロックチェーンに代わり、仮想通貨プラットフォーム自体を書き換えて、出入りの関数だけ、既存サービスと同じにする方法も提案出来るし、既存のNEMなどのプラットフォームのまま、取引所や社内の処理だけを単調性を保証する次世代高速アルゴリズムに変更することも可能だ。

もちろん、本気で離散数理をしっかりやって、自力で解決出来る若手がどんどん育つことを願う。離散数理、なんと言っても、計算量の複雑性をなめんなよ。だ。

追加:

ニセモノのもうひとつというか、もっと大きな問題は、顧客間取引が外部的にブロックチェーン上で見ることが出来ないので、サーバ上の顧客間(架空でもいい)取引でいくらでも価格を釣り上げることができるということだ。不当な価格吊り上げを外部から検証することは出来ないし、証拠も残らない。

追加2:

これはいわゆるオフチェーンとして提供されているいくつかの仮想通貨プラットフォームの追加機能を使っている取引所でも同様である。アルゴリズム上、健全なオフチェーン処理は複合トランザクションのバッチ処理に過ぎない。これは、上で書いたようにどうしてもlog N問題がつきまとうのがブロックチェーン技術の仕様だ。暗号強度を下げて速度を稼ぐのも同様にプラットフォームで顧客に保証する安全性がないということだ。

何度もいうが、オフチェーン処理でも、全トランザクションをブロックチェーン本体に最終的に書き込み処理をしていなければ、ブロックチェーンを使っているとは言いがたいということだ。もしも言うならば、そのオフチェーンの計算量の複雑性と単調性を証明してからでなければならない。もし証明されたとしても全トランザクションがブロックチェーンに書き出されていなければ、不正流出したら返ってはこない。私から見るとよくあるオフチェーンは、ブロックチェーンの設計上の問題をアドホックな解決をしたに過ぎず、安全性を思いっきり犠牲にしている。また、オフチェーン処理が必要になったこと自体が、ブロックチェーンが前世代技術である証明で、私はナカモト論文が出た時から指摘してきた。