9

月刊NDEF 2013年12月号

Embed Size (px)

DESCRIPTION

カードエミュレーション特集。

Citation preview

Page 1: 月刊NDEF 2013年12月号
Page 2: 月刊NDEF 2013年12月号

たぐー!

なに燃やしてるの?

エミュレーションするから

もういらないの(注)!

あんまり、NDEFは関係ないです。調べたことを忘れないよう・・・・そんな気持ちで書いてます。

あと、主観と記憶で書いているので、あやしいところがあると思います。教科書的に読むのではなく、「こう思っている人もいるんだ」くらいの気持ちでお願いします。

注)そんなことはないので、安心してください

Page 3: 月刊NDEF 2013年12月号

- 1 -

月刊 NDEF 2013年 12月号

カードとカードエミュレーション

ここでいう「カード」は、NFC のカードだ。いつもはタグと呼ぶことが多いような気がするのだけど、カードな

のだ。そのエミュレーションをするから「カードエミュレーション」。わかったような、わからんような。

カードというのは、だいたいこんな特徴があると思う。

薄い・

NFCの読み書きは、する側ではなく、される側・

カードエミュレーションとしてまねするのは、前者ではなく、後者。NFC のリーダライタからアクセスされたと

きに、カードっぽい振る舞いをすることを「カードエミュレーション」と呼ぶ。

何をすればいいの?

まねをしろ、といっても、なかなか難しい。何をするとエミュレーションしたことになるのだろうか?

これは、実際にどう使いたいかによって変わってくる。考え方としては、リーダライタの気持ちになれ、という

ところだ。

第1段階

リーダライタは、カードがあるかどうかを検出したい。

そのために何をするかというと、搬送波を出して、カードを検出する無線

を出す。カードはそれに応答するというルールだからだ。

ならば、最初のエミュレーションとしては、カードを検出する無線を受信

したら、それに応答する無線を返すのが第一歩となる。

さて、ここで1つ問題が出てくる。

通常の NFC カードは、すごく微量の電力で動作するマイコンが載っていて、搬送波によって生じる起電力で動く

ことができる。どうなっているかは私も知らないのだけど、決まった応答をするだけで良いので、消費電力が少な

いのかな。

しかし、エミュレーションするということは、がんばってまねをしなくてはならない。「つ、次はなにが来るん

だろう」と怯えながら、無線を待ち続けることになる。

そういう動きをするためには、ある程度の速度で動くマイコンが必要になってくる。無線を受信して、その受信

したパケットを解析して、それに応じたパケットを作り、無線で送信する。

けっこう大変でしょう?

赤ちゃんのふりをしたら、ベビーエミュレーションね

ばぶぅ

人の気持ちを考えるのよ

Page 4: 月刊NDEF 2013年12月号

- 2 -

月刊 NDEF 2013年 12月号

最新のパソコンレベルの処理が必要というわけではなく、昔のファミコンくらいの性能があれば何とかなると思

うが、そのくらいのレベルになると搬送波で作った電力だけで動くのは難しい。

なので、通常のカードエミュレーションをする装置は、電源が必要になる。電源が必要になるということは、ど

こかからそれを供給してもらわなくてはならないということでもある。携帯電話に搭載されたモバイル FeliCa のよ

うに、電源がなければ動くことができないのである。

カードエミュレーションをしたいとき、その装置はカードのように持ち運べるという要求がある場合がほとんど

だろう。壁の電源プラグに接続しないと使えないカードエミュレーションの装置なんて、普通はいらないのだ。

移動式の電源、すなわち電池で動くことを考えると、いつも 100%で動作し続けていたらすぐに電池がなくなっ

てしまい、ユーザから嫌われてしまうことは想像に難くない。そこら辺までひっくるめて考えるのがカードエミュ

レーションなのだ。

第2段階

さて、無事にカードとしてリーダライタに検出してもらえたとしよう。

次はもう、リーダライタからカード情報を読み取られることだろう。

ここに来るまでに、カードの無線的な特性はだいたい伝わっているはず。NFC-Aだの Fだの(Bは知らない)。

大きく読み書きアクセスについて分けると、認証無しと認証有りに分けられるだろう。

今のところ(2013年 12月)、NFC Forumではセキュアなアクセスについての手段を公開していない。その部分は

まだメーカーの範疇にある。無線の通信なので、セキュアなアクセスをする秘密のケーブルがあるとかではなく、

プロトコルで実現するしかない。プロトコルでやるなら、認証を得てアクセスすることになるから「認証有り」と

表現した次第である。

NFC Forumの仕様にある範囲でやるなら、認証無しになる。

なので、第 2段階は認証無しアクセスだ。

ただ、基本的なところは認証有り無しに関係はあまりない。リーダライタがパケットを送信してくるので、カー

ドエミュレーションしている側はそれを受信し、パケットを解析し、該当するデータを返すだけだ。めんどうでは

あるが、そこまで難しくはない。

おれは電源なんていらないぜ

簡単なお仕事よ

