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

皆さん、BOMを見たことがあるでしょうか?BOMとはBilll of Materialsの略で部品表のことを指します。

電子回路基板を製造するときには必ず、製造業者にBOMを渡します。製造業者はBOMを元に必要な部品を調達し、基板に実装(はんだ付け)していきます。

2018年にAppleなどが納品したサーバー用のマザーボードに不正なマイクロチップが実装されていたという報道がありました。この報道は後日Appleによっては誤った情報であるという主張がされました。しかし、マザーボードのような電子回路基板の設計者と、基板を実際に製造して部品を実装する製造者は別の会社であることがほとんどです。例えば電子回路基板の製造時に何らかのバックドアを仕掛けるようなマイクロチップを埋め込むことは技術上できてしまいます。

これはいわゆる「サプライチェーン攻撃」というもので、電子機器の製造や流通において不正な部品やファームウェアを組み込んで、機密情報にアクセスしたり改ざんしたりするものです。

もちろん設計側も製造された基板をチェックしますし、製造側も信用問題に関わりますので組織的にサプライチェーン攻撃を仕掛けることは起きにくく、悪意のある個人やグループがセキュリティ的に脆弱な企業を標的にして攻撃するようなケースは十分にありえます。

本記事ではBOMを見ながらハードウェアウォレットに使われている電子部品がどのような役割で使われているのかを解説してきます。

オープンソースのハードウェアウォレットは回路図が公開されています。使用されている電子部品の役割がわかれば、ハードウェアウォレットを使う上での安心感につながってくると思います。

Trezor One

