近距離無線

FeliCa

日本で普及した高速NFC技術(交通系IC等)。

概要

FeliCa(フェリカ)は、ソニーが開発した13.56MHzの非接触IC通信規格です。NFC Forum Type 3 TagとしてNFCに統合されており、「かざす」操作で行う非接触通信の日本標準として交通系ICカード(Suica・PASMO・ICOCAなど)・電子マネー(Edy・nanaco・WAON)・社員証・学生証など幅広い用途で利用されています。

FeliCaの最大の特徴は、ISO/IEC 14443(NFCのType A/B)の106kbpsと比較して、212kbpsまたは424kbpsという高速通信と、実績ある独自の高セキュリティ技術の組み合わせです。交通改札での0.1秒以下のタッチ動作を可能にする高速レスポンスは、世界の交通系ICシステムの中でも特に優秀と評価されています。

歴史・背景

FeliCaの開発はソニーが1988年頃から開始しました。香港の地下鉄MTR(現在のOctopusカード)向けシステムとして1997年に初めて実用化されました。

日本国内での主な普及の歴史:

  • 1997年: 香港MTR「オクトパスカード」でFeliCa初商用利用
  • 2001年: JR東日本「Suica」がFeliCaを採用、電子マネー機能も内蔵
  • 2004年: NTTドコモが「おサイフケータイ」でFeliCa搭載携帯電話を発売。モバイルFeliCaとして普及
  • 2006年: FeliCaがISO/IEC 18092(NFC-F)として国際標準化
  • 2007年: NFC Forum Type 3 Tagとしてグローバル規格に統合
  • 2016年: 交通系IC全国相互利用(Suica・PASMO・ICOCA等10カード)が本格普及
  • 2016年: iPhone 7がApple PayでモバイルSuicaに対応(日本版のみFeliCa搭載)
  • 2020年代: マイナンバーカードにもFeliCa(NFCType F)読み取りが追加対応

技術仕様

基本パラメータ

パラメータ
周波数13.56 MHz
通信速度212 kbps / 424 kbps
最大通信距離約10cm(実用は数cm)
変調方式ASK(Manchester符号化)
バックスキャッター負荷変調
アンチコリジョンタイムスロット方式
暗号アルゴリズム独自認証(MAC・暗号化)

FeliCaのメモリ構造

FeliCaはシステムコード・サービスコード・ブロックという階層でデータを管理します:

FeliCa メモリ構造
├── System(システム)  ← システムコードで識別(2バイト)
│   ├── Area(エリア)
│   │   ├── Service(サービス)  ← サービスコードで識別(2バイト)
│   │   │   ├── Block 0(16バイト)
│   │   │   ├── Block 1(16バイト)
│   │   │   └── ...(最大256ブロック / サービス)
│   │   └── Service(別サービス)
│   └── Area(別エリア)
└── System(別システム)

代表的なシステムコード:
0x0003 = 共通領域(全カード共通)
0x88B4 = Suica
0x8008 = Edy
0x8B5D = nanaco
0xFE00 = モバイルFeliCa

サービスコードの構造

サービスコード(16bit)
┌───────────────────┬────────────────┐
│ サービス番号(10b) │ アクセス属性(6b)│
└───────────────────┴────────────────┘

アクセス属性(下位6bit):
0x09 = Random RW(乱数認証+暗号化R/W)
0x0B = Random RO(乱数認証+暗号化R)
0x0D = Cyclic RW(サイクリックR/W)
0x0F = Cyclic RO(サイクリックR)
0x11 = Purse(電子マネー用)

コマンド体系

FeliCaの主要コマンド:

コマンドコード名称説明
0x04Pollingカード探索・システム選択
0x06Request Serviceサービスアクセス権確認
0x08Request Responseカード応答確認
0x0ARead Without Encryption暗号化なしブロック読み取り
0x0CWrite Without Encryption暗号化なしブロック書き込み
0x0ERequest System Codeシステムコード一覧取得
0x10Authentication1相互認証フェーズ1
0x12Authentication2相互認証フェーズ2
0x14Read暗号化ありブロック読み取り
0x16Write暗号化ありブロック書き込み

セキュリティ機能

FeliCaのセキュリティは多層構造です:

  1. 相互認証: カードとリーダーが乱数を使った認証シーケンスで互いを確認
  2. セッション鍵: 毎回乱数から生成される使い捨てセッション鍵で通信を暗号化
  3. MAC(Message Authentication Code): データの改ざん検出
  4. エリア・サービス制御: アクセス権限の階層管理
  5. 書き込み回数制限: ブロックごとの書き込み回数管理

動作原理

通信シーケンス(Pollingから読み取りまで)

リーダー(PaSoRi等)                FeliCaカード
       |                                 |
       |--- Polling(0x04)  ----------->|  ← 特定システムコードのカード探索
       |<-- Polling Response(0x05) ----|  ← RD(固有ID)+ PMm + RD返送
       |                                 |
       |--- Request Service(0x06) ---->|  ← サービスコード確認
       |<-- Request Service Response ----|  ← アクセス属性返送
       |                                 |
       |--- Authentication1(0x10) ---->|  ← 乱数R1送信
       |<-- Authentication1 Response ----|  ← カードがR1,R2をセッション鍵で暗号化
       |                                 |
       |--- Authentication2(0x12) ---->|  ← リーダーが検証、R2をMAC付きで返送
       |<-- Authentication2 Response ----|  ← 認証成功
       |                                 |
       |--- Read(0x14) --------------->|  ← 暗号化リード要求
       |<-- Read Response(0x15) -------|  ← 暗号化データ+MAC