Page 5: 月刊NDEF 2013年12月号

- 3 -

月刊 NDEF 2013年 12月号

第3段階

では、第 3段階は認証有りアクセスとなるか。

それが必要になるのは、セキュアさが必要になるところだ。たとえばこんなところか。

入館証での出入りチェック・

金融機関へのアクセス・

お買い物・

なんとなく「そこはセキュアじゃないといかんよな」というところが、ここになる。

ひとことで「セキュア」というが、じゃあどこがどうなったらセキュアなのか?

インターネットで言えば、http はセキュアじゃなくて、https はセキュアだ、みたいなイメージがあるけど、NFC

だとそういうのが見えるわけでもないので、見分けることはほぼ無理だろう。

今のところ、カードメーカーが提供しているセキュアな手段を使った通信はセキュア、としか言えない。

カードエミュレーションの実例

いくつか、例を挙げよう。

モバイルFeliCa

カードエミュレーションの筆頭格だろう。

モバイル FeliCa は、携帯電話という移動通信が可能なハードウェアがあって初めて成り立つものだ。もちろん、

ネットにつながったりしなくてもカードエミュレーションすることはできるのだが、それではお金を出す人はいな

いだろう。そういった事情をいろいろひっくるめて実現できたのがモバイル FeliCaじゃなかろうか。

モバイル FeliCa をするためには、まず携帯電話にモバイル FeliCa チップが載っている必要がある。iPhone5 なん

かがモバイル FeliCaできないのは、NFCチップを載せていないからだ。他のチップでは代用できないのである。

最近の Android 端末では NFC チップを載せているものが多い。私が持っている Nexus7 も載せているのだが、そ

れだけではモバイル FeliCa ができるわけではない。これも"今のところ"にはなるが、モバイル FeliCa を行うために

は、モバイル FeliCaができるチップを載せていなくてはならない。

カードエミュレーションの第 3段階、つまりセキュアなアクセスを実現するのに、だいたい 2種類の方法がある。

専用ハードウェアタイプ・

SIMタイプ・

こういうのを「セキュアエレメント」と呼んでいる。

人が持つという百八のセキュアをここで撞くのじゃ

茶でも飲んで少し休め

Page 6: 月刊NDEF 2013年12月号

- 4 -

月刊 NDEF 2013年 12月号

そもそも、なんでセキュアなアクセスにタイプがあるかというと、セキュアにアクセスするためのデータをどこ

に置くかという問題があるからだ。

もし本体メモリ内に置いた場合、いくら MMU などの機構があったとしても、不正アクセスされる可能性はゼロ

ではない。極端な話、FLASH やメモリに展開されているならば、全アドレスのデータを取りあえず吸い上げて、あ

とで考えればよいだけだ。

しかし、専用ハードウェアや SIM のようなアクセスしないと取得できないような場所にデータあるならば、そう

そう簡単には取得できないし、がんばって取得してもその次にまた鍵がかかっていて・・・となって、苦労の方が

大きいのに得るものは少ない、ということになってくるんじゃないだろうか。

セキュアというところでいくと、もう 1つ漏れるルートがある。それは、無線だ。

無線なので、届く範囲にいれば受信することは誰でもできる。NFC Forumの仕様書もあるので、それだけであれ

ばなんとかなると思う。あとは受信したデータをどうするかだが、いろいろと暗号化とかされているだろうから、

それをがんばって翻訳するしかないだろう。翻訳しても仕方ないようなデータにしているとは思うが・・・。

すまんが、私はあまりそういう方面に詳しくないので、下手な説明をするのはやめよう。

そんなわけで、セキュアエレメントを専用ハードウェアに置いているタイプと、SIMに置いているタイプがある。

モバイル FeliCaは、前者だ。世界的には、たとえば GSM規格などは後者を推奨していたはずだ。

SIMにデータを置く利点は、可搬性だ。SIMを差し替えれば、同じことが別の端末でできる。

しかし、SIMアクセスはプロトコルを使わなくてはならないし、SWPという 1本線の通信で速度もそこまで上げ

られず、「アクセスが遅い」ということになってしまう。

専用ハードウェアはその逆。NFC チップはメモリのようにセキュアエレメントを使えるため、アクセスは格段に

速い。速いのだが、チップと直結しているので物理的な移動はできない。それに「NFC チップと専用ハードウェア

を搭載してもらわないといけない」という壁が大きい。そもそも載せてもらえなくては、使ってもらうことができ

ないから。

悩みどころだ。

ただモバイル FeliCa も、SIM に持っていこうとしているとのことだ。「SIM に入れる」というのが私は具体的に

どういうことになるのかわからない。モバイル NFC チップから SIM にアクセスできるようになっていて、モバイ

ル FeliCaチップじゃなくても FeliCaとして使えるようになる、などとなるのだろうかね。

そこのあやしいNFCアクセス!止まりなさい!

なにを悩んでいいかもわかりませんわ・・・

Page 7: 月刊NDEF 2013年12月号

- 5 -

