CROSS 2013レポート(3)

CROSS 2013レポートパート3です。malaさんのセッション

間違いや発言意図と違う表現だ、などということがあると思います。ご指摘いただければ幸いです。

安全な利用規約の作り方

なぜ利用規約
  • エンジニア方面の話をします
  • 炎上したり、海外だといきなり訴訟
  • 利用規約やプライバシーポリシーの無理やりな解釈
  • 個人がさわぐ → メディアとりあげる → 取材に応じる前に広まる
  • そんなつもりじゃないのに炎上する
  • 作る側、使う側の視点から
  • 無理やりなイチャモンでサービスの印象を落とすのは本意ではない
  • 本当にヤバイものがわからなくなってしまう
  • 利用規約が「評判リスク」であると扱われてしまう
  • エンジニアができそうなこといろいろあるんじゃないの
  • 利用規約githubに置け」
    • やってるのはtumblrくらい
    • 変更履歴 〜 ユーザーに不利な変更などもわかる
    • 普通の企業の法務はぜったいにやらない → エンジニア発想
  • エンジニアになじみがふかいもの
    • OSSライセンス
    • 解釈にブレがないことが信条
    • 互換性・相互運用性
    • オレオレライセンスはきらわれる
  • 対して、多くの利用規約
    • サービス毎にバラバラ
    • 同じ意味でも表現がバラバラ
  • 最近の流れ
    • 会社のポリシーで共通の利用規約・PP → 個別サービスごとに上書き
    • 多くのサービスをかかえる会社が採用
    • これもエンジニアっぽい発想 → コンポーネント化・継承による再利用
    • 差分だけ読みたいぜ
  • 仕事としての関わり
    • 規約改定時に文句言ったり、ツッコミ入れたり、マズそうなことを止める
    • 法務・ディレクターの役割のはずなんだが、ユーザーに誤解を与える表現だったり
  • エンジニア
    • サービスの内容、扱う情報は一番よく知っている
前提知識
  • 不正指令電磁的記録に関する罪
    • 「意図に反する動作」+「故意」=ユーザーをだましてやるという意志が必要
    • 例: HDDフォーマットツール
      • だまして実行させることを意図して配布すると有罪
    • バグ → 意図がないので罰されない
  • じゃあ、利用規約のバグは?
    • ソフトウエアの挙動と利用規約の説明がくい違う場合がある
    • ユーザーが「そんな動作をするとは思わなかった」「だまされた」と主張するかも
  • バグは処罰されないはずだが、「本当にバグなのか」
  • 絶対にユーザーの意図に反することがない ← 幻想
    • どうすればいいのか
    • 解釈のぶれの範囲がプログラムの挙動と一致するように
    • 心理学などが必要。人間は仕様書どおりに動いてくれない
  • アプリの実行環境
    • ローカル → リモート
    • permission
    • ブラウザの実行環境。ローカルソース、same origin policy
    • UAC全画面ロックした上での確認ダイアログ
    • OSX: sandbox機構がある → appstoreでenforce
    • Android: ユーザーの許可が必要
  • permissionモデルの欠陥
    • アドレス帳使います、ネット使います → 送信するかどうかわからない
    • Adobe Air → ネットとローカルは排他だった
      • → いまは現実的ではない。ネットのないアプリなんか考えられない
  • スマホアプリ → webアプリのfront endにすぎない
    • サーバーのコードとローカルのアプリの組ではじめて仕事になる
    • コードを見せたくない人 → 解析されずに動作が制限される仕組みが必要
      • 逆にコードを見せてもかまわない人は見せればいい
  • 法律面の変化
    • 不正指令電磁的記録
      • 今まさにソフトウエアの信頼を技術的に担保しようとしている時期に出た
      • ユーザー側に害を与えるのは多くはサーバー側
  • 残念な運用
  • どうしてこうなった
    • ガチのマルウエア作者はつかまらない
    • 完全匿名
    • backorifice → 正当な目的もあるので堂々と配布されてる
  • プログラムの信頼 != サービス全体の信用
  • 実際のサービスの信頼が必要
    • 社員が信頼できるのか
  • 法だけが規制ではない
    • 法律による規制はどうせ無法者には役に立たない
    • アーキテクチャによる規制・技術的に悪用できない仕組みが必要
    • 市場原理 → 悪用することによる利益よりも、バレたときの不利益を大きくする
  • 取得できる情報は様々、確認ダイアログがあったりなかったり
    • ブラウザ履歴、アプリ一覧、プラグイン一覧など
    • フォント一覧は描画してみればわかる → どんな年賀状ソフトが入ってるかわかる
  • iOS
    • canOpenURLでカスタムスキーム登録状況がわかっちゃう
    • 自分の電話番号は公式には取れない → アドレス帳から推測
  • Android
    • アプリ一覧は誰でも取れる(package一覧)
  • 保護されるべき情報とそうでない情報
    • 境界は曖昧
    • 実行環境によって多種多様
  • CSSのvisited linkの取得問題
    • 訪問済みリンクの色でわかっちゃう
    • プライバシー侵害の問題が正当な利用より大きく評価された
  • 取れちゃマズイ情報 → ユーザー許可
  • 現状、許可なく取れる情報は使っていいの? → 判断が難しい状況
    • 画面の解像度とか
  • アドバイス
    • 情報の質、ユーザーリスク、悪用・漏洩した場合の被害規模を考える
事例
  • スクエニの会員制サービス
    • 本サービスへの不満を流布する行為を禁止
    • 他サービスでも「その他当社が不適切と判断する行為」があるから、スクエニの方が正直
  • 元々、解釈次第でなんとでもできる → エンジニア視点ではバグのようなもの → 運用でうまく
  • googleの通話履歴利用問題
    • サービス横断して使うことを明確化
    • データまるごとのバックアップをログ情報とは普通言わない
    • 元々やってないことはやらないはず
    • 朝日新聞でも取材しないで独自解釈を報じる時代
    • HTML5のlocal storage → カタカナでローカルストレージ → HDDと誤解
    • まとめサイトでさわぐ → ひょっとしたらやりかねないという空気の醸成
      • 誤解が本当のように流布される
      • Google社員の知り合い、みんなだまってましたね……
  • Instagramの例
    • 写真を売るはずはないのだが
    • ビジネスモデルに無理解だと、無料サービスだから個人情報売ってると誤解される
    • 典型的な間違い
      • 売ってしまったら継続的に利益が出ないので、そんなサービス作るはずはない
      • 使う権利を売っている
  • ビジネスモデルの知識欠如、無理解から、「悪いことしてるんじゃないか」という憶測が生まれる → 根拠のないまま流布される
ケーススタディ 〜 よい事例
  • Mozilla
    • 潜在的個人情報: 単体では個人を特定できないが他の情報と組み合わせると特定できるもの
    • 収集している情報は後天的に個人を特定できる情報となり得る
    • 「個人情報ではありません」という間違った表示をして回避しようとしてしまう
  • Siri: リンクしないポリシー
    • URLにはsensitiveな情報が含まれることが多い
  • 個人情報かどうかってはっきり決まるものではない
    • 個人情報です → 取扱いに制約
    • 個人情報ではありません → うそになってしまう
  • アドバイス
  • 楽天の生メールアドレスをショップに渡すかどうか問題
    • 委託 → 楽天に監督義務
    • 提供 → 義務はない
    • 「業務に必要な範囲」かどうかすぐにはわからない
  • そもそもメアドって個人情報?
    • 総務省: 組織名、個人名が入ってない記号は違う → えええぇ?
  • アドバイス
    • ユーザーがコントロールを失うタイミングで警告するのがよい
    • 誤解を招きそうなときは別途補足すべき
  • 暗号化・ハッシュ化
    • 通信経路だけなのか、保存状態なのか。社員でも復号でなくなっているのか
    • Dropboxの例
      • 技術的に不可能なのか、就業規約としてダメなのかがわからない
  • 著作権管理
    • 悪い例: 2ch
      • お前のものはおれのもの、ただし削除ガイドラインに抵触したら書き込み者の責任
      • 2chの都合の悪い相手には渡さない権利をよこせ
      • 気持ちいいくらい2ch側に都合のよい話になってる
    • アドバイス: 2chのまねをしなければOK
  • リンク
    • 電話番号自体はひみつじゃない。「誰が持っているか」が秘密の情報
    • メアドも
  • 公開/非公開の中間状態があるだろう
  • googleの予備のメールアドレス
    • 予備のメールアドレスでプロフィール検索できる
    • パスワード再発行専用で非公開のものと区別される
  • FBのソーシャルグラフ
    • ユーザーが許可しても、アプリ外にexportは禁止
  • livedoor.comの画像
    • クッキーからセッション見ると、Web行動履歴を取ることはできる
    • だけど静的情報なのにわざわざセッションデータベース見たりしないよ
  • google+
    • +1ボタンのポリシー: 統計には使えると表示
    • やらないことを明示しているにもかかわらず炎上
  • 「その気になればできる」こと、「やらない」と言っているのに、「やる」と既成事実化されて報道される → 集団訴訟
  • third party cookie: malaブログを見よ
    • モバイルブラウザ → third party cookieのオフが困難
  • ラッキングのここ10年
    • イヤなら拒否できるはずだった → 変えると不便
