2011年5月9日月曜日

アプリ内課金のセキュリティ管理

 アプリが送信したトランザクション情報の完全性を保証する補助として、Android MarketPURCHASE_STATE_CHANGEDブロードキャストインテントに含まれるJSON文字列に署名をします。

 Android Marketは、このシグネチャを作るために開発者アカウントにひも付けられたプライベートキーを使用します。開発者サイトはそれぞれの開発者のためにRSAキーペアを生成します。開発者は自分のアカウントのプロファイルページで、このキーペアの公開鍵を見ることができます。これは、Android Marketライセンスで使用する公開鍵と同じです。

 Android Marketは(暗号化されない)JSON文字列とシグネチャに署名し、課金レスポンスを行います。アプリが署名されたレスポンスを受け取ったとき、開発者のRSAキーペアの公開鍵を使用してシグネチャの検証ができます。シグネチャを検証することによって、レスポンスが改ざんされているかどうかを検出する補助になります。

 アプリで署名検証ステップを行うこともできますが、もしアプリがセキュアなリモートサーバに接続可能であれば、サーバ内での署名検証を推奨します。

 またアプリ内課金は、Android Marketから受け取った購入情報の完全性を検証する補助として「ナンス」(一度だけ使用されるランダムな数値)を使用します。アプリはナンスを作成し、GET_PURCHASE_INFORMATIONリクエストとRESTORE_TRANSACTIONSリクエストでナンス送信しなければなりません。

 Android Marketはリクエストを受け取る際に、ナンスをトランザクション情報に含まれるJSON文字列に追加します。JSON文字列は署名されアプリに戻されます。アプリがJSON文字列を受信したら、JSON文字列のシグネチャと同様にナンスを検証する必要があります。

 セキュリティ関連の最良の方法に関しては「セキュリティ・ベストプラクティス」を参照してください。

 

0 件のコメント:

コメントを投稿