idcon14レポート

10月5日に行われたidcon #14に行ってきました。ヒカリエのDeNA会議室、きれいですね。DeNAステッカーとベイスターズのお水いただきました。

JSON based Web Service」

  • JSON Pointer
    • XMLで言うところのXPathに相当する
      • Specはdraft04
      • 空文字列 → obj
      • / → obj[""]
      • /foo → obj["foo"]
      • /0 → obj[0]
    • json_pointer(obj, "/foo")
      • エスケープ: ~0 → ~, ~1 → /
    • 使いどころ
  • JSON Patch
    • Textの差分に対する diff/patch
      • JSONの差分に対する JSON Patch
    • Spec draft-05
      • 差分を表現する JSON Patch document
      • 適用するoperator
    • 配列の各要素にoperationを表わすobject
      • op: オペレーション名、path: JSON Pointer
      • value, toなど
      • { "op":"add", "path":"/foo/bar/2", "value":42 }
    • 適用手順: 上から順に。失敗したらエラー
    • opいろいろ
      • add: 追加: pathはrootか存在するobjectまたはarray
      • remove
      • replace: 置きかえる
      • move: toのJSON pointerで指定された位置へ移動
        • toが配列の場合、いくつか制約がある
      • copy: toで指定された場所へコピー
      • test: pathの位置の値がvalueで示された値か確認する
    • 使い道: application/json-patch
      • RESTful APIでPATCHメソッドと共に差分適用を表現
  • まとめ
    • JSON Path
      • シンプル
    • JSON Patch
      • PATCHメソッドで使える
    • JSON Schema
      • Validationとして使用可能
      • FB Graph API Explorerなどで使われている
      • hyperlinkを使うとAPI記述言語としても使える
    • 自分自身をdescribeするスキーマをリンク要素で返すなど考えられる
  • Q&A
    • mad_p: JSON PathもPatchもobjectとarrayは割と上手に混同されていて便利だと思うけど困らない?
      • zigorou: objectのkeyとして文字列"0"を使うとかですよね? やめてください
    • nov: 誰が仕様作ってるの?
      • lef: PathとPatchはIPSのappsエリア、SchemaはGoogleさんがホスト? Schemaだけ独立してるような
      • zigorou: Googleさんがdiscoveryに使っているアレはオレオレだったんじゃないかな
    • lef: 正直、昔を知ってるとXMLでやったよなーと思う。反省生かされているのか、同じモノは必要なのか、とか何か?
      • zigorou: JSON Schemaは同じことしてます。もうれつにシンプルにしたんだけど、機能足りないので追加しているようなフェーズ
        • 拡張性としてXMLも使うようなサービスには使えなかったりする。LW向けなんだろう
      • zigorou: XMLをメインに持ってくる事業者が少なくなっていることが反映されているのではないか。XMLのツールでは逆にJSONを表現するにはゴツすぎたりして使いにくい。接点がないのかなあ
  • 感想: スキーマは自分でもいろいろ書いてみないとわからないので、仕事のAPIを記述したり試してみようと思います。

