IC乗車券や電子マネーを支えている技術として、NFCがあります。
NFCに対応したカード等を利用している際に「安全性はどうなんだろう?」と思ったことはありませんか。
ということで今回は、NFCのセキュリティの話です。
NFCとは
NFC(Near Field Communication、近距離無線通信)とは、極短距離(数cm程度)の範囲における無線通信技術のことです。
一般的にはかざして通信するカード等を指し、以下のような分野に応用されています。
- IC乗車券
- 電子マネー
- 電子錠・入退室管理
NFCの詳しい定義に関してはFeliCa「NFCの定義」のページを参照してください。
NFCのカード規格
NFCでは主に3種類のカード規格(TypeA、TypeB、TypeF)が存在します。
日本ではTypeFのカードが一般的ですが、世界的にはTypeAのカードが一般的です。
TypeA | TypeB | TypeF | |
---|---|---|---|
規格 | ISO/IEC 14443 ISO/IEC 18092 |
ISO/IEC 14443 | ISO/IEC 18092 |
主導 | NXP | モトローラ | ソニー |
名称 | MIFARE | - | FeliCa |
使用例 | 成人識別ICカード | ICカード免許証 | サイバネ規格ICカード |
カード固有のID
各カードには固有のIDが振られており、複数枚重ねてかざされた際の対象カードの選択等に利用されます。
固有IDはNFC TypeAではUID、TypeFではIDmと呼ばれています。
NFC TypeBで固有IDに近いものとしてPUPI(Pseudo-Unique PICC Identifier)がありますが、カードがかざされるたびにランダムに生成されるため完全に同一のものではありません。
カード固有のIDは、NFC TagInfoのようなアプリケーションを利用することで調べることができます。
7BB95DB3
)012E3D14490DBF5A
)カード固有のIDのみの認証の危険性
もしNFCを電子錠に使うとしたら、どのように認証するのが正しいのでしょうか?
カード固有のIDを使って認証すれば良いと思うかもしれませんが、これは危険なことです。
なぜならば、カード固有のIDは偽造することができるためです。
NFCのリーダライタは一定間隔でポーリングという、通信可能範囲内にカードがあるか調べる動作を行っています。
カード固有のIDはポーリングに対する応答に平文で含まれています。そのため、偽造が可能なのです。
偽造には、カードとして振舞うモードに設定できるリーダライタを使用します。
このような装置は高価な専門機器ではないかと思わるかもしれませんが、一般に入手可能なリーダライタの一部でも設定可能です。
実際に、一般に入手可能なリーダライタを使用して偽造したID(CAFEBABEFEEDFEED
)を読み込ませている様子が以下の写真になります。
安全に認証を行うには
カード固有のIDのみを使用して認証を行うのは危険であり、偽造のリスクがあることを示しました。
このリスクへの対策として、以下のような方法が挙げられます。
- 秘密鍵によるMAC認証を行う(例:FeliCa Lite-Sにおける相互認証)
- セキュア領域を利用する(例:FeliCa Standardカード)
いずれの方法でも秘密にするべき鍵などが存在するため、それらの情報の管理には注意が必要です。