「ブロックチェーンスマホ」HTC Exodus 1の秘密鍵のソーシャルリカバリー機能と脆弱性
2018年秋に予約が始まり、今年3月に発売されたHTC Exodus 1はハードウェアウォレット機能を持つことなどから「ブロックチェーンスマホ」と銘打ち、まずまずの反響があったようですが(近く3万円程度で廉価版のExodus 1sの発売が計画されています)、今回はこちらに搭載されている秘密鍵のソーシャルリカバリー機能とLedger社が公開したその設計上の脆弱性に注目したいと思います。
秘密鍵はバックアップしたい
まず初めに、HTC Exodus 1に搭載されている暗号鍵を格納するチップは常のハードウェアウォレットと同じく、秘密鍵の格納や署名などは隔離されたチップ上で行われるものです。流通数が少ないことも関係していると思いますがハックされたという話は現時点では聞いたことがありません。しかし、ハードウェアウォレットと比べ、日常的に酷使されるスマホに期待できる寿命ははるかに短いでしょう。また、紛失や盗難の可能性も高いです。そこで万一に備えて秘密鍵をバックアップする方法の1つはリカバリーシードです。この管理を安全にしている人はかなり少ないんじゃないかという話を以前させていただきました。初回起動時にシードを使ってバックアップ用のハードウェアウォレットを作成し、そのままシード自体は記録しないのも手です。リカバリーシードの保管については、この記事では割愛させていただきます。興味深いのは次に説明する「ブロックチェーンスマホらしい」HTC独自の秘密鍵のバックアップソリューションです。
ソーシャルリカバリー機能
HTCが実装したソーシャルリカバリー機能の概要は次のようなものです:
リカバリーシードをシャミア秘密分散法を利用して5分割し、分割したもの(=シェア)をそれぞれ信用できる知人に送る。3つ揃えばリカバリーシードを復元できるが、3つ揃わなければなんの情報にもならない。
ところが、HTC社が参考にしたシャミア分散法のコードは一度にすべてのシェアを作り、以後作れない仕様のものだったのですが、それを「任意にシェアを作れる」ように改変したときに脆弱性を生んでしまいました。具体的には、復元に必要なシェアが3-of-5のはずが、2-of-5でも1秒以内に総当たり攻撃できてしまうものになってしまったのです。つまり、信用する知人5人中2人だけでも共謀すれば秘密鍵を奪われうるという状態になりました。さらに、脆弱性はこれだけではありませんでした。2月19日にリリースされた3つめのファームウェアにおいて、シェアを作る際に乱数を一切更新しないテスト用と思われる関数が誤って配信されており、信用できる知人それぞれに暗号化したシードと暗号鍵そのものが送られてしまい、秘密鍵そのものを知人それぞれに渡しているのと同じ状態になってしまいました。
(これらのバグはHTC社に2月中旬に報告され、発売後の3月下旬に他のバグとともにパッチされ、4月にバグバウンティが発表されました。)ファームウェアのアップデートをしていれば、現在は上記の脆弱性は修正され、ソーシャルリカバリーは正常に動作をしている模様です。
ソーシャルリカバリーというアイデア
個人的にはソーシャルリカバリーというアイデアはとても興味深いです。考えてみればFacebookアカウントにログインできなくなった際、リカバリーに「友達数人による承認」を使うことができたり、逆に正体不明のアカウントと友達になっていたためにアカウントが乗っ取られた人もいます。Facebookアカウントは現金化しにくいですが、ビットコインで同じことをするときは様々なことに考えを巡らせる必要がありそうです。金額が大きいほど様々なリスクが大きくなりますが、ユーザーにとっては直感的でわかりやすいモデルかもしれません。
おわりに
ハードウェアウォレット機能を搭載していても、ブロックチェーンスマホは「ハードウェアウォレット」ではなく「スマホ」だと思って使用するべきでしょう。数学や暗号学に興味のある方は、下の記事に詳しく書いてあるのでぜひ読んでみて下さい。大学学部レベルの数学・コンピューターサイエンスの知識で十分に理解できると思います。参考:https://ledger-donjon.github.io/Stealing-all-HTC-Exodus.../
次の記事
読者になる
一緒に新しい世界を探求していきましょう。
ディスカッション