私たちが毎日使っているテクノロジーの多くは、背景に消えていきます。タップして支払い、解錠、スキャン、共有 - そしてその下のプロトコルについて考えることはありません。NFCはそういった静かなインフラのひとつです。私はNFCタグを読み書きするアプリであるNFC.coolを何年も作ってきたので、ほとんどの人が一生かけても触れないほどこの仕組みの内側で時間を過ごしてきました。iPhoneでNFCが実際にどう動いているのか、好奇心旺盛な友人に説明するつもりで見ていきましょう。
NFCとは何か
**Near Field Communication(近距離無線通信)**は短距離の無線プロトコルです。2つのデバイスが約4 cm以内の距離にある時にデータを交換できます。私はこれを、BluetoothやWi-Fiの簡略化された、ずっと短距離のいとこだと考えています。
この短い距離は最初こそ多くの人を戸惑わせますが、制限ではありません。セキュリティモデルそのものであり、それが腑に落ちたとき、NFCの設計判断の多くが私にとって意味を持つようになりました。部屋の反対側から決済端末に誤ってタップすることはあり得ませんし、悪意あるリーダーが離れた場所からこっそりデータを抜き取ることもできません。これらすべてが初めてなら、この記事よりもっと手前から始まるNFCタグ初心者ガイドを書いたので、そちらをどうぞ。
iPhoneにおけるNFCの歴史
Appleが初めてNFCハードウェアを搭載したのは2014年のiPhone 6および6 Plusでしたが、無線モジュールはApple Pay専用にロックされていました。サードパーティアプリはNFCタグを読むことすらできませんでした - 後にNFCアプリを作ることになる者として、それは見ていて歯がゆい数年間でした。
これはiOS 11(2017年)で変わりました。Core NFCフレームワークが導入され、私のような開発者がついにNDEFタグを読めるようになったのです。Appleはその後のリリースでも扉をさらに広げ、iOS 13で書き込みサポートを追加、iPhone XS以降では常時オンのバックグラウンドでのタグ読み取りも追加されました。今日では、最新のiPhoneなら何も開かなくてもタグをタップできます。OSが認識し、適切なアクションを提案してくれます。
NFCの実際のデータ転送
NFCデバイスはやり取りごとに2つの役割のいずれかで動作します。アクティブ(電源を持ち、磁界を生成)か、パッシブ(バッテリーなし、磁界から電力を得る)。NFCがどう動くのかと聞かれるたびに、私が立ち返るのはこのひとつの考え方です。
Apple Payで支払うとき、iPhoneがアクティブリーダーです。13.56 MHzで無線磁界を生成します。決済端末のNFCエレメントがその磁界内で起動し、自分を識別し、小さな暗号ペイロードをiPhoneと交換します。あなたのカード情報はSecure Element(iPhone内の専用ハードウェア分離チップ)を出ることはありません。送信されるのはワンタイムトークンです。
ポスターのNFCステッカーをタップする時は、役割が逆転します。ポスターのタグはパッシブ - バッテリーがありません。iPhoneのリーダーが電力を供給し、タグは保存されているNDEFレコードで応答し、iOSが何をするかを判断します(URLを開く、アプリを起動する、連絡先カードを表示する、ショートカットをトリガーする)。この後半部分 - タグ側 - こそNFC.coolが生きる領域です。何もインストールせずに実際の動きを見たいなら、Androidでブラウザから直接NFCタグを読むことができます。
NDEF:共通言語
NFC無線の上のデータ層がNDEF(NFC Data Exchange Format)です。私はこれを、小さな自己記述型のレコードフォーマットだと説明しています。タグは1つ以上のレコードを保持し、それぞれにタイプ(URI、テキスト、vCard、Wi-Fi認証情報、カスタムMIME)とペイロードがあります。
地球上のすべてのNFC対応スマホがNDEFを話します。だからAndroidでプログラムされたタグはiPhoneで問題なく読めますし、その逆も同じです。iOSとAndroidが本当に同じ標準を共有している、数少ない領域のひとつであり、正直なところ、機能を作るうえで私が最もありがたく思っているのがこの相互運用性です - 私はプラットフォームではなくフォーマットに向けて書いています。自分でレコードを書いてみたいなら、iPhoneでNFCタグを書く方法で手順を解説しています。
プライバシーとセキュリティ
注目すべき防御層が2つあり、これは私が最も頻繁に説明する2つでもあります。
距離:数センチメートルは目立つアンテナなしには傍受困難 - これはNFCが設計された当初の脅威モデルです。
トークン化:Apple Payは実際のカード番号を送信しません。各取引はSecure Elementで生成されるDevice Account Numberとワンタイムcryptogramを使用します。端末が侵害されてもリプレイ攻撃はできません。
タグ読み取りの場合は攻撃面が異なります - 信頼されるのはタグそのものです。何が書かれているかをあなたが管理しているなら(自宅の自動化、自分のビジネスカード)、問題ありません。公共の場でランダムなタグをタップする場合、iOSは何かが実行される前に確認プロンプトを表示するはずです。タグに何かを指し示させるだけでなく、本当に秘密を保持させる必要があるとき、私は暗号タグを使います - これは安全に暗号化された秘密をNFCタグに保存するで取り上げました。
なぜこれが重要か
NFCは、機能するときには姿を消すプロトコルのひとつであり、だからこそ私はその上に作ることに満足感を覚えます。改札機、決済端末、名刺、スマートスピーカーにタップして - 何かが起こる。ペアリングなし、PINなし、アプリ起動なし。意図的な物理的ジェスチャーが、1つの特定のやり取りを認可するだけ。
だから私はNFC.cool Toolsを作りました。誰もまず最初にプロトコルを学ばなくても、NFCのNDEF全面を使えるようにするためです。あらゆるタグを読み、あらゆるレコードタイプを書き、終わったらタグをロックする。iPhoneでもAndroidでも。