たまには技術的な話を。
服LIVEもver3.0での新機能の一つでは、入力時のデータ(個人の不快指数と実際の天気情報から計算された不快指数)を利用したものがあり、それを分析したりしたいので、個人を特定するためのIDを利用しなければいけなくなりました。
そこでまず候補として上がったのが UDID: Unique Device Identifier
簡単に言えば、端末情報。その携帯それぞれが持ってる固有のIDですね。
iPhoneに関しては以下の2行書けば取得できる
UIDevice *device = [UIDevice currentDevice];
NSString *udid = [device uniqueIdentifier];
しかし、このUDIDはセキュリティのことを考えたら、まず使ってはいけないID。
みんなが普通に使ってれば何も危険なことはないのだが、一人でも危険な人がいればこのIDが危険なものになる。
例えば、このIDを使って位置情報を保存したとしよう。
そして、引き出す時にそのUDIDを用いてそのユーザの位置情報を引き出すとすると、もし他の知らない誰かがあなたのUDIDを知っていたら、あなたがどこにいるのか突き止められるというわけである。
しかも、この世には「UDID Faker」というアプリまであり、jailbreakしたiPhone OSで使用でき、指定したアプリに対してUDIDを差し替えることができる。
おそろしや・・・
そこで、UDIDのセキュリティリスクを回避するためにあるのがUUID:Universally Unique Identifier
乱数IDを生成し、文字通り世界に一つのIDを作れる。
UUIDは16バイトの数値で表され、「550e8400-e29b-41d4-a716-446655440000」のように表現される。
よく利用されるのは乱数に基づくUUID(UUID version 4)で、この形式のUUIDは2の122乗通り(およそ5.3×10の36乗通り)存在する。
ちなみに、10の36乗は・・・http://homepage2.nifty.com/NG/unit/sub.htm
なので、このUUIDをアプリ起動時に一度生成するようにプログラムに組み込めば、それと同じIDを探すことはまず不可能。(運営側が教えない限り)
じゃ、実装はどうやってやるのかって?
たったこれだけです。
(ここを参照しました。)
- (NSString*) getUUID
{
//create a new UUID
CFUUIDRef uuidObj = CFUUIDCreate(nil);
//get the string representation of the UUID
NSString *uuidString = (NSString*)CFUUIDCreateString(nil, uuidObj);
CFRelease(uuidObj);
return [uuidString autorelease];
}
以上、IDを扱うエンジニアなら知っておきたい情報でした。
ちなみに、ここを見るとより詳しく理解できます。
http://takagi-hiromitsu.jp/diary/20100619.html#p01
服LIVEもver3.0での新機能の一つでは、入力時のデータ(個人の不快指数と実際の天気情報から計算された不快指数)を利用したものがあり、それを分析したりしたいので、個人を特定するためのIDを利用しなければいけなくなりました。
そこでまず候補として上がったのが UDID: Unique Device Identifier
簡単に言えば、端末情報。その携帯それぞれが持ってる固有のIDですね。
iPhoneに関しては以下の2行書けば取得できる
UIDevice *device = [UIDevice currentDevice];
NSString *udid = [device uniqueIdentifier];
しかし、このUDIDはセキュリティのことを考えたら、まず使ってはいけないID。
みんなが普通に使ってれば何も危険なことはないのだが、一人でも危険な人がいればこのIDが危険なものになる。
例えば、このIDを使って位置情報を保存したとしよう。
そして、引き出す時にそのUDIDを用いてそのユーザの位置情報を引き出すとすると、もし他の知らない誰かがあなたのUDIDを知っていたら、あなたがどこにいるのか突き止められるというわけである。
しかも、この世には「UDID Faker」というアプリまであり、jailbreakしたiPhone OSで使用でき、指定したアプリに対してUDIDを差し替えることができる。
おそろしや・・・
そこで、UDIDのセキュリティリスクを回避するためにあるのがUUID:Universally Unique Identifier
乱数IDを生成し、文字通り世界に一つのIDを作れる。
UUIDは16バイトの数値で表され、「550e8400-e29b-41d4-a716-446655440000」のように表現される。
よく利用されるのは乱数に基づくUUID(UUID version 4)で、この形式のUUIDは2の122乗通り(およそ5.3×10の36乗通り)存在する。
ちなみに、10の36乗は・・・http://homepage2.nifty.com/NG/unit/sub.htm
なので、このUUIDをアプリ起動時に一度生成するようにプログラムに組み込めば、それと同じIDを探すことはまず不可能。(運営側が教えない限り)
じゃ、実装はどうやってやるのかって?
たったこれだけです。
(ここを参照しました。)
- (NSString*) getUUID
{
//create a new UUID
CFUUIDRef uuidObj = CFUUIDCreate(nil);
//get the string representation of the UUID
NSString *uuidString = (NSString*)CFUUIDCreateString(nil, uuidObj);
CFRelease(uuidObj);
return [uuidString autorelease];
}
以上、IDを扱うエンジニアなら知っておきたい情報でした。
ちなみに、ここを見るとより詳しく理解できます。
http://takagi-hiromitsu.jp/diary/20100619.html#p01