まとめ
  • サービス提供側とユーザー側の認識のギャップが無視できない
  • 経営者、法務、技術者の利解も違っている
  • リスクマネジメント → 悪循環
  • 透明性確保
徳丸さんとの対談

ここでPCが電池切れとなったので、自分のツイートから発掘

  • M: 「個人を特定できる情報ではありません」と書くより、「そういう用途には使いません」と書いてくれたほうが、ぼくは安心だけど、人によっては逆なのかな
  • M: 解釈にブレが残るようにしておいて、いざとなったらそこを使うみたいな利用規約のありようは、いいのか悪いのかわからない
  • T: 利用規約改定ごとに炎上するのはナンセンス。悪いことするつもりなら黙ってやる
  • M: 正直者がたたかれている状況。炎上をあおってる人がいる。技術者としての普通のセンスではありえないことでも、あおりに乗ってキケンキケンと叫んだりするのよくない
感想

80分でスライド230枚という超ペースだったため、そして美味しいプレモルが程よく効いてて、セッション中に内容をツイートするのは無理ゲーでしたね。
利用規約というお題でしたけど、語られていたことは技術者の考えと利用者の考えの間にあるギャップをいかに小さくするか、ということでした。企業では利用規約は企画担当の人が書いたり、法務の人が書いたりしているのだろうと思いますが、もっともっと技術者が関わっていける部分があるだろうというmalaさんの主張には深くうなづきました。
利用規約改定で炎上すると、ついアオる側に回ってRTとかしてしまいますが、技術者の態度ではなかったなーと反省します。

CROSS 2013レポート(2)

CROSS 2013レポートパート2です。次世代Webセッションのメモ。

間違いや発言意図と違う表現だ、などということがあると思います。ご指摘いただければ幸いです。

次世代Webセッション前半〜プロトコル

HTTP2
  • 2012/11最初のドラフト。絶賛議論中
  • どんなところが問題?
  • kazubu: 前回のIETFの続きのトピック。crimeアタックに関して圧縮回り見直しとか
  • jovi: SPDYはSSLの上でやってるから気にしてくていいという話だった。crimeの衝撃。chromeは3ではdisableにした(クライアント側からの圧縮率を下げる)
    • kazubu: 対応: 圧縮のコンテキストを分ける。headerとbodyとか。最近は圧縮方式を変える。
      • crimeはhuffman木の再構成によって発生する。huffman木を変える方法が考えられている
      • googleは前回と同じ物が来たときにだけフラグをつける。クッキーだけわかればいいという発想
  • HTTP2が出てきたときにどうupgradeするか
    • DNSをよごすなと言いたい
    • SPDY: NPNを使う以上はTLSにならざるを得ない
    • HTTP2になったときにTLS前提でいいのか
      • koma: fallbackどうすんのという話と、それを仕様にするといつから使えるのかって
SPDY
  • jovi: LINEの特徴
    • SPDYなのにNPNを使っていない → 直接SPDY決めうち。TLSにはなっている
    • 443を使っていない → 9413 gitポートだった。いま見たら5000番だった。いくつかスキャンして決めてる?
    • SPDYをオレオレプロトコルでやるのはなかなかいいね
    • J: サービスとクライアントを両方手にしている人だけができる方法
  • koma: スマートフォンにはプライベートアドレスが払い出されてる
  • マルチプレクシング
    • SPDYでできちゃうのでWebsocktsでやらなくてもいいんじゃね的な
    • per frame compression
  • レスポンスを上げる → テキスト→バイナリ → 圧縮 → などとなっている
  • J: SPDY: bandwidthよりRTTが重要という流れだと思うんですけど
    • jovi: googleが必要で作ったもの。2011年の1月にはGoogleサービスの90%がSPDY
      • googleはa/bテストで実験をくり返している。かなりノウハウを持ってるんだろう
      • J: → それって本当にgoogleしか持っていないですよねー
      • jovi: 他にはtwitterwordpressくらいしかない。twitterも本当苦労していて、operaが出るたびに見れないなどということがある
  • J:デバッグ大変ですよね!? → jovi:大変です!!
    • HTTPのときはheaderのparseができればという話だったけど、SPDYのparserは個人でできる範囲をこえてしまった
  • J: prioritizationというのがある。HTMLの世界でやっていたドキュメント読み込み順をSPDYに持ってきたときにどうなるかを考える必要がある
  • 「ハイパフォーマンスWebサイト」は書き直さなきゃね!
  • SPDY4ってどんなカンジなの?
    • jovi: 8月くらいに最初のドラフトというかたたき台が出た。脆弱性のない圧縮方法を使おう。サーバーpush拡張しよう。
      • いまできてるのはサーバー証明書push, dns情報を送ってしまう, プロキシの情報(このプロキシ使ってほしい)など
      • コンテンツ入手に必要な情報をサーバーからあらかじめpush
    • koma: もはやhypertext transferのプロトコルじゃないよね
      • jo: たしかにサーバーとクライアントの間でやりたいことはできている。
      • J: これはHTTP2に持っていけるものではなくgoogleのオレオレプロトコルとなっているだろう
  • koma: layer violationがはげしくなってきて、階層どおりになっていない
SPDYとHTTP2とTLS
  • J: SPDYは速くしようということでHTTP2はHTTPのアップグレードだから、本来違う目的のもの
  • J: 注目するとしたらspeed and mobility?
  • J: HTTP2はTLSを前提としない、と明記されているが現実的なのか
    • kazubu: TLSを前提としないべきだとは思う
    • J: upgradeするとなれば、いつまでもHTTP/1からは脱却できないのか
    • kazubu: well-known portを他にすればいいとかwww
      • J: → 新しいプロトコルを出すならスキームを変える、というのはあるべき姿じゃないの?
      • kazubu: だけどリンクがたどれなくなっちゃう
      • koma: migrationの難しさを考えるとスキームを変えるのは現実的じゃない
  • jovi: WebsocketsはIETFに出すんじゃなかったという反省がある。HTTP2も数年はかかるだろう。その間にSPDYは5678とどんどん進んでいくんじゃないか
    • 規格作ったんだけど使われなくなっちゃうなんてことがあり得るんじゃないかな
Websockets
  • J: WebsocketsはHTTP→HTTP2に横からささってきた感じですが、これからはどうですか?
    • koma: IE10でもWebsocketsがサポートされて、非常にいい実装になっている
      • WSがこのまま世の中に普及するかというのは難しい。明日世の中のIEが全部10になるとかであれば使われるんでしょうが。IE678がいつなくなるかという話で、じゃあやっぱりsocket.ioでHTTPポーリング、ってなるでしょ。ああ、socket.ioは使われますよきっと
  • J: ブラウザ以外のWSのカベは?
    • koma: nat, firewall, proxy, いわゆるintermediariesが問題。キャッシュは関係ないかな
      • ある程度以上のレベルのサイトではそのへんが対応できないと保たない
      • LBで対応しないからamazonでダメとかnginxでサポートないからherokuで使えないとか
  • J: WSが切られちゃう件ってどうなんでしょ
    • まあ、わけわかんない接続が残ってるの切るのは正しい対応なんでしょうけども
    • 2本つないでみて試し、wsが使えるならupgradeしようみたいなのが出ているんですが、そのへんが難しい
  • kazubu: IETFでも話題になっている。LBが作りにくい。SPDYでもpriorityをさばくのはLBなのにコンテンツはWebサーバーにあるというギャップがある
  • J: WSもSPDYも接続を保持しないといけないからバランスしにくいのでは?
    • koma: いままででもクッキーでセッションを考える必要はあった。data by data, frame by frameでLBしようとするとキツイという面はある
    • jovi: chromegoogle map見ると、ひとつのTCPセッションに複数のホストが入っている。ワイルドカード証明書使ってDNSが同じアドレスになっているから、同じTCPセッションに入る。これは外から見てたらぜったいにわからない
    • koma: シングルTCPに入れるのがいいかっていうと、回線品質が悪いときに急に悪くなったりというのがある。パラレルも使っていく工夫が重要
    • kazubu: TCPいっぱい使うと間のNATがきびしくなるんじゃない?
      • koma: HTTP時代の発想で20本も30本も張ると大変。でも1本にする必要はないんじゃない
    • jovi: SSLのslow startから最高速が出てきたところでなんで切らなきゃいけないのって話。googleはこのへんもすごくやってる。half-close使ったりwindowサイズを3→10にしたり、SSL false startしたり
      • こういうのがlinuxにも入っていて、みんな知らずに使っている
    • J: イニシャルを速くするのと、つないだ後を速くするって話があって、つながっちゃえばやりようはあるんだろうけど、initialはなかなか難しいということか。3-way handshakeはどうしても必要だし
      • jovi: Androidで知らない間に3-wayじゃないの使ってたりという世の中にすでになっている
      • koma: GoogleAndroidというOSを押さえたのはそういう意味でも面白い。でもNAT配下で使えなかったりと制約はあるよね。ipv6を待たないといけないんじゃ
v6
  • J: v6はどうなの?
    • kazubu: 流行るといいですねーwww
      • FBもgoogleも対応しているけど、v6で生活するというのは難しいよね
