概要
NFC(Near Field Communication)は、13.56MHzの電磁誘導を使った最大通信距離約10cmの短距離無線通信規格です。非接触ICカード・スマートフォン決済・交通系IC・入退室管理・デバイスペアリングなど、「かざすだけ」の操作で確実な通信を実現します。
NFCはRFID技術を基盤としており、ISO/IEC 14443(Type A/B)・ISO/IEC 15693・FeliCaなど複数の規格を統合したものです。NFCデバイスはカードエミュレーション・リーダー/ライター・P2Pの3つのモードで動作し、スマートフォンのほぼ全機種が対応しています。
歴史・背景
NFCの前身となる非接触IC技術は1990年代から普及が始まりました。ソニーとFeliCaが日本で普及し、欧州ではMIFARE(Phillips)がアクセス管理・交通系ICで広がりました。
2002年、ソニーとPhilips(現NXP)が非接触通信技術を統合した仕様の検討を開始。2004年にノキアを加えた3社でNFC Forumを設立し、NFCの標準化・普及を推進しました。2003年にISO/IEC 18092(NFCIP-1)、2005年にISO/IEC 21481(NFCIP-2)が策定されました。
主な普及の節目:
- 2006年: Nokia 6131がNFC対応初の量産スマートフォン
- 2011年: Google Wallet(Android向け)で非接触決済開始
- 2014年: Apple Pay発表(iPhone 6、Touch ID連携)
- 2017年: Apple が Core NFC API を公開(iOS 11、読み取りのみ)
- 2019年: iPhone XS以降でバックグラウンドNFC読み取り対応
- 2020年: iOS 13でNFCタグ書き込み対応
技術仕様
基本パラメータ
| パラメータ | 値 |
|---|---|
| 周波数 | 13.56 MHz |
| 最大通信距離 | 約10cm(実用的には数cm) |
| データレート | 106 kbps / 212 kbps / 424 kbps / 848 kbps |
| 通信方式 | 電磁誘導(磁気結合) |
| 変調方式 | ASK(振幅変調)、Load Modulation |
NFCの3つの動作モード
| モード | 説明 | 用途 |
|---|---|---|
| カードエミュレーション | スマートフォンがICカードのように振る舞う | 決済・交通系IC・入退室 |
| リーダー/ライター | スマートフォンがカード・タグを読み書き | NFCタグ読み取り・ポスター |
| P2P(ピアツーピア) | デバイス間でデータ交換 | Android Beam(廃止)・名刺交換 |
NFC規格の対応
| 規格 | 通信速度 | 特徴 | 主な用途 |
|---|---|---|---|
| ISO/IEC 14443 Type A | 106 kbps | MIFARE系 | Suica(FeliCa除く)、交通・入室 |
| ISO/IEC 14443 Type B | 106 kbps | 日本の公的個人認証(マイナンバー等) | マイナンバーカード・旅券 |
| ISO/IEC 15693 | 26.5 kbps | 通信距離長め(〜1m) | 物流・図書管理 |
| FeliCa(ISO/IEC 18092) | 212 kbps / 424 kbps | 高速・日本発 | Suica・PASMOなど交通系IC |
| ISO/IEC 18092(NFC-F) | 212/424 kbps | FeliCaベース | P2P・FeliCa系カード |
NDEFフォーマット
NDEF(NFC Data Exchange Format)はNFC ForumがNFCタグのデータ構造として標準化したフォーマットです:
NDEF Message
└── NDEF Record 1
│ ├── TNF(Type Name Format): 1バイト
│ ├── Type(タイプ識別)
│ ├── ID(オプション)
│ └── Payload(データ本体)
└── NDEF Record 2(複数記録可能)
主なTNF値:
0x01 = Well-Known Type(URL・Textなど標準タイプ)
0x02 = MIME Media Type
0x04 = External Type(独自タイプ)
URLレコード例("U"タイプ):
TNF=0x01, Type="U", Payload= [0x03] + "example.com"
(0x03 = "https://" プレフィックスコード)
セキュリティ
- UID(Unique Identifier): カードの固有識別子(4/7/10バイト)
- ランダムUID(プライバシー保護用)をサポート
- 認証・暗号化: MIFARE Classic(DES/3DES)、MIFARE Plus(AES)、DESFire(AES-128/ECC)
- 通信距離の物理的制限: 10cm以内という物理的距離がセキュリティの基盤
- 相互認証(Mutual Authentication): カードとリーダーが互いに認証
動作原理
電磁誘導による電力・データ伝送
NFCリーダー(イニシエーター)はコイルアンテナに13.56MHzの交流電流を流して磁界を生成します。カード(ターゲット)側のコイルアンテナに誘導電流が生じ、パッシブカードはこの電力で動作します:
リーダー側コイル → 13.56MHz磁界 → カード側コイルに誘起電流
→ 整流・電源生成(パッシブカード)
→ チップ動作
→ データ送信(負荷変調)
データ転送方向:
リーダー→カード: ASK変調(磁界の振幅変化でビット表現)
カード→リーダー: 負荷変調(カード側の負荷インピーダンス変化でリーダー検知)
接続シーケンス(ISO/IEC 14443)
リーダー カード
| |
|--- REQA/WUPA(ポーリング) -->| ← カード存在確認
|<-- ATQA(応答コード)---------|
|--- Anticollision Loop ------->| ← 複数カードを識別(衝突防止)
|<-- UID(カードUID応答)-------|
|--- SELECT(UID指定選択) ---->|
|<-- SAK(Select Ack)---------|
|--- RATS(T=CL初期化) ------->| (ISO 14443-4)
|<-- ATS(初期化応答)---------|
| ← アプリケーション通信開始 → |
HCE(Host Card Emulation)
Android 4.4以降で対応したHCEは、NFCコントローラをSE(Secure Element)なしにスマートフォン本体のAndroidアプリでカードエミュレーションを実現する仕組みです:
// Android HCEサービス実装例
@Override
public byte[] processCommandApdu(byte[] commandApdu, Bundle extras) {
// SELECT AID コマンドの処理
if (selectAidHeader(commandApdu)) {
return SELECT_OK_SW; // 0x90, 0x00
}
// 残高照会コマンドの処理
if (getBalanceCommand(commandApdu)) {
byte[] balance = getBalance();
return appendStatusWord(balance, STATUS_SUCCESS);
}
return UNKNOWN_CMD_SW;
}
用途・ユースケース
決済・フィンテック
- 非接触決済: Apple Pay・Google Pay・Suica・PASMOなどのスマートフォン決済
- クレジット/デビットカード: Visaタッチ・Mastercard コンタクトレス決済
- 電子マネー: nanaco・WAON・楽天Edy
交通・入退室管理
- 公共交通: Suica・PASMO・ICOCA等の改札(FeliCa・Type A)
- 入退室管理: オフィス・マンション・ホテルのカードキー
- 電子パスポート: 入国審査での生体情報読み取り(ISO/IEC 14443)
- マイナンバーカード: 電子証明書・個人認証(Type B)
スマートフォン連携
- NFCタグ起動: スマートフォンをかざしてWebサイト・アプリ・設定を起動
- デバイスペアリング: Bluetooth/Wi-Fiのペアリング情報をNFCで交換
- 名刺・チラシ: NFCタグにURLを書き込みデジタルコンテンツへ誘導
産業・物流
- 製品認証: 部品・製品の真贋判定(高セキュリティDESFireタグ使用)
- 工具管理: 工具にNFCタグを貼り付け、使用記録・定期点検管理
- 医薬品管理: 薬品の正規品認証・温度履歴記録
実装・開発のポイント
NFC リーダーIC の選択
| IC | メーカー | 対応規格 | 特徴 |
|---|---|---|---|
| PN532 | NXP | ISO14443A/B, FeliCa, MIFARE | ライブラリ豊富、開発用途向け |
| PN7150 | NXP | NFC Forum全対応 | HCI/NCI対応、Linuxドライバあり |
| RC522 | NXP | MIFARE Classic | 低コスト、SPI接続 |
| ST25R3916 | ST | NFC Forum全対応 | 高感度、マルチプロトコル |
| CLT001 | Infineon | NFC-A/B | セキュア決済向け |
Raspberry Pi + PN532 でNFCタグ読み取り(Python)
import board
import busio
from digitalio import DigitalInOut
import adafruit_pn532.spi as pn532_spi
# SPI接続
spi = busio.SPI(board.SCK, board.MOSI, board.MISO)
cs_pin = DigitalInOut(board.D5)
pn532 = pn532_spi.PN532_SPI(spi, cs_pin, debug=False)
# ファームウェアバージョン確認
ic, ver, rev, support = pn532.firmware_version
print(f"Found PN5{ic:02x} Firmware ver. {ver}.{rev}")
# ISO14443Aカードのポーリング
pn532.SAM_configuration()
print("Waiting for NFC card...")
while True:
uid = pn532.read_passive_target(timeout=0.5)
if uid is None:
continue
print(f"Found card with UID: {[hex(i) for i in uid]}")
# MIFARE Classic認証(セクター0、ブロック4)
key = b"\xFF\xFF\xFF\xFF\xFF\xFF" # デフォルトキー
if pn532.mifare_classic_authenticate_block(uid, 4, 0x60, key):
data = pn532.mifare_classic_read_block(4)
print(f"Block 4: {data}")
ArduinoでNFCタグ書き込み(NDEF)
#include <Wire.h>
#include <PN532_I2C.h>
#include <PN532.h>
#include <NfcAdapter.h>
PN532_I2C pn532_i2c(Wire);
NfcAdapter nfc(pn532_i2c);
void setup(void) {
Serial.begin(115200);
nfc.begin();
}
void loop(void) {
Serial.println("Place tag to write...");
if (nfc.tagPresent()) {
NdefMessage message = NdefMessage();
// URLレコードを書き込む
message.addUriRecord("https://example.com");
// テキストレコードを書き込む
message.addTextRecord("Hello NFC World!");
bool success = nfc.write(message);
if (success) {
Serial.println("Write successful!");
} else {
Serial.println("Write failed.");
}
}
delay(3000);
}
アンテナ設計の注意点
NFCアンテナは13.56MHzで共振するLCアンテナです:
- コイルサイズ: 大きいほど通信距離が伸びるが、金属近傍で感度低下
- フェライトシート: スマートフォンの金属筐体近くでは磁束を集めるフェライトシートで損失補償
- 共振周波数調整: コンデンサで13.56MHzに合わせる
- 金属筐体の影響: 金属の上のNFCタグは通信距離が大幅減少(フェライト対策必要)
他技術との比較
NFC vs Bluetooth vs RFID
| 項目 | NFC | BLE | RFID(HF) |
|---|---|---|---|
| 通信距離 | 最大10cm | 最大400m(BT5 Coded) | 数cm〜1m |
| 速度 | 106〜848 kbps | 最大2 Mbps | 26.5〜848 kbps |
| 操作 | かざすだけ | 自動接続 | かざすだけ |
| 電池不要タグ | あり(パッシブ) | なし | あり(パッシブ) |
| セキュリティ | 高(物理距離+暗号化) | 中(暗号化) | 用途依存 |
| 主用途 | 決済・認証・ペアリング | IoT・ウェアラブル | 物流・在庫管理 |
NFCの最大の強みは「物理的距離による安全性」と「電池不要のパッシブタグ」です。決済や認証など意図的な操作が求められる用途に特に適しています。