「Multiple Personae, One "Persona"」

  • ぺるそな?
    • Mozilla Persona
    • ログインのためのより良い方法 (better way)
  • より良いとは?
    • たくさんのパスワードを必要としない(ID連携)
    • 複数のメアドを使い分けられる
    • decentralized
    • real privacy: 非営利、トラッキングを行わない
  • BrowserID: プロトコルの名前
    • 昔はVerified Emailとも言われていた
    • Mozilla Persona: ブランド名
  • BrowserIDのかんたんな解説(beta1)
    • navigator.id.* を使ってassert
    • サインインを始める
    • ブラウザのUIが出現、ユーザーにログインの意志を確認
      • ログインしてOK
      • コールバックにユーザーのassertionが渡る
    • スクリプト経由でRPにassertionを渡す
      • RPはassertionを検証
      • ブラウザにクッキーなどでログイン完了を伝える
  • Identity assertion
    • eyJで始まる文字列 → 複数のJWTトークンをチルダでつないだもの
    • ひとつめpublic-key, principal, issドメイン名など
      • Browserが鍵ペアを作る
      • パブリックキーにIdPが署名したJWS
    • ふたつめ
      • 受領者がaudに書いてある
      • ブラウザの鍵ペアで署名したJWS
  • 検証方法
    • RPはIdPからIdPのpublic-keyをもらってくるだけでOK
      • IdPには誰が何をアクセスしようとしているか教える必要がない
    • assertionの中にあるJWSの署名を検証できる
    • 使い道: メールによるワンタイム認証フローを置きかえることができる
  • 実装しているブラウザはない
    • /.well-known/browserid → 全然みつからない
    • navigator.id.* → 実装を見ない
  • persona.org: fallback IdP
    • persona.orgが代わりに署名してくれる
  • fallback browser
    • persona.orgが提供するJavaScriptで機能を提供
  • 両方とも使ってしまうと結局persona.orgに頼るメールフローになってしまう
    • OpenID Connect OPからid_tokenを取る方がシンプル
    • 残念な感じ
    • 少なくともブラウザ側実装はほしい
  • ネイティブ実装
    • Firefox向け → 今年Q3くらい?
    • B2G (Firefox OS)にも実装予定。課金とか?
    • スマホでアプリ間認証とかに使えるのでは
      • 事前にIdPの証明書がわかっていればオフライン検証もできる
  • まとめ
    • ブラウザの鍵ペアと多段階の署名がキモ
    • persora.orgにfallbackしちゃうので現状は残念
    • 今後に期待?
  • ところでメール連携はId連携と似ている
    • メールプロバイダはIdPなのか?
    • ユーザーのメールアドレス所持を保証
    • パスワード再発行(refresh tokenに似てる?)
    • Identifier Providerかな?
  • 結論
    • パスワードはサービスごとに変えましょう
    • パスワードは減らしましょう
    • ID連携がパスワードを減らします
  • Q&A
    • PersonaというサイトとRPの信頼関係は、RPが一方的にpersona.orgを信頼していて逆はないということ?
      • bkihara: そのとおり。ドメインに正しくアクセスできるかどうかで担保する。
    • IdPには誰が何をアクセスしようとしているか教える必要がない、などがメリット?
      • bkihara: そうですね。IdPとしては公開鍵を提供しているだけ。ただし、ブラウザの鍵ペアに対する署名はあまり長時間やっていると盗まれる危険がある。仕様では24時間以内ということになっている。するとログインの度に署名が走るため、統計アタックなどがないかなーと調べている
    • nov: 使っている人いる?
      • MozillaのサイトがBrowserIDベースの認証に変わってきている。MDL、bugzillaなど
      • mala: メールの到達性を確認したいときに気軽に使えるのでは
        • bkihara: XMPPのJIDを保証するようなプロバイダがもし出現すると、元々の名称だった「verified email」としてのメール到達性保証が得られなくなる。それはちょっと残念かもしれない
  • 感想: ブラウザで鍵ペアを生成してIdPから署名をもらうというと、PKIをJWTベースで簡単にした感じなんでしょうか。勉強したいと思います。