Webのこれから、どこに向かっていくのか
  • kazubu: 効率化が進むけど、問題も引き起こすのでバランスが重要
  • komasshu: ホームネットワークのTV・家電とクラウドの関わりが気になる。クラウドはSPDY,WSなどが進んでいくと思うが、ホームネットはHTTP以外のプロトコルでもガンガン動いている。シームレスにdevice - browser - serviceというトータルで考えないといけないと思う
  • jovi: 過去から来ていたのはリアルタイム性、RTT。マルチプレクスがもうできた。本当の本当のリアルタイムはこれから先は劇的に伸びるものはもうない。これから先、どんな新しいパラダイムが出てくるかを見ていかないといけない。光はまだまだ遅いw
  • Jxck_: みんなこういう話をするとすぐHTTPをdisったりする。HTTPにdisを持っていれば、いままさしくそれを検討する段階なので、どんどん出していくべき。もっとIETFに持っていくなどしていく必要がある。日本人の貢献がもっとできるはず
感想

正直、話がディープでついていくのが大変でした。SPDYのデコードはWireshark用のプラグインとかありますね。ユーザー側のネットワーク機器なども関わるとなると、SPDYやWSをカンタンに導入というところまではまだ来ていないのかと思いました。

次世代Webセッション後半〜アーキテクチャ

Websockets
  • J: LingrはWSにはならないのか
  • kenn: ぶっちゃけよくわからない。互換性が失われる分があるので、サービスとしては採用にふみ切れない。ancientなCOMETを使っている。メリットは永続的なconnection。チャットはアイドリングの時間が長くてTCP接続のコストは高くない。生きたconnectionを使いまくるようなアプリでWSが生きてくるのだろう
    • J: 置きかえコストは?
    • kenn: RubyのEventMachineは対応しているので、内部的なAPIのはりかえだけで動くだろう
  • J: 結局COMETでよかったんじゃね?という話
    • yssk: メリットが見えない。インフラ屋としてはconnection使い回すというのと、違うアプリが同じLBに入っている場合にどうやってLBのキャパを確保するのかが難しい。アプリがセッションを持ったまま永続してしまうと、バックエンドでサーバー再起動できなくなって困る。バックエンドが同じサーバーで動いていることを前提とされるとつらい
  • J: HTTPはステートレスであることが良さだが、それが失われるとどうなります?
    • yohei: RESTのマーケティングが成功しすぎたと思ってて、やりすぎ感がある。REST追求しすぎると大変だし、googleみたいに違う世界を作っちゃうみたいな方向に行きがち。もう少し頭を冷やしましょう。この先は端末ハード〜クラウドまで全部押さえているメーカーが一番強い時代が来る。そういうところが面白いはず
  • J: statelessだったHTTPの上で信じるに値するRESTだったと思うが、そうもいかなくなってきた今、何をよりどころにすればいいでしょう
    • wada: これまでのWeb、実はこうなっていたという説明がようやくストンと落ちたところだと思う。Webがドキュメントをやり取りする世界から、ストックのwebとフローのwebに分断された。twitterは過去が見られなくなったとか
  • J: 自由なwebが失われた、みたいなブログがあったけどどう思いました?
    • yohei: そのとおりだと思った。テクノラティーあったねーどこ行ったとか。ストックとフローの問題だと、世の中はフローに行ってるから、ゆり戻しがそのうち来るんじゃないかと思っている。タイムラインで流れていく情報をストックで扱う技術とか出てくるんじゃないか
  • J: 文書をどう取ってくるかという点をよりどころに技術が進んできたと思う。バイナリになったり、始まりはあるが終わりのないストリームになったりということじゃないかと思うのだが
    • yohei: 「インターネットになったな」と思う。ちょっと前はwebをインターネットと呼ぶな、とえらい人が言ってたりしていた。いまやweb==インターネットで、いかにその上でインターネットやるかというのでストリームになっていったんだろう。TCPの上にHTTP乗せてその上でTCPやるのがWSだったりする
    • yssk: ゲームのようなHTTPベースじゃなかったものがHTTPでできるんじゃね、というのが今の流れ。WSはTCPの再実装じゃね、とは思っていて、少し懐疑的に見ている
    • J: TCPに回帰していくと?
      • yssk: そうではない。プロキシないと仕事にならない。HTTPの上にSOAPって言ってたけど、あれ?ということがあったよね
      • yohei: HTTPをtransfer protocolとして考えないでsemantics考えろってのがRESTだと思う。結局みんなRPCやりたいんですよね
  • kenn: textかバイナリかというのがハテ、と思うところで、テキストの扱いやすさがいい。圧縮してバイナリというのはどうかあと思う
JSON
    • J: JSONに対してmessagepack, protocolbufferと比べるとJSONがいい?
    • kenn: JSONはコンパクトで可変長。msgpkはprefixされたヘッダがある分、JSONの方が小さかったり速かったりする。JSON→yajil→ojなどライブラリも速くなってる。使われるから速くなるというのがあるだろうが
  • J: JSONでデータをたくわえる夢のデータベースcouchdbというのがあったと思うけど、どう?
    • yssk: なかなか難しい。ドキュメントベースのworkflowにはよかったと思う。しかしnosqlの流行と混同された結果mongoの方が速いよと言われたりしたのが残念。メインの開発者がいなくなったり
    • J: 分散したときにHTTPでやりとりするからレプリケーションが楽とかあったと思うが、そのセンでポーリングをWSにするとかはないんですかね
    • yssk: long pollingによるnotificationの仕組みもあった。しかし競合があったとき直せるのは人間しかいないので、人がボトルネックになってしまう
Realtime
  • J: 人がボトルネックになるというとそんなにリアルタイム求められてるのかな、と思う
    • wada: 示唆的な話。WSレベルのRTTって人間は求めていないのではと思う。lingrにしてもcometで十分とか。人はWSレベルのリアルタイム性があるってわかってしまうと息苦しくなってしまうと思う。ツイッターが流行ったのはゆるい同期、非同期だから。プログラマが電話が苦手wなのはリアルタイムだから。人間は苦手だけど、機械がリアルタイムに話をするという場面では有用だと思う。本当の本当のリアルタイムは人間以外のモノが使うのではないか
  • J: おととしくらいにWSのはしりが話題になってきて、キラーアプリが出るかと思ったけど、結局出てきたのってゲームとチャットだけだった。メッセージングが必要なキラーアプリ感がない。アプリとなると必要とされてないのか
    • kenn: いいカンジに次世代webをdisる回になってきましたねw。エンジニアはすぐに効果が得られないものは採用しないと思う。にわとりとたまごではぜったいにたまご(新技術)が先。そこは悲観的には考えていない。時間の問題で出てくると思う。
  • J: WSという仕様自体が求められて実装が進んでいて、それを使って何をするかは置いてけぼりになっている
    • kenn: low latencyでリアルタイムというのは長く言われている割にようやく今だ!となってきた。時間がかかりますね。
歴史はくり返す
  • J: 長い間見ているとよせては返すみたいな話がよくあると思うけど、それをふまえて、今よせているものはどこへ返っていくのか興味がある
    • yohei: 今まで死んだスペックってすごくたくさんある。xsltとかw。仕様作っている人達はスペック先行で行っちゃう、楽しいし。しかしそれでうまくいかない。HTTPとかHTML5はうまくいってる? バランス取りながら進められるのがいい。いまだとIETFに行って合議制になった瞬間に終わるんじゃないかみたいな。IETFで仕様が出るよりgoogleでSPDYが234といくようなのがいいんじゃないか
    • wada: 技術の歴史が螺旋状になっているよって話をよくする。テキスト/バイナリとか。前の周期を見ると、シンプルなものが生き残ってるのがわかる。やんなきゃいけないルールが多いものが死ぬ。SOAPとか。大きなものは自重で死んでいく。分散・集中だけでなく、自分の言葉をしゃべれるものが使いたいのかどうか。RPCやりたいというのは自分の語彙で話したいということ。なんで動詞が4つしかないんですかってPATCHもあるけど。自分のサーバーなんだし。他人の語彙を話すとなると急にやりたくなくなる
    • LISPはマクロで言語を作るための言語だった。その結果みんなオレオレLISPを作ってしまってLISPの人同士で話ができなくなった。
    • J: SOAPからRESTに行ったのもできることも少なかったが、覚えるルールが少ない分、よかったってこと?
    • wada: ルールが少なければ納得できる。リンクを張ると使えるというおそるべきシンプルさ
TLSは前提?
  • J: webはTLSを前提にしていいのかという話がある。プロトコル視点からは都合がいいのだが、web的視点からはどう考えたらいい?
    • yohei: ビジネスではTLS前提が大歓迎でそうなるべきと思うが、個人としては受け入れ難い。web=internetと言っているが、internetのあり方としてどっかの会社から証明書を買ってこないと使えないというのは許せない。ハッカーとして自由でオープンなinternetが残ってほしい。テキスト/バイナリはどっちでもいいかな
    • kenn: HTTPは実のところバイナリプロトコル。性能とかレイテンシというとTLSは明らかに落ちる。光の速度は越えられないw。それがどこに効いてくるかというとRTT。ハンドシェイクで一往復増えるというのはdrawback。CPUも食うし。フロントエンドnginxの負荷ってスケールさせにくい。オレオレプロトコルならAESかなんかにしてバックエンドでほどくなどやりようがいろいろある。それをフロントのTLSに限定するのはどうなのか。あとSSLも完璧ではなくて、ゲームを作っているとクライアントが信用できない場合もある。ローカルのプロキシで点数を書き換えるチーターもいるので、SSLだからと言って役に立つわけではない。役に立たないものに払うコストとしては見合わない
    • yssk: webというモノが何かを考える。SSLにしてレイテンシがありますとかね。CDNが効いていて、遠くてもstatelessなら誰かが取ったcacheが効く、ということをbreakしてまでRPC指向でやる必要があるかというのは疑問。RPCは使いようがあるとしても、web全体でどうかというと、それだけではない
