Yahoo! JAPAN のシークレットIDについて思うことをダラダラと

こんにちは, ritouです.

Yahoo! JAPANが提供を始めたシークレットID, 非常に興味深いですね.
ぐぐって上から出てきたような記事だけでもけっこうありました.

とはいえ, 認証周りのお話というのは, 単純に, これはいい!他のサイトもみんなマネしろ!と言い切れるものではないですよね.
私も自称ID厨のはしくれとしていろいろと妄想したことを書き連ねたいと思うわけです.
まず初めに言っておきますが, ここにある内容は私見であり関係者に確認を取ったものではありません.

なぜYahoo! JAPANはシークレットIDを必要としたのか

Yahoo! JAPANにおいてログイン時のユーザー識別子の扱いは非常に厳しい状況にあると思います.

  • (1) Yahoo!オークションなど特定のサービスにおいて, Yahoo! JAPAN ID, ニックネームの露出が避けられない状態にある
  • (2) Y!メールを利用しているユーザーからメールを受け取るもしくはどこかで公開されているメールアドレスから相手にYahoo! JAPAN IDが知られる可能性がある(細かいことはわかんないけど)
  • (3) 外部の複数のWebサービスへのログイン時に利用されるEmailが登録され, その値とパスワードを利用してログインすることもできる

(1), (2)は設計の話くさいですが, オークションやらメールやらブログのURLやら. . . 世の中どうしようもないこともあるでしょう.
まぁ, 他のサービスもそうだとは思いますが, 本人以外のアカウントにログインしようとする不正なログイン試行が想定されます.

  • 公開されているYahoo! JAPAN IDを利用
  • どこかで知り得たメールアドレスを利用
  • 外部のWebサービスから漏えいした(と思われる)Emailを利用

Yahoo! JAPANなんて登録済みのアカウントの数がとても多いので, どこかでPW流出とかいう問題が起こるだけで, 2次被害の可能性も大きいと思います.
ログインID固定でパスワードをいろいろ変えての攻撃への対策として閾値を決めてブロックしたりとかわりと思いつく手法がありますし, いわゆるリスクベース認証とかで必要に応じて追加の認証したりとかでしのぐことが考えられるわけですが, やはりきついのでしょうね.

  • 環境判定とかしても, アクセス元やCookieなどを分散させたりうまいことやってログイン試行されたり, 人手とか, システム的に防ぎづらい場合もある
  • 厳しくしすぎるとよく知られたYahoo! JAPAN IDの人は失敗試行が多くていつも追加認証やアカウントロックの対象になる

そんなこんなで, ログイン専用IDにたどり着いたのではと想像したりするわけです.
いきなり長くなったので次からはさくっと整理ていけたらなと思っております.

シークレットIDを利用すべきユーザーとは

  • (A) オークション, ブログなど, Yahoo! JAPAN IDが露出しているサービスを利用しているユーザー
  • (B) Yahoo! JAPANのメールアドレスを公開しているもしくはそのメールアドレスを用いて比較的多数の人とやりとりをするようなユーザー
  • (C) Yahoo! JAPAN以外で管理しているメールアドレス(gmailとか)を公開しており, そのメールアドレスでYahoo! JAPANにログインしているユーザー

(A)に関してはYahoo! JAPANがシークレットIDの告知とともに"これらのサービスを利用されているお客様はシークレットIDの利用を推奨します"ぐらのことを明示してもいいのではないかと思うほどです.
が, Yahoo! JAPANからしたらたくさんのサービス使ってもらいたいので, みんな使えで良いのかな.
まぁそれを攻撃者が見て, 逆に不正ログインが増えてしまうかもしれないのでタイミング難しいですね.
(C)について, 外部のメールアドレスでログインできること知らない人もいるかもしれませんができますよ.

