勝手にNFCに入門してみる

NFC についてはド素人ですが、さくっと調べる機会があったので、ちょっとだけまとめておきます

主にこの 4 つの記事、スライドをまとめた形です

- [NFC関係用語と解説](https://qiita.com/gpsnmeajp/items/49db2212e632869edaf8)
- [一人でもNFC開発](https://www.slideshare.net/hiro99ma/nfc-11850428?next_slideshow=1)
- [NFCのこと](https://sites.google.com/site/hiro99ma/nfc)
- [NFCとかスマホ決済サービスに関するメモ](https://monoworks.co.jp/post/2019-07-27-nfc-and-smartphone-payment/)

## NFC とは

これが一番難しいのではないかとおもいます笑
NFC は `Near Field Communication` の略なのだが、使われる文脈で指す範囲が少しずつ異なっているようです

調べていく中で、だいたいこの 4 つの文脈で`NFC`という言葉が使われる事が多いようでした


| 文脈| 使われた際の意味|
|:-----------------|:-----------------|
|狭義の NFC |ISO18092(NFC IP1) が定める **通信規格** を指す |
| 狭義+α の NFC|ISO21481(NFC IP2; IP1の拡張) が定める **通信規格** を指す |
| NFCフォーラム仕様の NFC |NFCフォーラムの定める 通信規格 + デバイスが満たすべき機能など **まるっと含めた実装規格** を指す| 
|日常で言われる NFC |スマホとかでピッとやるとデータ通信するっぽい **なにか**|

## NFC の規格を鳥瞰してみる

通信規格や、デバイスも含めた規格があるのですが、一旦図におさめてみました

矢印の先にある要素が、元にある要素を包含ないしは使用するという関係性です

![NFC入門 (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/309585/dd837107-ee34-97f0-d619-6fe433b63981.png)

難しい。。。ちょっとずつ分けてみます

### 狭義の NFC

まずは狭義の NFC です
「ISO18092(NFC IP1) が定める **通信規格** を指す」
と言うように通信規格を定めています

通信規格というように、定めているのはデバイス等ではなく基本的にはどのような変調方式で、データをやり取りするかということを定めています

![NFC入門 (3).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/309585/2b454ed6-06d4-9f84-71f9-fee2e7405631.png)

ISO の規格との対応は以下

![NFC入門 (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/309585/f08b6943-aeff-2fcb-ff1f-ebdd3ec4327e.png)

ここで言う Type-A, Type-F は変調方式の種類です
それぞれ変調方式、符号化の方法、伝達速度など波としての性質の違いがあります。

狭義の NFC はおもに 2 つの変調方式を包含しています

![スクリーンショット 2020-06-23 0.03.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/309585/e0d08702-13bf-1aa4-d344-90eca30f454a.png)
[NTT技術ジャーナル 技術基礎講座非接触 ICカード技術 表1](https://www.ntt.co.jp/journal/0803/files/jn200803081.pdf)

### 狭義+α の NFC

正式な言葉ではないですが、狭義+α の NFC は「ISO21481(NFC IP2; IP1の拡張) が定める **通信規格**」をさします

狭義の NFC の上記規格で、NFC IP-1 に加えて Type-B, Type-V を包含しています

Type-B はマイナンバーカードなど、Type−V は物流のタグなどに使用されている

![NFC入門 (4).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/309585/c894f209-a097-3683-16f9-b179beb7e03c.png)


### NFCフォーラム仕様の NFC

「NFCフォーラムの定める 通信規格 + デバイスが満たすべき機能など **まるっと含めた実装規格** を指す」

通信規格だけをさしてない。。。この NFC はかなり広い範囲をさしています。

歴史的な背景はありますが、この NFC フォーラム仕様は

- いろんな通信規格でつかえる（Type-A,B,F）
- いろんなデバイス形状でつかえる（カード、タグ、デバイス etc）

を目指した結果、広範囲を指すことになりました

![NFCフォーラム仕様](https://www.sony.co.jp/Products/felica/NFC/img/index_img_02.jpg)
[SONY NFCの定義](https://www.sony.co.jp/Products/felica/NFC/)

規格についても、Type-A,B,F の通信規格に加えて、デバイスの実装規格なども定義されています

![NFC入門 (5).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/309585/cbd97f46-0eaf-485b-d195-08f4d90aba2b.png)


## NFC デバイス

NFC フォーラム仕様の中には、`NFC デバイス` なる概念があります

NFC デバイスは以下の 3 つのモードをのうち、P2P、リーダー/ライター を備えるものに NFCフォーラムから与えられる呼称です。

| モード名 | 動作内容 | NFCデバイスの要件 |
|:---|:---|:---|
| P2P | NFC デバイス同士でやりとり | 必須 |
| リーダー/ライター | IC カードなどを NFC 通信規格を通して読み書きする | 必須 |
| カードエミュレーション | IC カードのようにふるまい、リーダーからNFC 通信規格で読みとらせられる | 必須ではない |

モードの動作を図に表すとこのような形です

![NFC入門 (6).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/309585/61148f58-c14b-695f-3a25-2cf00d001b64.png)

`NFC デバイスを名乗っている場合は、P2P、リーダー/ライターは厳格に定められた方式に従うが、カードエミュレーションはその限りではない`
がポイントになります。

なお NFCデバイスを名乗る以上は
`Type-A,B,F の通信規格を利用した通信そのものには対応しています`

### NFCデバイスのスマホとカードエミュレーション

ここで具体ではありますが、身近なスマホを考えてみます。

多くのスマホがこの `NFCデバイス` であることが多いです。
そして駅の改札のリーダーは `Type-F` の通信規格を使用しています。

ここからいけそうなのものですが、Suica として使用できない NFC デバイスのスマホ（NFCデバイスなのにカードエミュレーション）が多々あります。
iPhone 6 などもそうでした。

これはなぜかと言うと、`ICカードをエミュレーションするには通信規格以外の要素も再現する必要があるが、その要素(特にICチップの挙動)については NFC デバイスを名乗るさいの厳格な要件がない`からです。

Suica は FeliCa という Type-F の通信規格を使用した独自の `IC カードの実装方式`に準拠していて、Suica にうめこまれた IC チップで処理を行っています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/309585/a50e431a-a499-2c4d-f356-cecd163d5445.png)

![FeliCaの実装](https://www.sony.co.jp/Products/felica/about/img/scheme_06.jpg)
[FeliCaの仕組み](https://www.sony.co.jp/Products/felica/about/scheme.html)

この IC チップの挙動を再現できないために、NFC デバイスだけれども FeliCa 対応の IC カードを再現できないのが、Suica として使用できない NFC デバイスのスマホなのです。

### ハードで IC カードを再現する

じゃあ「FeliCa 対応のスマホ」 はどのようになっているかと言うと、FeliCa の ICチップの動きを再現できる `セキュアエレメント(SE)`という IC チップを物理的にスマホに積んでいます

![Android デベロッパー ホストベースのカード エミュレーションの概要](https://developer.android.com/images/nfc/secure-element.png)
[Android デベロッパー ホストベースのカード エミュレーションの概要](https://developer.android.com/guide/topics/connectivity/nfc/hce.html#HceServices)

日本に進出したい スマホメーカーにとってはこれは、悩ましいところと推察します

正直 FeliCa は SONY の独自規格で日本がメインのものです。

- FeliCa 対応 SE を全機種に積めばコストは上がる
- FeliCa 対応 SE を積まなければお財布ケータイ、モバイル Suica などは対応できない機種になってユーザー層が限定される
- FeliCa 対応 SEを積む機種と積まない機種(海外向け)を作ったら、生産ラインが増えて1つあたりのコストがやっぱり上がる

最近こそ、iPhone や Pixel は Type-A/B向けSE と FeliCa SE の両方を積んでいますが、iPhone 6 以前や海外向け Android スマホなどではそもそも FeliCa SE をつまないものもあります。


### やっぱソフトで IC カードを再現したい

Google さんは黙っておりません。
Android では ホスト側で IC カードの動作を再現するように `HCE(Host-based Card Emulation)` を提供しています

- HCE-A/B(Type-A/B 対応) : android 4.4 ~ 7未満
- HCE-A/B/F(Type−A/B/F対応) : android 7 以降 

![Android デベロッパー ホストベースのカード エミュレーションの概要](https://developer.android.com/images/nfc/host-based-card.png)
[Android デベロッパー ホストベースのカード エミュレーションの概要](https://developer.android.com/guide/topics/connectivity/nfc/hce.html#HceServices)

しかし今現在 HCE はあくまでも通信部分の規格を再現しているにすぎず、FeliCa IC カードのエミュレーションするための FeliCa のふるまいなども含めた実装はまだなされていません
Android スマホでは HCE 限定ではなく、SE との併用もできます。

デバイス, OS をすべて自社コントロールする apple と、OS をオープンにしてデバイスも様々なメーカーがつくる google の戦略の差がここにも垣間見えますね