break the web
  • J: 検索できるのはドキュメントがテキストベースでURLが固定だからというのが前提になっている。いまあるcacheの仕組みが使えなくなるとどうなんだ。break the webと言われますが、そのwebってどうなんだと思いますか
    • yohei: 合わないものはこわせばいいと思う。cacheに代わる技術を作ればいい
  • J: こわすだけのメリットがbreakした後のwebにあるのか
  • kenn: 例えばスマホはwebなのかどうか
    • yohei: あれは、むしろネットですよね
  • yssk: 従来のロボット型検索エンジンは、Y!の登録型がうまく回らないところから出てきた。今後pubsubが広まっていくと、webの検索に登録するためにpubする、そのためにリアルタイム使うってのはあるんじゃないかな
    • J: 登録型に戻る! そこへ行きますか
    • kenn: pushは一発。一方pullは空振りがある。pubsubモデルになるとムダがなくなるよね
    • yssk: cloud foundryが使いにくい、herokuが使いやすいのはgithubにpushするという操作があるから
  • J: 出していただかないとgoogleに入らないよ、publishしてね、なんかの流れになるんですかね。facebookみたいにデータを囲い込んでる人達が検索するような、そんな世界ですか?
RESTに代わるパラダイム
  • J: リアルタイムなwebを作りたい、でも従来型のrailsのwebを共存させようとしたとき、クライアント側にはajaxなど変わる必要があった。サーバー側APIはあまり変わっていなかったと思うが、今後WSでpushします、URLベースでないAPIが出てくると、RESTだけわかっていれば困らなかった時代は終わったんではないでしょうか。何をよりどころに生きていったらいいでしょう?
    • wada: 道自体は自然発生的にできると思ってる。リアルタイムwebでは、アーキテクチャでは上に乗ってるのはnodeが引っぱっている。herokuはthinでeventmachineが動いているから、リアルタイムはできる。たくさん出てきているライブラリの中からどれがのびてくるか、思考のバッファにおさまるものが勝つのではないか。覚えることが少ない方が勝つ。プログラマの頭に入る量は決まっていて、そこにおさまり切るかどうかで生産性が決まってくる。nodeのasyncを使わないと非同期プログラミングできない。callback hellを見ると、あれはframeworkではあるけど環境ではない。あれを減らすためにasyncが出てきた。そんな風に、上に次が出てきて、大多数が暮らす主戦場ができると思う
  • J: パラダイムシフトなのか、エコシステムがまだできていないということか。DOMで言うjQueryのようなものの登録が必要?
  • wada: jQueryって言語内言語。一段抽象度の高い言語クエリー言語なんですよ。そこへ来てはじめてやりたいことの記述量が十分小さくなった。覚えられたのがjQueryの良さ。多くの人が「ああこれなら行けるわ」と思ったところがキーになるだろう
  • J: 去年流行ったmeteor, socket streamみたいなものの流れだと思うがキラーなものはまだない。WSでやろうとしていることはネイティブアプリでやってたことが近くなる、XMPPでやってたのと同じじゃんみたいな話がある。swing、xmppのノウハウをいまこっちに持ってくることはできないのか?
    • kenn: これから勉強する人は難しいことに押しつぶされそうな世界なので、オレオレでいいから作ってみることが大事じゃないかと思う。古い世代の人ほど新しいものが昔のモノに見えるので、逆に若い人ほど新しく作ったつもりが昔の物に似ている、と思えるんじゃないか。やりたいこととしてぜったいゆずれない部分を守るためにオレオレやればいいんじゃないかな
    • yssk: 標準にのっかってWSやるなどは動機としてあると思う。うまく乗っかれればうまくいく。自分は乗れると思ってないんだけど。WSうまくいかなかったときに「ほーらね」って言えるw
    • J: ysskさんのやりたいことがいまのweb技術で足りてるということ?
    • yssk: APIとの接続として、zeromq, rabbitmqでやるかWSでやるかという選択だとは思う。やってみる価値はある。firewallをbreakできるチャンス?
Layer7のさらに上
  • J: generalな世界でやるには課題も多いし、まだWSというには早いんじゃという時期だと思う、でも進んでるからやってみたい、この先どう進んでいくんですかね
    • kenn: computerって放っとくとインフラは進んでいく。変わらないのは人間。一日に集中できる時間も決まっている。その中で開発をするなら楽をしたい。ソフトウエアの進化。下を改善するより上を良くするほうがいいと思う。TCPを作り直そうという人はあまりいない。UDPの上でreliableやったりはしないではないけど、HTTPってgood enoughだと思う。その上に何かを乗せ込んでいく。HTTPの上にfacebook、その上にアプリのようにどんどん上に行くし、それが人間の抽象度に合っていると思う。人間が瞬時に判断できる帯域は7bitという説があるんですよ
    • J: 収束できるレイヤは4とか7ではなくその上にあるという話?
    • wada: 人間のspecだけが変わらない。そこを直視する。何かのフレームワークが一瞬で頭に入るかどうか、と考えると、直観に頼るというのはいい指標ではないか。railsって結局、やることを減らしたからプレイヤーが増えた。何が流行るか流行らないかは、一瞬で制約に気づけるかにかかっている。足り算は流行らない。何かと何かを足すのではなく、何かができないかわりに何かができますという風になる。その「できないこと」を瞬時に理解できるか、判断できるかということだろう。その判断ができればみんながやりたいことに近づいていける
    • wada: やりたいことがある、でもやりたい人の脳は変わらない。じゃあ何かができなくなる。同じかより高い抽象でプレイヤーがそろうところにアンテナを張っておくべき
  • J: 抽象化の行き先って単純なRPCを定義できるかというところになるんですかね? 抽象化の先ってどこに向かうと思います?
    • yohei: 覚えるだけではダメ。教科書的なものは覚えるとしても、いくら覚えても新しいもの、作りたいものは生み出せないわけです。覚えるよりは自分の頭で考える方をやろうよ、と思います。それが一番楽しい。仕様を覚えるよりは何か作る方が楽しい
    • yssk: 個人的にはwebが今後どうなるかで言うと、google, facebookなどplatformerと呼ばれる人を中心に回るだろう。全部はムリなのでどこに乗るかということだろう
  • J: 今本当に何が起こっているかを出そろわせて、じゃあ次の一歩で自分が何ができるかってことを話すのは難しいと思う。自分で考えられるような人間を呼んできて聞く、というこの場はよかったと思う
  • J: 自分で考えたこれからのwebについてブログに書くまでがこのセッションということで
感想

考える材料をたくさんもらったセッションでした。自分のものにするには時間がかかりそうです。
Jackさんの話の振り方は本当に上手でしたね。名司会だったと思います。

追加

セッション終了後、@yoheiさんからこんな提言がありました

CROSS 2013レポート(1)

1月18日に行われたCROSS 2013に行ってきました。

昨年、風のうわさには聞いていたものの参加できなかったので、今年はぜひと思っていました。
800人以上が集まったという会場はすごい熱気でした。プレモルも美味しかったし、すごく楽しかったです。来年もぜひ開催してほしいと思います。

さて、メモが長くなってしまったので、セッションごとに分割してみました。Ustreamから書き起こし、とかしていないので、間違いや「そんな意図で言ってない」などということがあると思います。ご指摘いただければ幸いです。

HTML5×セキュリティ(Shibuya.XSS)

@takesako
  • HTML5テクニカルレビュー」2012年3月、リックテレコム
  • 15年前、1997年サイボウズ設立
    • Webアプリ(インストール不要) → すごく流行った
    • サポート対象のブラウザ → Firefox 1.0と
  • Android端末: 機種数が多すぎて開発が難しい
  • HTML5: 様々なAPI
  • fullscreen APIのセキュリティー
    • ブラウザを全画面表示できる
    • 悪用するとフィッシングできる
    • 全画面表示でブラウザの外観をまねる
      • ブラウザを判別してそっくりに作る
    • ブラウザの対策「全画面表示モードです。このサイトで許可しますか」と聞く
      • デスクトップの色をピンクにすると、そこまでは真似られないw
@Hamachiya2
  • 来たらビールがただで飲めるよ、って言われて来た。まさか@hasegawayousukeさんがノロウイルスにやられるとはw
  • ブラウザへのdrag&dropできる件
  • ブラウザを画像表示に使ったりしませんか? pngとか
    • ファイルをブラウザにドロップすると表示できるよね
    • サイトによってはドロップされたものをアップロードする機能がある
  • drop images here」ドロップするときに枠線を光らせるのはJSでやっている
    • body全体でドロップイベントを受け、アップロードするようなサイトが作れる
    • うかつにドロップすると送られちゃうよ!
  • (一部割愛)