元祖TrezorのTrezor Oneの電子回路に関する情報はこちら(https://github.com/trezor/trezor-hardware/tree/master/electronics/trezor_one)に公開されています。trezor_v1.1_BOM.csv というファイルを見てみましょう。各列の意味は次のようになっています。

  • Qty: 個数
  • Value: 部品の型番もしくは回路定数(抵抗値やコンデンサの容量)
  • Device: 設計ソフトウェア上での型式
  • Package: 部品のパッケージ(寸法やピンの配置)
  • Parts: 回路図上の部品の記号
  • Description: 補足

R・C: この中でPartsがRやCで始まる部品(例えばC7やR9と書いてある部品)はそれぞれ抵抗とコンデンサ(コンデンサは和製英語で英語ではcapacitor)です。抵抗は電流を流しすぎないような調整だったり、プルアップ抵抗といってデジタル信号を正しく伝える役割などを果たします。コンデンサは基本的には電流を一旦蓄えるダムのような働きをします。ICの電圧を安定化させる目的で最も多く使用されています。写真はPCのCPUの裏の写真ですが、中央部分に並んでいる直方体の部品はほとんど全てコンデンサです。

これらの部品にバックドアを仕掛けることは実質的に難しいと考えられます。端子の数が2個しかありませんし、サイズ的にほぼ不可能です。

S・D: Sで始まる部品は押しボタンスイッチです。Qtyを見るとTrezorらしく2個ありますね。Dはダイオードといって電流を一方方向だけに流す部品です。Trezorの場合にはUSBで電源供給していますが、万が一、静電気や回路の不具合があったときに、Trezor側からUSBに電流が流れてPCを壊さないようにするための安全機構のために付けられています。D1は複数のダイオードが入っているパッケージです。

K1: USBコネクターです。USB2.0まではプラスマイナスの電源とデータ通信のための2本の線で合計4端子あります。

K2: デバッグ用の端子です。部品は実装されていません。初回ファームウェアの書き込みもしくは開発時に使う端子です。Trezorは出荷時にデバッグ機能は無効にされていて、外から有効にすることもできません。以前、電圧グリッジを与えてこの機能を無理矢理有効にしてマイコン内部に保存されている秘密鍵を盗むという攻撃がありましたが(https://www.hackster.io/news/kraken-security-labs-can-now-voltage-glitch-trezor-wallet-cryptocurrency-away-f1ee6cc76933)、この端子を使うことになります。これらの端子はマイコンから直接出ているので、塞いだとしてもほとんど意味はありません。

※他人に暗号資産を持っていることを言わない、物理的にハードウェアウォレットを盗まれないようにする、パスフレーズをかけておく、という対策の方が重要です。

IC1: USBの電圧が+5Vであるのに対して、マイコンが+3.3Vで動作するので、電圧を変換するICです。レギュレータと呼ぶこともあります。MCP1703というMicrochip Technology社製のチップです(https://ww1.microchip.com/downloads/en/DeviceDoc/22049f.pdf)。電源が来ているだけなので、このチップに細工しても何もできないでしょう。

Q2: マイコンにクロックを供給するための水晶振動子モジュールです。広く汎用的に使われている部品で、時計に入っているようなものです。

U1: Trezorの頭脳部分であるマイコンです。STM32F205REというSTMicroelectronics社の32bitマイコンが使用されています。

U3: UG-2864HSWEG01という有機ELディスプレイです。(https://cdn-shop.adafruit.com/datasheets/UG-2864HSWEG01.pdf) もし自分がバックドアを仕掛けるとしたら、このディスプレイが候補になります。それなりに液晶は体積をとっていますし、コントローラチップもそこそこの大きさセットアップ時にシードフレーズを表示するフェーズがあるので、これを利用します。表示した内容を内部メモリに保存しておき後でハードウェアウォレットごと盗み出すか、無線でどこかに送信するような方法が考えられます。

Trezor Model T

次は新しいモデルであるTrezor Model Tを見ていきます。(https://github.com/trezor/trezor-hardware/blob/master/electronics/trezor_model_t/bom.txt)

L: インダクタと呼ばれる部品でコイルのことです。電源を安定化させたり、高い電圧を作り出すために使われます。電気回路の基本的な部品です。

IC1: MIC803というMicrochip Technology社製のICです。電源電圧をモニタして、規定の電圧以下であればマイコンをリセットするためのスイッチです。

IC2: STM32F427VIT6 マイコンです。Model Oneよりも高性能なマイコンになっています。

IC5: Texas Instruments社製のTPS61043というICで、ディスプレイのLEDを駆動するためのICです。

IC6: トレックス・セミコンダクターという日本企業が作っているXC6210B332PRという電源ICです。USBの電圧をマイコンが駆動する電圧に変換します。

K3: SDカードスロットです。

その他はTrezor Oneのものと概ね似たような構成になっています。Trezor Model Tは部品点数が106点とTrezor Oneの23点より大幅に増えています。SDカードスロット関連の部品が増えていることもありますが、特に電源周りには気を使っていることが一番の理由のようです。

Coldcard Mk4

こちら(https://github.com/Coldcard/firmware/tree/master/hardware)のbom-mark4b.xlsxに入っています。

U1: STM32L4S5VIT6というSTMicroelectronics社のマイコンです。TrezorがFシリーズを使っているのに対しColdcardは低消費電力なLシリーズを使っています。さらにSTM32L4S5は暗号に関する演算のアクセラレータを搭載しています。

U2: STMicroelectronics社のNFC/RFID用のIC(ST25DV54KC)です。

U2X: BOM上はPNP(トランジスタ)と書いてありますが、回路図を見ると、DUAL FOOTPRINTと書かれています。NFC/RFID用のICは複数のパッケージが提供されており、部品の供給状態によってどちらも使えるように、基板上にはんだ付けようの端子(フットプリント)だけ用意されています。

U3: 電源IC(AP7361-33FGE)です。

U3X: こちらも電源IC用のフットプリントで、AP7361-33FGEの代替部品を使う場合に使用します。

U4/U5: セキュリティチップ(ATECC608B, Microchip Technology/DS28C36BQ+T, Maxim)です。Mk4では2種類のセキュリティチップを搭載しているというのが一つの特徴です。

U7: 外部メモリ(64MB)です。PSRAMですので、電源を切ると消去されるメモリです。マイコンのRAMが640kBなのでおそらく不足しているのでしょう。

抵抗やコンデンサは多くのサプライヤーから供給されているので代替部品が使えますが、ICは同じ機能のものでも仕様やピンの配置が異なることが多く、代わりが効かないことがほとんどです。Coldcard Mk4は2022年にリリースされています。COVID-19の影響で半導体不足が続いたため、リスクヘッジのために複数のICでも同様に動作するように設計されいたようです。

Coldcardは外装が半透明なので、ロットが異なるものを比較してみると異なるICが実装されているかもしれません。

まとめ

今回はTrezorとColdcardのBOMからそれぞれのハードウェアウォレットの特徴を見てみました。設計の思想が伺い知ることができました。部品の役割がわかることで、安心して使えるという面もあると思います。

リクエストがあればその他のハードウェアウォレットに限らずオープンソースのハードウェアについて解説しますのでご連絡いただければ幸いです。