はじめに
いま住んでいる集合住宅にはMIWAの「ノンタッチキー」が導入されています。 これは外から帰ってきたとき、鍵を(鍵穴に挿さず)リーダーにかざすだけでオートロックが解錠できるシステムです。
ここで気になるのは「ノンタッチキー」の中身にはどんなデータが入っているのか?リーダーとは何をやりとりしているのか?ということです。 そこで本稿では、これらの内容を調査しまとめます。
最初にオートロックに設置されたリーダーとノンタッチキー間の通信を観測しようとしましたが、なかなかうまくいきません。 そこで別途リーダーを購入し、まずノンタッチキーのデータを読み取れることを確認しました。 この上で実験を進めたところ、最終的にはオートロックのリーダーからの信号を観測することにも成功しています。
ノンタッチキーの概要
ノンタッチキーの概要を述べていきます。 いま手元にあるのは「NTU・T2RK」というタイプの鍵(下図左)です。 この中にはR-
と数字が書かれた部品が入っていましたが、これを型番とみなしてGoogle検索しても関係する情報は得られませんでした。
NTU・T2RK | 「NTU・T2RK」内の部品 |
そこで「NTU・T2RK」の仕様を調べます。 美和ロック株式会社のカタログによると仕様は次のとおりです。
「NTU・T2RK」の仕様(美和ロック株式会社「VERSA Access Controller」のカタログより引用)
「使用周波数 123.2KHz、134.2KHz」というのが特徴的ですね。 また、「データ(鍵)違い数」より のため少なくとも鍵用として64bitのデータが存在し、リーダとやり取りされていると思われます。
この仕様を基に検索したところ、次のページが見つかりました。 リンク先では「●●社」のICを利用してノンタッチキーのID (64bit) を読み取り、またマイコンから任意IDを送信し読み取り装置で表示させることに成功しています。
これは真似したい。 おそらく2文字の「●●社」がどこかは不明ですが、このICを使えばノンタッチキーのIDが読み取れそうです。
TIRISについて
ところで、RFIDのシステムとしてTexas Instruments (TI) 社の「TIRIS」を見つけました。 このシステムではリーダーとトランスポンダ(タグ)が存在し、リーダー側は134.2kHzで電力とコマンドを送信し、トランスポンダ側はそれに対するレスポンスをLOW(0)ビットなら134.2kHz、HIGH(1)ビットなら123kHzの2値FSKで送信します。 う~ん、どこかで見たことがあるような周波数を使っていますね。
リーダー用のICとしてはTMS3705があり、次図のような周辺回路や制御用のソフトウェアを作ればリーダーとして動かせます。 そのほか完成品のリーダー(評価キット)としてMRD2EVMとその制御用ソフトウェアも用意されています。
TMS3705と周辺回路(アプリケーションノートSCBA020Aより引用)
トランスポンダはいくつか種類があり、例えばReadOnlyで64bit分の識別情報を返すものもあれば、ReadWrite可でページ(アドレス)の概念を持ちリーダーから指定されたページのデータを読み書きできるなどのトランスポンダもあるようです。
このシステムのカタログやデータシートを読む限り、少なくとも1996年から存在するシステムのようで結構昔からあります。 この間改訂やリブランディングが行われたのか「TI-RFid (LF)」や「TI RI-TRP」と呼ばれたり、 特定用途(動物個体識別)では規格が策定されたのか「ISO 11784/11785 (HDX)」と呼ばれたりもするようです。 どこまでをTIRISと呼んで良いのか?そもそもいまもTIRISという名称か?というのは正直微妙ですが、ここでは「なんとなくTIのRFIDで、134.2kHzを使うもの」をTIRISと呼ぶことにします。
以下ではTIRISにおけるトランスポンダの読み取りと書き込みで利用するコマンドとレスポンスをTIのドキュメントから調査し、その一部をまとめます。
読み取り
Charge Only Read
ページの概念を持たず、単純に識別情報を返すトランスポンダ向けのコマンドです。 リーダー側では、次図のように50ms間電力を送信すると、トランスポンダ側がそれを充電し20msの間にレスポンスを返してくるので読みます。
Charge Only Readのリクエスト(SCBU049より引用)
トランスポンダ側で返すリクエストの構成は次図のとおりです。
Charge Only Readのレスポンス(SCBU049より引用)
ここで、
- Prebitsは
0x0000
- StartとStopについてはReadOnlyトランスポンダでは
0x7E
、ReadWrite可なトランスポンダでは0xFE
- Data BCC (Block Check Character) はIdentification Data (64bit) のCRC16-CCITT (Kermit)
- End Bitsは少なくともReadOnlyトランスポンダでは
0x0000
、ReadWrite可なトランスポンダではIDENT. DATA
かも?(詳細不明。SCBU037より)
を表しています。
もしページの概念を持つトランスポンダにこのコマンドを送った場合は? 少なくとも「RI-TRP-DR2B」というトランスポンダを使った場合、1ページ目の内容を返します(SCBU053Aより)。 ただ、すべてのトランスポンダが同様かは不明です。 また、本来ページ指定読み込みでのレスポンスにはページアドレスも含まれており、ページを明示的に指定しないCharge Only Readで読んだ際のレスポンス形式がどうなるかは未確認です。
なお、この読み取りでTMS3705を直接叩く場合、RF Transmitterを操作するTXCTピンを介して、RF TransmitterのON前にMCW (Mode Control Write)というレジスタを操作する必要があります。 ただ、これはデフォルトの 0x00
で十分と思われ、もし本当にそれで良いなら単純にMCWの設定時間とPower Burstの時間分だけTXCTをONするだけで済みます。
General Read Page
ページの概念を持ったトランスポンダ向けのコマンドです。 Charge Only Readと同様にリーダー側が50ms間電力を送信し、その後Write Addressとして読み取りたいページのアドレスのデータを送信します(次図)。
General Read Pageのリクエスト(SCBU049より引用)
ここで、Write Addressは上位6bitがページ番号で、0は指定できず、上限はトランスポンダによって異なります。 また下位2bitはコマンドで特にReadの場合は0b00
(General Read)を指定します。 そして、次図のようにLSBからBitが0か1に応じてPPM (Pulse Position Modulation)1 でRF TransmitterをON/OFFします。
RF Transmitterの変調(SCBU052より引用)
このコマンドを受信できたトランスポンダ側では、次図のレスポンスを返します。
General Read Pageのレスポンス例1(SCBU049より引用)
Charge Only Readのときとほぼ同じですが、Read AddressとFBCC (Frame BCC)も付けてくるようです。 (画像はRead AddressとFBCCのbit数が反対になっている。) Read AddressはWrite Addressと似ていて、上位6bitはページ番号、下位2bitはステータスコードを表し0b00
(Read unlocked page)(または0b10
(Read locked page)も?)なら成功です。
また、トランスポンダによっては特定のページは読めなかったり、ページによってはIdentification Dataの意味が異なる場合もあるようです。 例えば、TMS37157では次図のレスポンスを返します。
General Read Pageのレスポンス例2(SWRS083Aより引用)
ちなみに、ページの概念を持たないトランスポンダにこのコマンドを送るとどうなるんでしょう? ドキュメントは見つけられませんでしたが、後述する実験で試したところCharge Only Readの場合と同じレスポンスが返ってきました。 しかし、すべてのトランスポンダで同様かはやっぱり不明です。
書き込み
読み取りと来たら、次は書き込みです。 ただ、これについては手元で試していません。 将来試す場合に備え、ドキュメントを確認して使いそうなコマンドだけをまとめます。
Program/Config
(おそらく)ページの概念を持たないトランスポンダ向けの書き込みコマンドを次図に示します。
Program/Configurationのリクエスト(SCBU049より引用)
Write Keyword, Write Password, Write Data, Write Frameのデータを送信し、さらにPB II (Power Burst 2)として15ms間電力を送信、そのあと(Verifyのため?)トランスポンダからレスポンスが来るので読んでいます。
Write DataはIdentification Dataに相当する部分でしょう。 80bitとなっているのでBCCも込みで書き込んでいるものと思われます。
Write Keyword, Write Passwordについては、SCBU049とSCBU052を読む限りそれぞれ0xBB
、0xEB
と固定らしいです。 本当かな……?最悪違ってもブルートフォースは出来そうです。 1回の実行におおむね309ms必要、TMS3705などリーダーICの初期化に数msとして余裕をみて1回350msとして、回コマンドを流すのに必要な時間は6時間22分くらいなので。 そして、詳細は後述しますがPower Burstの時間は短縮可能なようで、もう少し短い時間でも試行可能かも知れません。 一方で、「(おそらく100ms間隔でコマンドを実行する際に)トランスポンダを50ms以上充電すると加熱する」(SCBA024)ともあり、もし間隔を空けず連続してコマンドを発行すると過熱する?という懸念もあります。 結局間隔を空けてコマンドを流すことになり、ブルートフォースに必要な時間は伸びるかも知れません。
Write Frameについては、0x3000
で固定の説(SCBU052より)またはFrame BCC(SCBU049に記載されている他コマンドより)という説があります。 Write Keyword, Write Passwordと合わせてこれも不明なら、分のブルートフォースは約50年かかるので現実的ではありません。 もし物理的に異なるトランスポンダでもWrite KeywordとWrite Passwordが共通で、リーダーとトランスポンダを50個用意でき、どれか1つに書き込めれば良いという条件で並列で進めれば1年以内には終わりそうですが……。
Program Page
次はページの概念を持つトランスポンダ向けのコマンドです。 さんざん「ページの概念を持つ」「持たない」と冗長な表現をしてきましたが、どうやら持つ側のトランスポンダは “MPT (Multi Page Transponder)” と呼ばれるようだとこの辺で気付きました。 持たざる側のトランスポンダは単に “R/W Transponder” とか。 そんなMPTで書き込みを行うコマンドは次図のとおりです。
Program Pageのリクエスト(SCBU049より引用)
読み取りの「General Read Page」と、書き込みの「Program/Configuration」を組み合わせたような感じですね。 Write Addressの下位2bitは0b01
(Program Page)に変更となります。 レスポンスのRead Address下位2bitは0b01
(Programming Done) なら成功です。
他のコマンド
ほかにもLock Pageコマンドや、“Secure”なトランスポンダで利用される(SCBU020より)Selective Read/Program/Lock Pageコマンド、またもしかしたらトランスポンダの種別を返すコマンド?があるかも知れませんがその辺は試す機会が無いので割愛します。
なお、もしTIRISに興味のある方がいれば、特に下記のドキュメントは確認することをおすすめします。
- TMS3705データシート SCBS881F
- Microreader RI-STU-MRD2 Reference Guide SCBU049
- Series 2000 Reader System Reference Manual SCBU052
- (利用するトランスポンダのデータシート)
脱線: イモビライザーの話
TIRISについて調査を進めると、自動車関連の情報をよく見かけました。 というのもTIRISベースと思われるシステムがイモビライザー2として割と採用されているようです3。 そういえば、TMS3705はデータシートに「車載要件に合わせて設計」とあったり、MCUとやり取りするUARTのBaud Rateが15625
というなんとも微妙な値を利用していますが、これはCANで使われる値っぽいのでそこからきていそうな気がします。
イモビライザーに使われるトランスポンダは特殊なようで、詳細なデータシートは公開されていません。 製品の型番としては「TMS37145」などがあるようですが、たまにTIのフォーラムでそれっぽい質問があってもNDAがある旨の回答4が付けられます。 それでもなんとか調べた範囲だと、次のタイプのトランスポンダがあることが分かってきました。
- Texas 4C
- 基本的なトランスポンダ(と思われる)
- Texas Crypto系
- Texas 4Dとも呼ばれている(と思われる)
- DST40やDST80という仕組みを備える
- (DST AES、DST+もあるらしいが、もしかしたらこれは「Texas 4E」と呼ばれるかも知れない)
- (TI以外のトランスポンダなど)
- NXP (Philips) のHITAGやHITAG2など
- 見た目はTexas 4CやTexas 4Dと見分けが付かない
- (イモビライザーのトランスポンダとは違いそうだが、HID Brick Tagも同じような見た目をしている)
イモビライザーのトランスポンダは種類が多い上に同じような見た目で、“ID46” や “ID67”、“4D72”といったほとんど隠語のような呼び方をされているので難しすぎる5 6。 といっても、Texas 4DのDST (Digital Signature Transponder)自体については割と知られているようで、Wikipediaの記事としても存在します。 いずれもリーダー側からチャレンジを送信し、トランスポンダがチャレンジを暗号化したレスポンスを返送する方式のようです。 L.Woutersらの研究7によると実装上の不備で誰でもアクセス可能な (General Read Page?) シリアルキーを基に暗号キーが作成されていたという話もありました。 これを利用してか、または出版されていない他の方法があるのか、はたまた詐欺か(自分が勘違いしているのか)DST80のトランスポンダが複製出来ると謳うツールも販売されています。
DSTはチャレンジ&レスポンス?でもそんなコマンド、これまでのTIのデータシートには一言も書かれていn……と思ったら、SPNA147には次図に示すそれっぽいフローがありました。 まぁこれだけじゃ分からないですね。おわり。
チャレンジ&レスポンスの流れと思われる資料
ノンタッチキー
話を戻してノンタッチキーです。 TIRISについて長々と書きましたが、もしノンタッチキーがTIRISでは無かったらここまで長々と書いていないわけでそういうことです。
読み取り
ではノンタッチキーのデータを読み取ります。 紆余曲折あってTMS3705を使おうとしましたが、円安もあってかMouserやDigiKeyといった大手ではICのみで1300円以上します。 AliExpressの一番安い発送方法でも送料込み1000円くらいします。 その上で届いたら周辺回路を組むことが必要です。1000円かけて……?届くまで1~2ヶ月待った上で……?ちょっと考え直しましょう。
ちなみにTI純正の評価キット「MRD2EVM」は2万円ほど、TIRISを含めたRFID全般が読めそうな「Proxmark 3 RDV 4」は5万円ほどと手が出ません。 ほかにもRFIDlerは過去には1.5万円ほどで入手できたようですが現在は品切れ、Flipper ZeroはそもそもTIRISに対応していなさそうです。 たまにヤフオクやメルカリでMIWAの制御装置から取り出された「ノンタッチキー登録器」が出品されているようですが、制御方法の調査から始める必要があり手がかかります。
次に示すリンク先(およびその元ネタのElektorという雑誌)では自前でTIRISリーダーを製作していますが、これはハードルが高すぎる。
さらに、次に示すリンク先を見つけました。 この記事ではトヨタ車のキースロットとして利用される部品にTMS3705が含まれているとして、一種のTIRISリーダーとして利用しています。
この記事内で利用している「RI-24KTY (626399-000)」8は2000年代のプリウスやクラウンで利用されていたようで、ヤフオクなどでは送料込み1000円程度から入手できます。 ということで早速入手しました(次図)。イモビライザーの話は伏線だったわけです。
RI-24KTY (626399-000) と満身創痍スマートキーくん
必ずしも同じユニットを使う必要はなかったのですが、「スマートキー」「キーシリンダー」あたりのワードで引っ掛ける限りではこの部品が一番流通しており安いようです。 下図左のように内部を開けると、アンテナと、シルク印刷でVC5
(VCC5Vの意味と思われる)やGND
、TXCT
、CODE
といったピンアサインが書かれた基板が見えます9。 下図右はピンアサインが分かっても自動車用のコネクタなんて持っていないよ~トホホ……と思いつつも普通にQIコネクタが刺さったのでArduinoと繋いでいる様子です。
RI-24KTY (626399-000) の内部 | Arduinoとの接続 |
前述のブログと、これまでに調べたTIRISの情報を基にこのユニットをArduinoで制御するコードを書きます。 Arduinoのコードはほぼ先のブログと一緒になってしまったので示しませんが、ノンタッチキーに対してCharge Only Readコマンドを実行したところ下記の結果を得ました(一部マスク)。
# ノンタッチキー1の読み取り
doChargeOnlyRead
>r7EXXXXxxxx00000000cccc7E000000000000
doChargeOnlyRead done
CRC (BCC) はcccc
の部分で、別途計算すると正しいことが確認できました。 StartとStopが0x7E
とのことで、ReadOnlyトランスポンダと思われます。 また、Identification Dataの下位32bitがすべて0になっています。 偶然にしては奇跡的すぎで、もし仮にこれを鍵データとして使っていると実質的な情報量としては32bit分しか無いのでは……。
さらに、自分が所有するノンタッチキーはもう一つスペアキーがあります。 これも読んでみましょう。
# ノンタッチキー2の読み取り
doChargeOnlyRead
>r7EYYYYxxxx00000000cccc7E000000000000
doChargeOnlyRead done
下位32bitがすべて0なのは相変わらず、またxxxx
の部分も変わっていませんでした。 もちろんCRC部分は変わっていましたがこれは計算で求められるので、2つのノンタッチキーの間における実質的な差分はXXXX
とYYYY
の16bit分となります。
共通のxxxx
は部屋番号?と推測しましたが違いそうです。 冒頭で示したノンタッチキーの仕様では「識別データ 固有(製造時固定)」とされており、これはTI側でトランスポンダを製造する際に決定されると思われる、MIWA側で「ここに部屋番号書いて!」とかは指定できないでしょう。
実は、これら2つの異なるノンタッチキーにあったトランスポンダに書かれた「R-
と数字」は同じです。 R-
に関してはReadOnlyを表していると思われます10。 数字部分とxxxx
は一致しないですが、もしともに何らかの製造に関する情報(製造週や製造ロットなど)を表していて、XXXX
やYYYY
の部分はシリアルナンバーで一意とか無いかな11……という気になってきます。
ランダムでは無いようなので、製造時期とMIWAに納品されたトランスポンダの情報が手に入ればブルートフォースする際の探索空間が減りそうです。 現実的には本当に製造時期からデータが予測できるかは不明、またMIWAにどのトランスポンダが納品されるかも不明ではあるものの、例えば新築マンションの入居時など(同じ製造時期のトランスポンダが入った)ノンタッチキーが多数導入されるとして、同じマンションの住人ならXXXX
やYYYY
の16bit分のみのブルートフォースで他の部屋用に設定されたノンタッチキーのデータを推測できるのでは? これを利用して、(このデータがそのままオートロックの解錠に使われるとして)退去後に自分の鍵が失効した後でも、現居住者になりすましてオートロックが通れてしまうとか……?
もっとも、ここまでの推測は自分が持つノンタッチキー2つだけに基づいたもので、まさか他の住人に対して「鍵のデータ読んでも良いですか?」と尋ねることもできず、詳細は分かりません。 リーダーの読み取り範囲もせいぜい20mmくらいで、例えばすれ違いざまに読んだり、玄関ドアの室内側にマグネットか何かで鍵を引っ掛けている住人が居ても外側から読み取ることは難しいでしょう。
なお、読み取りコマンドとしては「General Read Page」も試しましたが、どのページに対しても「Charge Only Read」と同じ内容を返します。 RI-24KTY(の中にあるTMS3705)の叩き方が悪い?とも思いましたが、RI-24KTYに付属したスマートキーで試すとそれっぽいデータを返すので大丈夫そうです。
# スマートキーの読み取り
doGeneralReadPage
>W04>r7E34D50ABFA8B40698F1000000000000 -> ReadAddr:0x06 -> 0b000001 10
>W08>r7E34D50ABFA8B40AF43B00000000 -> ReadAddr:0x0A -> 0b000010 10
>W0C>r7E34D50ABFA8B40ED07D0000000000 -> ReadAddr:0x0E -> 0b000011 10
:
ということで、ノンタッチキーのトランスポンダはページの概念を持たないトランスポンダと推測されます。
Sniff
以上でノンタッチキーのデータを読み取ることができました。 ただ、これがそのまま鍵のデータとして利用されているのでしょうか? もしかしたらDST80のような仕組みで、オートロックを解錠する際はリーダーとの間でチャレンジ&レスポンス認証が行われているかも知れません。 そこで、そのオートロックに設置されたリーダーとノンタッチキー(内のトランスポンダ)間の通信を観測して確認します。
通信を観測と言っても、いち住人がリーダーの内部やその先の制御装置にアクセスできるわけありません。触ったら逮捕! ここではリーダーとトランスポンダの間にアンテナを挟み込んで観測します。 ただ、先に述べておきますが、残念ながらトランスポンダ側から送信される信号は微弱すぎて観測できませんでした。 リーダー側から送信される信号は無事観測できたので、それが「Charge Only Read」や「General Read Page」など既知のものか、それともチャレンジを送っていそうかを確認します。
まずアンテナですが、134.2kHzに合わせたものを作ります。 TMS3705のアプリケーションノートにあったのは「440uHのコイルを作るために、直径45mmの芯に、長さ2.5mmの間で、線径0.18mmの銅線を、66回巻く」という設計(下図左)です。 このサイズに合わせた芯を3Dプリンタで作っても良かったのですが、偶然マスキングテープのサイズが直径45mm(下図右)だったのでこれに巻きました。
アンテナの例(SCBA020Aより引用) | 芯となったマスキングテープ |
手元にあった銅線は線径0.32mmのもので、これをTIの設計のまま巻くとインダクタンスが変わります。 (実はこのアンテナを作っていた時点では、RI-24KTYを知る前でTMS3705を単体で購入し周辺回路を組む可能性がありました。TMS3705でのアンテナは440uHという指定があり)インダクタンスを変えたくなかったため、Coil32 - Multilayer coil calculatorで計算し直します。 ただ、線径0.18mmと0.32mmmでそれほど巻数が変わるわけではなく、そもそも設計どおりに手巻きするのは難しいです。 結局、(LCメーターは持っていなかったため)クラップ回路で発振させ、その周波数からインダクタンスを計測しながら(銅線をもっと)まきますか、まきませんか確認しながら作りました12 13。
このアンテナ(とTIの設計に従って3.3nFのコンデンサ14)を過去に秋月で売られていた格安のオシロスコープに繋ぎRI-24KTYで作ったリーダーに近づけると、次図の結果を得ました。
アンテナからの信号
15usの間に2周期くらい、つまり1周期7.5usほどの信号が見えます。 周波数としては約133kHzなので、ちゃんとリーダーからの信号を拾えているようですね。 あとはこれをエントランスに持っていって調査……といきたいですがダメです。 見た目で想像がつくかも知れませんが、このオシロスコープのメモリ長はよわよわでこのサンプリングレートならせいぜい数十us分くらいしか見れません。 単純な「Charge Only Read」を観測しようとしても70ms分記録できるだけのメモリが必要で、これでは無理です。
そこで試したのはSDR機器です。 ここで使ったのは「RTL-SDR Blog V3」で、最低500kHzの信号を受信できます。 え、500kHz?この時点で雲行きが怪しいですが、実はそれ以下も受信できたりしないか、高調波を拾えないかと試してみました。 結果は、次図のとおりです。
Gqrxの画面 | inspectrumの画面(高調波にあたる部分) |
Gqrxの画面だと134kHz(上半分の赤い線)に合わせてもそれっぽい信号は見えません。 inspectrumの画面(高調波にあたる部分)はよく分かりませんでした。いかがでしたか?
SDR機器も無理だったので、次に試したのはロジアナです。 別に134kHzの信号を波形を保ったまま観測する必要はなく、リーダーからの信号が出ているか否かだけ見えればOK、「General Read Page」などで使われるPPMの復調のため、信号がONの時間とOFFの時間さえ分かれば良い15んじゃないでしょうか? 手元にある機器はUSB接続型の「ZEROPLUS LAP-C」で格安と言われる部類ですが、それでもちょっとした信号をちょっとした時間見ることはできます。
ということでこの機器でみようと、まず予備実験としてRI-24KTYで「General Read Page」を行った際の信号を半波整流しクランプ回路に通しました。 通った後の信号は次図のとおり、
ロジアナに入力される信号
そして実際にロジアナで見た結果の画面は次図のとおりです。
General Read Pageをロジアナで見た画面
約50ms間Power Burstが送られ、その後PPMで8bitのデータが送られる様子が見えます。 (ここでは1秒ごとに読み取る設定となっており、実際に1秒後は次の読み取りコマンドの信号も見えます。) データは多少toffHやtoffLの時間が想定とズレているものの、0010000
と読み解くことは可能です。 これはLSB Firstなので順番を逆にしてGeneral Read Pageの仕様にあてはめると、ページは1 (0b000001
)、コマンドはGeneral Read (0b00
)であることが分かります。
うまく観測できていそうですね。 では実際にオートロックのリーダーからの信号を確認しましょう。 機器は怪しまれないようバッグで隠し、人目に付かないように深夜に確認してきた16結果は次図のとおりです。
オートロックのリーダーからの信号
30ms間のPower Burstが100ms間隔で実施されているようです。 これはCharge Only Readっぽいですが……30ms間? 取りこぼしたかと思い何度か試しましたが同様でした。 もしかして30msになると特殊なコマンドになる?RI-24KTYでPower Burstを30ms間にしたCharge Only Readでノンタッチキーを読んでみたものの、50msのときとデータは変わりません。
まぁ30msでも読めるなら特に問題は……でもなぜ? 開発者が何か成果をアピールしないといけないときに(50msを30msに減らしたので)従来より40%電力を削減しました!省エネです!と苦し紛れに主張した結果? いえ、どうやらリーダーによっては読み取り時間の高速化を目的として大型のトランスポンダを使う場合に限り、Power Burstを最小15msまで短縮を認めているようで(Configuring an S2000 Reader via USB SCBA024より)、これっぽいです。 ということで、オートロックのリーダーは(Power Burstを30msにした)Charge Only Readで読み取っている、つまり「読み取り」の項目で示した64bitのデータを使って解錠を制御していることがわかりました。
なお、上記はトランスポンダ(ノンタッチキー)が存在しない状態で観測しています。 では存在する場合は?ということで観測し直しましたが、リーダーから送信される内容は同じでした。 ただ、トランスポンダの読み取り後、次の読み取りが開始されるまでの時間は必ずしも100msにはならないようです。 鍵データの照合を行っている分遅延しているのか、またはオートロックが解錠され自動ドアが開くまでの時間待っているのか、特定のモジュールを使っておりUARTで通信すると遅延がある17のかなどが考えられますが詳細は不明です。
制御装置が手に入ればREに挑戦したい気持ちはありますが、金額的にも入手経路的にも難しいでしょう。 実は全ビット0や1のデータを送れば解錠できるバックドア(ドアの解錠だけに)があったら面白いですが、その辺は分かりません。おわり。
他タイプのキー
さて、ここまで述べてきたノンタッチキーは「NTU・T2RK」というタイプでした。 このタイプのノンタッチキーは割と古いタイプで、いまとなっては廃盤、保守としても(直販では?)終了という状況らしいです。
では現行製品は?というと、相変わらずTIRISっぽい周波数を使うのもあれば、315MHz帯や、FeliCaを使う製品もあります。 後ろのほうはよく分かりませんが、TIRISっぽいやつならやっぱり「NTU・T2RK」と同じ感じで認証されているのでは? ただ、「NTU・T2RK」については複製できると謳う18業者がいる一方、現行製品については「複製できない」とされています。 これは例えばリーダー側でStartおよびStopが0x7E
でないと受け入れない設定になっているのか(トランスポンダの複製では回避できないがspooferでは回避される)、DST80など何らかのチャレンジ&レスポンスの機構があるのか、それとも単にトランスポンダのタイプが変わって業者が複製に使う機器が対応していないだけなのかは不明ですが、現行製品を持っていないので調べようがありません。おしり。
まとめ
ノンタッチキー「NTU・T2RK」のデータを読み、またオートロックのリーダーからの信号を観測した結果、このタイプのノンタッチキーに入っているトランスポンダはReadOnlyでページの概念を持たないタイプのTIRISトランスポンダであることを確認しました。 おそらく、“Texas 4C ReadOnly Transponder”と呼ばれるタイプであり、同種でReadWrite可能なトランスポンダを購入すれば複製もできることでしょう。
オートロックのリーダーは、ノンタッチキーのトランスポンダからCharge Only Readで64bit分のデータを読み取って解錠に利用します。 ただ、気になるのが今回試した範囲では下位32bitは0
であり実質的には上位32bit分の情報量しかないこと、 またその上位32bitも状況によっては実質16bit分しか変化しない可能性があることです。
オートロックのリーダーは100ms間隔でトランスポンダを読みに行くので、もし解錠を目的としてトランスポンダをエミュレーションして16bit分をブルートフォースするとしたら1時間50分程度で全パターンを試せます。 オートロックを解錠可能なトランスポンダが住戸数だけ登録されているとすれば、その分だけ解錠までの時間は短縮できるはずです。 例えば、100戸入居していて(トランスポンダのデータが一様に分布していれば)1分ちょっとでどこかの部屋のデータと一致し、オートロックが解錠されることが期待できます。
まぁまだ共用部なら……それに16bit分しか変化していないかもというのは杞憂でちゃんと32bit分変わっているかもしれません。 その場合、4億人くらいが住んでいるマンションでもない限りブルートフォースするのは非現実的です。 でもちょっと不安なので、同様の製品が専有部の玄関ドアには使われていないことを祈ります。おわり。
Footnotes
トランスポンダが使うFSKではありません。RF TransmitterがONしている間は134.2kHzの信号が飛び、OFFだと飛ばないため、PPMとOOKの組み合わせと言ったほうが正確かもしれません。 ↩
車にうとく、イモビライザー?まぁ名前くらいは……という状態でしたが、immobilize(動けなくさせる)、正規の手段を踏まずに複製した鍵ではエンジンを始動させないようにする仕組みらしいです。 ↩
ノンタッチキーを見た人が、自動車用のトランスポンダとの関連を指摘している場面もあります(Strange LF chip. 😱 - Support - Dangerous Things Forum) ↩
TMS37145: Detailed datasheet and PWM/PPT timing definition - Other wireless technologies forum - Other wireless - TI E2E support forums ↩
参考1 Transponder Generation - LSC | Complete Security Solutions - LSC Security Supplies ↩
Lennert Wouters, et al. “Dismantling DST80-based immobiliser systems.” IACR Transactions on Cryptographic Hardware and Embedded Systems 2020.2 (2020): 99-127. ↩
製造元は株式会社東海理化。城ヶ崎莉嘉さんの親戚かと思いましたが違いそうですね。 ↩
FCCに提出された資料でも確認できます。RI-24KTY Amplifier for Vehicle Immobilizer System Teardown Internal Photos Tokai Rika ↩
「Texas 4C」とかでググるとReadWrite可能なトランスポンダは
W-
から始まっているので。ちなみにB-
から始まるのは4Dっぽく、他にも145-
だったりS-
から始まるものもありそうです(参考: INT-Top marking - Other wireless technologies forum - Other wireless - TI E2E support forums) ↩そして例えば20個単位で出荷されるとすれば、 個の分は捨てられて流通しない可能性があり、ブルートフォースする場合はこの分外して良い……と考えましたが、16個分?これだと大したこと無いやつでした。 ↩
第九研究室だより:発振するぜを参考にしました。 ↩
皆空の中で… 測定器なしで空芯コイルのインダクタンスを調べるも参考にしました。 ↩
より ↩
ここまで書いて、それならロジアナよりも簡単な方法があったのでは?周波数を落としてサウンドカードに入力するとか……と思ってきました。 ↩
もちろん監視カメラには記録され、最低2人にも目撃されたと思います。でもいまのところ不審者情報としては出回っていません。 ↩
RI-STU-MRD2 continuous mode behavior - Other wireless technologies forum - Other wireless - TI E2E support forums ↩
ちなみに複製の様子を画像検索すると、機器の画面に “Texas” “4C” という文字列が出ている様子が見えます。 ↩