HTML5のセキュリティー
  • ブラウザの挙動が標準化される
    • 差別化ポイントは高速化など → 無理をすると脆弱性が出てくる
  • ユーザーの知らない新しい機能でフィッシングなど
@bulkneets
  • (先月報告したのにまだ直ってないXSSの紹介なので割愛)
サニタイズの話
  • @hasegawayousuke さん欠席の理由
  • T: リッチテキストエディタのsanitizeとかどうする?
  • M: IEの「to_static_html」を全ブラウザでサポートするのがよい
    • JS, event handlerなどを消してくれる
    • Windows8のアプリはinner_htmlなので、そういうことが必要なのだろう
    • 文字列として渡して勝手にやってくれるのが便利
    • 誰かシミュレータ書いてくれないかな
Webカメラ
  • T: WebRTCなどでカメラをHTML5ページから見えるようになっている
  • M: 認証ダイアログは、タイミングよくモグラたたきゲームをやると押せるようになるのでは
  • H: Webカメラにガムテープ貼ってる
    • M: Mac買ってくると、初期設定の中で自分の写真撮られそうになるので困る
    • T: ニコ生の切り忘れは結構あるみたいですね
アドレスバー偽装
  • M: history.pushState使うとアドレスバーにアニメ出せる!
    • これやると履歴がすごく汚れる
  • T: 同じドメインでのみ使えるように守っている
    • M: 実はそこヤバくて、ドメイン内にひとつXSSがあるだけで、そのドメインのURLを完全に偽装できてしまう
    • T: そうするとURLが信用できなくなってしまう。それは困る
  • M: ブラウザのパスワード保存機能を使っているとJSから盗んだりできる。ログインページのURLを偽装できるのは本当にヤバイ
    • M: 一段「許可しますか」があるだけでだいぶ違うと思う
  • M: storageはcookieよりもsame originがきっちり守られている
イタズラ公開のタイミング
  • T: はまちちゃん、最近イタズラ減ってきた?
  • H: ノーガード戦法が広まってきている。一昔前のブログはみんな技術者ってカンジだった。いまはそんな流れではないからなー
  • M: 自分も見つけたときによくガマンしてるなーと思う。投稿できるサイトにはあまりXSSない。大手のおカタいサイトでお問い合わせフォームからイタズラ送れても面白くない
  • T: 「こんにちはこんにちは」はすごく気にいってて、昼の業務時間に出してくれる分には対応できるから助かる
    • H: 実は対策まで時間がかかるように狙って金曜深夜とか、はてななら土曜出勤するはずだから日曜に出すとか、やってるんですよ
  • M: 前にイベント中に直ったことありましたね
    • H: あれは伊藤直也さんの発表中にそのハッシュタグつけて流した
    • M: flashのクロスドメインXMLが全世界に向けて許可になっていた
      • M: rsyncのdelete反映されなくてデプロイで消されなかったり、デプロイしたら復活したり
クロスドメイン
    • H: 昔はよくアドレスバーにcross_domain.xmlをよく打ち込んでいたけど、最近はflash自体が減ってきた
  • T: robots.txt を見るとひみつのURL教えてもらえたりとかは今でもある
    • H: その他には、.svn/entriesというのがたまに見えるよね
  • M: cross_domain.xmlドメイン単位なので、間違ってキャッシュすると取り消せないのが困る
    • M: XHR2も、昔のクロスドメインできないはずのJSコードが急にクロスドメインできるようになっちゃったり
    • M: preflightとredirect組み合わせるとIE10くらいしかまともに動く実装がなかったり
  • T: IE10はいいですよ。みなさんWindows8でIE10使いましょうみたいな
@takesako: IE10のJITセキュリティーについて
  • Chrome以降、JITの高速化戦争勃発
    • セキュリティー対策も進んでいる
  • 脆弱性の例
  • ASLR (Address Space Layout Randomization)
  • JIT-Spray
    • JIT結果を置く場所は実行許可されているので、そこにコードをしきつめると攻撃に有利
  • 定数のたたみ込みをすればしきつめることはできない
  • IE10のJITセキュリティー
    • codebase alignment randomization → うめ草としてnopではなく割込命令を使う → バスエラー
    • random nop insertion
    • constant blinding (定数をmovするのでなく、xorも使ってわからないようにする)
  • 結論: IE10/Windows8が世界最強のJITセキュリティ
Q&A
  • スマートフォンのWebViewはこわくないのか?
    • M: こわいですよ! iPhoneアプリで多い。アドレス帳のSQLファイルのpermissionがゆるゆる。WebView内のfile://スキームで動いていると読めた
    • M: iOSはJSからできることが多すぎて困る。JSからOSの機能たたけるようにブリッジしてると、任意のJSが実行できるような穴があったときに被害が甚大になっちゃう
    • T: 標準ブラウザの問題? アプリも?
    • M: Androidだとアプリ一覧見れたりする。どこまで公知なのかもわからない
    • M: 端末がいつまでもアップデートされないので困る
    • M: PhoneGap使ったアプリもネイティブとブリッジできるので、JSに穴があるとマズイ
      • M: 内部用のAPIは認証が甘かったり、みんなたたかれないと思ってるけど結構見えるもの
    • H: CSRFもアブない
    • T: ぼくはアプリごとに別々の端末持ってる。LINE専用端末とかw
    • M: 携帯まるごとシークレットモード(友達に貸すモード)とかほしい
感想

いや、そんなことがあるのかという話をたくさん聞けました。
「友達に貸すモード」は特にiPadにほしいですね。iPadを家族で共有していると、子供がメールも読み書きできてしまうのは困ります。Appleからすれば「共用しないでひとりに1台ずつ買え」ってことなんでしょうけど。

ランチセッション: C4SA

nifty cloud C4SAの説明とデモのセッションです。nifty様提供のお弁当をいただきました!

  • メニューから言語とかフレームワーク選択するとすぐサービス(キャンバスというらしい)ができる。1分くらいでできちゃう
  • 「みなさん黒い画面から離れられないということで用意しておきました!」shellも使える!

使ってみたいですね! サービスごとに2週間無料ということでさっそくアカウントを作りました。アカウント作成もカンタンで、Facebook, Twitter, github, Google+, @nifty IDでログインしてメアド確認するだけです

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でもう一度見直してみよう。

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

「粋」と「LTソン」と「ランチくじ」〜YAPC::Asia 2012に行ってきた

今年から東大に会場が変わったYAPC::Asiaに行ってきました。

最初に、運営にかかわったスタッフのみなさん、ありがとうございました。この場を可能にしてくれたスポンサー、個人スポンサーのみなさんにも感謝します。

そして主役はなんと言ってもスピーカーの方々、参加者の方々。みんなすごかった。日々の活動の中であれこれ工夫したことが、惜し気なく交換されていて、ここにコミュニティーありというパワーを感じます。技術者としてのカッコ良さ、なんていうか「粋」というのか、そういうものを感じました。2日目午後のPerl今昔物語の中で、こんな会話がありました。司会の馮さんの質問に宮川さんが答えたものです。

これは本の執筆に関する言及でしたが、「競合とか関係ない」というのが、YAPCや、もっと広く日本の勉強会文化の根底にある強さだと思います。ちょっと前に「APIを提供して、たくさん使ってもらった者が勝ち」みたいな言葉が流行りましたが、たくさん出した者がたくさん得るんだなと、それはここにいる技術者達の姿とそのまま重なります。自分ももっと出していかないといけないなー。

今回のYAPCは見たいセッションが重なっていて、というか、全部のセッションを見たくて、体がひとつでは足りないと叫びたくなりました。その悩みに拍車をかけていたのがLTソンで、ホールにいると外から歓声が聞こえてくるんですよね。最初にこの企画を聞いたときには、「2日間もスピーカーを集めるのか、大変だろうな」と思っていました。だけど人がしゃべっているのを見ると自分もしゃべりたくなるもので、それはみんな同じだったみたいで、2日目午後はスピーカーが多すぎて大変になるくらいだったようです。
ぼくも時間をもらって、「Lightning Talk日本上陸」と題して話させてもらいました。日本で最初にLTをやった時、どんな様子だったのかを紹介しました。

最初のLTのときは、1時間で11個のトークをするなんて本当に可能だろうか、10個でいいんじゃないかという心配がありました。みんなとにかく5分で話を終わらせることに命をかけていたw、その結果、56分40秒で11個全部こなしています。とにかく時間内に全部のトークをやること自体も「ネタ」の一部として楽しんだ、フォーマットが面白い、という現象だったんだろうと(今になっては)思います。
この発表の後、LTソンでは1トーク5分質疑応答ナシのフォーマットになってないじゃない、という声が少し出ました。実はぼくのトーク自体も15分以上しゃべってたと思います(ゴメンナサイ!)。その部分について少し言い訳がましいことを書きます。LTは元々、スピーカーが多すぎてセッション枠が足りないことから設定されたフォーマットだったろうと思います。LTソンはそれに対して、「しゃべるということの敷居を下げ、双方向コミュニケーションのできる場を提供したい」というuzullaさんの想いがあって(「やろう!LTソン!」)、そこはばっちり合っていると思います。ツイートからちょっと引用。

