概要
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の主要コマンド:
| コマンドコード | 名称 | 説明 |
|---|---|---|
| 0x04 | Polling | カード探索・システム選択 |
| 0x06 | Request Service | サービスアクセス権確認 |
| 0x08 | Request Response | カード応答確認 |
| 0x0A | Read Without Encryption | 暗号化なしブロック読み取り |
| 0x0C | Write Without Encryption | 暗号化なしブロック書き込み |
| 0x0E | Request System Code | システムコード一覧取得 |
| 0x10 | Authentication1 | 相互認証フェーズ1 |
| 0x12 | Authentication2 | 相互認証フェーズ2 |
| 0x14 | Read | 暗号化ありブロック読み取り |
| 0x16 | Write | 暗号化ありブロック書き込み |
セキュリティ機能
FeliCaのセキュリティは多層構造です:
- 相互認証: カードとリーダーが乱数を使った認証シーケンスで互いを確認
- セッション鍵: 毎回乱数から生成される使い捨てセッション鍵で通信を暗号化
- MAC(Message Authentication Code): データの改ざん検出
- エリア・サービス制御: アクセス権限の階層管理
- 書き込み回数制限: ブロックごとの書き込み回数管理
動作原理
通信シーケンス(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を採用:
| カード名 | 発行元 | エリア |
|---|---|---|
| Suica | JR東日本 | 首都圏・新幹線 |
| PASMO | パスモ | 首都圏私鉄・地下鉄 |
| ICOCA | JR西日本 | 関西 |
| TOICA | JR東海 | 東海 |
| Kitaca | JR北海道 | 北海道 |
| nimoca | 西日本鉄道 | 九州 |
| SUGOCA | JR九州 | 九州 |
| 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-S380 | FeliCa・Type A/B | USB | SONYの標準開発キット |
| PaSoRi RC-S300 | FeliCa | USB | コンパクト |
| ACR1251U | FeliCa・Type A/B | USB | 汎用PCRドライバ対応 |
| PN532 | FeliCa・Type A/B | SPI/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 kbps | 106 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が販売されています。