第4回 HCEで小さな決済システムを作ってみた!(前編)

第3回では、Android Studioのサンプルアプリケーションをさらに手を加え、より複雑なデータのやり取りを行ってみました。
今回は、最終回で作り上げたいシステム(CardReader側とCardEmuration側)に追加しようとしている機能の全体像を紹介したいと思います。

Android端末のみを使用したお手軽ポイントカード

今回、私たちは以下のような形でNFC HCEの機能を利用したポイントカードの仕組みを作ってみることにします。

TongaroidPoint

大きくは、NFC HCE端末の登録と、NFC HCE端末を使ったポイントの反映の2つのパターンを実装します。端末をかざしてポイント残高を計算するだけでは少々物足りないので、以下に説明する2つの技術的要素を取り込んでみたいと思います。

セキュリティを高めるための「トークナイゼーション」

セキュリティを高める方法は世の中には様々なものがありますが、今回はカード番号に対するセキュリティを高める仕組みであるトークナイゼーションを導入したいと思います。
トークナイゼーションとはクレジットカードを扱う場合などに使われているもので、カード番号の一部を無意味な乱数に置き換えた上で扱うことで、万が一番号が流出したとしても本物のカード番号を知られないようにするための仕組みです。

シーケンス2

単純な暗号化との違いとしては、暗号化は鍵によって元の番号を復号できるのに対して、トークナイゼーションでは単純な乱数を使用するため元のデータへの復号が不可能な点です。
スマートフォンにカード番号を保存しておくのは気持ち的に何かと不安ですが、トークン化された番号であればもし流出してしまった場合も不正利用されるリスクを低減することができそうです。
最近何かと話題のAndroid Payもこのトークナイゼーションの仕組みを採用していますね。
ただし今回作成するものは単純なポイントカードのシステムですのでクレジットカードのようなセキュリティは本当は必要ないのかも知れませんが、流行に乗っかって(?)導入してみたいと思います。

Googleアカウントを利用した本人確認の仕組み

ポイントカードを発行する場合、よくあるお店での方法としては、用紙に生年月日と氏名を記入して店員さんが確認してプラスティックのカードにマジックで名前を書いて・・・・・・なんてちょっと面倒ですね。前回に引き続き今回もせっかくAndroid端末を使用しますので、Androidならではのお手軽なポイントカード発行方法を作成してみたいと思います。

Android端末ではGoogleアカウントでログインして使用するのが一般的ですので、このGoogleアカウント情報を利用して登録処理を行います。Android端末にログインできているのであれば少なくともGoogleアカウントで認証ができていると捉え、端末のGoogleアカウントから生成されたハッシュ値をお店側のDBに格納しておく事で、以降はハッシュ値を本人照合のための要素として使用します。

ですのでCard Emulation側の処理として自端末にログインしているGoogleアカウント情報を取得する必要があります。

Googleアカウント取得のソースコードサンプル

AndroidではAccountManagerを利用することでその端末にログインしているアカウントを簡単に取得することができます。

まずはAndroidManifest.xmlファイルに以下の1行を追加します。

次に、ソースコードのほうではgetAccounts()メソッドを使用してアカウント情報を取得します。以下はそのサンプルです。

ただ呼び出すだけで簡単に取得できますね。

まとめ

TONGARISM.COMオリジナルの決済ポイントカードシステム「トンガロイドペイ」の概要は以上です。
次回はいよいよ最終回。アイデアを形にして実際に動かしてみたいと思いますのでどうぞお楽しみに!