7M4MON
2020年に 『RFワールド No.52』へ掲載された記事
「多機能計測器“Analog Discovery 2”をGNU Radioで使う」の「第5章GRCで作る125 kHz帯RFIDタグ・エミュレータ」
の要約・再編集版です。
技術的詳細については記事をご参照ください。

まずは通信波形を観測します。
USBリーダーとタグの間にコイルを配置し、Analog Discovery 2で波形を見ます。

観測してみると125kHzの搬送波が出ており、タグを近づけると振幅が周期的に変化していることが分かりました。
この振幅変化を確認すると、
であることが推測できます。
ここで面白いのが、タグ自身は電波を送信しているわけではないことです。
電力を消費する量を変化させることで、読み取り側から見ると振幅が変化しているように見えます。
これを「ハイカレント状態」と呼びます。
記録した波形をGNU Radioへ入力し、
という流れで処理しました。
EM4100はマンチェスタ符号化なので、そのまま0/1にはなりません。
クロック位置を推定しながら同期を取る必要があります。クロック再生等の技術的詳細についてはRFワールド No.52をご参照ください。
GRCのデコーダープログラムはこのリポジトリで公開しています。
デコードだけでは面白くないので、次は任意IDの生成です。
EM4100は
という構造になっています。
40bitのIDからこれらを組み立て、マンチェスタ符号化して送信用データを生成しました。
プログラムはこちらのリポジトリで公開しました。
自作した回路で搬送波負荷を切り替え、タグのハイカレント状態を模擬します。
そしてAnalog Discovery 2のPattern Generatorから生成したビット列を出力すると……
カードリーダーに、自分で生成したIDが表示されました。
「ただ記録して再生する」だけでなく、信号構造を理解して再構築できた瞬間はかなり面白かったです。
本記事は、RFIDの信号処理や低周波無線通信の仕組みを学ぶことを目的とした技術実験の記録です。
他人のカードやタグの無断解析、複製、なりすまし、または入退室管理システム等への不正利用を目的とするものではありません。
Arduinoを使ってスタンドアローンで動作する装置として実装したものは、以下のリポジトリで公開しています。