見出し画像

ハードウェアウォレットのマイコンのセキュリティ

※この記事は、ビットコイン研究所で2021年7月28日に公開した記事です。


企業向けコールドウォレットのご案内

私たちAndGoは、暗号資産の安全な保管と管理を実現するために、企業向けのコールドウォレットソリューションKey Vaultを提供しています。Key Vaultは、高度なセキュリティ機能と利便性を兼ね備えており、企業が抱える暗号資産のリスクを最小限に抑えることができます。

詳細については、当社問い合わせフォームにてお気軽にお問い合わせください。
https://share.hsforms.com/11ir18s26TFWvUqnOar6mJgecpr1


こんにちは。AndGoのハードウェア担当の片山です。

今回はハードウェアウォレットのセキュリティについてさらに迫ってみたいと思います。ハードウェアウォレットをセットアップすると秘密鍵が生成されます。暗号資産を送金するときには秘密鍵を使ってトランザクションとよばれる「○○宛に●●BTCを送金します」という情報に署名したあと,ブロックチェーンに書き込まれるのを待つことになります(鍵で署名をするという不思議な表現ですが・・・)。

そこで,もしこの秘密鍵が他人に渡ってしまうと「X宛へ●●BTC送金」というトランザクションに本人でなくても署名できてしまうため,皆様の大切な財産が脅かされることになります。さらに匿名性が高いビットコインの場合には,送金先アドレスまでは分かるものの,犯人「X」を特定することは事実上不可能です。

ハードウェアウォレットから秘密鍵を盗み出す経路

ハードウェアウォレットは秘密鍵をオフラインで保管する署名装置です。もし,秘密鍵が盗まれるとしたら2つの経路があります。1つ目はインターネット経由,2つ目は物理的な盗難,です。

「インターネット経由」というのは,ハードウェアウォレットから送金するときに,ハードウェアウォレットをPC等とUSBやBluetoothなどで接続するときです。ハードウェアウォレットにはトランザクションがダウンロードされ,ハードウェアウォレットが持っている秘密鍵で署名して,署名済みのトランザクションがPCに再びアップロードされ,ネットワークに流されます。この瞬間に何かしらの攻撃することができるかもしれません。

「物理的な盗難」の場合には,犯人は何らかの方法でハードウェアウォレットから秘密鍵を盗もうとします。通常の動作ではハードウェアウォレット側からはセットアップ時以外には秘密鍵を教えてくれることはありません。犯人はハードウェアウォレットそのものに細工をして鍵を盗み出すことができるかどうかがポイントになります。

この2つの方法の可能性について考えていきます。先日紹介した,Trezor Oneに搭載されているSTMicroelectronics社のSTM32F205RET6というマイコンを例に見ていきます。

インターネット経由で秘密鍵を盗み出す

ハードウェアウォレットをPCに接続した時にPCができることは何でしょうか。まず考えられそうな手段としてはマイコンに何らかのコマンドを送信して秘密鍵を盗むことができそうです。これは実際には不可能です。というのも,ファームウェアにそのようなコードが用意されていないからです。開発者が意図的にそのようなコードをいれていれば別ですが,Trezorについてはファームウェアそのもののソースコードも公開されていますので,もしそのようなコードが入っていればすぐに分かってしまいます。

他の手段としてはファームウェアそのものを書き換えてしまう方法です。しかし,Trezorの中にはファームウェアそのものをチェックする仕組みがあり,Trezorの製造元の署名がある正当なファームウェアでないと書き込むことができません。

ファームウェアのソースコードを見るとファームウェアの署名にはビットコインの公開鍵暗号と同じECDSA (secp256k1)を使っているようですので,犯人が不正なファームウェアを作れるということは,ビットコインの公開鍵から秘密鍵を作れるということなので,そもそもTrezorのファームウェアに手を出さなくても直接ビットコインを盗めばよい!?・・・ということになります。結果的にハードウェアウォレットが守られるという素晴らしい設計ですね。

他にはPC側のソフトウェアを不正なものに入れ替えて,トランザクションそのものを書き換えるという手口もあります。トランザクションの送金アドレスを犯人の公開鍵にすり替えて,気づかなかったユーザーの署名させるというものです。しかし,この場合はハードウェアウォレットに異なる公開鍵が表示されますので,しっかりと確認することが重要です。

物理的な盗難後に盗み出す

もしハードウェアウォレットが盗まれてしまったら犯人はどのように秘密鍵を盗むのでしょうか。秘密鍵は通常はマイコンのフラッシュメモリ(マイコンの電源が絶たれても中身が消えない領域)に入っています。注意しないといけないのは,マイコンが工場出荷時の設定ではデバッグポートからフラッシュメモリの中身を読み出したり,書き換えたりすることがでできることです。

このままではデバッグポートからフラッシュメモリに書き込まれている秘密鍵を簡単に盗み出せてしまいます。実はTrezor OneではSTM32F042K6 に対してデバッグポートからのフラッシュメモリへの読み込みや書き込みを禁止する設定がしてあります(https://github.com/.../f93a8514e8e25b1.../legacy/memory.c...)。この設定により,悪意のある人がハードウェアウォレットを盗み出しても秘密鍵を取り出すことができません。(セットアップ時に書かされるニモニックを保管していないと,ビットコインは失うことになるのですが・・・)

セキュアエレメント

デバッグポートが塞がれたとしても,マイコンそのものを分解して,顕微鏡を使ってフラッシュメモリに直接電極を刺すことで,フラッシュメモリに書き込まれた内容を取り出すことは,実は不可能ではありません。そのようなことを難しくしたチップ(耐タンパー性といいます)のことをセキュアエレメントと言います。

例えばLedger Nano S/XにはそれぞれST31H320とST33J2M0というセキュアチップが搭載されています。写真を見ていただくと,実は皆さんがお持ちのクレジットカードにも使われていることがわかると思います。セキュアエレメントは鍵を安全に保管し,さらにその鍵で暗号化などの演算もすることができます。情報は [https://www.st.com/ja/secure-mcus/st33j2m0.html] や [https://www.st.com/ja/secure-mcus/st31h320.html] に公開はされていますが,ほとんど詳細は公開されていません。

まとめ

ハードウェアウォレットのセキュリティ上の最大のメリットとしてはネットワークから物理的に遮断されていることです。取引所に預けたり,アプリのウォレットと比べると使い勝手は悪くなってしまうのですが,中期的な資産保管用ウォレットとしては候補に入ってきます。

ハードウェアウォレットの運用上,注意すべき点は下記の点といえるでしょう。

- 送金時にハードウェアウォレットに表示された公開鍵をよく確認する。
- ハードウェアウォレットそのものが盗まれないように金庫などで保管する。
- セットアップ時のニモニックは正確に記載しハードウェアウォレットとは別の場所で保管する。
- もし万が一ハードウェアウォレットが盗まれたときには,ニモニックで別のウォレット(ホットウォレットでも)を作成して,安全なアドレスへ送金する


企業向けコールドウォレットのご案内

私たちAndGoは、暗号資産の安全な保管と管理を実現するために、企業向けのコールドウォレットソリューションKey Vaultを提供しています。Key Vaultは、高度なセキュリティ機能と利便性を兼ね備えており、企業が抱える暗号資産のリスクを最小限に抑えることができます。

詳細については、当社問い合わせフォームにてお気軽にお問い合わせください。
https://share.hsforms.com/11ir18s26TFWvUqnOar6mJgecpr1



この記事が気に入ったらサポートをしてみませんか?