こんにちは。AndGoのハードウェア担当の片山です。毎週水曜日はAndGoのエンジニアが交代で技術に関する記事を皆様にお送りしています。
前回(2021.10.20)はハードウェアウォレットSecuX V20を入手し分解をしました。SecuX V20にはLedger Nano S/Xもと同様にセキュアエレメントが搭載されていて高いセキュリティを謳っています。今回はセキュアエレメントについての解説をしつつ,セキュアエレメントとマイコン間の通信を覗いてみたので,レポートしていきます。
セキュアエレメントとは?
ハードウェアウォレットは生成した秘密鍵で電子署名をする装置です(Fig. 1)。通常使用している範囲内では秘密鍵はハードウェアウォレットの外に出てくることはないので,電子署名をできるのは世界でそのハードウェアウォレットだけということが保証されます。Trezorのハードウェアウォレットは汎用的なマイコンのフラッシュメモリの中に秘密鍵を保存しています。Trezorに使われているマイコンはある設定をすることでフラッシュメモリの内容を正規の方法(デバックポートを使った方法)では取り出すことができないないことになっています。しかしながら,絶対に秘密鍵を取り出すことができないかというとそのようなことはなく,マイコンの蓋をあけて顕微鏡とプローブを使えば,直接フラッシュメモリの内容にアクセスできてしまいます。もちろん,それなりの専門知識と設備が必要なので,多額の費用をかければの話です。
一方でセキュアエレメントはフラッシュメモリの構造を複雑にするなどして,直接フラッシュメモリの無いようにアクセスすることを難しくしたものになっています。ただし,秘密鍵の保管の他は,電子署名や乱数生成など,暗号技術に特化した機能しか入っていないため,汎用マイコンのような複雑なことはできません。さらに,セキュアエレメントはドキュメントは公開されていませんし,設計や製造工程なども非常に厳重に管理されています。
実はクレジットカード等のICチップも中身はセキュアエレメントそのものです(Fig. 2)。カード類といえば磁気ストライプもついていることがあります。磁気ストライプは磁性体のNとSで情報を記録しているため,簡単に情報を読み書きできてしまいますので,偽造も簡単にできてしまいます。ICチップの場合には秘密鍵が中に入っていて,その秘密鍵を使って送られてきたデータに対して電子署名することで,正当性を証明します。もちろん秘密鍵はそう簡単には取り出すことができないので,偽造することはほぼ不可能です。
SecuX V20のマイコン・セキュアエレメント間の通信
ハードウェアウォレットを機能させるのはセキュアエレメントだけでは不十分で,PCやスマートフォンなどとの通信,ディスプレイへの表示,UIの処理,他さまざまな制御や演算などをするのはマイコンです。マイコンからは必要なときにセキュアエレメントに司令を送ってその機能を利用します。秘密鍵の生成や保存,公開鍵の生成,署名などのときにはマイコンとセキュアエレメントが通信をするはずです。今回の記事では実際にこのような通信が行われているのかを見ていきます。(通信内容の解析については行いません。)
マイコンとセキュアエレメントのような周辺IC間の通信には一般的なプロトコルがいくつかありますが,前回の分解記事でご紹介したように通信のための導線が4本(それに加えて電源とグラウンドで計6本)あるのでSPIという通信方式だという検討をつけていました。SPIというのはSerial Peripheral Interfaceの略で,身近なものでは少し昔のSDカードはSPIでデータを読み書きすることができます。4本の通信線にはCS,CLK,MOSI,MISOという名前がついています。CS (cable select)はマイコン側から周辺ICに対して「今から君の出番ですよ」という合図を送るためのものです。CLKは通信の同期をとるためのクロックで,通信の際に数MHz程度のON/OFFの信号が送られます。MOSI (Master-out Slave-in)はマイコンから周辺ICへデータを送る通信線,MISO (Master-in Slave-out) は周辺ICからマイコンにデータを送る線です。