その後のその後

iOSエンジニア 堤 修一のブログ github.com/shu223

ユーザー登録なしでユーザーを識別するベストプラクティス

アプリを起動していきなりサインインや新規アカウント作成が必要だとそこで辞めてしまうユーザーは多い。
で、ユーザー登録ステップを踏まずにユーザー識別する手段としてまずUDIDを使う方法を思いついてしまうのですが、下記のようなすごくためになる記事がありまして、


iOS デバイスでの番号・番号・番号( UDID、ICCID、IMEI、... )


それによるとUDIDを使うのはだいぶリスキーなようです。

UUIDを認証に使った場合、他者に漏れると簡単になりすましができてしまう。この為、認証に使ってはいけない。また生のまま暗号化されていないネットワークに流すことや、サーバ側で管理することも推奨されない(UUIDを元に個人が特定できる可能性が出てくるため、漏洩した場合まずいことになる)。ログを取る目的などで単にユーザを分別するのに利用したい場合は、適当な文字列(SALT)を加えてから MD5や SHAなどのハッシュ関数を通した値を使うと良い。SALTが漏れると意味が無いのでこれは秘密にしておく。なおSALTを単純にソースに埋め込んだ場合、実行バイナリを解析されるとすぐにバレてしまう可能性がある。簡易な方法としては、適当な文字列に加え、他の複数のデバイス固有情報(の一部)を SALTに加えると良いと思われる(シリアル番号やWiFiアドレス他)。


で、ユーザー識別したいだけなら一意な乱数を生成してそれをIDとして利用すればよいとのこと。おっしゃる通り。

(2010-09-17 追記)参考情報記載の Togetter の高木さんの発言によればユーザ識別用途なら乱数の使用が望ましいとのこと。端末固有の情報をいくら組み合わせても端末特定は可能なため。


http://togetter.com/li/28715

アプリ初回起動時に乱数で十分に長い専用のIDを生成してそれを記憶し、次回以降そのIDを送信して使用する設計にするのが正しいです。再インストールで消えることがあってもこの用途のアプリなら十分なはずです。