「日本史から学ぶID」

  • (19:47)
  • @masanork
  • 興味を持ったきっかけ: 間に合わなかった規制改革
    • 戸籍が庁舎の中でしか保管できない法律になっていた → クラウドに保存したい
    • 改革はなんとかできたが、データ移行が間に合わないうちに震災が起きてしまった
    • 戸籍は日本でタブー視されているようで、いつからあるんだろと思って調べはじめた
  • 日本書紀を見ると、紀元前からそういうものがあったようだ
    • 肉を納めさせる → 取りたてるために管理
    • 渡来人も登録
    • 税金逃れのために戸籍を登録しない者が発生: 女性として登録、死んだのに生きていることにしたり。今も昔も不正の手口はあまり変わってないw
  • 律令制
    • 7世紀くらいになると、掘ると出てくるものがある
    • 戸籍を整備して税金を取る。どれくらいの田畑をたがやしているかを調べ、計帳に記述
    • 8〜9世紀に一度途断えてしまう
      • 人は逃げてしまう。どうやったらいいか → 土地に税金をかけるようになった
      • 人は逃げるが田んぼは逃げない。人の頭数を数える必要がなくなった → 戸籍もなくなった
  • 朝鮮出兵と人掃令
    • 次に頭数を数える必要があったのは徴兵
    • そんなに定着はしなかった
  • 1635年寺請制度 → 現在の戸籍の原型
  • 宗教的な理由で戸籍的なものがあるのは他の宗教も同じ
  • ここまではバックエンドのデータベースの話だった。いよいよトークンの登場
    • 往来手形: 関所を通るための手形。パスポート
  • 明治維新と戸籍制度
    • 依然としてキリスト教は許されていなかった
    • 政府は神社に登録させた
    • 明治5年壬申戸籍
      • 宗教と絡んだ形で戸籍が整備されていった
  • 岩倉具視使節団と基督教解放
  • 東京駅の立てかえ: 大正3年
    • 明治の戸籍は血のつながりとか関係なく建物で書いていた
    • → 血のつながりで戸籍を作った
    • 交通が整備され、住所が変わる人の管理をちゃんとやる必要が出てきた。寄留法 → 登録してもしなくてもよくて、あまり登録されなかった
  • 関東大震災 → 表札の昔及
    • 寄留簿ではそれまであまり困ることはなかった
    • 震災後の配給制度で困った。いる人は食わさなきゃならないので、頭数を数え、ボトムアップで台帳を作成
      • トークンとして配給切符を配布
      • 「外食」: 配給切符が由来。家の米が減らないので、外部食堂券をもらっていた(米の配給がその分減る) → 外食
  • 配給のために作った世帯台帳
    • → 信頼できる整備されると他の用途に使いたくなる
    • → 選挙に使った
    • → 配給が終わったら困るよね → 住民票になった
  • 戸籍と世帯台帳をつなげる仕組みが作られた
    • そもそもなんで戸籍と住民票が分かれているのか、という問に対する答
    • 当時はコンピュータがなく紙で管理しているので、書きかえるために信頼度が下がる。人が死んだとかめったに使わないものは戸籍として分けて残った
  • 当用漢字と人名用漢字
    • いずれ漢字はなくなると思われていた
    • 当用漢字: 当面使ってもよい漢字
    • 人名用漢字が作られる直前の首相: 菅直人、「直」のナの部分はななめに払いになっている → プリンタドライバを工夫したりとか
    • 人名用漢字の制限: 名前は制限したが名字は制限しなかった! 当時はコンピュータがなかったので必要なかった
      • 文字が増えるなどとは考えなかった
  • 住民票を法務省から自治省へ(1967)
  • 漢字コードと外字問題が発生(1990年代)
    • 1978年、JISコード制定
    • 多くの人の名前が標準の文字セットに入っていなかった
    • 自治体ごとに外字がどんどん作られた
    • 最近1400自治体を調査した結果、116万文字もの外字が定義されていた
    • このような外字文化を持つのは漢字圏でも日本だけ
  • パソコンとネットの普及
    • クレジットカードとパスワード、昔は心配されたけど結局使ってるよね
  • 米同時テロ事件 → 本人確認の強化
    • 日本には本人確認の法律がない → はじまった
  • 住基ネットと反対運動
    • 個人情報保護の流れ
    • 住基ネット自体は合法という判決が出たが、どこまで組織間で連携していいかは、このときの判決の解釈が大きな論点
  • ソーシャルメディアの台頭
    • まったく別の文脈で個人が自ら情報を出していく動きが活発になっている
    • キリスト教弾圧のための寺請制度が行政に使われた。配給のための世帯台帳が行政の基盤になっていった。いままた、友達関係を記述していたIDが行政に活用されようとするのかな
  • IDと政府
    • 管理目的を持って管理しようとしてもうまくいかない
    • 何かの目的で集めたものを別の目的に使うほうがうまくいくかも
  • Q&A
    • nat: 今日、入るのに名刺を出してくださいと言われたが、えっ、これ本人確認なの? と思った。どうでしょう
      • masanork: それはsunk costであろう。なりすますために印鑑作ったり名刺作ったりはしないだろう。役所で住基カードを出すときらわれる。運転免許の方がよかったりする。tokenの強度よりもattributeを気にしている。
    • nat: 名刺の裏にお金貸しますと書いてサインするのはいいと思う。文書として成立する。一方名刺はかんたんにリプレイアタックできる面もある
      • masanork: 複数枚の名刺を用意させるという手がある。自分の名刺を複数枚(2枚とか5枚とか)持っていればOK。他人の名刺を作ると私文書偽造になる?
      • nat: 米国では人をだます目的で作ると罪になる
  • 感想: 非常に面白かったです。歴史の時間に習った、でも忘れてた、というようなものが多く出てきて、勉強になりました