シークレットIDとは

  • ログイン時のユーザー識別のためのみに利用される文字列
  • ユーザーと一意に紐づく=Yahoo! JAPAN内でユニーク
  • あるYahoo! JAPAN IDに対して一つだけ設定可能
  • パスワードに比べて利用可能な文字種に制限がある
  • たぶん平文もしくはEncryptされてもとに戻せる状態で保存される

ユーザー識別のためのしくみなんで, Yahoo! JAPAN IDやニックネームと呼ばれる類のものと同等に扱われることを認識しておくべきだと思います.
他のサービスで利用しているパスワードをシークレットIDに設定するのは, やめておいた方が良いかもしれません.

シークレットID利用時のユーザーへの負担

ユーザーがやらなければいけないこともそれなりにあります.

  • (1) シークレットIDを考えること
  • (2) シークレットIDを覚えること
  • (3) シークレットID設定後にログインしなおすこと
  • (4) 既存のメーラーメッセンジャーなどにYahoo! JAPAN IDなどを設定している方はそれを変更すること

(1)について, すでにかなりの量のYahoo! JAPAN ID/ニックネームが利用されているのでなかなか難しいかもしれません
(2)はブラウザとかソフトに保存させることもできそうですけど.
(4)は通常のPW変更とかより少し手間ですね.

ちょっと心配なのは, 安易に設定したはいいけどわけわかんなくなってアカウントリカバリーをする人数が増えてしまうかもというところ.
心配しすぎでしょうか?わりと単純にログインする作業と言ってもけっこう難しいと感じている人多いと思いますよ.

ユーザー認証を用いる他のサービスが教訓とすること

  • ログイン時のユーザー識別子はインターネッツに公開しない方が良い
  • シークレットIDのように, ログイン専用IDを持っても良い

けど, ユーザーは忘れるかもよっていう話です.
現状よくあるサービスでいうと,

  • ユーザー名もしくはメールアドレスでログインさせているTwitterみたいなサービスは, Twitter IDのみ, メールアドレスのみログイン可能といった設定があってもいい

と思ったりしています.

このあたり, いろんな方のご意見を募集したい!あて先はTwitterの @ritou まで!ただし, いじめないでください!

シークレットIDの機能や説明で気になったこと

とりあえずYahoo! JAPAN IDに数文字ぐらい足した文字列設定しようとしたら, こんなん言われました.

Yahoo! JAPAN IDを含むシークレットIDは作成できません.

これは謎. ちょっとでも違えばいいのではないかと思いまする.
当たり前ですが, 他の人のYahoo! JAPAN IDを含む文字列は設定できる.

あとは, 登録情報のページからのリンクが

ログイン時に使用するIDの設定

ってなってて言いたいことはわかるけどシークレットIDの響きがなかなか良いのでここでもシークレットIDって書いてもいいかもとか.

まとめ

今日もまとまりませんでした.

こまけぇこと

3つめの外部の人が書いてた記事で素朴な疑問がありましたよっと.

1. usersテーブルにsecret_idフィールドを追加
2. Userを追加するときにIDをハッシュ化しsecret_idフィールドに投入
3. UserがシークレットID機能を利用するときはsecret_idを変更
4. ログイン時にはシークレットIDとパスワードでログイン

(ハッシュ化されてるかは不明ですが, まあしておいて損は無さそうですね)

  • PWと同程度に扱おうぜ的な気持ちが伝わってくるわけですが, ハッシュ化という記載だけでは徳丸本とか読んでる人達が反応するかもしれませんね
  • というか登録情報画面とかでユーザーが設定したシークレットIDを見せない前提と考えている?secret_idフィールドはEncryptもしくは平文では?

こんな感じで良いんじゃないでしょうか?

1. usersテーブルにsecret_idフィールドを追加
2. Userを追加するときにIDの値をsecret_idフィールドに投入
3. UserがシークレットID機能を利用するときはsecret_idを上書き
4. ログイン時にはシークレットIDとパスワードでログイン

まぁ, こまけぇことなので気になさらないでください.

ではまた!