Hachiojiスタイルいいですよね。LTとは別の良さがあるので、それを強調したいときは別の名前を使うといいかもしれません。

時間内でなるべく多くの人に話してもらおうとすると、「本来のLT」形式に(自然と)近づきます。きっと最適に近いんでしょう。そこは痛しかゆしかもしれません。つまりHachiojiスタイルは、LTソンの目的には合っていた、それは正しいとか本来とかじゃなくて、最適なフォーマットを選んでる、ということだと思います。

ほんとにそう思います。LTソンを企画・運営したHachioji.pmのみなさん本当に楽しい時間をありがとうございました。

今年はもうひとつ、「ランチくじ」という企画もあって、くじで当たった人達がチームになってランチに行くというものでした。知らない人同士でランチに行くというのはいいですね。シャイな日本人には「くじで強引に決める」のがなかなか効果的だったんじゃないかと思います。2日目の組合せ発表が終わった後、牧さんは「ほらほら、外れた人達も近くの人に声かけて一緒に行って」って言ってたけど、どうだったかな? (すいません、ぼくは昔からの知り合いと2人で中央食堂に行っちゃいました)。単純にシャッフルして掲示するという案もありましたが、不在率が高かったし難しいかなあ。

毎年のことですが、YAPCに行くとものすごくエネルギーをもらいます。今年はとくに、コミュニティーの人と人とのつながりを強く感じました。その象徴みたいにLTソンとランチくじが印象に残っています。Skyarc枠の発表もどれもすごく元気があってすばらしかったです。

自分もなにか少しでも貢献したいと思って、ツイートをまとめておきました。ハッシュタグ検索って、とぅぎゃろうとしてもある程度以上の数はさかのぼれないらしくて、夜になってからでは朝のツイートが取れないことが多いです。早めにスタートしておきました。

もう一度、YAPC::Asia 2012に関わったすべてのスタッフ、スポンサー、スピーカー、参加者のみなさん、すばらしい時間を本当にありがとうございます。

HTML5とか勉強会の番外編〜ブラウザとサーバの間を考えよう〜に行ってきました

司会: わかささんより、濃い話はツイート×サイン(特製うちわ)が出るとのこと

今回、会場の節電の都合で空調が止まっている中、
配布されたノベルティーのgooうちわを使ってみんな暑さをしのぎました。
会場担当のみなさんありがとうございました。

以下、[]内は私の感想です。

(19:15)

WebSockets html5j.org 小松さん

  • どうやったらWebページが速くなるかを日々追求
  • 今日のトピック
    • Intro to WebSocket and SPDY
    • Dive into WebSocket Protocol
Intro to WebSockets
  • Webの使い方が変わってきた
  • 最初はHTMLひとつ → イメージ、CSS → ユーザー/ユーザー間コンテンツ
    • Single resource → multiple resources → multi + bidrectional
  • 使われているプロトコルはHTTPで同じ: リクエスト/レスポンスのプロトコル
    • どんな問題が?
    • 複数リソースの場合、往復をくり返すので遅い
    • リアルタイム性にはポーリングが必要
  • 現在どんな方法が使われているか?
    • 複数のTCP接続を使う
      • サーバー負荷、intermediaryへの負荷
    • ロングポーリング(COMET)
  • 最新テクノロジー: SPDY, WebSocket
    • SPDY: リクエスト多重化(リクエストが来ないうちにレスポンス送りつけちゃう)
    • WebSocket: リクエスト/レスポンスを使わない
  • プロトコルスタック
    • SPDY: フレーミングレイヤ、HTTPレイヤが明確に定義されている
    • WebSocket: TCPの上に何でも通せるものを作成
  • 比較表: slideshare参照
    • ゴールは
      • SPDY: レイテンシを縮少
      • WebSockets: 双方向アプリケーションを作る
Dive Into WebSocket Protocol
  • デモ1: multi device interaction
    • WebIntents + ServiceDiscovery(uPnP) + WebSocket
    • ビデオクリップを選択するとWebIntentsで視聴サービスを選択できる
      • 近くの視聴デバイスを見つけて(自動ディスカバリ)表示 → 選択
      • スマホでリモコン(ここでWebSocketsを使っている)
  • デモ2: 双方向通信の比較
    • echocompare.html: マウス座標をエコーするだけのデモ
    • WebSocketsでも遅延はあるがなめらかに流れる
  • JSでの書き方の例: slideshare参照
  • プロトコル定義 RFC6455
    • handshake: in context of HTTP/1.1
    • data transfer: frame format
    • schema: ws(80), wss(443)
    • 多くのブラウザでサポートされてきている
  • ハンドシェイク
    • request
 GET /chat HTTP/1.1
 Host: server.example.com
 Upgrade: websocket          ← websocketを使いますよ
 Connection: Upgrade         ← upgradeしたいです
 Origin: http://example.com
 Sec-WebSocket-...
    • response
 HTTP/1.1 101 Switching Protocols ← upgradeしますよ
 Upgrade: websocket               ← websocketですよ
 Connection: Upgrade
 Sec-WebSocket-...
  • データフレーミング
    • バイナリプロトコル
      • ヘッダの中にopcode(データタイプ識別子)が入っている
      • masking-keyが指定される
    • マスキング
      • ペイロードデータに対してmasking-keyでXORをかけて送る
      • firewall circumvention & cache poisoning
        • [セキュリティー上の問題ならwssを使えばいいのでは?]
    • ping/pong (keep-alive)
      • intermediaryがトラフィックがないと判断して切ることを防ぐ
      • CGN in mobile network
        • CGN: Career Grade NAT
        • キャリアレベルでNATを置き、モバイル端末にはプライベートアドレスを払い出す
  • reachability
    • プレーンなデータを送ると、intermediaryが中身の解釈ができないとき打ち切ってしまうことが
  • subprotocol
  • extension
    • multiplexing
    • per-frame compression
  • socket.io
    • fallbackしてくれるJSライブラリ
  • スケーラビリティーは?
    • ロードバランサ(node-proxy, nginx)でWSを解釈してアプリサーバーに振り分ける
  • [感想: WebSocketsはintermediaryがどれくらい対応してくれるのかに期待でしょうか。いったんつながってしまえばTCPみたいなものですが、逆に言うとそこでどんな情報を交換するのか、プロトコルをまた考えないといけないですね]

(19:53)

SPDY IIJ 大津さん

  • @jovi0608, https://github.com/shigeki
  • slideshare: http://ow.ly/c1NzK
  • SPDYのベンチマークができるサイトを公開したい
    • 作ってみたら安定しない。過激なことをやろうとすると止まってしまう
  • 会場でSPDYのサイトを立ち上げた人 → 2人くらい
    • 安いSSL証明書があれば。オレオレでもOK
    • Node.js, Jettyなどの実装もある
  • 最近SPDYが話題です
  • SPDYの歴史
    • 2009/11: spdy/1ドラフト公開
    • 2010/01: TLS NPN拡張 Internet Draft リリース
    • 2011/01: Google サービスの90%がSPDY化完了
    • 2012/01: HTTP/2.0の議論開始
    • 2011/04 node-spdy, 12 Firefox11, 2012/03 Jetty, twitter, 04 mod_spdy, 05 F5 Big-IP, 06 nginx
  • SPDYの状況
    • 仕様
      • spdy/2: 現在使われている; spdy/3リリース, spdy/4議論開始(DNSプッシュ、証明書プッシュ、proxy設定など)
      • HTTP/2.0議論開始(MSも類似仕様を提出)
    • 実装
    • 効果
      • 2倍はなかなか出ない
      • そんなに速くないじゃんと言われるようになってきた
  • 最近のトピック: Chrome Secure Proxy
    • ChromeとHTTP Proxy間をSPDYでつなぐ
    • その先がSPDYかHTTPかで分けてくれる
    • 速いネットにProxyを置くとよい
    • SSLのman-in-the-middle的なpeekingもできる [うっそー?]
  • HTML読込の高速化
    • 帯域を増やしてもページ読込時間はサチってくる
    • 一方、レイテンシを短くしてやれば読込時間が大きく改善される
    • HTTPだとTCP同時接続数の上限が効いてきて、同時にリクエストできない
  • SPDYの特徴 (Google I/O 2012の資料より)
    • 常にTLS上で動作
    • ヘッダ圧縮
    • バイナリフレーム
    • full-duplex
    • server push
    • TCP接続が1本だけ
    • 少ないパケット
    • 既存コンテンツを変える必要はない(サーバーだけ変えればいい)
  • SPDYに向かないこと (Google I/O 2012の資料より)
    • 3rd partyドメインのリソースを多用している場合
    • 極めて少ないリソースでできている
    • パケットロスが多発する環境 → TCPより悪くなる
  • SPDYフレームの詳細
    • データフレーム、コントロールフレーム
    • spdy/3からフローコントロール機能追加 WINDOW_UPDATE
  • ハンドシェイク
    • NPNを使ってSPDYを使うか決めるためにTLSを使う
    • SPDY専用ポートで合意できればTLSなしでSPDYを使うことも可能
  • SYN_STREAM
    • ヘッダ圧縮の仕組はkey-valueペアをzlib圧縮してるだけなので、HTTPに特化しているわけではない
  • サーバープッシュ
    • SYN_REPLYを送る前に先読みデータを一方向streamをサーバー側からどんどん送っちゃう
    • レスポンスが届いたときにはもうデータがキャッシュにある
  • Navigation Timing APIでSPDY動作を調べるサイトを作った
    • window.performance
    • 測ってみた → pushはそんなに稼げない
  • 実際にデモ
    • localhost上のサーバーとssl, spdy/2, 2 + push, spdy/3, 3+pushなどで比べてみる
    • server pushでは画像数が多くなると、push分の転送時間がhttp待ち時間にくり入れられる
  • [感想: SPDYはNPN拡張でハンドシェークするのが難しいところです。ロードバランサがSPDYネイティブにしゃべれない場合はport forwardingでがんばるのでしょうか]

