NFCタグのパック商品のページを開くと、「NFC 213」とか「NTAG215互換」とか、あるいは単に「1K NFCカード、全スマホ対応」と書いてあります。知りたいことは一つだけです。これは自分が考えている用途に使えるのか、ということ。ところが商品ページはそれに答えてくれません。書いた本人も知らないからです。
私は何年もかけてNFC.cool Toolsを作ってきました。このアプリがタップのたびに最初にやる仕事は、まさにその問いに答えることです。これは何のチップで、何ができるのか。識別コードだけで7社のおよそ60製品を認識しますが、そのどれもが、誰かがスマホにかざしてみたら商品ページの約束どおりに動かなかった、という経緯でリストに加わったものです。このガイドは、そのコードを書いていたときに私が欲しかった資料です。わざと長くしてあります。短い版がよければ、NFCタグ入門ガイドから始めてください。詳しい話はそこからこのガイドにリンクしています。
表に入る前に、結論を一文で書いておきます。最高のNFCタグというものはなく、用途に合ったチップがあるだけです。そして用途は3つのことで決まります。どれだけのデータを保存したいか、誰を締め出したいか、そして何で読み取れる必要があるか、です。
このガイドの使い方
このガイドの数値はすべて、メーカーのデータシート、AppleやGoogleのプラットフォーム資料、あるいは私自身のアプリのコードから取っています。出典は最後にまとめました。実際にチップを手元で試したものは「実機メモ」でそう書いています。試していないものも、そう明記します。珍しいチップの情報はデータシート由来で、データシートは約束であって、測定値ではありません。
ここに書いていないことが2つあります。初めてタグに書き込む手順(それは書き込みガイドにあります)と、NTAG 424 DNAの詳しい話です。後者には専用の記事があります。
NFCタグの物理的な正体
NFCタグは、3つのものを貼り合わせたものです。砂粒ほどの大きさのチップ、エッチングしたアルミや銅を数回巻いたアンテナ、そしてそれらを支える基材です。基材は紙のステッカーのこともあれば、PETインレイ、PVCカード、ガラスカプセルのこともあります。チップにはバッテリーがありません。電力はスマホから供給されます。
その仕組みは電磁誘導です。スマホのアンテナはコイルで、1秒間に1356万回向きが変わる磁界を生み出しています。その磁界の中に2つ目のコイルを持ち込むと、そこに電流が誘起されます。ワイヤレス充電器と同じ原理で、電力がほんのわずかなだけです。タグのチップはその誘導電流で動きます。データを送り返すときも、自分から何かを送信するわけではありません。アンテナにつないだ負荷をオンオフし、それをスマホのコイルが自分の磁界のごくわずかな変化として感じ取るのです。この仕掛けは負荷変調と呼ばれます。スマホがすべての仕事をし、タグが8セントで済むのはこのためです。
読み取り距離がこの程度なのも、同じ理由です。小さなコイルの磁界は距離の3乗で弱まるので、1センチで完璧に読めるタグも、10センチでは何も届きません。私はろうそくのようなものだと考えています。近ければその明かりで本が読めますが、部屋の反対側からではいくら目を凝らしても無駄です。NFC Forum自身の定義は「通常は最大2 cm」、Androidのドキュメントは「4 cm以下」、NXPのデータシートは「磁界強度とアンテナ形状により最大100 mm」としています。3つとも正しいのです。スマホで実際に体験するのは前の2つの数字で、100 mmは大きなリーダーと大きなアンテナを使ったときにチップが出せる性能です。
データ転送速度は控えめですが、それ以上は必要ないからです。Type AやType Bのタグは106 kbit/sで通信し、高速なチップは最初のハンドシェイクの後で212、424、848 kbit/sを取り決めます。FeliCaは212か424です。長距離向けのファミリーであるISO 15693はさらに遅く、通常モードで26.48 kbit/sです。スマホではなく、1メートル離れた倉庫のゲートから読まれるように設計されたためです。いずれにしても、NTAG216の888バイトを丸ごと読み出すのに1秒もかかりません。
| 規格 | 基本速度 | 高速モード | 返信方式 |
|---|---|---|---|
| ISO/IEC 14443 Type AおよびB | 106 kbit/s | 対応チップ(DESFire、Plus、NTAG 424 DNA)では212、424、848 kbit/s | 847.5 kHzのサブキャリアによる負荷変調 |
| FeliCa(JIS X 6319-4、ISO/IEC 18092) | 212 kbit/s | 424 kbit/s | 負荷変調 |
| ISO/IEC 15693 | 26.48 kbit/s(低速モードは6.62 kbit/s) | NXPの高速モードで53 kbit/s、ICODE 3は最大212 kbit/s | 423.75 kHzのサブキャリアによる負荷変調 |
略語だらけの世界:規格、Forumタイプ、NFCではないもの
商品ページはどれも、3つの命名体系を混ぜて使っています。無線部分を定めるISO規格、データの配置を定めるNFC Forumのタグタイプ、そしてメーカーの製品名です。ここでその地図を示します。
規格
| 規格 | 定めている内容 | NFC Forumでの名称 | チップの例 |
|---|---|---|---|
| ISO/IEC 14443 Type A(パート1から3) | 近接型カード、106 kbit/s、Type A変調、衝突防止、UID | NFC-A | NTAG、MIFARE Ultralight、MIFARE Classic、Topaz |
| ISO/IEC 14443 Type B | 同上。ただし変調方式が異なり、同じ意味でのUIDを持たない | NFC-B | ST SRI512、Calypsoの交通カード、多くのICパスポート |
| ISO/IEC 14443-4 | AまたはBの上で動く伝送プロトコル。ISO-DEPと呼ばれる | ISO-DEP | DESFire、NTAG 424 DNA、SL3のMIFARE Plus、銀行カード、パスポート |
| ISO/IEC 7816-4 | ISO-DEP上で使うコマンド言語(APDU)とファイルシステム | 上の行のすべて | |
| ISO/IEC 7816-6 | いくつかある内容の一つが、チップメーカーコードの登録簿 | UIDの先頭バイト | |
| ISO/IEC 15693 | 近傍型カード。適切なリーダーなら最大1メートル、8バイトのUID | NFC-V | ICODE、ST25TV、ST25DV、TI Tag-it、NTAG 5 |
| JIS X 6319-4 | ソニーのFeliCa | NFC-F | FeliCa Lite-S、Suica、Octopus |
| ISO/IEC 18092 | NFCそのもの(NFCIP-1)。P2P通信と、スマホが使うパッシブモード | あなたのスマホ |
NFC Forumのタグタイプ
NFC Forumはチップを設計したわけではありません。すでに存在していたチップの上にNDEFメッセージ(どのスマホも理解できるコンテナ形式)を保存するための、5つのレシピを書いたのです。「Type 2タグ」とはそういう意味です。チップではなく、データの配置方法を指しています。
| Forumタイプ | 無線 | メモリモデル | 代表的なチップ | スマホの対応 |
|---|---|---|---|---|
| Type 1 | NFC-A | 8バイトのブロック、一度だけロック可能 | Innovision/BroadcomのTopaz | 両プラットフォームで読み取り可能。NFC Forumは2021年の仕様リリースからType 1を外した |
| Type 2 | NFC-A | 4バイトのページ、ページ3のケーパビリティコンテナ、TLVブロック | NTAG21x、MIFARE Ultralight、ST25TN、Fudan FM11NT0x1、Infineon my-d move | iPhoneとAndroid。iPhoneのバックグラウンド読み取りにも対応 |
| Type 3 | NFC-F | 16バイトのブロック、サービスコード | FeliCa Lite-S、FeliCa Standard | iPhoneとAndroid(AndroidではNFC-Fへの対応が必須) |
| Type 4 | NFC-AまたはNFC-B上のISO-DEP | APDUで選択するファイル:CCファイルとNDEFファイル | NTAG 424 DNA、DESFire、ST25TA | iPhoneとAndroid |
| Type 5 | NFC-V | 4バイトのブロック、ブロック0にCC | ICODE SLIXとSLIX2、ST25TV、ST25DV、NTAG 5 | iPhoneはiOS 13から、AndroidはNfcV経由。2015年にForumに追加 |
この表には、あえて載っていないものが2つあります。MIFARE ClassicはそもそもForumのタグタイプではありません。Classic上のNDEFはNXP独自のマッピングで、Androidは一部の機種で対応し、iOSはどの機種でも対応していません。もう一つ、Forumのレシピはセキュリティについて何も定めていません。Type 2タグは素のNTAG213のこともあれば、AES-128認証を備えたNTAG 224 DNAのこともあります。Type 4タグは飾り気のないST25TA02Kのこともあれば、銀行カードのこともあります。タイプからわかるのはNDEFメッセージの保存方法であって、誰がそれにアクセスできるかではありません。
NFCタグではないもの
「なぜスマホでこれが読めないの?」というメッセージの半分は、そもそもNFCではないものについてです。スマホのNFCコイルは13.56 MHzに合わせてあり、上に挙げたプロトコルを話します。それ以外のものは、どれほどタグらしい見た目をしていても、スマホには見えません。
| タグに見えるけれど | 周波数 | 実際の正体 | スマホで読めるか |
|---|---|---|---|
| チップが見えないオフィスや駐車場のバッジ | 125 kHz | 低周波RFID:読み取り専用IDのEM4100、HID Prox、書き換え可能なT5577 | 読めない。どんなアプリでもそれは変えられない |
| ペットのマイクロチップ | 134.2 kHz | ISO 11784/11785のFDX-Bトランスポンダー | 読めない |
| 小売店の万引き防止タグや物流ラベル | 860から960 MHz | UHF帯のRAIN RFID、EPC Gen2 | 読めない |
| ホテルのキーや古い交通カード | 13.56 MHz | MIFARE Classicか独自仕様のHFカード | Androidは読めることがある。iPhoneはUIDのみ表示 |
| 銀行カード | 13.56 MHz | ISO-DEPで通信するEMVスマートカード | 技術的には読める。アプリはカードのアプリケーション一覧と公開データを読めるが、AppleのCore NFCは決済カードの読み取りをブロックしており、使えるコピーを作れるスマホはない |
| パスポート | 13.56 MHz | ICAO 9303準拠の電子文書 | 読める。機械読み取り領域を鍵として使う。私が実装しました |
| セキュリティキー | 13.56 MHz | ISO 7816上で動くFIDO2認証器 | ブラウザ用としては読める。タグとしては読めない |
つらいのは125 kHzのバッジです。ドアのリーダーにはちゃんと反応しますし、コイル入りのプラスチックカードでもあるのに、スマホとは決して通信しません。iPhoneでマンションのドアを開けられない理由を記事にしたのは、正直な答えがハードウェアの問題だからです。
データシートと商品ページの読み方
データシートの表紙には必要な数字がすべて載っていて、まともな商品ページはそれを書き写しています。それぞれの数字が何を意味し、どれが嘘をつくのかを説明します。
ユーザーメモリと総メモリ
どのチップにも、使える量より多くのEEPROMがあります。NTAG213の総容量は180バイトで、そのうち144バイトがあなたのものです。残りの36バイトにはUID、ロックビット、ケーパビリティコンテナ、設定ページが入っています。MIFARE Classic 1Kは1024バイトのうち752バイトがデータ領域です。セクターごとに1ブロックが鍵に取られるからです。商品ページは大きいほうの数字を載せます。大事なのはユーザーメモリで、それでもNDEFメッセージに入る量とは一致しません。それは次の章で説明します。
UID
固有識別子は工場で焼き込まれ、変更できません。変更できるように作られたクローンは別です。長さは3種類あります。
| UIDの長さ | 使われている場所 | 備考 |
|---|---|---|
| 4バイト | 古いMIFARE Classic、現在の安価なClassicカード | 4バイトでは数が足りなくなったため、NXPはこれを「非固有識別子」(NUID)と呼んでいる。4バイトのUIDにはメーカーコードが含まれない。先頭バイトが08なら、そのチップはタップのたびにランダムなIDを生成している |
| 7バイト | NTAG、Ultralight、DESFire、NTAG 424 DNA、Classic EV1(オプション)。FeliCaの8バイトのIDmも近い仲間 | 先頭バイトがメーカーコード |
| 8バイト | すべてのISO 15693チップ | 先頭バイトは常にE0で、2バイト目がメーカーコード |
メーカーコードはISO/IEC 7816-6の登録簿に基づくもので、商品ページの真偽を確かめるいちばん手っ取り早い方法です。「正規NXP」のタグが1Dを返したら、それはFudan製です。
| コード | メーカー |
|---|---|
| 01 | Motorola |
| 02 | STMicroelectronics |
| 03 | 日立 |
| 04 | NXP Semiconductors |
| 05 | Infineon |
| 07 | Texas Instruments |
| 08 | 富士通 |
| 16 | EM Microelectronic |
| 1A | ソニー |
| 1D | Shanghai Fudan Microelectronics |
| 25 | Innovision(Topaz) |
| 2C | Impinj |
| 2E | Broadcom |
ATQA、SAK、GET_VERSION:リーダーがチップを見分ける方法
Type Aのチップはスマホに応答するとき、ATQAとSAKという2つの小さな値を送ります。私のアプリを含め、リーダーはSAKを使ってチップをファミリーに分類します。SAKのビットから、そのチップがISO-DEPを話すかどうかと、大まかにどのファミリーに属するかがわかるからです。NXP自身の識別に関するノートは、衝突して誤解を招くのでATQAは何にも使わないように、と太字で書いています。私の経験でも、そのとおりでした。
| SAK | ファミリー | よく見られるATQA |
|---|---|---|
| 00 | NTAGとMIFARE Ultralightのすべて | 00 44 |
| 08 | MIFARE Classic 1K、セキュリティレベル1のMIFARE Plus 2KまたはSE | 00 04(4バイトUID)、00 44(7バイト) |
| 09 | MIFARE Classic Mini | |
| 18 | MIFARE Classic 4K、レベル1のMIFARE Plus 4K | 00 02または00 42 |
| 10、11 | レベル2のMIFARE Plus X | |
| 20 | ISO-DEPを話すものすべて:DESFire、NTAG 424 DNA、レベル3のPlus、銀行カード、JCOP | 03 44(DESFire、424)、ランダムIDなら03 04 |
すべてのNTAGとUltralightがSAK 00を返すので、NTAG213とNTAG216とUltralight EV1を見分けるには、もう一つコマンドが必要です。それがGET_VERSIONです。8バイトを返し、そのうち3バイトが仕事をします。バイト2が製品タイプ(03がUltralight、04がNTAG、07がNTAG I2C、01がDESFire、02がPlus、08がDESFire Light)、バイト4が世代、バイト6が容量を表します。NFC.coolはこれで目の前のチップが何かを判別していますし、Amiiboを読むゲーム機がタグに最初に尋ねるのもこれです。
| チップ | GET_VERSIONの応答 |
|---|---|
| NTAG213 | 00 04 04 02 01 00 0F 03 |
| NTAG215 | 00 04 04 02 01 00 11 03 |
| NTAG216 | 00 04 04 02 01 00 13 03 |
| NTAG210 | 00 04 04 01 01 00 0B 03 |
| NTAG212 | 00 04 04 01 01 00 0E 03 |
| Ultralight EV1 48 B | 00 04 03 01 01 00 0B 03 |
| Ultralight EV1 128 B | 00 04 03 01 01 00 0E 03 |
| Ultralight AES | 00 04 03 0x 04 00 0F 03 |
| NTAG 223 DNA | 00 04 04 02 04 00 0F 03 |
| NTAG 424 DNA(APDUで包んだもの) | ベンダー04、タイプ04、メジャー30、容量11 |
GET_VERSIONを持たないチップもあります。初代Ultralight、Ultralight C、古いNTAG203には最初からありませんし、ほとんどのクローンにもありません。その「ない」こと自体が指紋になります。
書き換え耐性、データ保持、温度
この3つは、商品ページにはまず載っておらず、データシートには必ず載っている数字です。
書き換え耐性は、1バイトを何回書き換えられるかです。現行品なら最低でも100,000回で、Classic時代のチップと初代Ultralightは10,000回です。DESFire EV3とST25DVファミリーは標準値で1,000,000回です。
データ保持期間は、電源なしでデータが残る期間です。従来の標準は10年で、NXPはNTAG 424 DNAとICODE SLIXファミリーを50年、STはType 4のST25TAチップを200年としています。保持期間は室温での規定値で、熱があると短くなります。
動作温度は、NXPの民生用チップの多くで-25から+70 °C、STとEMの製品で-40から+85 °C、ICODE 3では最高105 °Cです。限界になるのはたいていチップではなく、接着剤と基材です。
セキュリティの階段
商品ページがいちばん嘘をつくのがここです。「暗号化」「セキュア」「クローン防止」といった言葉が、平文で送られる32ビットのパスワードしか保護のないタグに印刷されています。下から上へ並べた階段を示します。このガイドに出てくるチップは、どれもいずれかの段に位置します。
| 段 | 内容 | チップ | 防げること |
|---|---|---|---|
| 0. なし | 誰でも読み書きできる | 初代Ultralight、NTAG203、TI Tag-it Standard、Topaz | 何も防げない |
| 1. ロックビット | ページを永久に読み取り専用にする一方向のビット | すべてのType 2とType 5チップ | 書き換え。コピーは防げない |
| 2. パスワード | 32ビットのパスワードと16ビットの確認応答(PACK)。失敗回数の上限も設定可能。NTAG21xではパスワードが暗号化されずに無線で送られる | NTAG21x、Ultralight EV1、NTAG 223 DNA、ICODE SLIXファミリー(32ビット)、ST25TV(32または64ビット)、ST25TA(128ビット) | アプリを持った他人による気軽な書き換え。スニファーを持った本気の攻撃者は防げない |
| 3. CRYPTO1 | 1990年代のNXPの48ビットストリーム暗号 | MIFARE Classic、レベル1のMIFARE Plus | 2008年以降は何も防げない。段0として扱うこと |
| 4. トリプルDES | 16バイトの鍵による相互認証 | Ultralight C、FeliCa Lite-S、DESFire D40とEV1 | 鍵なしでの内容のコピー |
| 5. AES-128 | 相互認証、セキュアメッセージング | Ultralight AES、NTAG 224 DNA、DESFire EV1からEV3、DESFire Light、レベル3のPlus、ICODE DNA、FeliCa Standard、EM4425 | 同上。しかも今も信頼されている暗号で |
| 6. AESとSUN | タップのたびに、URLそのものに新しい暗号的証明が入る | NTAG 424 DNA、NTAG 22x DNA、DESFire EV3 | クローン。コピーには次のタップに署名できないから |
| 7. 改ざん検知ループ | 一度でも切断されたら、それを永久に報告するワイヤー | NTAG 213 TT、NTAG 424 DNA TT、NTAG 22x DNA StatusDetect、ICODE 3 TT、ST25TV02KC-T | 封印の再利用 |
階段の上ではなく、その横に並ぶ機能が2つあります。オリジナリティ署名は、メーカーがUIDに対して書き込んだデジタル署名で、リーダーはそれを使ってチップがNXPやSTの製品かどうかを確認できます。ただし、コピーは防げません。クローンはコピーした署名を持てるからで、NXP自身もアプリケーションノートでそう述べています。そしてカウンター(NTAG213/215/216の24ビット読み取りカウンター、Ultralight EV1の3つの一方向カウンター、SLIX2の16ビット書き込みカウンター)は、SUNメッセージに組み込まれない限り、セキュリティのためではなく用途のための機能です。
NDEFとタグに実際に収まるデータ
NDEF(NFC Data Exchange Format)は封筒です。スマホはタグから「URL」を読むのではありません。URIレコードを含むNDEFメッセージを読むのであって、その封筒には重さがあります。その重さを知っていれば、「自分のリンクはNTAG213に入るか」に答えられます。
レコード
どのレコードも、フラグバイト(メッセージ開始、メッセージ終了、ショートレコード、3ビットのタイプ名フォーマット)で始まり、続いてタイプの長さ、ペイロードの長さ(ペイロードが256バイト未満なら1バイト、それ以上なら4バイト)、タイプそのもの、そしてペイロードが並びます。つまり短いURLレコードでは、リンクの最初の1バイトの前に4バイトのヘッダーがかかります。
| レコード | タイプ | ペイロード |
|---|---|---|
| URL | Well-knownタイプU | プレフィックス1バイトと、残りのURLをUTF-8で |
| テキスト | Well-knownタイプT | ステータスバイト、言語コード(en)、そしてテキスト |
| スマートポスター | Well-knownタイプSp | 中にNDEFメッセージが丸ごと入る:URLと、任意のタイトルとアクション |
| 連絡先 | MIME text/vcard | vCardのテキストそのまま |
| Wi-Fi | MIME application/vnd.wfa.wsc | Wi-Fi Simple Configurationの属性:SSID、認証方式、キー |
| Androidアプリ | 外部タイプandroid.com:pkg | パッケージ名。Androidはそのアプリか、そのPlayストアのページを開く |
プレフィックスバイトは、URIレコードで唯一の気の利いた工夫です。https://を全部書く代わりに、ペイロードの先頭バイトがよく使うプレフィックスのコードになっていて、スマホがそれを元に戻します。
| コード | プレフィックス | コード | プレフィックス |
|---|---|---|---|
| 00 | なし | 12 | rtsp:// |
| 01 | http://www. | 13 | urn: |
| 02 | https://www. | 14 | pop: |
| 03 | http:// | 15 | sip: |
| 04 | https:// | 16 | sips: |
| 05 | tel: | 17 | tftp: |
| 06 | mailto: | 18 | btspp:// |
| 07 | ftp://anonymous:anonymous@ | 19 | btl2cap:// |
| 08 | ftp://ftp. | 1A | btgoep:// |
| 09 | ftps:// | 1B | tcpobex:// |
| 0A | sftp:// | 1C | irdaobex:// |
| 0B | smb:// | 1D | file:// |
| 0C | nfs:// | 1E | urn:epc:id: |
| 0D | ftp:// | 1F | urn:epc:tag: |
| 0E | dav:// | 20 | urn:epc:pat: |
| 0F | news: | 21 | urn:epc:raw: |
| 10 | telnet:// | 22 | urn:epc: |
| 11 | imap: | 23 | urn:nfc: |
つまりhttps://nfc.cool/は、バイト04に続けてnfc.cool/として保存されます。17文字のURLが9バイトのペイロードになるわけです。NXP自身のNTAG 5のデータシートには、D1 01 0C 55 01に続いてnxp.com/nfcという例が載っていて、これはhttp://www.nxp.com/nfcにデコードされます。
レコードを包む封筒
Type 2やType 5のタグでは、メッセージはTLVの中に入ります。「NDEFメッセージ」を示す1バイト(03)、長さ1バイト(メッセージが255バイト以上なら3バイト)、メッセージ本体、そして終端バイト(FE)です。Type 4のタグにはTLVがなく、NDEFファイルが2バイトの長さから始まります。また、工場出荷時のNTAG213やNTAG212では、ユーザーメモリの最初の5バイトがすでにLock Control TLVで埋まっています。NXPが書き込んだ状態で出荷し、どの書き込みツールもそのまま残すものです。
多くの人が買うチップで、https://のリンク1本分の計算を手でやってみます。
NTAG213のユーザーメモリ:144バイト
工場出荷時のLock Control TLVを引いて:139
NDEF TLVの枠(03、長さ、FE)を引いて:メッセージ用に136バイト
レコードヘッダー(フラグ、タイプ長、ペイロード長、
U)を引いて:ペイロード132バイトプレフィックスバイトを引いて:
https://の後に131文字
どのタグに何が入るか
| タグ | NDEF領域 | https://の後のURL文字数 | 最小限のvCard(132 B:名前、電話、メール、URL) | 一般的なvCard(250から500 B) | Wi-Fiレコード(67から88 B) |
|---|---|---|---|---|---|
| NTAG210、Ultralight EV1 48 B | 48 | 40 | 不可 | 不可 | 不可 |
| NTAG212 | 128 | 115 | 不可 | 不可 | 可 |
| Ultralight EV1 128 B | 128 | 120 | 不可 | 不可 | 可 |
| NTAG213(工場出荷時) | 144 | 131 | 不可(9バイト不足) | 不可 | 可 |
| NTAG213(ロックTLVを削除) | 144 | 136 | 不可(4バイト不足) | 不可 | 可 |
| ST25TN01K | 160 | 約147 | ぎりぎり可 | 不可 | 可 |
| NTAG215 | 宣言値496(ユーザー領域504) | 483 | 可 | 大半は可 | 可 |
| NTAG216 | 宣言値872(ユーザー領域888) | 859 | 可 | 可 | 可 |
| ICODE SLIX | 112(CC込み) | 100 | 不可 | 不可 | 可 |
| ICODE SLIX2 | 316 | 約300 | 可 | たいてい可 | 可 |
| NTAG 424 DNA | 256バイトのNDEFファイル | 249 | 可 | 小さいものなら可 | 可 |
| DESFire EV3 2K | 最大2048バイトのNDEFファイル | 最大2038 | 可 | 可 | 可 |
よくつまずく注意点が2つあります。NTAG215とNTAG216でNXP自身が書き込んでいるケーパビリティコンテナは、ユーザーメモリより少ない496バイトと872バイトを宣言しています。そのためAndroidのgetMaxSize()は小さいほうの数字を返し、それで正しいのです。また、名前、電話、メール、URLを入れたvCardは、封筒なしで132バイト、封筒込みで148バイトになります。NTAG213にわずかに入らず、名刺業者がNTAG215やNTAG216を標準にしているのはそのためです。入門ガイドで使った概数(約130、480、850文字)は、これらの数字の端を丸めたものです。
メモリマップ:チップのどこに何があるか
NFC.coolでタグをダンプして16進数を眺めたことがあるなら、これがその解読表です。
Type 2:NTAG213のページマップ
| ページ | バイト数 | 内容 |
|---|---|---|
| 00 | 4 | UIDのバイト0から2とチェックバイト |
| 01 | 4 | UIDのバイト3から6 |
| 02 | 4 | チェックバイト、内部バイト、ページ3から15用の2つの静的ロックバイト |
| 03 | 4 | ケーパビリティコンテナ:E1 10 12 00(マジックナンバー、バージョン1.0、18 x 8 = 144バイト、読み書き許可) |
| 04から27 | 144 | ユーザーメモリ。TLVが置かれる場所 |
| 28 | 4 | ページ16以降用の動的ロックバイト |
| 29 | 4 | CFG0:ミラーの設定、ミラーを置くページ、そしてパスワード保護の最初のページを示すAUTH0 |
| 2A | 4 | CFG1:読み取りまたは書き込みの保護ビットを持つACCESSバイトと、失敗回数の上限を示すAUTHLIM |
| 2B | 4 | PWD、パスワード。書き込み専用 |
| 2C | 4 | PACK、2バイトの確認応答と、2つの予約バイト |
NTAG215も同じ構造で、ユーザーメモリがページ81まで、設定が83から86にあります。NTAG216はE1まで続き、設定はE3からE6です。ケーパビリティコンテナのビットは一方向です。バイト3の読み取り専用フラグを一度セットするか、ロックビットをセットすると、元には戻せません。アプリの「永久ロック」が実際に書き込んでいるのはこれです。Type 2での「フォーマット」は、ページ4に空のNDEF TLV(03 00 FE)を書くだけで、メモリをゼロにはしません。そのため古いデータは、上書きされるまでダンプで読み出せます。
Type 4:NTAG 424 DNAのファイルシステム
ページはありません。D2760000850101という名前のISO 7816アプリケーションの中に、3つのファイルがあります。32バイトのケーパビリティコンテナ(E103)、256バイトのNDEFファイル(E104)、128バイトの独自ファイル(E105)です。各ファイルにはそれぞれ読み取り、書き込み、アクセス権変更の権限があり、それぞれが5つのAES鍵のどれかに割り当てられます。DESFireも同じ仕組みですが、アプリケーションやファイルを自分で作れます。NTAG 424 DNAの3つは固定で、だから私はこれを3つの引き出しがある小さな鍵付き金庫と表現しました。
Type 5:ISO 15693のブロック
4バイトのブロックに0から番号が振られ、ブロック0にケーパビリティコンテナ(E1 40に続いてサイズ)があり、ブロック1からNDEF TLVが始まります。UID、AFI、DSFID、ロック状態はアドレス指定できるブロックの外にあり、別のGET SYSTEM INFORMATIONコマンドで読み出します。ICODE SLIX2では、最後のアドレス可能ブロックである79が16ビットカウンターです。ICODE 3ではブロック75に24ビットカウンターがあり、ブロック76以降は別の設定領域です。
MIFARE Classic:セクター、トレーラー、ディレクトリ
Classic 1Kは、16バイトのブロック4つからなるセクターを16個持っています。各セクターの最後のブロックがセクタートレーラーで、鍵A、3バイトのアクセスビット、空き1バイト、鍵Bが入っています。セクター0のブロック0は、UIDを含むメーカーブロックです。ClassicにNDEFを載せるために、NXPはディレクトリを定義しました。セクター0がMIFARE Application Directory(MAD)になり、公開されている鍵A0 A1 A2 A3 A4 A5で読み取れます。そこに、アプリケーションコード03 E1でNDEFを保持しているセクターが列挙されます。それらのセクターは、2つ目の公開鍵D3 F7 D3 F7 D3 F7を使います。工場出荷直後のカードは、すべての鍵がFF FF FF FF FF FFです。Android版のNFC.coolがClassicカードをフォーマットするときに書き込むのは、このディレクトリとこれらの鍵です。フォーマットしたClassicカードが一部のAndroidスマホでは読めて、iPhoneではどの機種でも読めないのはそのためです。
用途別の選択表
用途が決まっていて、チップを知りたいなら、ここから始めてください。
| 用途 | チップ | 理由 | NFC.coolの対応 |
|---|---|---|---|
| リンク、Wi-Fiネットワーク、ショートカットのトリガー、モノに貼るステッカー | NTAG213 | URL 131文字、パスワード、カウンター、8セント | iPhone、Android、iPad、Macで完全対応 |
| 連絡先カード、長めのリンク、拡張の余地が欲しいもの全般 | NTAG216 | 859文字、同じ機能、私がテストに使っているチップ | 完全対応 |
| Amiibo | NTAG215 | ゲーム機はまさにこのチップと、その504バイトを確認する | 両プラットフォームでバックアップと復元 |
| ポスター、名刺、デモ機のタップ回数を数える | NTAG213、215、216 | ハードウェアの読み取りカウンターとASCIIミラー。アプリのタップカウンターが対応する3チップ | 両プラットフォームでタップカウンター |
| 極小アンテナ、指輪、安価な使い捨て | NTAG 210µまたはUltralight EV1 48 B | 48バイト、小型コイル向けの17 pF、パスワードなし | 読み書き |
| 製品が本物だと証明する。タップ1回で、アプリ不要 | NTAG 424 DNA | タップのたびにAES-128で自ら署名する。コピーにはそれができない | 署名の検証を含む完全な設定 |
| 同じことを、安いType 2ステッカーで | NTAG 223 DNA | Type 2チップでSUN、144バイト | Type 2タグとして表示。SUNの設定はまだ非対応 |
| 開封されたことを報告する封印 | NTAG 213 TT、NTAG 424 DNA TT、ST25TV02KC-T | 改ざん検知ワイヤー。永久に記録される | 424 TTは完全対応。他はベースのチップとして読み取り |
| 少し離れた距離からゲートリーダーで読む在庫管理や図書館 | ICODE SLIX2またはICODE 3 | ISO 15693は適切なリーダーなら1から1.5メートルで読め、スマホでのタップにも対応 | 両プラットフォームで読み取り、書き込み、フォーマット |
| プリンター自身が読む必要がある3Dプリンター用スプール | ICODE SLIX2 | OpenPrintTag規格はNFC-Vを前提にしている | 読み書き |
| ドア、改札、交通システム | DESFire EV3またはMIFARE Plus EV2 | AES、本格的な鍵管理、認証を取得したセキュリティ | 公開部分の識別とダンプ。鍵の操作は非対応 |
| マイコンと通信するバッテリー不要のセンサー | NTAG I2C plus、ST25DV、NTAG 5 | 同じダイにI2Cインターフェースとエネルギーハーベスティング | NFC側として読み取り |
| 日本の交通系や電子マネーの世界に関わるもの全般 | FeliCa | リーダーが話すのがそれだから | 読み取り。iPhoneではLite-SとStandardにNDEFを書き込み |
| 金属面に貼るタグ | 上記いずれかの金属対応形状 | 効いているのはチップではなく、フェライト層 | チップに準じる |
| 皮下 | NTAG216(xNT)、NTAG I2C(xSIID)、DESFire(xDF) | 小さなガラスアンテナには、スマホのスイートスポットが必要 | チップに準じる |
この表に載っていないもの、それがMIFARE Classicです。2026年の今、私がClassicチップを買うような用途は一つもありません。理由は後の章で説明します。
ファミリー別の解説
どのファミリーも同じ形で扱います。データシートの仕様表、そのチップの用途、スマホで何ができるか、そして手元にある場合は実機メモです。
NTAG 21x:ステッカーのファミリー
一般向けに売られているNFCステッカー、コイン、カードのほぼすべてに入っているチップです。データシートは2015年から変わっていませんが、NXPは2026年の今もすべてを現行品として掲載しています。
| チップ | ユーザー / 総バイト数 | パスワード | カウンター | ミラー | 署名 | 書き換え耐性 / 保持期間 | ステータス |
|---|---|---|---|---|---|---|---|
| NTAG 210µ | 48 / 64 | なし | なし | なし | あり(再プログラム可能) | 100k / 10年 | 現行 |
| NTAG210 | 48 / 80 | 32ビット + PACK、AUTHLIM | なし | UID | あり | 100k / 10年 | 現行 |
| NTAG212 | 128 / 164 | あり | なし | UID | あり | 100k / 10年 | 現行 |
| NTAG213 | 144 / 180 | あり | 24ビット読み取りカウンター | UIDとカウンター | あり | 100k / 10年 | 現行 |
| NTAG215 | 504 / 540 | あり | あり | あり | あり | 100k / 10年 | 現行 |
| NTAG216 | 888 / 924 | あり | あり | あり | あり | 100k / 10年 | 現行 |
| NTAG213F、NTAG216F | 144または888 | あり | あり | あり | あり | 100k / 10年 | 現行。電子機器への組み込み用に、磁界検出ピンとスリープモードを追加 |
| NTAG 213 TT | 144 / 184 | あり | あり | UID、カウンター、改ざん状態 | あり | 100k / 10年 | 現行。改ざん検知ワイヤーを追加 |
| NTAG203 | 144 / 168 | なし(32ビットのOTP領域) | 16ビット書き込みカウンター | なし | なし | 10k / 5年 | 生産終了。NTAG213に置き換え |
いずれもNFC Forum Type 2、ISO/IEC 14443 Type A、7バイトUID、106 kbit/sで、定格温度は-25から+70 °Cです。NTAG210とNTAG212は小型アンテナ向けに17 pFの入力容量、213、215、216は50 pFです。オリジナリティ署名はsecp128r1曲線のECDSAで32バイト、READ_SIGコマンドで読み出します。検証鍵は非公開のNXPアプリケーションノートに載っていて、一般向けのアプリでこれを確認するものがほとんどないのはそのためです。
実際に重要な機能は3つです。パスワード(32ビットのPWD、タグが応答する16ビットのPACK、保護の開始位置を示すAUTH0、指定回数の誤入力でタグを使えなくするAUTHLIM)、NFCカウンター(24ビットで、読み取りセッションごとに1ずつ増え、専用コマンドで読める)、そしてASCIIミラーです。ミラーはUIDとカウンターをテキストとしてNDEFメッセージに貼り込むので、普通のURLがタップのたびにhttps://example.com/?u=04A1...&c=000123のようになります。以前記事にしたフィリップスのソニッケアーの替えブラシは、AUTHLIMを3に設定したNTAG213を使っています。推測を間違えると替えブラシが自らロックしてしまうのは、この仕組みによるものです。
実機メモ:リリースのたびにテストしているのがこのチップたちで、1パック買ったらもう悩みたくない、という人に私が勧めるのはNTAG216です。人目につく場所に置くものなら、パスワードは設定する価値があります。無料アプリを持った人、つまりほとんどの人を止められるからです。スニファーを持つ人は止められません。パスワード自体が暗号化されずに無線で送られるからで、アプリの中でもはっきりそう書いています。
スマホでは、どの機種でもNDEFの読み書きができ、iPhoneはURLレコードをバックグラウンドで読み取ります。パスワード、カウンター、ミラーへの低レベルなアクセスも、両プラットフォームで可能です。NFC.coolはそのすべてを、iPhone、Android、そしてUSBリーダー経由でiPadとMacでも行えます。
NTAG DNA:タップのたびに署名するチップ
3世代あり、そのうち2つは今も製造されています。
| チップ | Forumタイプ | ユーザーバイト数 | 鍵 | SUN | 署名 | 書き換え耐性 / 保持期間 | ステータス |
|---|---|---|---|---|---|---|---|
| NTAG 413 DNA | Type 4 | 160(CC 32 + NDEF 128) | AES-128が3つ | あり、24ビットカウンター | ECC | 200k / 50年 | 製造終了 |
| NTAG 424 DNA | Type 4 | 416(32 + 256 + 128) | AES-128が5つ、LRPオプション、ランダムIDオプション | あり、UID暗号化オプション付き | ECDSA secp224r1、56バイト、加えてAESのオリジナリティ鍵 | 200k / 50年 | 現行。Common Criteria EAL4 |
| NTAG 424 DNA TT | Type 4 | 416 | AES-128が5つ | あり、メッセージに改ざん状態も含む | 同上 | 200k / 50年 | 現行 |
| NTAG 223 DNA | Type 2 | 144 / 240 | 16バイトのSUN鍵1つと32ビットパスワード | あり、24ビットカウンター | ECDSA secp192r1、48バイト | 100k / 10年 | 2022年2月から現行 |
| NTAG 224 DNA | Type 2 | 208 / 304 | パスワードの代わりにAES-128相互認証 | あり | 同上 | 100k / 10年 | 現行 |
| NTAG 223および224 DNA StatusDetect | Type 2 | 同上 | 同上 | あり、メッセージにセンサー状態を含む | 同上 | 100k / 10年 | 現行 |
SUN(Secure Unique NFC)は、これらのチップがNTAG213の3倍の価格に見合う理由となる機能です。タグはUIDと読み取りカウンターをURLにミラーし、それらに対するAES-128のCMACを付け加えます。CMACはタップのたびに新しく計算されます。サーバーがMACを検証し、鍵を持たないクローンタグは検証に失敗します。LRPモードや5つの鍵も含めて、すべてNTAG 424 DNAの記事で説明したので、ここではその後に変わったことだけを書きます。NXPは現在、NTAG 426Q DNAと、EAL6+認証を受けた16 kBのコネクテッドType 4チップであるNTAG X DNAも販売しています。424はもはや最新のDNAチップではなく、ステッカーとして実際に買えるもの、というだけです。
22x DNAファミリーは注目の新顔です。Type 2チップでSUNが使えるので、ステッカーは安く、スマホはそれを普通のNTAGとして読みます。StatusDetect版はセンサーを追加しています。一度切れたことを不可逆に記録する導電ループか、2本のピン間で0から11 pFの静電容量を測る機能のどちらかで、NXPは後者を液面、湿度、圧力の測定向けに売り込んでいます。
実機メモ:私は最初のNTAG 424 DNAタグをAliExpressで数ユーロで買い、それを中心にアプリの424機能一式を作りました。鍵の変更、平文モードと暗号化モードのSUN、ファイルのアクセス権、Vaultファイル、改ざん状態です。424は、NFC.coolがNXPの公開鍵でオリジナリティ署名を検証し、「正規のNXP」と表示する唯一のチップでもあります。22x DNAについては、資料で知っているだけです。
MIFARE Ultralight:チケットのファミリー
UltralightはNTAGの兄にあたります。無線インターフェースも、4バイトのページも、SAKも同じで、EV1以降はコマンドも同じです。違うのは目的です。Ultralightは片道切符のために、NTAGはURL入りのステッカーのために作られました。だからNTAGはケーパビリティコンテナを書き込んだ状態で出荷され、Ultralightはそうではありません。
| チップ | ユーザー / 総バイト数 | 保護 | カウンター | 署名 | 書き換え耐性 / 保持期間 | ステータス |
|---|---|---|---|---|---|---|
| MIFARE Ultralight(MF0ICU1) | 48 / 64 | ロックビットと32ビットのOTP領域 | なし | なし | 10k / 5年 | 製造終了 |
| Ultralight C | 144 / 192 | 16バイト鍵によるトリプルDES相互認証 | 16ビット一方向 | なし | 100k / 10年 | 新規設計には非推奨。Ultralight AESに置き換え |
| Ultralight EV1 | 48 / 80または128 / 164 | 32ビットパスワード、AUTHLIM | 独立した24ビット一方向カウンターが3つ | あり、32バイト | 100k / 10年 | 現行 |
| Ultralight AES | 144 / 240 | AES-128相互認証、CMACメッセージング、ランダムIDオプション | 24ビットカウンターが3つ | あり、加えてAESのオリジナリティ鍵 | 100k / 10年 | 2022年2月から現行。Common Criteria EAL3+ |
| Ultralight Nano | 40 / 56 | ロックビットとOTP | なし | あり | 100k / 10年 | 私が探した限り、告知なしでNXPのカタログから消えた |
Ultralight EV1の特徴は、3つの一方向カウンターです。交通事業者がカウントを減らしていくと、チップは決して元に戻させません。Ultralight AESは、「本物の認証を備えたNTAG213が欲しい」という要望への控えめな答えです。同じ144バイトで、パスワードの代わりにAES-128を使い、どのスマホでも読めるType 2タグです。
スマホでは、ここに挙げたものはすべてType 2タグとして読めます。AppleのCore NFCは.ultralightファミリーを公開していて、アプリはネイティブコマンドを送れます。AndroidにはMifareUltralightクラスがあり、オプション扱いですが、私が見たすべてのスマホに実装されています。NFC.coolはGET_VERSIONからEV1の各バリエーションとAESを判別し、EV1のパスワードはNTAGと同じように扱います。AES認証そのものは、アプリでは行いません。
MIFARE Classic、Plus、DESFire:入退室管理のファミリー
3つのファミリーを1つの章にまとめたのは、これが一つの物語だからです。Classicが破られ、Plusが移行の道となり、最終的に業界はDESFireに落ち着きました。
MIFARE Classicは、古いホテルのキー、ジムの会員カード、そして非常に多くのオフィスのバッジに入っているチップです。NFC Forumのタグタイプではありません。CRYPTO1という独自の暗号を持っていますが、2008年に2つの研究グループがこれをリバースエンジニアリングしました。NohlとPlötzは顕微鏡でシリコンを観察して、ラドバウド大学のグループはプロトコルを観察して解析し、後者は「本物のリーダーとのわずか1、2回の認証試行から、1秒未満で」鍵を復元しました。NXPは2本目の論文の公表を止めようと裁判を起こし、敗訴しています。16年後の2024年8月には、Quarkslabが過去5年で最も普及したClassic互換チップであるFudan FM11RF08Sのハードウェアバックドアを公表しました。さらに、それ以前のFudanチップ、一部のInfineonチップ、そして2000年頃の一部のNXPチップにまで共通する、より古いバックドア鍵も見つけています。Classicはセキュリティ製品ではありません。NXP自身もClassic EV1の製品ページで、今では「新規設計には非推奨」とし、DESFire Lightを案内しています。
| チップ | ユーザー / 総バイト数 | UID | 保護 | 書き換え耐性 / 保持期間 | ステータス |
|---|---|---|---|---|---|
| Classic Mini | 224 / 320 | 4バイト | CRYPTO1 | 100k / 10年 | 販売終了 |
| Classic 1K | 752 / 1024 | 4バイトのNUID | CRYPTO1 | 100k / 10年 | 販売終了。EV1は新規設計には非推奨 |
| Classic 4K | 3440 / 4096 | 4バイトのNUID | CRYPTO1 | 100k / 10年 | 販売終了。EV1は非推奨 |
| Classic EV1 1Kおよび4K | 同上 | 7バイトまたは4バイト、ランダムIDオプション | CRYPTO1。オリジナリティ確認は1Kのみ | 最低100k / 10年 | 新規設計には非推奨 |
毎週のように聞かれるので、iPhoneについての答えをはっきり書いておきます。iPhoneはMIFARE Classicカードの中身を読めず、どんなアプリでもそれは変えられません。AppleのCore NFCのAPIにはClassicのファミリーがなく、MIFAREコマンドのドキュメントには「Crypto1プロトコルには対応していない」とはっきり書かれています。スマホに見えるのはUIDとSAKで、私のアプリはそこからファミリー名を表示しますが、それで終わりです。Androidは事情が違います。MifareClassicクラスはオプションで、NFCコントローラーがハードウェアでCRYPTO1を持つスマホにだけ実装されています(NXPのコントローラーは持っていますが、ある世代のNexusやGalaxyに載っていたBroadcomのチップは持っていませんでした)。そうしたスマホでは、NFC.coolは工場出荷時の鍵で開くすべてのセクターを読み取り、新しいカードをNDEF用にフォーマットできます。
MIFARE Plusは、ClassicのメモリマップにAES-128を後付けしたもので、事業者はまずカードを、後からリーダーを入れ替えられるようになっています。セキュリティレベルという段階で動作し、SL1はClassicと同じように振る舞い(AESはオプション)、SL3はISO-DEP上のAESのみで、Plus Xにはその中間のSL2がありました。Plus SとPlus Xは販売終了で、Plus SE(1K、752バイト)とPlus EV2(2Kまたは4K、EAL5+、保持期間25年、書き換え耐性は標準値で1,000,000回)が現行品です。SL1ではスマホにはClassicと同じSAK 08または18が見え、SL3ではISO-DEPカードとして見えます。
MIFARE DESFireはまったくの別物です。アプリケーション、ファイル、ファイルごとのアクセス権、アプリケーションごとに最大14個の鍵を持つ小さなファイルシステムで、ISO-DEP上で最大848 kbit/sのAPDUで通信します。
| チップ | 使用可能メモリ | 暗号 | 追加機能 | 書き換え耐性 / 保持期間 | ステータス |
|---|---|---|---|---|---|
| DESFire D40 | 4 kB | DES、トリプルDES | 100k / 10年 | 2011年に段階的に廃止。同じ年に電力解析で鍵が復元された | |
| DESFire EV1 | 2304、4864または7936バイト | DES、3DES、AES-128 | NFC Forum Type 4として使用可能、ランダムID | 最低200k / 10年 | 新規設計には非推奨 |
| DESFire EV2 | 2560、5120、8192または16384バイト | AES-128、EAL5+ | トランザクションMAC、近接チェック、オリジナリティ署名 | 200k / 25年 | 新規設計には非推奨 |
| DESFire EV3 | 2560、5120、8192または16384バイト | AES-128、EAL5+ | EV2のすべてに加えてSUN/SDMとトランザクションタイマー。NFC Forum Type 4認証番号58652 | 最低200k、標準1M / 25年、-25から+85 °C | 現行 |
| DESFire Light | 640バイト | AES-128のみ、LRPオプション、EAL4 | 6つのファイルを持つ固定アプリケーション1つ | 200k / 10年 | 現行 |
DESFireの名前にある「2K」は、直接使える2048バイトという意味ではありません。NXPの比較ノートには表に載せた使用可能な数値があり、作成するアプリケーションやファイルはそれぞれ、自分のヘッダーのために256バイト単位のページで領域を取ります。ラベルを信じるより、FreeMemoryコマンドでカードに聞いてください。DESFire EV3ではファミリーにSUNも加わったので、EV3はNTAG 424 DNAと同じくURLに署名するという芸当ができます。EV2にはできません。
スマホでは、iOSはDESFireを.desfireのMIFAREタグとして渡し、アプリがNDEFアプリケーションを要求した場合はISO 7816タグとして渡します。AndroidはIsoDepを使います。NFC.coolはGetVersionから世代と容量を判別し、鍵なしで見られるアプリケーションとファイルを一覧表示します。DESFireへの認証や書き込みは行いません。それは事業者自身のツールの仕事で、できるふりをするより、そうはっきり言っておきたいのです。
ISO 15693:長距離のファミリー
センチではなく、メートル単位の距離を想定して設計されたチップです。スマホでも読めますし(AppleはiOS 13から、AndroidはNfcV経由)、GoToTagsの測定ではiPhoneでType 5タグがType 2タグのおよそ2倍の距離で読めました。それでも本来の居場所は、図書館のゲート、倉庫の棚、そしてリネンや衣類のクリーニングの現場です。UIDはE0で始まる8バイト、ブロックは4バイトで、このファミリーにはType Aのチップにない3つの要素があります。AFI(リーダーが絞り込みに使えるアプリケーションファミリーのバイト)、DSFID(データ形式のバイト)、そして店のゲートを鳴らす電子商品監視のビット、EASです。
NXP ICODE。系譜は、SLI(2000年)、SLI-SとSLI-L(2007年)、SLIXとそのS版・L版(2010年)、SLIX2(2014年)、ICODE DNA(2016年)、ICODE 3(2024年)と続きます。「SLIX3」というものは存在しません。そう書いてある商品ページは、ICODE 3のことを言っているか、当て推量で書いています。
| チップ | ユーザー / 総バイト数 | 保護 | カウンター | 署名 | 書き換え耐性 / 保持期間 | ステータス |
|---|---|---|---|---|---|---|
| ICODE SLI | 112 / 128 | ロックビットのみ | なし | なし | 100k / 10年 | 生産終了 |
| ICODE SLI-S | 160 / 256 | 32ビットパスワードが5つ:読み取り、書き込み、破壊、プライバシー、EAS | なし | なし | 100k / 10年 | 製造終了 |
| ICODE SLI-L | 32 / 64 | パスワードが3つ | なし | なし | 100k / 10年 | 製造終了 |
| ICODE SLIX | 112 / 128 | EASとAFI用の32ビットパスワード1つ | なし | なし | 100k / 50年 | 新規設計には非推奨 |
| ICODE SLIX-S | 160 / 256 | 32ビットパスワードが5つ、プライバシーモード、破壊 | なし | なし | 100k / 50年 | 現行 |
| ICODE SLIX-L | 32 / 64 | パスワードが3つ | なし | なし | 100k / 50年 | 現行 |
| ICODE SLIX2 | 316 / 320 | 32ビットパスワードが5つ、プライバシーモード、破壊 | 16ビット、書き込みコマンドで加算 | あり、32バイト | 100k / 50年 | 現行 |
| ICODE DNA | 252 / 256 | AES-128相互認証、鍵3つ | 16ビット | あり、再プログラム可能 | 100k / 50年 | 現行 |
| ICODE 3 | 300 / 304と192バイトの設定領域 | 32ビットパスワードが6つ、2種類のプライバシーモード | 24ビット、NTAGのようにタップを数えられる | あり、32または48バイト、再プログラム可能 | 100k / 50年、最高105 °C | 現行。TagTamper版あり |
知っておくべきはICODE 3です。NTAG213と同じようにUIDとタップカウンターをNDEFメッセージにミラーし、最大212 kbit/sで読み取れ、アンテナを自動で調整します。AESはありません。AESを持つのはICODE DNAで、どちらもSUNには対応していません。
STMicroelectronics ST25TVとST25DV。STのType 5製品群で、このガイド全体を通じてもデータシートの数値がいちばん優秀です。
| チップ | ユーザーバイト数 | 保護 | カウンター | 署名 | 書き換え耐性 / 保持期間 | ステータス |
|---|---|---|---|---|---|---|
| ST25TV512、ST25TV02K | 64または256 | 32または64ビットのパスワード、kill、追跡不能モード、-AD版は改ざん検知 | 16ビットの書き込みイベントカウンター | TruST25 | 100k / 60年 | 新規設計には非推奨 |
| ST25TV512C、ST25TV02KC | 64または320 | パスワード、kill、サイレントモードとディスクリートモード、-T版は改ざん検知 | なし。代わりに3桁の固有タップコード | TruST25 | 100k / 60年 | 現行。2035年まで供給 |
| ST25TV04K-P | 512 | 64ビットパスワード、kill | なし | なし | 1M / 40年 | 現行。エネルギーハーベスティング用のピンあり |
| ST25TV16K、ST25TV64K、およびKC版 | 2048または8192 | 64ビットパスワード、kill | なし | なし | 1M / 40年 | K品は非推奨、KC品は現行 |
| ST25DV04K、16K、64KおよびKC版 | 512、2048または8192 | RF用の64ビットパスワード3つとI2C用パスワード | なし | なし | 1M / 40年 | K品は非推奨、KC品は現行 |
| M24LR04E、16E、64E | 512、2048または8192 | 32ビットパスワード | なし | なし | 1M / 40年 | 新規設計には非推奨 |
ST25TV02KCのAugmented NDEFは、セキュリティ機能として売られがちなので、一段落割く価値があります。このチップは読み取りのたびに、EEPROMには手を触れずに、UID、カスタムフィールド、3文字の固有タップコードをURLに挿入します。タップコードはタップごとに変わりますが、STのデータシート自身がはっきりと「予測可能」だと書いています。これはサーバーに新しいタップであることを伝える鮮度のトークンであって、タグが本物である証明ではありません。本物かどうかを示す機能は、STがUIDに対して付けるオリジナリティ署名のTruST25ですが、NXPのものと同じく静的な署名なので、クローンにコピーされてしまいます。
その他のType 5の世界。Texas InstrumentsのTag-it HF-Iインレイ(Standardは32バイト、Proは32バイトでパスワード保護付きの書き込みとkillコマンド、Plusは256バイト)は、2015年以前にNFCを導入した図書館ならどこにでもありますが、今ではどれも非推奨か廃止の扱いです。EM MicroelectronicのEM4233(208バイト、96ビット鍵のプライバシーモード、保持期間60年)は、要望に応じて入手できます。Infineonのmy-dと富士通のMB89R118は、ユーザーが送ってくれたのでNFC.coolの識別コードに入っています。NXPのNTAG 5(link、boost、switch)は、NTAGという名前に反してISO 15693のチップで、2048または512バイト、I2Cポート、最大30 mWのエネルギーハーベスティング、100万回・40年のEEPROMを備えています。ステッカーではなく電子機器向けのコネクテッドタグで、NTAG21x向けに書かれたソフトウェアでは通信できません。
実機メモ:SLIX2はOpenPrintTagのフィラメントスプールすべてに入っているチップなので、かなりの数を扱ってきました。NFC.coolは両プラットフォームでこれを読み取り、書き込み、フォーマットできます。一方で、はっきりさせておきたいのがアプリにできないことです。ISO 15693のパスワード、プライバシー、EAS、AFIのコマンドには対応していません。コマンドのバイト列は参照テーブルとしてコードに入っていますが、ボタンはまだありません。
MIFARE以外のType 4:ST25TA
STのST25TAファミリーは、DESFireの仕組みを一切持たない、ISO/IEC 14443 Type A上のType 4タグです。NDEFファイル1つ、ケーパビリティコンテナのファイルとシステムファイル、128ビットのパスワード2つ(読み取り用と書き込み用)、そして読み取りか書き込みを数えられる20ビットのイベントカウンターを持っています。
| チップ | NDEFファイル | パスワード | カウンター | 署名 | 書き換え耐性 / 保持期間 | ステータス |
|---|---|---|---|---|---|---|
| ST25TA512、ST25TA512B | 64バイト | 128ビットが2つ | B版は20ビット | B版はTruST25 | 1M / 200年 | 512は非推奨 |
| ST25TA02K、ST25TA02KB(-P、-D) | 256バイト | 128ビットが2つ | 20ビット | B版はTruST25 | 1M / 200年 | 02Kと02KBは非推奨。02KB-Pと02KB-Dは現行 |
| ST25TA16K、ST25TA64K | 2048または8192バイト | 128ビットが2つ | なし | なし | 1M / 200年 | 現行 |
200年のデータ保持と100万回の書き換え耐性。ただし通信速度は106 kbit/sのみです。-P版と-D版には、タグが読まれると切り替わる汎用出力ピンがあり、スマホに反応するランプはこれで作れます。どちらのスマホでもType 4タグとして読め、NFC.coolはNDEFの読み書きと、ISO-DEPの詳細表示に対応しています。
センサーとデュアルインターフェースのチップ
2つの顔を持つチップです。一方にNFCアンテナ、もう一方にI2Cバス、センサー、あるいは2つ目の無線があります。
| チップ | NFC側 | もう一方の側 | メモリ | 特記事項 |
|---|---|---|---|---|
| NTAG I2C plus(NT3H2111、NT3H2211) | Type 2、888または1912バイト、32ビットパスワード、署名 | 最大400 kHzのI2C、64バイトのSRAMパススルー、磁界検出ピン | 200kから500k / 20年 | 最大15 mWのエネルギーハーベスティング。xSIIDインプラントのチップ |
| ST25DV(上記参照) | Type 5 | 最大1 MHzのI2C、ストリーミング用の256バイトのメールボックス | 1M / 40年 | V_EHピンでのエネルギーハーベスティング(非安定化で、データシートによれば「数µW」) |
| NTAG 5 link、boost、switch | Type 5、2048または512バイト、5332はAES対応 | I2C、GPIO、PWM出力 | 1M / 40年 | 最大30 mWのハーベスティング。switch版はマイコンが一切不要 |
| NHS3100 | Type 2(ファームウェアでエミュレート) | 精度0.3 °Cの温度センサー付きCortex-M0+ | 32 kBのフラッシュ、4 kBのEEPROM | フィルム上のコールドチェーン記録装置。NFC Forum認証取得 |
| EM4423「em echo」 | Type 2、NDEF領域240バイト | UHF帯のRAIN RFID、同じメモリ、同じシリアル | 100k / 10年 | 販売終了 |
| EM4425「em echo-V」 | Type 5、最大256バイトを共有 | UHF帯のRAIN RFID、AES-128、改ざん検知パッド、デジタル署名 | 100k / 50年 | 現行。1つのダイが、スマホからは1センチで、搬入口のUHFリーダーからは数メートルで読める |
これらのチップで何かを作ったことはないので、この表はデータシートだけに基づいています。それでもこのガイドで取り上げるのは、商品ページに「NFCチップ」として登場して人を混乱させるからです。NTAG 5はNTAG213ではありませんし、em echoのタグがスマホで何か特別なことをするわけでもありません。
レガシーとニッチ
Topaz(Innovision、後にBroadcom)はNFC Forum Type 1です。8バイトのブロック、96または512バイト、一度きりのロック、書き換え耐性10,000回。どちらのスマホも今でもTopazからNDEFを読めますが、NFC Forumは2021年の仕様セットからType 1を外し、もう誰も新しい設計に採用していません。販売店にはまだ在庫があります。
FeliCaはソニーのファミリーで、日本の公共交通を支えています。FeliCa Lite-S(16バイトのブロックで224バイトのユーザーメモリ、8バイトのIDm、簡略化されたトリプルDESのMAC)がタグ版で、NFC Forum Type 3です。FeliCa Standardはスマートカード版で、現行のRC-SA01ではAESとCommon Criteria EAL6+の評価を備えており、Suica、PASMO、Edy、WAON、nanaco、そして香港のOctopusはこれで動いています。ソニーのFeliCa Plugモジュールは2026年3月に販売終了しました。NFC.coolは両プラットフォームでシステムコードから交通系・電子マネーのブランド名を表示し、Lite-SとStandardを読み取り、iPhoneではそれらにNDEFを書き込めます。
Kovio NFC Barcodeは、印刷シリコンによる読み取り専用の16バイトのタグでした。Androidには今でもこのためのNfcBarcodeクラスがあります。Kovioの資産は2014年にThinfilmに移り、Thinfilmは2019年にNFCの生産をやめ、2021年に社名を変えました。このクラスは化石のようなものです。
ISO 14443 Type Bのメモリチップ。STのSRI512、SRT512、SRI4K(32ビットのブロックで512または4096ビット、2つのカウントダウンカウンター、1,000,000回、40年)は、フランスやベルギーの交通機関や一部のスキーリフト券で使われています。AndroidはNfcBで扱えますが、iPhoneにはType Bのタグを低レベルで扱うオブジェクトがまったくありません。そのため、Type BのカードがISO-DEPを話してSELECTに応答しない限り、iPhoneからは見えません。パリのNavigoで使われているCalypsoは、それができるType Bスマートカードです。
クローンと互換品
商品ページが読んでほしくない章です。
Fudan FM11NT021は、NTAG213ではない「NTAG213」として最もよく見かけるものです。45ページで同じ180バイト、同じ144バイトのユーザー領域、パスワード、24ビットの読み取りカウンター、そしてUIDにFudanのメーカーコード1Dを持っています。GET_VERSIONを実装しておらず、現行のデータシートにはREAD_SIGコマンドも載っていないので、どちらかを尋ねたリーダーは応答を得られず、メモリサイズから推測するしかなくなります。Proxmark3のコミュニティがこれをNTAG203と報告するのはそのためです。Fudanは504バイト版と888バイト版(FM11NT041、FM11NT081)も作っています。ステッカーのリンク用途なら問題なく使えます。Amiiboには使えません。ゲーム機は最初にGET_VERSIONを尋ねるからです。
Fudan FM11RF08とFM11RF08Sは、安価な「1K」カードの大半に入っているClassic互換チップです。08Sは2020年に既知のClassic攻撃への対策を加えましたが、その後、製造されたすべてのカードに共通するハードウェアのバックドア鍵を持っていることが判明しました。Quarkslabは2024年にそれをツールとともに公表し、そのツールは今ではProxmark3のファームウェアに入っています。
マジックMIFARE Classicカードは、UIDとメーカーブロックを書き換えられるように作られたチップです。本物のClassicでは決してできないことです。その世代の違いは、それだけで一つの趣味の世界になっています。
| 世代 | UIDの変更方法 | 検出できるか | 備考 |
|---|---|---|---|
| Gen1a、Gen1b | バックドアのウェイクアップコマンド | できる。どのリーダーでもバックドアの有無を探れる | 元祖「チャイニーズマジックカード」。入退室システムはこれを弾く |
| Gen2、CUID | 認証した後、ブロック0へ通常の書き込み | 探れるバックドアがない。リーダーが実際に書き込みを試す必要がある | スマホに対応。現在の主流 |
| FUID、UFUID | 1回だけ、または封印するまで | 封印前ならできる | バッジを永久に複製するための使い切りカード |
| Gen3、APDU | 特殊なAPDUコマンド | そのコマンドを知っているリーダーならできる | |
| Gen4 GTU、GDM、「Ultimate」 | パスワードで保護された設定。UltralightやNTAGのエミュレートも可能 | パスワードが初期値のままの場合のみ | 7バイトUIDで、どのファミリーにも化けるカメレオンのようなカード |
マジックNTAG21xカードも存在し、完全にエミュレートするタイプのものは、コピーしたオリジナリティ署名まで受け付けます。これこそ、NXPが静的な署名について指摘している点です。
Amiibo用の「NTAG215互換」。Amiiboは普通のNTAG215で、その540バイトには、タグ自身のUIDから導いた鍵で暗号化・署名されたデータが入っています。バイトを別のタグにコピーすると、署名が合わなくなります。だからバックアップは書き込み先のUIDに合わせて鍵を付け直す必要があり、それがNFC.coolのAmiiboのバックアップと復元がやっていることです。ゲーム機の読み取り手順は、まずGET_VERSION、次にUIDから導いたパスワードによる認証、そして設定ページを含む全135ページの読み取りです。GET_VERSIONを持たないチップや、135ページではなく45ページしかないチップは、最初のステップで失敗します。TagMoのドキュメントは一行でこうまとめています。認識されるのはNTAG215だけ、と。
アプリでのクローンの見え方。NFC.coolはまずGET_VERSIONで識別します。それに応答しないチップや、宣伝されている内容と合わないメモリサイズを返すチップは、商品ページの表記ではなく、実際の正体で表示されます。NTAG 424 DNAでは、アプリはさらに一歩進んで、NXPの公開鍵でECDSAのオリジナリティ署名を検証します。アプリの中で、暗号的な裏付けをもって「正規のNXP」と言えるのはここだけです。NTAG21xでは署名を読みません。理由の一つはNXPの検証鍵がNDAの対象であること、もう一つはコピーされた静的署名はどのみち検証を通ってしまうことです。Type 2タグについて誠実に積み上げられる証拠は、メーカーコード、GET_VERSION、メモリサイズ、そしてチップが謳う機能が実際にあるかどうかです。
形状と読み取り距離
チップはタグに何ができるかを決め、形状はスマホがそこに届くかどうかを決めます。
| 形状 | 内容 | 一般的なアンテナ | スマホでの読み取り距離 | 定格と備考 |
|---|---|---|---|---|
| ウェットインレイ | 粘着剤と剥離紙の付いたPETフィルムに、エッチングしたアンテナとチップを載せたもの | 22から38 mm | 2から4 cm | チップを買ういちばん安い方法。貼れるのは一度だけ |
| ドライインレイ | 粘着剤なしの同じもの | 同上 | 同上 | 他のものにラミネートして組み込む用途 |
| 紙またはPETのステッカー | 印刷できる表面を持つインレイ | 22から38 mm | 2から4 cm | 紙の表面は印刷向き、PETの表面は水に強い |
| PVCカード | ISO 7810 ID-1、85.60 x 53.98 mm、厚さ0.76 mm | カード全体 | 3から5 cm | 手にするものの中で最大のアンテナ。リーダーの設計基準でもある |
| コイン、エポキシトークン | 硬い樹脂ドームの下にインレイを収めたもの。穴が開いていることが多い | 20から30 mm | 2から3 cm | 防水。Amiiboの形状 |
| キーホルダー | ABSケースに入ったインレイ | 20から30 mm | 2から3 cm | GoToTagsのキーホルダーはIP67、-25から+75 °Cの定格 |
| リストバンド | インレイ入りのシリコン | 20から25 mm | 1から3 cm | フェス、プール。バンドは曲がるが、インレイは曲げないほうがいい |
| 金属対応 | アンテナと金属の間にフェライトシートを挟んだインレイ | 22から34 mm | 金属上で2から3 cm | Seritagの測定では、同じ22 mmのタグが金属上で21から25 mm、金属なしで26から30 mm。産業用の34 mm版は31から40 mmで読め、IP68、-25から+85 °C |
| ランドリータグ | PPS製のボタンに入ったチップ | 16 mm | 1から2 cm | SmartracはHFランドリータグを洗濯200回、-30から+200 °C、60 barと定格。ランドリータグの多くはUIDのみのISO 15693 |
| インプラント | 2 x 12 mmのガラスカプセルか柔軟なポリマーに入ったチップ | 数ミリ | スマホのスイートスポットにぴったり合わせる必要がある | xNTはNTAG216、NExTは125 kHzのT5577を追加、xSIIDはLED付きのNTAG I2C plus、xDFはDESFire。フレックス版はガラス版よりずっと読みやすい |
「読めない」という問い合わせの大半は、2つの物理法則で説明できます。アンテナの大きさで距離が決まる。おおまかに言えば、カードはコインより遠くから読め、コインは10 mmのインレイより遠くから読め、インプラントは接触が必要です。金属はアンテナの同調を狂わせる。金属面上のコイルは金属に渦電流を誘起し、インダクタンスが下がって共振周波数が13.56 MHzからずれていくので、スチールキャビネットに貼った普通のタグはまったく反応しません。コイルと金属の間にフェライトシートを挟むと磁界の向きが変わってタグが復活しますが、その代わりに読み取り距離は短くなり、コストも上がります。金属対応タグが3倍の値段なのはそのためです。
スマホをどこにかざすかも、タグと同じくらい重要です。iPhoneのアンテナは上端にあります。Apple自身の説明も「iPhoneの上部を」タグに「近づける」です。Androidは機種によって異なり、たいてい背面の中央かカメラの近くです。入門ガイドに手順を載せています。
どの機器で何が読めるか
スマホとリーダーの対応表です。スマホの列はAppleとGoogleのドキュメントと、私自身のアプリに基づいています。デスクトップとホビー向けの列はベンダーの仕様書と各プロジェクトのドキュメントによるもので、iPadとMacの列で名前を挙げたリーダーを除き、私自身はそれらの機器をテストしていません。
| チップファミリー | iPhoneのバックグラウンド | iPhoneのアプリ内 | Android | iPadとMac(USBリーダー) | Web NFC(AndroidのChrome) | ACR122U | ACR1552U、OMNIKEY 5022 | PN532ボード | Proxmark3 | Flipper Zero |
|---|---|---|---|---|---|---|---|---|---|---|
| NTAG21x、Ultralight EV1、その他のType 2 | URLレコードのみ | NDEF、パスワード、カウンター、ミラー、ダンプ | 同上 | 同上(NFC.cool経由) | NDEFのみ | 可 | 可 | 可 | 可、エミュレーションも | 可、エミュレーションも |
| NTAG 22x DNA | URLレコード | NDEF、低レベルコマンド | 同上 | Type 2と同じ | NDEF | 可 | 可 | 可 | 可 | NTAGとして読み取り |
| NTAG 424 DNA、ST25TA、Type 4としてのDESFire | URLレコード | NDEF、APDU | NDEF、APDU | NDEF、424の完全な設定 | NDEF | 可 | 可 | 可 | 可 | NDEFを読み取り。鍵の操作は不可 |
| Ultralight C | フォーマット済みならNDEF | NDEF、ネイティブコマンド | 同上 | NDEF | NDEF | 可 | 可 | 可 | 可 | 可 |
| Ultralight AES | フォーマット済みならNDEF | NDEF、ネイティブコマンド | 同上 | NDEF | NDEF | 可 | 可 | 可 | 可 | Ultralightとして読み取り |
| MIFARE Classic | 不可 | UIDとファミリーのみ | コントローラーがCRYPTO1を持つスマホなら完全な読み書き | NDEFの読み取りのみ(公知の鍵) | 不可 | 可(鍵があれば) | 可(鍵があれば) | 可(鍵があれば) | 可、鍵の復元とエミュレーションも | 可、鍵の復元とエミュレーションも |
| MIFARE Plus | 不可 | SL1ではUID、SL3ではISO-DEP | SL1ではClassicと同じ、SL3ではIsoDep | UID | 不可 | 可 | 可 | 可 | 可 | 記載なし |
| DESFire(ネイティブ) | 不可 | ファミリーとバージョン、APDU | IsoDep | バージョン | 不可 | 可 | 可 | 可 | 可 | 読み取りと保存のみ |
| ISO 15693:ICODE、ST25TV、ST25DV、TI、EM | URLレコード | iOS 13以降はISO 15693の全コマンドセット | NfcV | 未検証 | NDEF | 不可 | 可 | 不可 | 可、エミュレーションも | 可、エミュレーションも |
| FeliCa Lite-SとStandard | URLレコード | システムコードを宣言すれば読み書き | NfcF | 読み取り。NFC.cool経由でFeliCaに書き込み | NDEF | 可 | OMNIKEYはUIDのみ | 可 | 可 | Lite-Sの読み取りとエミュレート |
| Topaz(Type 1) | NDEF | NDEF | NDEF | 未検証 | NDEF | 可 | 記載なし | 可 | 可 | 記載なし |
| ISO 14443 Type Bのメモリチップ(SRI512) | 不可 | 不可 | NfcB | 未検証 | 不可 | 可 | 可 | リーダーとしてのみ | 可 | UIDのみ |
| 125 kHzのバッジ、ペットのチップ、UHFラベル | 不可 | 不可 | 不可 | 不可 | 不可 | 不可 | 不可 | 不可 | 125 kHzは可 | 125 kHzは可 |
いくつかの行には一言添えておきます。
iPhoneのバックグラウンド読み取りが動くのは、NDEFのURLレコードに対してだけで、スマホのロックが解除されて使用中のときだけです。カメラ、ウォレット、リーダーセッション、機内モードが有効な間は動きません。チップを低レベルで読むことは決してありません。対応はiPhone XS以降です。
そもそもタグを読めるiPhone:AppleのWWDC 2019のセッションによれば、アプリ内ならiPhone 7以降です。書き込みと低レベルコマンドはiOS 13で加わりました。
Androidの
MifareClassicクラスはオプションです。Google自身の言葉では「実装されていない場合、MifareClassicが列挙されることはない」。決めるのはAndroidのバージョンではなく、コントローラーです。Web NFCはNDEFのみ、Chrome 89以降、Androidのみで、Appleは否定的な立場を取っているので、Safari版は出てきません。このサイトのオンラインNFCリーダーがAndroidでは動き、iPhoneのユーザーにはアプリを使うよう案内しているのはそのためです。
iPadとMacにはNFCの無線がありません。NFC.cool 6.15.0以降、アプリは代わりにAppleのスマートカードスタックを通じてUSB CCIDリーダーと通信します。私がテストしたのはHID OMNIKEY 5022 CLで、ACS ACR1552U-M1とACR1255U-J1はユーザーから動作報告がありました。制限はこちらの記事にまとめています。NTAGのパスワードの設定はリーダー経由でもできますが、解除にはOMNIKEYが拒否するコマンドが必要なので、そちらはスマホの仕事です。
ACS ACR122UはISO 15693に対応していません。ACR1252UもACR1255U-J1も同様です。ACSの製品で対応しているのはACR1552Uだけです。OMNIKEY 5022は両方に対応しています。図書館のタグ用にリーダーを買う前に、知っておく価値があります。
Proxmark3とFlipper Zeroは、MIFARE Classicの鍵を復元し、カードをエミュレートできるツールです。それがこれらの道具の目的で、「何で読めるか」を語るのにこれらを外すのは不誠実なので、このガイドでも取り上げています。
| リーダー | インターフェース | Type A | Type B | FeliCa | ISO 15693 | 125 kHz | 鍵ありのClassic | Classicの鍵復元 | エミュレーション | 2026年9月時点の価格 |
|---|---|---|---|---|---|---|---|---|---|---|
| ACS ACR122U | USB、PC/SC | 可 | 可 | 可 | 不可 | 不可 | 可 | 不可 | 不可 | 約USD 40から50。ACSは販売を終了しており、偽物が多い |
| ACS ACR1252U | USB、PC/SC | 可 | 可 | 可 | 不可 | 不可 | 可 | 不可 | カードエミュレーションモード | USD 97.50 |
| ACS ACR1552U | USB、PC/SC | 可 | 可 | 可 | 可 | 不可 | 可 | 不可 | カードエミュレーションモード | USD 44.81 |
| ACS ACR1255U-J1 | BluetoothとUSB | 可 | 可 | 可 | 不可 | 不可 | 可 | 不可 | 不可 | USD 64.81 |
| HID OMNIKEY 5022 CL | USB、PC/SC | 可 | 可 | UIDのみ | 可 | 不可 | 可 | 不可 | 不可 | EUR 69.99 |
| PN532ブレイクアウト | SPI、I2C、UART | 可 | リーダーとしてのみ | 可 | 不可 | 不可 | 可 | ホスト側のツールで | Classic 1K/4KとFeliCa | USD 24から40 |
| Proxmark3 RDV4 | USB、BLEはオプション | 可 | 可 | 可 | 可 | 可 | 可 | 可 | 可 | EUR 329から529 |
| Proxmark3 Easy | USB | 可 | 可 | 可 | 可 | 可 | 可 | 一部 | 可 | EUR 78。クローンは約GBP 28から |
| Flipper Zero | 単体動作、USB-C、BLE | 可 | 限定的 | Lite-S | 可 | 可 | 可 | 可 | 可 | USD 169 |
| Chameleon Ultra | USB-C、BLE | 読み取りとエミュレート | 不可 | 不可 | 不可 | エミュレートと読み取り | 可 | 可 | 可 | EUR 129 |
NFC.cool Toolsがチップごとにできること
記事の中で私が作ったものが登場するのはこのあたりですが、ここに置いたのには理由があります。上のどの行も、結局は「で、アプリはそれで何ができるの?」に行き着くからです。下の表は宣伝文句ではありません。このガイドを書きながらアプリのソースコードから抜き出したもので、おかげで、そうでなければ書いていたはずの2つの誤りに気づけました。
| 項目 | iPhone | Android | iPadとMac(リーダー使用) |
|---|---|---|---|
| 製品ごとの識別 | 約60製品:NTAG203から216、NTAG I2C、UltralightとC、容量別のUltralight EV1、Ultralight AES、Classic Mini・1K・4K、セキュリティレベル別のPlus 2Kと4K、容量別のDESFire EV1・EV2・EV3、NTAG 424 DNAとそのTagTamper版、ICODE SLI・SLI-S・SLI-L・SLIX・SLIX-S・SLIX-L・SLIX2、TI Tag-it Standard・Pro・Plus、ST25TV・ST25DV・M24LR、Infineon my-d、富士通MB89R118、EM4233とEM4423、FeliCa LiteとStandard、さらにSuica、PASMO、ICOCA、Edy、WAON、nanaco。EMVカードとPIVカードはそれとして認識 | 約20製品:NTAG203・213・215・216、NTAG 424 DNA、DESFire、Classic Mini・1K・4K、Plus 2Kと4K、JCOPとSmartMX、Octopusを含むFeliCaのブランド。ISO 15693チップは製品名ではなく容量で表示 | リーダーが受け取るATR(リセット応答)から判別したカードの種類 |
| NDEFの読み取り | すべてのファミリー | すべてのファミリー | Type 2、Type 4、FeliCa。Classicは公開されている鍵で |
| NDEFの書き込み、タグの消去 | Type 2、Type 4、Type 5、FeliCa Lite-SとStandard | Type 2、Type 5、NDEFディレクトリ付きのMIFARE Classic、Androidがフォーマットできるものすべて | Type 2、Type 4、FeliCa |
| メモリ全体のゼロ消去 | Type 5 | Type 2、Type 5、Classic | iPhoneと同じ |
| 永久ロック | Type 2のロックバイト。Type 4、Type 5、FeliCaではNDEFを読み取り専用に。NTAG 424 DNAでは意図的に拒否 | Type 2 | 可 |
| パスワード | NTAG213、215、216、203 | Type 2ファミリー | 設定は可。解除はリーダー次第 |
| タップカウンターとミラー | NTAG213、215、216 | NTAG213、215、216 | 可 |
| メモリの完全ダンプ | Type 2、ISO 15693、DESFireのファイル一覧、FeliCa、NTAG 424 DNAのファイル | 工場出荷時の鍵でのClassic、Ultralight、ISO 15693、FeliCa、あらゆるType A | Type 2、Type 4、FeliCa |
| MIFARE Classicの中身 | 不可。Core NFCにはCRYPTO1がない | 工場出荷時の鍵で読み取り、公開されている鍵でフォーマットと書き込み | NDEFの読み取りのみ |
| NTAG 424 DNA | 鍵、平文モードと暗号化モードのSUN、ファイルのアクセス権、チップの設定、Vaultファイル、ランダムUID、LRP、改ざん状態、オリジナリティ署名の検証 | 同じ | 同じ |
| Amiibo | NTAG215のバックアップと復元(書き込み先のタグに合わせて鍵を付け直す) | 同じ | 可 |
| ISO 15693のパスワード、EAS、AFI | 未対応 | 未対応 | 不可 |
| DESFireの認証と書き込み | 不可 | 不可 | 不可 |
| 低レベルコマンド | エキスパート向けのAPDUモード | コマンドカタログ | 可 |
念のため、その2つの訂正を記録しておきます。私はアプリがNTAG21xタグのオリジナリティ署名を検証すると書くところでしたが、実際には検証していません。検証するのは424だけです。また、ISO 15693のパスワードコマンドは実装済みだと書くところでしたが、実際にはUIを待っている参照テーブルの段階です。どちらもやることリストに入っています。
失敗しない買い方
私が購入する前に、商品ページに書いてあってほしいこと:
正確なチップ名。「NFC 213」ではなく「NTAG213」、「ISO 15693タグ」ではなく「ICODE SLIX2」、「1Kカード」ではなく「MIFARE Classic EV1 1K」。チップ名が書いていないなら、売り手が知らないか、知られたくないかのどちらかです。
バイト単位のユーザーメモリ。チップと一致しているはずです。NTAG213なら144、215なら504、216なら888、SLIX2なら316。「1K」が実はMIFARE Classicだった場合、iPhoneでは使えません。
メーカー(正規のNXPやSTを謳っている場合)。買った後ならUIDのメーカーコードが真実を教えてくれますし、買う前なら価格が教えてくれます。正規のNTAG216ステッカーを相場の3分の1で売る人はいません。
アンテナのサイズと形状。10 mmのインレイは1センチ、38 mmのものは4センチで読めます。金属対応なら、金属対応と明記されているべきです。
NDEFフォーマット済みかどうか。NTAGはフォーマット済みで出荷されますが、Ultralight EV1とほとんどのISO 15693チップはそうではありません。NFC.coolでフォーマットできますが、手間が一つ増えます。
要注意のサイン:「NTAG215互換」(NTAG215ではありません)、階段の段4より下のチップに書かれた「暗号化」、MIFARE Classicに書かれた「全スマホ対応」、そしてSLIX3のように、メーカーが一度も使ったことのない文字を含むチップ名です。
タグの価格。2026年9月9日に、Seritag、Shop NFC、GoToTags、NFCW Shop、NFC.CARDS、NFC-Tag-Shop.de、Tagstand、Digi-Keyで確認した掲載価格です。ほとんどの店は最低でも10枚単位で売っているので、「1枚」の列はその店の最小単位です。価格は変動するので、比率として見てください。
| タグ | 1枚または最小単位 | 100枚あたり | 1,000枚あたり | チップ単体 |
|---|---|---|---|---|
| NTAG213ステッカー | EUR 0.32から0.65、USD 0.33から0.58 | EUR 0.29から0.34 | EUR 0.23から0.24、USD 0.50 | ウェハー単位の数量でUSD 0.14 |
| NTAG215ステッカーまたはカード | USD 0.48から0.54、GBP 0.64から0.67 | USD 0.35 | USD 0.33 | USD 0.21 |
| NTAG216ステッカー | EUR 0.97、USD 0.71 | EUR 0.70、USD 0.61 | EUR 0.56、USD 0.56 | USD 0.37 |
| NTAG 424 DNAステッカー | EUR 0.63、USD 0.90 | EUR 0.62、USD 0.77 | EUR 0.57、USD 0.68 | 1個でUSD 0.79、1,000個単位で0.51 |
| MIFARE Classic 1Kカード | 10枚単位でEUR 1.35から1.59。小売の1枚売りでEUR 6.69 | EUR 1.29から1.52、USD 1.98 | EUR 0.95から1.13、USD 0.86 | |
| DESFire EV3カード | EUR 1.85から2.79 | EUR 1.85から2.45 | EUR 1.35から2.29 | 31,000個でUSD 1.18 |
| ICODE SLIX2ラベル | EUR 0.69 | EUR 0.34から0.37 | EUR 0.22から0.25 | 1個でUSD 0.35、1,000個単位で0.22 |
| ST25TV02KCインレイ | USD 0.32から0.87 | USD 0.30から0.79 | USD 0.28から0.77 | リール単位でUSD 0.13 |
傾向は予想どおりです。メモリはほぼタダ、暗号機能が付くとおよそ2倍、そして形状のほうがチップより高くつきます。NTAG213のダイ単体は14セントで、価格の大半はそれを包むステッカーの分です。
購入先について。私が実際に使っているタグとリーダーはアフィリエイトリンクのページにまとめています。DNA機能一式のきっかけになった424タグはAliExpressで買ったものなので、マーケットプレイスは避けるべきだと言うつもりはありません。届いたら、何かを書き込む前にアプリで確認してください。
全チップのカタログ表
チップごとに1行です。「ユーザーバイト数」は書き込める容量で、DESFireはNXPが示す使用可能な数値です。スマホの列はプラットフォームとしてできることで、すべてのアプリができることではありません。NFC.coolの列は私のアプリができることです。スマホでは横にスクロールしてください。最初の列は固定されています。
| チップ | メーカー | Forumタイプ | 規格 | ユーザーバイト数 | UID | 保護 | 書き換え耐性 / 保持期間 | iPhone | Android | NFC.cool | 最適な用途 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| NTAG 210µ | NXP | 2 | 14443-A | 48 | 7 | ロックビット | 100k / 10年 | NDEF、低レベル | NDEF、低レベル | 読み書き | 小さな使い捨て |
| NTAG210 | NXP | 2 | 14443-A | 48 | 7 | パスワード | 100k / 10年 | NDEF、低レベル | NDEF、低レベル | 読み書き | 小型アンテナ |
| NTAG212 | NXP | 2 | 14443-A | 128 | 7 | パスワード | 100k / 10年 | NDEF、低レベル | NDEF、低レベル | 読み書き | 容量に余裕のある小型アンテナ |
| NTAG213 | NXP | 2 | 14443-A | 144 | 7 | パスワード、カウンター、ミラー | 100k / 10年 | NDEF、低レベル | NDEF、低レベル | すべて | 定番のステッカー |
| NTAG215 | NXP | 2 | 14443-A | 504 | 7 | パスワード、カウンター、ミラー | 100k / 10年 | NDEF、低レベル | NDEF、低レベル | すべて、Amiibo | Amiibo、中くらいのデータ |
| NTAG216 | NXP | 2 | 14443-A | 888 | 7 | パスワード、カウンター、ミラー | 100k / 10年 | NDEF、低レベル | NDEF、低レベル | すべて | 連絡先、迷ったらこれ |
| NTAG213F、216F | NXP | 2 | 14443-A | 144、888 | 7 | パスワード、磁界検出ピン | 100k / 10年 | 213と同じ | 213と同じ | 213と同じ | 電子機器に組み込むタグ |
| NTAG 213 TT | NXP | 2 | 14443-A | 144 | 7 | パスワード、改ざん検知ワイヤー | 100k / 10年 | 213と同じ | 213と同じ | 213と同じ | 封印 |
| NTAG203 | NXP | 2 | 14443-A | 144 | 7 | ロック、OTP | 10k / 5年 | NDEF | NDEF | 読み書き、パスワード | 旧在庫 |
| NTAG I2C plus | NXP | 2 | 14443-A | 888、1912 | 7 | パスワード | 200kから500k / 20年 | NDEF、低レベル | NDEF、低レベル | 識別、読み書き | マイコン付きの電子機器 |
| NTAG 223、224 DNA | NXP | 2 | 14443-A | 144、208 | 7 | パスワードまたはAES、SUN | 100k / 10年 | NDEF、低レベル | NDEF、低レベル | Type 2として | 安価な真正性証明 |
| NTAG 22x DNA StatusDetect | NXP | 2 | 14443-A | 144、208 | 7 | 同上、センサー | 100k / 10年 | NDEF、低レベル | NDEF、低レベル | Type 2として | 封印とセンシング |
| NTAG 413 DNA | NXP | 4 | 14443-4 | 160 | 7 | AES鍵3つ、SUN | 200k / 50年 | NDEF、APDU | NDEF、APDU | 識別 | 製造終了 |
| NTAG 424 DNA | NXP | 4 | 14443-4 | 416 | 7 | AES鍵5つ、SUN、LRP | 200k / 50年 | NDEF、APDU | NDEF、APDU | 完全な設定 | 真正性証明 |
| NTAG 424 DNA TT | NXP | 4 | 14443-4 | 416 | 7 | 同上、改ざん検知 | 200k / 50年 | NDEF、APDU | NDEF、APDU | 完全な設定 | 真正性証明付きの封印 |
| Ultralight | NXP | 2 | 14443-A | 48 | 7 | ロック、OTP | 10k / 5年 | NDEF | NDEF | 読み書き | 製造終了 |
| Ultralight C | NXP | 2 | 14443-A | 144 | 7 | 3DES | 100k / 10年 | NDEF、低レベル | NDEF、低レベル | 読み書き | 旧来のチケット |
| Ultralight EV1 | NXP | 2 | 14443-A | 48、128 | 7 | パスワード、カウンター3つ | 100k / 10年 | NDEF、低レベル | NDEF、低レベル | 読み書き、パスワード | チケット、使い捨て |
| Ultralight AES | NXP | 2 | 14443-A | 144 | 7 | AES-128 | 100k / 10年 | NDEF、低レベル | NDEF、低レベル | 読み書き | 認証付きのType 2 |
| Ultralight Nano | NXP | 2 | 14443-A | 40 | 7 | ロック、OTP | 100k / 10年 | NDEF | NDEF | 読み書き | 片道切符 |
| Classic Mini | NXP | なし | 14443-A | 224 | 4 | CRYPTO1 | 100k / 10年 | UID | コントローラー次第 | Android:読み取り、フォーマット | なし |
| Classic 1K、EV1 | NXP | なし | 14443-A | 752 | 4または7 | CRYPTO1 | 100k / 10年 | UID | コントローラー次第 | Android:読み取り、フォーマット | なし |
| Classic 4K、EV1 | NXP | なし | 14443-A | 3440 | 4または7 | CRYPTO1 | 100k / 10年 | UID | コントローラー次第 | Android:読み取り、フォーマット | なし |
| Plus SE | NXP | なし | 14443-A | 752 | 4または7 | SL3でAES | 100k / 10年 | UID | Classicと同じ | 識別 | Classicからの移行 |
| Plus EV2 | NXP | なし | SL3では14443-4 | 1520、3440 | 4または7 | AES-128、EAL5+ | 200k / 25年 | ISO-DEP | IsoDep | 識別 | 入退室管理 |
| DESFire EV1 | NXP | 4 | 14443-4 | 2304から7936 | 7 | DES、3DES、AES | 200k / 10年 | NDEF、APDU | NDEF、APDU | 識別、ファイル一覧 | 旧来の交通系 |
| DESFire EV2 | NXP | 4 | 14443-4 | 2560から16384 | 7 | AES、EAL5+ | 200k / 25年 | NDEF、APDU | NDEF、APDU | 識別、ファイル一覧 | 入退室管理 |
| DESFire EV3 | NXP | 4 | 14443-4 | 2560から16384 | 7 | AES、SUN、EAL5+ | 最低200k、標準1M / 25年 | NDEF、APDU | NDEF、APDU | 識別、ファイル一覧 | 入退室管理、交通系 |
| DESFire Light | NXP | 4 | 14443-4 | 640 | 7 | AES、LRP、EAL4 | 200k / 10年 | NDEF、APDU | NDEF、APDU | 識別 | 単一アプリケーションのカード |
| ICODE SLI | NXP | 5 | 15693 | 112 | 8 | ロック | 100k / 10年 | NDEF、低レベル | NfcV | 読み書き、フォーマット | 生産終了 |
| ICODE SLI-S、SLI-L | NXP | 5 | 15693 | 160、32 | 8 | パスワード | 100k / 10年 | NDEF、低レベル | NfcV | 読み書き、フォーマット | 製造終了 |
| ICODE SLIX | NXP | 5 | 15693 | 112 | 8 | EAS/AFIパスワード | 100k / 50年 | NDEF、低レベル | NfcV | 読み書き、フォーマット | 図書館や物流向けの在庫品 |
| ICODE SLIX-S、SLIX-L | NXP | 5 | 15693 | 160、32 | 8 | パスワード、プライバシー | 100k / 50年 | NDEF、低レベル | NfcV | 読み書き、フォーマット | 物流 |
| ICODE SLIX2 | NXP | 5 | 15693 | 316 | 8 | パスワード、プライバシー、カウンター、署名 | 100k / 50年 | NDEF、低レベル | NfcV | 読み書き、フォーマット | 在庫管理、OpenPrintTagのスプール |
| ICODE DNA | NXP | 5 | 15693 | 252 | 8 | AES-128 | 100k / 50年 | NDEF、低レベル | NfcV | ISO 15693として読み取り | 離れた距離でのブランド保護 |
| ICODE 3 | NXP | 5 | 15693 | 300 | 8 | パスワード、タップカウンター、ミラー、署名 | 100k / 50年 | NDEF、低レベル | NfcV | ISO 15693として読み取り | 現行の在庫管理用チップ |
| NTAG 5 | NXP | 5 | 15693 | 512、2048 | 8 | パスワード、5332はAES | 1M / 40年 | NDEF、低レベル | NfcV | ISO 15693として読み取り | コネクテッドな電子機器 |
| ST25TN512、01K | ST | 2 | 14443-A | 64、160 | 7 | kill、タップコード、TruST25 | 100k / 40年 | NDEF、低レベル | NDEF、低レベル | Type 2として読み取り | NTAG213の代替 |
| ST25TV512C、02KC | ST | 5 | 15693 | 64、320 | 8 | パスワード、kill、プライバシー、タップコード、TruST25 | 100k / 60年 | NDEF、低レベル | NfcV | ST25TVとして識別、読み書き | タップごとに新しいURLを出すラベル |
| ST25TV16K、64K | ST | 5 | 15693 | 2048、8192 | 8 | 64ビットパスワード、kill | 1M / 40年 | NDEF、低レベル | NfcV | 読み書き | 大容量のType 5 |
| ST25DV04Kから64K | ST | 5 | 15693 | 512から8192 | 8 | 64ビットパスワード | 1M / 40年 | NDEF、低レベル | NfcV | ST25DVとして識別、読み書き | マイコン付きのダイナミックタグ |
| M24LR | ST | 表明なし | 15693 | 512から8192 | 8 | 32ビットパスワード | 1M / 40年 | NDEF、低レベル | NfcV | ST25TVとして読み取り | 旧来のデュアルインターフェース |
| ST25TA02K、02KB | ST | 4 | 14443-4 | 256 | 7 | 128ビットパスワード、カウンター、B版はTruST25 | 1M / 200年 | NDEF、APDU | NDEF、APDU | 読み書き | DESFire抜きのType 4 |
| ST25TA16K、64K | ST | 4 | 14443-4 | 2048、8192 | 7 | 128ビットパスワード | 1M / 200年 | NDEF、APDU | NDEF、APDU | 読み書き | 大容量のType 4 |
| TI Tag-it HF-I Standard、Pro、Plus | TI | 表明なし | 15693 | 32、32、256 | 8 | ロック。Proはパスワード付き書き込みとkillを追加 | 100k / 10年 | NDEF、低レベル | NfcV | 識別、読み取り | 旧来の図書館 |
| EM4233 | EM | 表明なし | 15693 | 208 | 8 | 96ビット鍵、プライバシー、破壊 | ? / 60年 | NDEF、低レベル | NfcV | 識別、読み取り | 要望に応じて供給 |
| EM4425 em echo-V | EM | 5 | 15693とUHF | 最大256 | 8 | AES-128、パスワード、改ざん検知 | 100k / 50年 | NDEF、低レベル | NfcV | ISO 15693として読み取り | 2周波数の小売用途 |
| Infineon my-d move | Infineon | 2 | 14443-A | 128 | 7 | パスワード、バリューカウンター | 100k / 10年 | NDEF、低レベル | NDEF、低レベル | 識別、読み取り | 乗車券・入場券 |
| Fudan FM11NT021 | Fudan | 2 | 14443-A | 144 | 7 | パスワード、カウンター | 公称500k / 10年 | NDEF、低レベル | NDEF、低レベル | 汎用のType 2として読み取り | 安価なリンク用ステッカー |
| Fudan FM11RF08、08S | Fudan | なし | 14443-A | 752 | 4 | CRYPTO1、バックドアあり | ? | UID | コントローラー次第 | Classicと同じ | なし |
| Topaz 96、512 | Innovision、Broadcom | 1 | 14443-A | 96、約480 | 7 | 一度きりのロック | 10k / 5年 | NDEF | NDEF | NDEF | レガシー |
| FeliCa Lite-S | ソニー | 3 | 18092、JIS X 6319-4 | 224 | 8(IDm) | 3DES MAC | ? | NDEF、低レベル | NfcF | 読み書き | 日本 |
| FeliCa Standard | ソニー | 3 | 18092 | 4 kB | 8 | AES、EAL6+ | ? | NDEF、低レベル | NfcF | 読み取り、ブランド表示 | 交通系と電子マネー |
| Kovio NFC Barcode | Kovio、Thinfilm | なし | 独自仕様 | 16(読み取り専用) | なし | なし | 該当なし | 不可 | NfcBarcode | 不可 | 消滅 |
| ST SRI512、SRT512、SRI4K | ST | なし | 14443-B | 64、512 | 8 | カウンター、ロック | 1M / 40年 | 不可 | NfcB | 不可 | Type Bの交通系 |
よく検索される比較
NTAG213 vs NTAG215 vs NTAG216。同じチップの3つのメモリサイズで、144、504、888バイトです。パスワード、カウンター、ミラー、署名は共通です。リンクなら213、Amiiboなら215、連絡先カードや、考えるのが面倒なら216を買ってください。価格差は30セントほどです。
NTAG213 vs Ultralight EV1。無線インターフェースとコマンドは同じです。NTAGにはASCIIミラーと書き込み済みのケーパビリティコンテナがあり、EV1には3つの一方向カウンターがあって、48バイトか128バイトで提供されます。ステッカーにはNTAG、チケットにはEV1です。
NTAG213 vs ST25TN01K vs Fudan FM11NT021。どれも144から160バイトのType 2チップです。NTAGはパスワードと読み取りカウンターを持ち、GET_VERSIONに応答します。ST25TNはメモリが多く、killコマンド、タップコード、TruST25を持ちますが、パスワードはありません。FudanはNTAGの機能をコピーしていますが、GET_VERSIONがなく、現行のデータシートでは署名もありません。普通のリンクならどれでも構いませんが、カウンターやAmiiboならNTAGです。
MIFARE Classic vs DESFire。勝負になりません。Classicの暗号は2008年に破られ、最も普及しているクローンには2024年にバックドアが見つかりました。DESFire EV3にはAES、鍵管理、EAL5+認証、SUNがあります。Classicを選ぶ理由があるとすれば、壁のリーダーが2009年に設置されたものだ、ということだけです。
NTAG 424 DNA vs NTAG213。424はタップのたびにAES-128で署名し、5つの鍵で守られた3つのファイルに416バイトを保存します。213は32ビットのパスワードで144バイトを保存します。問いが「この製品は本物か」なら、答えられるのは424だけです。問いが「このステッカーでリンクが開くか」なら、213が3分の1の価格でこなします。
NTAG 424 DNA vs NTAG 223 DNA。どちらもSUNに対応しています。424は5つの鍵、LRP、ランダムUIDオプション、Vaultファイル、50年のデータ保持を備えたType 4です。223はSUN鍵1つ、32ビットパスワード、10年保持のType 2ステッカーです。署名付きURLをラベルに載せる安い方法は223で、今すぐ設定できるアプリがあるのは424です。
在庫管理でのICODE SLIX2 vs NTAG216。読み取りに使うのがスマホだけなら、NTAG216のほうがメモリが多く、カウンターもあります。ゲートやハンディリーダーが関わるなら、SLIX2は1メートル、NTAGは4センチで読めるので、それで決まりです。
日本でのFeliCa vs NTAG。日本の改札はFeliCaしか話しませんが、日本のスマホはどちらも読めます。東京のポスターに貼るタグならNTAGで十分です。Suicaのリーダーに受け付けてもらう必要があるものならFeliCaで、それはスマホのアプリでプログラムするようなチップではありません。
よくある質問
NTAG215とNTAG216、どちらを買うべきですか?
Amiiboを書き込むのでなければ216です。215の504バイトに対して888バイトあり、パスワード、カウンター、ミラーも、スマホの対応状況も同じです。215がどの店にもあるのは任天堂のフィギュアが使っているからで、それが目的ならこれ一択です。
iPhoneでMIFARE Classicタグは読めますか?
そこにあることはわかります。Core NFCはUIDとSAKを読んでそこで止まります。AppleのAPIにはClassicのファミリーがなく、ドキュメントにはMIFAREコマンドが「Crypto1プロトコルには対応していない」と書かれています。iPhoneでセクターを読めるアプリはありません。NXPのNFCコントローラーを積んだAndroidスマホなら読めます。他の一部のコントローラーを積んだスマホでは読めず、そうした機種にはMifareClassicクラスがそもそも現れません。
NFCタグは何回書き換えられますか?
NXPやSTの現行品なら、室温で100,000回です。データシートの数値は最低保証値です。DESFire EV3やST25DVは100万回の定格です。古いNTAG203、初代Ultralight、Topazは10,000回でした。ステッカーを1万回書き換える人はいません。この数字が意味を持つのは、カウンターやログを記録するタグです。
NFCタグはどれくらいの距離で使えますか?
スマホの正しい位置にかざした場合、カードサイズのアンテナで最大約4センチ、小さなステッカーで約2センチです。NFC Forum自身の定義は「最大2 cm」です。大きなアンテナを持つゲートリーダーなら、ISO 15693タグは1メートル離れても動きます。しかしスマホで読む場合は他のタグと同じ数センチで、せいぜいType 2タグの2倍程度です。
NFCタグに寿命や劣化はありますか?
チップのデータ保持期間は、多くの民生用チップで10年、NTAG 424 DNAとICODE SLIXファミリーで50年、ST25TVで60年、ST25TAで200年で、いずれも室温での値です。熱があると短くなります。実際には、EEPROMよりずっと先に、接着剤、紙の表面、アンテナがだめになります。
マーケットプレイスの安いNFCタグは買っても大丈夫ですか?
安全という意味では大丈夫です。ただ、謳っているとおりのものとは限りません。安い「NTAG213」はFudan FM11NT021であることが多く、リンク用途には使えますが、GET_VERSIONを尋ねるものには使えません。安い「NTAG215」は本物でないことが多く、Amiiboには拒否されます。何かを書き込む前にアプリでメーカーコードとチップ名を確認し、チップ名を明記している店で買ってください。
NFCアプリでスマホから銀行カードやパスポートを読めますか?
パスポートは読めます。機械読み取り領域を鍵にすれば、アプリはチップのデータグループを読み取れ、NFC.coolは両プラットフォームでそれができます。銀行カードはEMVスマートカードです。アプリはアプリケーション一覧と一部の公開レコードを読めますが、AppleはCore NFCで決済カードの読み取りをブロックしていますし、カードのセキュリティコードはチップに入っておらず、すべての取引はカードの外に決して出ない鍵で署名されます。つまり、コピーできるものは何もありません。
オフィスのバッジやホテルのキーがアプリに表示されないのはなぜですか?
オフィスのバッジの多くは125 kHzの近接カードで、スマホの13.56 MHzのコイルでは存在を感知することさえできません。ホテルのキーや古い交通カードの多くはMIFARE Classicで、iPhoneでは識別しかできず、Androidスマホでも適切なコントローラーと適切な鍵がなければ読めません。どちらもアプリで解決できることではなく、回避策を売りつけるより、そうはっきり言っておきたいのです。
読み取り専用にしたNFCタグのロックは解除できますか?
できません。Type 2やType 5タグのロックビットはチップ内の一方向のビットで、ケーパビリティコンテナの読み取り専用フラグも同じです。パスワードは知っていれば解除できますが、ロックは解除できません。NFC.coolが何かをロックする前に2回確認するのはそのためです。
NTAGのパスワードは本当のセキュリティになりますか?
無料アプリを持った人、つまりほとんどの人は止められます。通信を傍受できるリーダーを持つ人は止められません。32ビットのパスワードは暗号化されずに無線で送られ、タグは16ビットの確認応答を返すからです。本気の攻撃者に耐える必要があるものなら、階段はAESから始まります。Type 2ステッカーならUltralight AES、タップそのものが何かを証明する必要があるならNTAG 424 DNAです。
Amiiboにはどのタグが必要ですか?
NTAG215、それもNTAG215だけです。ゲーム機はGET_VERSIONを尋ね、UIDから導いたパスワードで認証し、全135ページを読み取ります。GET_VERSIONを持たないチップやページ数が違うチップは、最初のコマンドで失敗します。タグへのAmiiboの書き込みは元に戻せません。ロックバイトとパスワードがフォーマットの一部だからです。
金属面で使えるNFCタグはどれですか?
金属対応の形状になっていれば、どのチップでも構いません。つまり、アンテナと金属の間にフェライトシートが入っているものです。普通のタグをスチールに貼るとまったく読めませんが、金属対応タグなら通常のおよそ5分の4の距離で読めます。普通のタグと金属の間に、金属以外のものを3ミリ挟めるなら、それでも使えます。
NFC.coolはiPadやMacで使えますか?
はい。バージョン6.15.0から、USBのスマートカードリーダー経由で使えます。どちらのデバイスにも、NFCの無線そのものはありません。私がテストしたのはHID OMNIKEY 5022 CLで、ACS ACR1552UとACR1255U-J1も動作報告があります。スマホでType 2、Type 4、FeliCaに対してできることはリーダー経由でもすべてでき、MIFARE Classicは読み取り専用です。
用語集
| 用語 | 意味 |
|---|---|
| AFI | Application Family Identifier。ISO 15693タグにある1バイトで、リーダーが特定の種類のタグだけを棚卸しできるようにする |
| APDU | Application Protocol Data Unit。ISO 7816-4のコマンドとレスポンスの形式で、すべてのISO-DEPチップが使う |
| ATQA | Answer To Request。Type Aチップが最初に送る2バイト。NXPはこれでチップを識別しないよう求めている |
| AUTH0 | パスワードが必要になる最初のページを示すNTAGの設定バイト |
| AUTHLIM | 指定した回数パスワードの認証に失敗すると、タグをロックするNTAGの設定 |
| CC | Capability Container(ケーパビリティコンテナ)。タグがNDEFを保持していることと、その容量をリーダーに伝える4バイト(Type 4ではファイル) |
| CMAC | AESで計算するメッセージ認証コード。SUNメッセージを偽造できなくしているもの |
| CRYPTO1 | MIFARE Classicに使われている、NXP独自の48ビットストリーム暗号。2008年に破られた |
| DSFID | Data Storage Format Identifier。メモリの構成を表すISO 15693のバイト |
| EAS | Electronic Article Surveillance(電子商品監視)。店のゲートのアラームを鳴らす、ISO 15693タグのビット |
| GET_VERSION | チップのベンダー、タイプ、世代、容量を示す8バイトを返すNXPのコマンド |
| ISO-DEP | ISO/IEC 14443-4の伝送プロトコル。これを話すチップはSAK 20を返し、APDUを受け付ける |
| 負荷変調 | パッシブタグがデータを送る方法。アンテナの負荷を切り替え、リーダーがそれを自分の磁界の変化として感じ取る |
| LRP | Leakage Resilient Primitive。NTAG 424 DNAとDESFire LightにあるAESのモードで、サイドチャネル攻撃に強い |
| MAD | MIFARE Application Directory。Classicカードのセクター0で、他のセクターに何が入っているかを列挙する |
| ミラー | 読み取りのたびに、UIDとカウンターをASCIIでNDEFメッセージに貼り込むNTAGの機能 |
| NDEF | NFC Data Exchange Format。どのスマホも読めるレコードのコンテナ |
| NUID | Non-Unique Identifier。4バイトのUIDに対するNXPの呼び名 |
| OTP | One Time Programmable。一度だけセットでき、二度と消せないビット |
| PACK | Password Acknowledge。正しいパスワードの後にNTAGが返す2バイト |
| PICC、PCD | 規格上でのカードとリーダーの呼び名 |
| ランダムID | プライバシー保護のため、衝突防止の応答で毎回新しいランダムな4バイトのIDを返すモード |
| READ_SIG | チップのオリジナリティ署名を返すコマンド |
| SAK | Select Acknowledge。Type Aチップが選択後に返すバイト。そのビットでチップをファミリーに分類する |
| SDM | Secure Dynamic Messaging。SUNを実現している、NTAG 424 DNAとDESFire EV3の仕組み |
| SUN | Secure Unique NFC。タップのたびに新しい暗号的証明を運ぶURL |
| T5T、T2T、T4T | Type 5、Type 2、Type 4タグを表すNFC Forumの略称 |
| TLV | Tag-Length-Value。Type 2とType 5チップで、NDEFメッセージを包む枠 |
| TruST25 | STがUIDに対して付けるオリジナリティ署名 |
| UID | 工場でプログラムされたチップの識別子。4、7、または8バイト |
出典と参考資料
このガイドのすべての表は、以下のいずれかと照らし合わせて確認しました。価格は2026年9月9日に、購入の章で挙げた店で確認したものです。
NXP NTAG
NTAG 424 DNAとNTAG 424 DNA TagTamperのデータシート、そしてAN12196(オリジナリティ署名の公開鍵を含む、424の機能とヒントのノート)
NTAG I2C plusとNTAG 5 boostのデータシート
AN13089(NTAG 21xの機能とヒント)。静的なオリジナリティ署名がクローンでないことの保証にならない理由について(ミラーサイト。nxp.comの版は非公開)
NXP MIFARE
MIFARE Ultralight、Ultralight C、Ultralight EV1、Ultralight AESのデータシート
MIFARE Plus S、Plus SE、Plus EV2のショートデータシート
DESFire EV1、DESFire EV2、DESFire EV3、DESFire Lightのデータシート、そしてAN12752(DESFireの使用可能メモリについて)
AN10833(MIFAREのタイプ識別)、AN10927(MIFAREのUID)、AN1305(MIFARE Classic上のNDEF)、AN10787(MIFARE Application Directory)、AN11004(Type 4タグとしてのDESFire)
NXP ICODE
STMicroelectronics、TI、EM、ソニー、Fudan
STのST25TV02KC、ST25TN01K、ST25DV64KC、ST25TA02KB、M24LR64E-Rのデータシート、AN5658(Augmented NDEFについて)、TA0358(TruST25について)
セキュリティ研究と規格
Quarkslab「MIFARE Classic: exposing the static encrypted nonce variant and a few hardware backdoors」(2024年)
Nohl、Evans、Starbug、Plötz「Reverse-Engineering a Cryptographic RFID Tag」(USENIX Security 2008)
Garciaほか「Dismantling MIFARE Classic」(ESORICS 2008)
NFC Forumの技術解説とType 2タグ仕様
スマホとリーダー
AppleのCore NFC、バックグラウンドでのタグ読み取り、CRYPTO1を除外しているMIFAREコマンド、WWDC 2019のセッション715
AndroidのMifareClassic、NFCの詳細ガイド、そしてChromeのWeb NFC
リーダー:ACS ACR122U、HID OMNIKEY 5022 CL、NXP PN532、Proxmark3、Flipper Zero、Chameleon Ultra
アンテナとフェライト:TI SLOA241とWürth ANP022
まとめ
チップは用途に合わせて選んでください。リンクならNTAG213、迷ったらNTAG216、AmiiboならNTAG215、タップが何かを証明する必要があるならNTAG 424 DNA、ゲートで読む必要があるならICODE SLIX2かICODE 3、ドアに信頼させる必要があるならDESFire EV3。そしてMIFARE Classicの棚からは何も選ばないこと。このガイドの残りはすべてこの一文の理由づけで、表は、もう二度と商品ページの言葉を鵜呑みにしなくて済むようにするためにあります。
書き込む前にタグの正体を知りたいなら、それこそNFC.cool Toolsがタップのたびにやっていることです。iPhoneでも、Androidでも、リーダーを挿したiPadやMacでも。そして、アプリが間違った名前を表示するチップや、まったく名前を表示しないチップが手元にあったら、ぜひ私に連絡してください。60製品のほとんどは、そうやってリストに加わったのです。