IDm(固有ID)の構造

IDm(Identification Number for Manufacture): 8バイト
┌───────────────────────────────────────────────────────────────┐
│ 製造者コード(1B) │ ICカードタイプ(1B) │ 製造連番(6B)          │
└───────────────────────────────────────────────────────────────┘
IDmはカードを一意に識別するが、プライバシー保護のため
交通・決済などの本人認証には使用せず、サービスコードで管理する設計。

用途・ユースケース

交通系IC

日本の主要交通系ICカードはすべてFeliCaを採用:

カード名発行元エリア
SuicaJR東日本首都圏・新幹線
PASMOパスモ首都圏私鉄・地下鉄
ICOCAJR西日本関西
TOICAJR東海東海
KitacaJR北海道北海道
nimoca西日本鉄道九州
SUGOCAJR九州九州
manaca名古屋市交通局等名古屋
SAPICA札幌市交通局北海道
はやかけん福岡市交通局福岡

これら10カードは全国相互利用が可能(2013年〜)。

電子マネー・決済

  • 楽天Edy: 加盟店数・利用額日本最大級の電子マネー
  • nanaco: セブン-イレブン・イトーヨーカドー系列
  • WAON: イオン系列

モバイルFeliCa(おサイフケータイ・Apple Pay)

  • おサイフケータイ(Android): 2004年から普及、複数のサービスを1台の端末に統合
  • Apple Pay(iPhone 7以降、日本版): AppleはグローバルでNFC Type A/Bを採用するが、日本向けモデルにはFeliCa対応チップを追加搭載

アクセス管理・認証

  • 社員証・入退室管理: FeliCaカード・おサイフケータイで入退室制御
  • 大学・学校の学生証: 図書館・食堂・施設管理に利用

実装・開発のポイント

FeliCaリーダーの選択

製品対応接続特徴
PaSoRi RC-S380FeliCa・Type A/BUSBSONYの標準開発キット
PaSoRi RC-S300FeliCaUSBコンパクト
ACR1251UFeliCa・Type A/BUSB汎用PCRドライバ対応
PN532FeliCa・Type A/BSPI/I2C組み込み向け

PaSoRi + Python(nfcpy)でFeliCaカードを読み取り

import nfc
import struct

def on_connect(tag):
    print(f"Tag type: {tag.type}")
    if isinstance(tag, nfc.tag.tt3.Type3Tag):
        # IDmを表示
        print(f"IDm: {tag.idm.hex()}")
        print(f"PMm: {tag.pmm.hex()}")

        # Suica(システムコード 0x88B4)のサービスに接続
        sc = nfc.tag.tt3.ServiceCode(0x090F >> 6, 0x090F & 0x3F)
        try:
            blocks_data = tag.read_without_encryption([sc], [
                nfc.tag.tt3.BlockCode(0),  # ブロック0
            ])
            if blocks_data:
                block0 = blocks_data[0]
                print(f"Block 0: {block0.hex()}")
        except Exception as e:
            print(f"Read error: {e}")

    return True

# PaSoRiに接続(USBリーダー)
with nfc.ContactlessFrontend('usb') as clf:
    clf.connect(rdwr={
        'on-connect': on_connect,
        'targets': ['106A', '106B', '212F'],  # Type A, B, FeliCa
    })

FeliCaカード発行の流れ(企業・交通事業者向け)

1. ソニーとのライセンス契約
2. SAM(Security Access Module)の取得
   → FeliCa暗号鍵・認証を管理するハードウェアモジュール
3. システムコード・サービスコードの設計
4. カード発行システム(CIS)の構築
5. リーダー・ライター端末の開発・認証試験
6. 運用開始

FeliCaの本格的なサービス開発はソニーとのライセンス契約が必要です。開発者向けには限定的なAPIが提供されており、IDmの読み取りや一部のオープンサービスへのアクセスは比較的容易です。

他技術との比較

FeliCa vs ISO/IEC 14443(NFC Type A/B)

項目FeliCa(NFC-F)ISO 14443 Type A/B(NFC-A/B)
通信速度212 / 424 kbps106 kbps
セキュリティ独自高セキュリティAES対応(MIFARE Plus/DESFire)
主な普及地域日本・香港全世界
交通系IC日本10カード欧州・米国・中国の多くのカード
グローバル展開難しい(独自規格)容易
改札スループット非常に高い(0.1秒以下)高い

FeliCa vs EMV Contactless

EMV Contactless(Visa/Mastercard タッチ決済)はISO/IEC 14443ベースで、クレジット/デビットカードのグローバル非接触決済標準です。日本では交通系ICがFeliCaのまま普及したため、FeliCaとEMV Contactlessが共存しています。Apple Pay日本版はFeliCa(Suica等)とEMV両方に対応するため、世界で唯一FeliCaチップを搭載するiPhoneが販売されています。

関連用語

参考リンク