(20:30)

SSBP Skeed 柳澤さん

  • SkeedSilverBulletProtocol
  • 誰得?
    • ブラウザから使えるわけじゃない
    • TCPでいいじゃん
    • ↓次のような用途に
  • WAN越しにファイルを送ると異様に遅い。特に外国に送ると遅い
    • 話にならないくらい遅い [確かにそういうことあります]
    • ビッグデータクラウドで → 無理ゲー
      • CPUバカ食いする計算をクラウドで → しかしデータ送受信できないと話が始まらない
      • 2Gを米国AWSに送るには14時間かかる → 14時間かかればできるのではない。できない
  • 話の流れ
    • この現象の存在自体の認識
    • 正確な理解
    • TCPの仕様・実装に課題
    • さあ直そう
  • TCPに仕様・実装はどうなっているか
    • 詳細TCP/IP Vol.1, 2: 合計16,590円
      • 頭いい人が考えて、長らく使っているのでカンタンに説明するのは難しい
    • TCP: 信頼性があって、行儀の良いバイトストリームサービスを実現
      • 送り手から受け手の間に川の流れのような通信路があるかのような幻想をいだかせる
      • そして輻輳回避
    • 実装
      • 選択的あるいは否定的な確認応答が返せない、sliding window protocol
      • スロースタートアルゴリズム輻輳回避
      • 輻輳とパケットロスとを同一視
      • OSカーネル内で動作する
      • 非常に割り切った設計思想でできている
      • ゆっくり上げてガクンと下げる
  • 何が問題なのか
    • ウインドウサイズの問題
      • 広帯域&遠距離で通信する場合の適正なwindow sizeはすごく大きい
        • 100Mbps、RTT 150msだと1.875Mバイト
      • OS間通信ではバッファの大きさなどが原因で適正値の範囲がそう変えられない
    • フロー制御の問題
      • パケットロス率はある程度から下げられない
      • 輻輳ではないのにパケットロスが発生するとレートを下げてしまう
    • → だから代替・改善が必要だ
  • SSBPの想定
    • 帯域副は広いもの
    • 距離は遠いもの
    • パケットロスは当然ある
    • OSカーネル内で動作するのは必ずしも必要でない
  • SSBPの実装
    • TCP: 到達完全性の保証とフロー制御の実現とがACK機構を介して密接に結びついている
      • ACKが2つの役割を持っている
    • SSBP: この2つを完全に分離、それぞれに最適な手法を取る
      • 届かなかったパケットを選択的にまとめて報告
    • TCP: 輻輳とパケットロスとを同一視
    • SSBP: パケットロスは不可避だからそれ以外の方法で
      • 輻輳によるパケットロスの前には機器遅延の増大が発生するはず。つまり「狙うべき遅延」があるはず
        • 例えば…: 電話かけてから出るまでに時間がかかるようになると不良品が出はじめる
        • 電話をかけたら45秒で出れるくらいの忙しさをキープする!
    • ユーザー空間で動作するアプリとすることでバッファを大きく取れる
    • その結果… 16時間を30分に
  • とにかく実用性重視
    • FTP, scp, rsyncを使ってやる仕事をとことん早くする
    • SSBPを使った製品を開発して販売する!
  • プロプライエタリプロトコルを作ることについて
    • RFC化しろとかよく言われるが……
    • 本来、端点どうし、好きに接続を確立して好きなやり方で語り合えるもの
    • (SSBPの価値)個別的解決 ←trade-off→ 汎用的解決(TCPの価値)
  • まとめ
    • TCP: 大きくて複雑でよくできたもの
    • でも現在のWAN越しのバルクデータ転送には向いていない
    • 特に遅延とパケットロスに弱い
    • その部分に特化して解決したよ!
    • RFCを書いて標準化とかしても、それがみんなの手に届いて世の中よくなるのかなあ?
  • [感想: すごく面白くて、どんどんのめり込んで聞いてしまうプレゼンでした! 用途を限って最適化するというのはわかりやすい話でした]

(21:00)

第二部: 座談会
  • NTTコミュ様ご提供のケータリングとビール、ソフトドリンクなどを楽しみつつ
  • ところどころツイート禁止の濃い話をたくさん聞けました
  • 総論としてはこんな感じでしょうか
    • WebレイヤからWSやSPDYが出てくるのだがと、結局低レイヤの話になってくる
    • intermediaryのことを考えないとサービスとしては成立しない
    • 両レイヤの技術者の間でのコミュニケーション、乗り入れが重要になってくる
  • @komasshuさんの「俺はweb屋だ、俺はネットワーク屋だ、と閉じていては辛いっちゅうことですよ」という言葉が印象に残りました

非常に楽しく、また勉強になる時間でした。ありがとうございました。

idcon13レポート

idcon13に行ってきました。今回はあまり追いてかれた感なかったです。
仕様の話もあり、啓蒙の話もあり、いいバランスだったんじゃないでしょうか。

以下、[]内は私の感想です。

(19:10)

「OAuth大捜査線」 @asyoulike007

  • 鈴木理恵子@mixi
    • mixi Graph API
    • 毎回idconって、シーンとしていてコワイw
      • [今日は要求する前に拍手もらえてよかったですね]
  • OAuth2.0
    • エンジニアが開発、一般ユーザーが認可画面を見て使う
    • エンジニア向けの仕様解説や実装方法の記事はよくある
    • ディレクタ、デザイナ、営業向けの解説はあまりない
    • OAuthを使っていても、適切に実装できていない例がある
  • mixiのOAuth2.0対応
    • draft10 (一部12)
    • auth code, resouce owner credential, client credential
  • 事件は現場でおこってるんだ!
  • 現場その1: SAPさんからの問合せ例
  • (1)認可画面を表示しないようにして欲しいのですが…
    • 認可の意味をおわかりいただけてないのでは?
      • 認可画面から50%のユーザーが離脱している
      • [要求されるスコープが広すぎたりすると、やっぱり離脱しちゃいますよね]
    • 認可画面の出し方にも課題が
  • (2)AさんのアクセストークンをBさんに使い回していいでしょうか?
    • 意味を知らない
    • 意外とこういう問合せもある
    • 保存しておけばどんどんデータが取れるという発想??
  • (3)問合せメールにconsumer secretが記載されている
    • メールは開発者でなくディレクターが書く場合も
      • どのアプリについての問合せなのか特定できる情報として送ってしまう??
    • メールが社内MLに転送されたり、チケットに貼られたりしている
    • 返信するときに、秘密にしてくださいね、と啓蒙している
  • 開発チームへ伝えるべき
    • 何のために認可しているのか
    • 取り扱いに注意が必要な項目は何か
    • 認可画面の実践的な組み込み方
      • → ユーザーの混乱を少なくしたい
    • 信用問題に関わる大事なこと
  • 現場その2: 一般ユーザー様
    • OAuthの主役はユーザー。開発者向けに語られることが多いが、ユーザーが最重要なはず
    • なんとなく「許可」しているのではないか
      • みんなちゃんと理解しているのか?
  • なんとなく許可してしまう → スパムアプリが横行
    • ユーザー側でpermission controlできることを知らない
    • 後から止める方法を知らない
  • 一般ユーザーへ伝えるべき
    • 認可画面では何を許可しているのか
    • 許可/拒否すべきアプリの見分け方
    • 被害にあったときの解除方法
    • 不要な認可を定期的に掃除すること
  • エンジニア向けだけでなく、ディレクター、一般ユーザー向けの解説記事も必要
  • Q&A
    • _nat: 英語のスライドほしいです
  • [感想: 自分の情報をどこまで出すかっていうシンプルな話なんだけど、説明しようと思うと小難しくなってしまうのはどうしてなんでしょうね? イヤなものはイヤと言えばいい(言える仕組はある)、っていうのでは単純化しすぎですか]

(19:30)

