近距離無線

NFC

数cmの近距離通信。決済や認証に。

概要

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 A106 kbpsMIFARE系Suica(FeliCa除く)、交通・入室
ISO/IEC 14443 Type B106 kbps日本の公的個人認証(マイナンバー等)マイナンバーカード・旅券
ISO/IEC 1569326.5 kbps通信距離長め(〜1m)物流・図書管理
FeliCa(ISO/IEC 18092)212 kbps / 424 kbps高速・日本発Suica・PASMOなど交通系IC
ISO/IEC 18092(NFC-F)212/424 kbpsFeliCaベース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メーカー対応規格特徴
PN532NXPISO14443A/B, FeliCa, MIFAREライブラリ豊富、開発用途向け
PN7150NXPNFC Forum全対応HCI/NCI対応、Linuxドライバあり
RC522NXPMIFARE Classic低コスト、SPI接続
ST25R3916STNFC Forum全対応高感度、マルチプロトコル
CLT001InfineonNFC-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

項目NFCBLERFID(HF)
通信距離最大10cm最大400m(BT5 Coded)数cm〜1m
速度106〜848 kbps最大2 Mbps26.5〜848 kbps
操作かざすだけ自動接続かざすだけ
電池不要タグあり(パッシブ)なしあり(パッシブ)
セキュリティ高(物理距離+暗号化)中(暗号化)用途依存
主用途決済・認証・ペアリングIoT・ウェアラブル物流・在庫管理

NFCの最大の強みは「物理的距離による安全性」と「電池不要のパッシブタグ」です。決済や認証など意図的な操作が求められる用途に特に適しています。

関連用語

参考リンク