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

前々回と前回はオープンソースのハードウェアウォレットのColdcard (https://coldcard.com/) のハードウェアについて解析してきました。オープンソースのハードウェアウォレットでありながらATECC608Aというセキュアチップを搭載しています。今回はそのカスタマイズ版であるATECC608A-TNGTLSというチップが搭載されたM5Stack(マイコンモジュール)用のモジュールを入手しましたので報告します。

ATECC608A(-TNGTLS)とは?

ATCC608AはMicrochip Technologyのチップです。MicrochipといえばPICマイコンで有名なアメリカの会社です。2016年にはAtmelというArduinoに搭載されているAVRマイコンを製造している会社を買収しました。PICもAVRもどちらも非常にポピュラーなマイコンで様々な電子機器の制御に使われていますし,アマチュアの電子工作でもよく採用されます。

ATCC608AはIoT機器用のセキュアチップでチップ内に安全に秘密鍵を保存しつつ,署名ができるものです。SHA256といったハッシュ計算を行うための機能や,乱数発生器も内蔵しています。実はクレジットカードやSIMカードなどのICカード(金色の端子が出ているやつ)にも使われているものと同タイプで,身近に使われています。そもそも製品仕様が詳細に公開されていないので市場から購入することができる製品は少ない中で,ATCC608Aは誰でも購入できるものになっています。ただし,仕様はMicrochip社と秘密保持契約を結ばないと開示してくれませんので,購入しても使うのは難しいでしょう。

ATCC608Aそのものは最大で16個の鍵,証明書,データをセキュアに保存できる領域があり(もちろん耐タンパー性があり,一度書き込んでロックしたら取り出すのはほぼ不可能),楕円曲線暗号が使えます。SHA256やHMACといったハッシュをハードウェアでサポートしているので,マイコン側のリソースを割かずに済みます。共通鍵暗号のAES-128もサポートしています。乱数発生器やカウンタなども内蔵しています。

今回入手したATCC608A-TNGTLSはColdcardに搭載されているATCC608Aとは異なり,すでにIoT機器がクラウドサービスとセキュアな通信ができるように設定等が書き込まれたものです。もちろん用途は特定されるものの開発や製品の製造がしやすくなっています。具体的には秘密鍵がすでにセットアップされた状態で,Microchip社より秘密鍵と証明書も提供されるようです。通常,チップメーカーにこのようなカスタマイズをしてもらうためには10万個程度の単位で購入する必要があるのですが,ATCC608A-TNGTLSは10個単位で購入ができます。

このATCC608A-TNGTLSをコネクタを取り付けて箱にいれたものが今回入手したM5Stack用モジュールです(Fig 1)。本当はColdcardに搭載されているATCC608Aを試したかったのですが,手に入ったATCC608A-TNGTLSをいじってみましたので報告します。(楕円曲線暗号まで使ってみたかったのですが今回は乱数発生とハッシュまでです。)

Fig 1

早速分解してみる

まずは早速分解してみました(Fig 2)。ネジ1本で固定されているだけなのでかんたんに基板にアクセスできます。8本足のICがATCC608A-TNGTLSです。クレジットカードのICチップもよく見ると端子が8本ありますね。他に基板に乗っている部品としてATCC608A-TNGTLS用の電圧を供給するレギュレータというICとマイコンと接続するためのコネクタが取り付けられています。

Fig 2

乱数発生器を試してみる

Sparkfunが出しているArduino用のライブラリ(https://github.com/.../SparkFun_ATECCX08a_Arduino_Library/)がM5Stack用に使えるので試してみました。M5Stackを接続し,PC経由でM5StackにATCC608A-TNGTLSと通信するためのファームウェアを書き込みます。

まずは乱数発生です。32バイトほど出力してみました。大量に出力しないと評価はできませんが,それっぽいものが出ています。

931e 5517 113b 01e5 f208 46fb c703 3aee a37f a22d 08d9 b2ce 64b6 5e05 6fcf 7ce7

SHA256ハッシュ関数を試してみる

次にハッシュ関数を試してみます。ビットコインでおなじみのSHA256です。ついでにチップの情報も表示させています。デバイス固有のシリアルナンバーが刻まれていますし,設定やOTP (One Time Programmable; 一度だけ書き込める)領域はすでにロックされてしまっています。これらの情報にはセキュアエレメントの外からアクセスするのはほぼ不可能です。

内蔵されたSHA256ハッシュ関数も試してみます。”Hello, AndGo!”という13バイトの情報のハッシュ値を計算します。手元のPCを使って計算すると完全に等しいハッシュ値が計算されていることが分かります。

Serial Number: 0123B0669E0D948801
Rev Number: 00006003
Config Zone: Locked
Data/OTP Zone: Locked
Data Slot 0: NOT Locked

Input message: Hello, AndGo!
48 65 6c 6c 6f 2c 20 41 6e 64 47 6f 21
Size: 13
Hash: 237664cb898618c5db426a8cfa35c17236f24ab23374d5b0d58d5723a2bfc6b8

% cat message.txt
Hello, AndGo!%

% openssl dgst -sha256 message.txt
SHA256(message.txt)= 237664cb898618c5db426a8cfa35c17236f24ab23374d5b0d58d5723a2bfc6b8

さいごに

まだ種類は少ないもののセキュアエレメントが個人でも使えるようになったことで,ハードウェアウォレットはもちろん今後様々なアプリケーションが出てくることが期待されます。セキュアエレメントはビットコインが生まれる2009年以前にも存在していましたが,ハードウェアウォレットのような使い方がされるとは誰も予想していなかったはずです。このようにアプリケーションが広がることで,オープンソースハードウェアのようなプロジェクトでも採用できるようなセキュリティチップ製品の選択肢も広がるのではないでしょうか。