「Identity First, Device Second」 @shingoym

  • 山中しんご
  • いかりや長介 OAuth! 「おい〜っす」 [はずした…]
  • 「Mobile First, PC Second」と言ってる会社がいる
    • 懐疑的だと思っている
    • バイスなんかどうでもいい。IDの方が重要
      • 〜という話をしようと思ったけどやめました[やめるのかよ]
  • IdentityRola、みんな知ってますよね?
    • [→ アカウントBANされてるじゃないか]
  • おっさんだけでIDについて話してるのはあきた
    • うまくペルソナ使い付けてやろうぜ
    • 前回のidconも男性ばっかりだった
    • タコつぼ化イクナイ
  • 女性のほうがプライバシーには敏感だったりする
    • 海外にはIdentityWomanもいる
    • twilog.log/shingoym/date-120410
    • 許可しておっけ〜ペロペロ、みたいなノリがほしい
  • IdentityRola を始めた
    • しばらく内緒でやるはずが、すぐ見つかっちゃった
    • なみだぐましい努力w
  • なんでバレた?
    • keijitakeda先生に返信したらRTされちゃった
  • Innovationとは元々「新結合」
    • 交わることのない2つ(identity, Rola)の組み合わせ
  • いつのまにかフォロワー100人越え
  • IdentityRola の名前でいろいろつぶやく
  • アカウントbanくらってしまう[やはり]
    • 30時間だけ
    • Digital Death
  • なんでBANされたか?
    • 本物ローラに対する質問に横取りして返事したら即攻BAN
  • 教訓
  • identifierを変えてもわかる人にはわかる
    • つぶやきなどの外縁情報である程度特定可能
    • 他人になりすますことは難しい
    • → ペルソナのコントロールは無理?
  • 名誉毀損や肖像権の侵害
    • verifiedアカウントの仕組みと価値
  • 「なりすましなどのプライバシー侵害?」
    • なりすましってプライバシー侵害?、という違和感のある表現だと思っていた。Rolaの件でなりすましによって自分の望まない自己像が作られることは、やはりプライバシー侵害だとわかった
  • 次世界のための啓蒙プラットフォーム
    • Identity × Rola
    • → 次は?
    • → @IdentityPamyu
  • Q&A
    • lef: ぶっちゃけ本気でかくせると思ってた?
      • shingoym: 割と本気で。わかってもいいとは思っていた
  • [感想: IdentityRola知りませんでした。おバカなことをやっているようでいて、ちゃんと教訓が得られている点がすごいです]

(20:05)

UMA - User Managed Access」 @ritou

  • OAuth2.0はもうすぐ固まると言われながらなかなか出てないですが…
  • 参考URL
    • kantara Initiative UMA WG
    • 情報セキュリティー技術動向調査 @tkudos
  • OAuth
    • Resource serverとAuthorization serverは一意に結びついている
      • 認可管理はリソースの数だけ、たくさん発生する
    • クライアントはResource ownerの代わりにリソースアクセスを行う
      • 自分が所有するデータにアクセスさせるためのしくみ
      • 三者に共有する仕組みではない
  • UMA (うーま)
    • Resource server と AuthZ serverを分離
      • 好みのAuthZ serverを利用可能
    • 三者へのリソース共有も可能
      • person-to-self
      • person-to-person
      • person-to-organization
    • ポリシーはユーザーが決定
  • UMA Flow
    • 用語が変わります。Authorizing User, Host, Requester, AuthZ Manager, Requesting Party
  • 1. Protecting a Resource
    • リソースを保護するAMを指定
      • HostがAMからトークンをもらってリソースを登録
      • scopeの集まりをresource setとして登録
    • ポリシーを設定
  • 2. Getting Authorization
    • アリスはボブに画像URLを教える
    • ボブはリソースを取りに行く
    • まずはエラーとしてチケットを送信
      • AMが作成した認証要求チケットをRequesterに返す
    • RequesterはRequesting Partyに対して同意を求める
      • Requesting Partyの情報をAMに開示していいかどうかの同意
    • AMはpermissionのついていないトークン(RPT)をRequesterに渡す
    • RequesterはさっきのチケットをつけてRPTを返す
    • AMがボブさんであることを確認して認可
  • 3. Accessing a Resource
    • RPTを用いてHostにあるリソースをアクセス
    • HostはAMにRPTの有効性をチェックしてもらう
  • UMA × OpenID Connect
    • Claims-based Access Control
    • Requesting Partyの属性情報によるアクセスコントロール
    • OpenID Connectで属性を求める
      • RP=AM; OP=Requester; User=Requesting Party
  • UMA × SITF?
    • 信頼情報の交換
  • 思ったこと
    • リソースと認可の分離だけ見ても可能性を感じる
    • コンテンツが強いところは認可管理をアウトソース
    • スタートアップが安全にリソースアクセスを提供できる
    • グループ企業内のAPI連携など
  • 一緒に実装しませんか? いまならブルーオーシャンなんですぐ日本一になれるw
  • [感想: 正直難しい。UMA認証を受けるためには自分の身分を明かさないといけないから、それ自体に対しても認可を求めるようになっているなど、納得はできた]
  • [懇親会での話題: AM間でトラストして認証を回してやればいい話なんじゃない?]

(20:30)

休憩 〜 Tシャツ配布

(20:40)

「SITF - Student Identity Trust Framework」 @tzmtk

  • まつおかさん
  • たなかさん
  • (先月OpenID Foundation Seminarの内容)
  • トラストフレームワークとは
    • 何がうれしいの?
      • 安全に流通できる
      • IDP/RPが満たすべき基準をチェックできる
      • 与信の手間を減らせる
  • ユーザーもうれしくなるはずだよね?
    • → 実証してみましょう
  • オンライン学割の課題
    • 登録時: 本当に学生なの? → 学生証郵送?
    • 利用時: いまも学生なの? → 定期的に確認?
    • 正しく運用しようとするとコストがかかってしまう
    • かと言って雑に運用すると、正規料金を支払っているユーザーが不公平に感じる
  • フレームワーク案: 策定しても利用されなければ意味がない!
    • 学増: 学生には容量を多く (学生にはラーメンも多くw)
    • サービスの例: 電子書籍、賃貸住宅、旅行、チケット、クラウド、ポイント、などなど
    • 考えました → これから進めていきましょう
  • Attribute Provider
    • IdP :== {discovery, authentication, attribute} provider
    • APをIdPから分離することを考えてみよう
  • 学認を使って学割
  • デモ
  • 宣伝
    • 夏からphase2として具体的にやりたい
    • 参加者募集 → @shingoym まで
  • Q&A
  • nov: デモでログインをtwitterでやったのは意味ないんだよね?
    • tzmtk: mixiをIdPとして属性確認をするが、ログインIDは別IdPでもよい
      • tzmtk: mixi - 学認間で属性をひもづけておいた。違うIdPでも使えるというデモだった
    • ritou: OpenID Connectで属性を取りに行ってるので、リロードした瞬間に最新の属性情報がすぐ反映されたというのが重要
  • [感想: ユースケースはたくさんありそう。共通する原理があるんだけど、一般の人が理解できるか。あるいは理解しなくても安心して使えるか、であればいいのでしょうか]

(21:00)

世界「Identity Firstでいきますから。」 JIPDEC 野村至さん

  • ポイント
    • 1. 先進諸外国を見ると「Identity First」な潮流
    • 2. 個人情報保護やプライバシーへの配慮
    • 3. 先進諸外国はすでに取り組みを始めています
    • 4. OECDのdigital identity management指針が発表されました
  • Id 1stの潮流
    • 自国の情報経済を活性化させたい!!
    • 安心・安全で信頼できる利便性の高い情報環境が必要
    • 課題
      • 適切な身元確認ができない
      • 適切な認証環境になっていない
      • 適切なデータ利用ができていない
    • 適切な運用が必要
  • ドイツのデジタル・アイデンティティ・マネジメント
    • 紙の身分証明書に代わって電子的な新身分証明書(nPA)を導入した
    • 民共用の本人確認、プライバシー・個人情報保護
    • ICチップ入りのクレジットカード大のカード
    • 16歳以上のドイツ市民は義務として所有
    • 機能
      • 電子的本人確認機能 → ネットショッピングで年齢確認、住所参照など
      • 電子署名機能
      • 電子的旅券機能
    • 読み取るには
      • サービス業者が権限証明証を取得 (政府の監査によって)
    • 他の特徴
      • 名寄せを禁止
      • Pseudonymer Zugang サービスごとに別のID → 名寄せできない
      • ドイツは名寄せに対して敏感
  • アメリカのデジタル・アイデンティティ・マネジメント
    • 身元証明
    • 行政サービスへのログイン → 民間IDを活用
    • Open Identity Trust Framework
      • 信頼レベルを定義(Googleは自己申告のみなのでレベル1、など)
      • 監査人が監査して信頼性を担保
  • イギリスのデジタル・アイデンティティ・マネジメント
    • 国民ID登録簿の廃止。プライバシーしん害が理由
    • midata (マイデータ)
      • 企業に保存されている自分の情報を本人が利用できる
      • 経済の活発化。より良い選択・より良い取引 → 安心 → 消費up
      • 現在: 法律としてはあるが、実効性はあまりない
      • 閲覧はできるが、ダウンロードや第三者に利用させることはまだできない
      • 情報のコントロール
  • EUの一般データ保護規則案
    • プライバシー・個人情報保護の観点を追加
    • データポータビリティーの権利
      • あるサービスプロバイダから別へ移行できる
    • 「忘れてもらう権利」
  • 日本
  • OECDデジタル・アイデンティティ・マネジメント指針
    • 国家戦略で!
  • [感想: ドイツの例は参考になります。名寄せに関して、日本は割と気にしてないような感じがありますが、もっと問題意識が共有されるといいなと思います]

(21:30 end)