「OAuth Server、セキュアに実装しようず」

  • (20:32)
  • 司会: @nov
  • パネリスト自己紹介
    • @gabunomi_ (阿部さん) ピーシーフェーズ
      • Javaメイン
      • appiaries (BaaS: Backend as a Service)
      • スマートフォンアプリ向けのプラットフォーム
      • アプリごとに異なるユーザーID(PPID)
      • 今後のアイディア: 情報活用の表示方法、プロフィールの複数登録、スキンなど
    • @kthrtty (勝原さん) NRI
      • ID関連ソリューションの企画・営業・開発・基盤・保守・運用
      • NRIは自社でサービスをしているわけではない。SI屋
      • IDを真面目に考える企業が増えてます
      • ネット企業でソーシャルグラフなど出せないような会社に会員統合と言って出させるおしごと
      • Uni-iD
    • @jacksuzuki (鈴木さん) 楽天
      • Jack
      • API Engineer
      • 楽天ブックマークAPI: いまは買わないけど気になるものを登録できる
      • koboのバックエンドも手がけた
        • PDFをePubに変換して読めるw
    • @yoichiro (田中さん) mixi
      • #idcon 初参加
      • Google API Expert (Social)
      • mixi入って3年こえたくらい。3年前のmixiは上り調子
        • WSSE認証など、OAuth 1以前から
        • OAuth1 → OAuth2などmixi platform全般
  • confidential clientとpublic clientの割合は?
    • n: FBクライアントはimplicitだと乗っとられる場合もある
    • n: mixiさんimplicitサポートしてないですよね? なぜ?
    • y: 社内でサポートしたいねという話は出ては消えをくり返し、3年半経過。一番大きな理由は、過去にmixiサービスで事故ったりということもあり、シビアに考えているということ。一度やらかしてしまうと本当にオワコンになってしまう。OAuthの本来の目的である認可を考えると、ユーザーが許可したとしてサービスが良い子とは限らない。良い子じゃなかったときにPF側で何もできなくなるので、client_idを外すことはできなかった。「あなたはもうダメです」という最後の砦をくずしていない
    • n: 楽天さんはどうでしたっけ?
    • j: してません
    • n: appiaries ではサポートしてますよね
    • g: サポートしてます。redirect uriを制限し、カスタムスキーマは禁止。user credentialも許していないのでいいかな、と
    • n: NRIでは気にしてます?
    • k: サポートしていないところの理由はかんたんで、implicit grantいらないや、というのが多い。サポートしたところはJSのゲーム、flashからAPIを叩きたいということだった。APIを使えるclientがどんなAPIを使えるかというと情報参照程度。書き込み系はガンガンポイントを増やせるなどヤバイので、codeを使ったり、サーバーからリクエストを投げるような用途に限定するなどが現実的
    • y: 気にしてるのはセキュリティーだと思う。アプリは主流がJSでブラウザだったりスマホだったりする。FBもGももうimplicit grantをサポートしてブラウザ上でアプリ書いてくださいというように、バランスが変わってきていると見ている。最後の砦とか言ってると世界に取り残されそうな危機感はある。自分で自分の首をしめないように見ながら、ある日決断するのかなあ、と
    • n: public clientと両方サポートしてるときは比率どれくらい
    • g: 7割くらい。3割はconfidentialを選んでみただけ的な
    • n: 通信解析するとsecret送っているアプリがいたりするけど、バレるとマズイよね。むしろimplicitよりマズイと思う
    • n: スマホターゲットなんだけどconfidentialしかサポートしない例はあるのか
    • k: 基本的にはみんなcodeでconfidential。ただしiOSのkeystoreにちゃんと保存しましょうというところまで手が回っていない。そこがアプリ開発者の人達のモラルやノウハウにまかされている。アプリでインストールベースで全部同じsecretが入っているの、漏洩したらどうします? って言っても、こうしたらみたいのを言えないのがもどかしい。client_secretをインストールベースごとにサーバーで一意に発行するようなお客様もいない。アプリを作る側からすればimplicitでいいよね、ってなってしまう
    • y: アプリをクラックされてsecret抜かれちゃうって話になっているけど、通信路からもれるのとは別の話だと考えた方がいい。ストレージをクラックするのは100%ではないのでがんばりましょうという話。通信路の場合は受ける方がSSLでしか受けないとなれば、アプリでは送るしかない。
    • n: ユーザーを守るのか何を守るのかという話
    • y: OAuth1に戻って署名を送ってもらえばちょっとは上がる。
    • j: モバイルアプリにsecretを入れるのは昔は推奨されていたがいまは逆になっている。業界も変わってきている
    • n: 悪意のあるユーザーからは守れない。client credentialをサポートしていなければ、漏れても大したことないかな、と
    • n: Googleは面白いことにclient credentialをスマホアプリに埋め込ませてる。client credentialフローでは取らせないようにしてるのかな、と想像するけどわからない
    • 会場: 認可した後の悪いアプリからの防御はどのように考えているのか
    • y: ひとつは通報。誰かが見つけてくれて教えてくれたら調査します。もうひとつはAPIのアクセス数の傾向をいまのところ全部見ている。本当にヤバイものにはリミットをかけている。実際にリミットがかかったものは、誰がどのアプリでいつ、を監視している。スパイクが出たり、他のものと傾向が違う場合には調査を始める、という形
  • nat: 楽天さんはstateパラメータをサポートしてないのはなんで?
    • j: redirect_uriのパラメータを許可しているので、そっちでやってほしい
    • y: redirect_uriは登録時に決まってしまう。パラメータをつけられないとすると困りません?
    • j: 完全一致でなくある程度の範囲を許しているので、その中でパラメータをつけてもらっている
    • nat: stateはクロスサイトスクリプティングを防ぐためにnonceを入れるもの。どうすんの?
    • j: query_stringの部分はそのまま送るようになっている
    • k: 完全一致だとconversation idがreturn_toに入っているとはじかれるので、うまく使われていなかったり
    • nat: 仕様を作っている人達からすると完全一致にしてstate使えということ。オープンリダイレクタを作れてしまうので。stateを送られたらそのまま返せというのは仕様上のMUSTになっている
    • k: 昔、zigorouさんのプレゼンでオープンリダイレクタ作れちゃう話はありましたね
  • OpenID Connect対応する? 何が面倒?
    • g: appiariesの仕様は近いが、connectの仕様を読むのが面倒
    • nat: 仕様書をJSON Schemaで書いたらどう?
    • g: XMLと同じになってしまってわからない。英語の方が楽
    • k: natがいるので言えないような気もするが…。OpenID Connectはやれることがいっぱいあって、何もかも実装するというと、お客様にいらないよと言われるものも含まれている。お客様がconnectのここからここまでという風に仕様を取捨選択している。テンプレ化できるとよい
    • nat: プロファイル書いてくださーい
  • nov: 特に結論はないんですけど、OAuth2はドラフトが長いまま31まで来ちゃったんですが、これから実装する人はこのへんの人をつかまえて聞いてください
  • 感想: 各社、顧客の要求に応じてトレードオフを決めているということですね

(21:10)

この後、同じ会場でDeNAさん提供の懇親会がありました。うにもちゃんとありましたよ。

今回のidconも面白い話ばかりでした。masanork先生の戸籍制度の歴史は本当に面白かったです。Ustreamでもう一度見直してみよう。

セッションのメモ、間違って書いている点などあると思いますのでツッコミお願いします。