MIWAのノンタッチキーシステムを考察する 〜李下に冠を正さず〜

                                                       2019/07/15 7M4MON



1.はじめに

MIWAのNTUシリーズのカタログによると、使用周波数は
送信:134.2kHz/受信:123.2kHz・134.2kHz(2周波FSK)
だそうです。



Wikipedia(英語)を参照すると、ISO 11784 & 11785 の LF帯RFIDタグ Half Duplex (HDX) 方式と似ています。
また、データ(鍵)違い数は 約18 × 10^18 だそうなので、データ長は 64bitと推察されます。

これら条件から、●●社のデバイスを使用していると推理しました。
●●社のTranseiver ICは評価ボードもあるようなのですが、面白くないのでIC単体を海外から取り寄せました。約 1.5 USDでした。
なお、IC単体を国内で販売しているところはありませんでした。

2.受信

Transeiver ICのデータシートおよびアプリケーションノートに従って読み取り装置を制作しました。



アンテナのコイルはインダクタンスが指定されていますので、LCRメーターで測定しながら手巻きで制作しました。
Transeiver ICは読み取り結果を 15625bps の UARTで通知してきます。
それを液晶に表示したり、EEPROMに保存したり別のUARTでPCに送信したりしています。
手持ちのノンタッチキーを近づけると、64bitのIDが表示され、考えが正しいことが分かりました。


3.送信


送信は 123.2kHzと134.2kHz を 0,1に応じて16サイクルずつ出力する必要があります。
Arduino Nano単体で送信とデータのロードやCRC計算を同時に行うのは厳しいので、送信専用で ATtiny85 を追加しました。
最初は関数のオーバーヘッドや条件分岐でのクロック消費を嫌ってNOPをべた書きしていたのですが、
NOPが多すぎてギリギリROMに入らなかったので、厳密に消費クロックを測定して周波数を調整しました。
また、同様の理由でポートの読み取り&書き込みはレジスタを直接操作しています。
メインCPUとトランスミッタ間はCTS/RTSを模したハンドシェイクで同期をとっています。

トランスミッタのドライバは、MagSpooferで使用したTC4424を使用しました。
送受信で同じアンテナコイルを使用しますので何らかの方法で切り替える必要があるのですが、
今回は消費電流を重視してラッチリレー[EA2-5TNAG] を採用しました。

応答はリーダーからの電力供給バーストに同期して送出する必要があります。
そこでバースト信号を増幅&検波してマイコンに入力する方式を取りました。

読み取り装置に向かって送信すると、読み取り装置に任意のIDを表示させることができました。


4.その他

MagSpoofer, IDmSpooferに続く鍵系のなりすましハックでした。
これはセキュリティ研究に対する純粋な技術的興味から行ったもので、どこかの鍵を開ける意図はありません。
ちなみに、GOALのキーは全く反応しませんでした。