オムロンの医療機器

オムロンさんの製品には、NFC での通信ができるものが多い。もちろん、固定の値を返すのではなく、体温とか

血圧とか、計測した値を返すのだ。

そうした動的なデータを扱う場合、NFCタグでは実現できない。やるならば、Peer to Peer(P2P)モードでデータ

交換するか、カードエミュレーションしてカードのふりをしてデータを読み取ってもらうかになる。

カードエミュレーションの利点は、リーダライタからのアクセス要求があるまでは通信しなくてよいということ

が挙げられる。無線通信はそれなりに電力を消費するので、やらなくてよいときはやりたくないのだ。

さて、オムロンさんがどのようにしてカードエミュレーションしているか。モバイル FeliCa チップを搭載してい

るのか? そうではない。FeliCa Plugというカードエミュレーション専用のチップを使っているのだ。

FeliCa Plugは NFC-Fとしてふるまう。システムコードとしては 0xFEELか 0x12FCのどちらかしか選べないが、

それ以外は Type 3 Tagのようにアクセスできる。なので、NDEFタグとして振る舞うこともできる。

アクセスが来たかどうかは、搬送波で検知することになる。FeliCa Plugが割込信号を上げてくれるので、それが

来るまでは寝かせておけば良い。起きたら、読み書きして、搬送波がなくなったらまた寝るのだ。

HCE (Host Card Emulation)

Android 4.4で追加された HCEについて触れておこう。

カードエミュレーションの前に「Host」がついている。このホストというのは、ホストマイコンの意味と考えて

よいだろう。周辺機器チップは、自分を制御するホスト役のマイコンがいることを想定していることが多い。セン

サーなんかはそうで、「私データを作って投げる人、あなたデータを受けとって加工する人」のような分担になる。NFC

チップもそうで、自分で無線の送受信などはできるけど、どういうデータを送信するかや、受信したデータをどう

するかはホストの役割なのだ。

「Host」がない場合のカードエミュレーションがどうかというと、最初の方に書いたセキュアエレメントがやる

ことになる。前述のオムロンさんの製品もセキュアエレメントがないので、ホストマイコンが行うカードエミュレ

ーションということになる。このタイプのカードエミュレーションは、セキュリティ的に少し弱くなるのかもしれ

ない。ただ、私はセキュリティのことに詳しくないし、あまり興味が無いので割愛させていただく。

搬送波は寝て待て

セキュリティのことなんか忘れてしまえ

月刊 NDEF 2013年 12月号

Page 8: 月刊NDEF 2013年12月号

- 6 -

Androidには Android Beamというデータ交換のしくみがあるし、SNEPという標準的な P2Pモードを使っている

のでWindows8などともやりとりできる。なのになぜ HCEをつけたのだろうか? 推測だが、いくら標準的とはい

え、P2P モード自体がそこまで普及したシステムじゃないからだと思う。やはり NFC といえば、リーダライタとカ

ードのアクセスというのが主流だ。最初は私も、セキュアな P2P アクセスがあればそれでいいやん、と思っていた

のだけど、世の中はそんなに甘くないようだ。

カードエミュレーションすれば、既存で動いているリーダライタでアクセスする市場に乗り込みやすくなる、と

思ったのかどうかは知らないけれども、とにかく搭載されることになったようだ。

Android 4.4にバージョンアップすれば NFCチップが載っている機種全部がそうなるというわけでもなさそうで、

うちの Nexus7(2012)は載っていないように見える。Nexus7(2013)では動いたようだ。

なお、Android 4.4の HCEは、どの NFCタイプでも実現できるというわけではなく、Type 4Aと呼ばれる規格で

しか動作しない。なので、残念ながらトルカなんかが動かせるというわけではない。

HCE を使うメリットとしては、セキュアエレメントがいらない、という点に尽きる。セキュアエレメントを使い

たい、となると、そのセキュアエレメントにデータを載せる許可を誰かに得なくてはならないはずだ。

セキュアエレメントというのは共通資源のようなもので、好き勝手に使えるようにはなっていない。もしそうな

ら、セキュアでも何でも無いし。

とにかく、私みたいにセキュアエレメントに詳しくない人でも、申請がいるとかいらないとかを考えずに実現で

きる、というのがメリットなのだ。その分、セキュリティに何かあったときの責任は負わないといけないが、「NDEF

で URL を渡す」なんて目的のためにはセキュアエレメントなんかいらないだろうから、そういう用途から始めると

よいのではなかろうかね。

世の中はそんなに甘くないぞ

月刊 NDEF 2013年 12月号

Page 9: 月刊NDEF 2013年12月号

- 7 -

まとめ

久しぶりに、NFCのことを調べた気がする。

だいぶんわかったつもりになっていたが、いやいや、まだまだ。

ちょうどオライリーさんから「NFC HACKS」という本も出たことだし、も

う少し Type 4 については調べて、せめて HCEで NDEFを実現するところま

ではやってみたいものだ。

2013/12/22

月刊 NDEF 2013年 12月号