SlideShare une entreprise Scribd logo
1  sur  61
Télécharger pour lire hors ligne
Multiple Personae,
                          One “Persona”

                              #idcon 14
                              @bkihara



https://lepidum.co.jp/         2012 Lepidum Co. Ltd.
ぺるそな?
PERSONA




          http://www.hitachi.co.jp/New/cnews/9904/0405.html より引用
Personas
Persona?



           着せ替え



           ログイン
Mozilla Persona
Mozilla Persona

• 「ログインのためのより良い方法」
より良い?
• たくさんのパスワードを必要としない
• 複数のメールアドレスを使い分けられる
• decentralized
• “Real Privacy”
  – Personaは非営利
  – Personaはトラッキングを行わない
BrowserID? Persona?
• BrowserID はプロトコルの名前
 – 昔は Verified Email とも呼ばれていました
• Mozilla Persona はシステム・ブランドの名前
簡単な解説
• Beta1の簡単な解説を少し
 – https://github.com/mozilla/
   id-specs/blob/beta1/browserid/index.md
• ID厨の皆様には不要かもしれませんが…
サインインするには
RPのスクリプト
• navigator.id.watch({
     onlogin: function(assertion) {
           // send assertion
     }
     :
  }
  function onClickSignin(function() {
     navigator.id.request();
  }
サインインを始めると
BrowserID の API が呼ばれて
• navigator.id.watch({
     onlogin: function(assertion) {
           // send assertion
     }
     :
  }
  function onClickSignin(function() {
     navigator.id.request();
  }
BrowserID の UI があらわれ
コールバックに assertion が渡り
• navigator.id.watch({
     onlogin: function(assertion) {
           // send assertion
     }
     :
  }
  function onClickSignin(function() {
     navigator.id.request();
  }
RP に assertion が渡り
       Assertion
RP が assertion を検証し
     Assertion
Cookie とかを返したりして




    Cookie, etc.
GOURANGA!!




   Cookie, etc.
うん?
• Assertion?
• 検証?
Identity Assertion
• assertion=
  eyJhbGciOiJSUzI1NiJ9
  .eyJwdWJsa…
  .IhnfWz…
  ~
  eyJhbGciOiJEUzEyOCJ9
  .eyJleHAiOj...
  .FL_----…
eyJ…?
eyJ…!
eyJ… ~ eyJ…
• 複数のJWT をチルダ ‘~’ でつないでいる
eyJ (1)
{“alg”:”RS256”}
.
{“public-key”: {“algorithm”:”DS”, ”y”:”...”},
  “principal”: {“email”:”bkihara.l@gmail.com”},
  “iat”:…, “exp”:…, “iss”:”mail.example.com”}
.
<JWSの署名(メールプロバイダからもらう)>
eyJ (1)
 {“alg”:”RS256”}
 .
 {“public-key”: {“algorithm”:”DS”, ”y”:”...”},
   “principal”: {“email”:”bkihara.l@gmail.com”},
Browser key pair

   “iat”:…, “exp”:…, “iss”:”mail.example.com”}
        pubkey
 .
 <JWSの署名(メールプロバイダからもらう)>
eyJ (1)             IdP key pair


                                               pubkey
 {“alg”:”RS256”}
 .
 {“public-key”: {“algorithm”:”DS”, ”y”:”...”},
   “principal”: {“email”:”bkihara.l@gmail.com”},
Browser key pair

   “iat”:…, “exp”:…, “iss”:”mail.example.com”}
        pubkey
 .
 <JWSの署名(メールプロバイダからもらう)>
eyJ (2)
{“alg”:”DS128”}
.
{“exp”:…, “aud”:”http://current.openphoto.me”}
.
<JWSの署名(ブラウザが生成する)>
eyJ (2)
 {“alg”:”DS128”}
 .
 {“exp”:…, “aud”:”http://current.openphoto.me”}
 .
 <JWSの署名(ブラウザが生成する)>
Browser key pair


        pubkey
Send assertion
    Assertion
検証

                       IdP
                     pubkey

            /.well-known/browserid




Assertion
検証




              IdP
            pubkey
Assertion
全体像
RP                                IdP
                 IdP
               pubkey




Assertion                         Sig.



                        Browser
       Sig.             pubkey



              Browser
従来のログイン
 SP                                                Email
                        Onetime URL
                    example.com/?a=eyJ...




  HTTP GET                                      Onetime URL
                                            example.com/?a=eyJ...
GET /?a=eyJlbWF…
Host: example.com
…




                          Mailer
未対応という問題
未対応メールプロバイダ

    /.well-known/browserid …?

           Not Found.
未対応ブラウザ

  navigator.id.request() …?

        Undefined.
persona.org!!
Fallback IdP
• persona.org が代わりに
  ユーザの公開鍵を署名                            IdP key pair


                                             pubkey



                                   Signed
{“public-key”: {“algorithm”:”DS”, ”y”:”...”},
  “principal”: {“email”:”bkihara.l@gmail.com”},
  “iat”:…, “exp”:…, “iss”:”login.persona.org”}.
Fallback IdP
    RP                                                        Email
              IdP
            pubkey                        Onetime URL
                                      example.com/?a=eyJ...




Assertion

                        persona.org
                       Sig.


                     Browser
                     pubkey
                                              Mailer

       Browser
Fallback API
• JavaScript が代わりに
  navigator.id.* を提供
                                     Persona key pair


                                               pubkey




                                      Signed

{“exp”:…, “aud”:”http://current.openphoto.me”}.
Fallback API
RP                                       IdP
                     IdP
                   pubkey




               persona.org
Assertion
                                       Sig.


                             Persona
       Sig.                  pubkey




                 Browser
Fallback * Fallback
• 合わせると…?
Fallback * Fallback
                           persona.org
RP                                                               Email
          IdP
        pubkey                               Onetime URL
                                         example.com/?a=eyJ...



                   Sig.
     Assertion
                 Persona
                 pubkey


                            Browser

                                                        Mailer
あれっ?
RP                                IdP
                 IdP
               pubkey




Assertion                         Sig.



                        Browser
       Sig.             pubkey



              Browser
BrowserID – Browser – Email = ?
                           persona.org
RP                                                               Email
          IdP
        pubkey                               Onetime URL
                                         example.com/?a=eyJ...



                   Sig.
     Assertion
                 Persona
                 pubkey


                            Browser
                                                        Mailer
Decentralized?
これじゃだめ?
                       OpenID Connect OP
RP
          IdP
        pubkey


     ID Token

                Sig.



                           Browser
*Browser*ID
• ブラウザが鍵ペアを生成する
• 多段階の署名を付ける
 – これらがキモ! (のはず)
• 少なくともブラウザ側実装はほしいですね
• Web Cryptography API もできることですし
ネイティブ実装
• Firefox 向け実装は作業中
 – https://wiki.mozilla.org/Identity
• B2G (Firefox OS) にも実装される予定
 – https://wiki.mozilla.org/Identity/WeeklyMeeting/
   2012-09-24
 – 課金とか?
ネイティブ実装
• スマホでアプリ間認証とか                          IdP

RP APP                 ID APP
                                 Sig.


    IdP
           Assertion      ID
  pubkey                pubkey
まとめ
• ブラウザの鍵ペアと多段階の署名がキモ
• 現状では fallback 中心で理想から遠い
• 今後に期待?
ところで
メールと言えば
メールでのログイン
 SP                                                Email
                        Onetime URL
                    example.com/?a=eyJ...




  HTTP GET                                      Onetime URL
                                            example.com/?a=eyJ...
GET /?a=eyJlbWF…
Host: example.com
…




                          Mailer
メールでのログイン
• メールプロバイダはIdPなのか?
 – ユーザのメールアドレス所持を(一応)保証
 – パスワード再発行 (refresh token?) の依代
 – Assertionは? Tokenは?
 – Identifier Provider か?
                     ぼくID厨じゃないんでわかんないです


• 何にせよ乗っ取られると多大な被害
乗っ取られると
     今はOpenIDなどセキュリティを
     外付けにすることが多いが、これは
     危ない。特にツイッターやFacebookは
     外部アプリが多いので、変なのが
     まぎれこんでもわからない。
     セキュリティだけは内部でやってほしい。

• ID連携は悪らしい
内部でやった結果




name@example.com
  Same_Password
内部でやった結果


    Same_Password
内部でやった結果


    Same_Password




 大惨事!!!
結論
•   パスワードはサービスごとに変えましょう
•   パスワードは減らしましょう
•   ID連携がパスワードを減らします
•   メールだいじ!おおごと!

Contenu connexe

Similaire à #idcon 14 Multiple Personae, One "Persona"

6th oct2012 kobeit_webintents
6th oct2012 kobeit_webintents6th oct2012 kobeit_webintents
6th oct2012 kobeit_webintentsKensaku Komatsu
 
IDaaSにSign in with Appleをつないでみた
IDaaSにSign in with AppleをつないでみたIDaaSにSign in with Appleをつないでみた
IDaaSにSign in with AppleをつないでみたNaohiro Fujie
 
ゼロからはじめるサーバーサイド Vol2
ゼロからはじめるサーバーサイド Vol2ゼロからはじめるサーバーサイド Vol2
ゼロからはじめるサーバーサイド Vol2Taichi Inaba
 
まだパスワードで認証してるの?Passkeysを使ってパスワードを駆逐してやる!
まだパスワードで認証してるの?Passkeysを使ってパスワードを駆逐してやる!まだパスワードで認証してるの?Passkeysを使ってパスワードを駆逐してやる!
まだパスワードで認証してるの?Passkeysを使ってパスワードを駆逐してやる!Daiki Mogmet Ito
 
MA10 Mashup hackathon 北陸 in 福井 2014/08/30~31
MA10 Mashup hackathon 北陸 in 福井 2014/08/30~31MA10 Mashup hackathon 北陸 in 福井 2014/08/30~31
MA10 Mashup hackathon 北陸 in 福井 2014/08/30~31Wataru Sato
 
エンタープライズIT環境での OpenID Connect / SCIM の具体的実装方法 idit2014
エンタープライズIT環境での OpenID Connect / SCIM の具体的実装方法 idit2014エンタープライズIT環境での OpenID Connect / SCIM の具体的実装方法 idit2014
エンタープライズIT環境での OpenID Connect / SCIM の具体的実装方法 idit2014Takashi Yahata
 
[SC07] Azure AD と Ruby で学ぶ OpenID Connect!
[SC07] Azure AD と Ruby で学ぶ OpenID Connect![SC07] Azure AD と Ruby で学ぶ OpenID Connect!
[SC07] Azure AD と Ruby で学ぶ OpenID Connect!de:code 2017
 
PGP/GPG キーサインパーティ@KOF2012
PGP/GPG キーサインパーティ@KOF2012PGP/GPG キーサインパーティ@KOF2012
PGP/GPG キーサインパーティ@KOF2012Youhei SASAKI
 
130329 perl casual_ruik
130329 perl casual_ruik130329 perl casual_ruik
130329 perl casual_ruikRui Kimura
 
WebAPIのバリデーションを、型の力でいい感じにする
WebAPIのバリデーションを、型の力でいい感じにするWebAPIのバリデーションを、型の力でいい感じにする
WebAPIのバリデーションを、型の力でいい感じにするTakuya Kikuchi
 
Programming AWS with Python
Programming AWS with Python  Programming AWS with Python
Programming AWS with Python Yasuhiro Matsuo
 
Idcon25 FIDO2 の概要と YubiKey の実装
Idcon25 FIDO2 の概要と YubiKey の実装Idcon25 FIDO2 の概要と YubiKey の実装
Idcon25 FIDO2 の概要と YubiKey の実装Haniyama Wataru
 
Web Audio APIの初歩
Web Audio APIの初歩Web Audio APIの初歩
Web Audio APIの初歩Shota Kubota
 
Inside mobage platform
Inside mobage platformInside mobage platform
Inside mobage platformToru Yamaguchi
 
AWS Amplify - Auth/API Category & Vue 構築ハンズオン
AWS Amplify - Auth/API Category & Vue 構築ハンズオンAWS Amplify - Auth/API Category & Vue 構築ハンズオン
AWS Amplify - Auth/API Category & Vue 構築ハンズオンEiji KOMINAMI
 
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...Naoya Ito
 
筋肉によるGoコードジェネレーション
筋肉によるGoコードジェネレーション筋肉によるGoコードジェネレーション
筋肉によるGoコードジェネレーションlestrrat
 
RustでWebSocketな自社APIを使う
RustでWebSocketな自社APIを使うRustでWebSocketな自社APIを使う
RustでWebSocketな自社APIを使うSatoshi Yoshikawa
 

Similaire à #idcon 14 Multiple Personae, One "Persona" (20)

6th oct2012 kobeit_webintents
6th oct2012 kobeit_webintents6th oct2012 kobeit_webintents
6th oct2012 kobeit_webintents
 
IDaaSにSign in with Appleをつないでみた
IDaaSにSign in with AppleをつないでみたIDaaSにSign in with Appleをつないでみた
IDaaSにSign in with Appleをつないでみた
 
ゼロからはじめるサーバーサイド Vol2
ゼロからはじめるサーバーサイド Vol2ゼロからはじめるサーバーサイド Vol2
ゼロからはじめるサーバーサイド Vol2
 
まだパスワードで認証してるの?Passkeysを使ってパスワードを駆逐してやる!
まだパスワードで認証してるの?Passkeysを使ってパスワードを駆逐してやる!まだパスワードで認証してるの?Passkeysを使ってパスワードを駆逐してやる!
まだパスワードで認証してるの?Passkeysを使ってパスワードを駆逐してやる!
 
MA10 Mashup hackathon 北陸 in 福井 2014/08/30~31
MA10 Mashup hackathon 北陸 in 福井 2014/08/30~31MA10 Mashup hackathon 北陸 in 福井 2014/08/30~31
MA10 Mashup hackathon 北陸 in 福井 2014/08/30~31
 
エンタープライズIT環境での OpenID Connect / SCIM の具体的実装方法 idit2014
エンタープライズIT環境での OpenID Connect / SCIM の具体的実装方法 idit2014エンタープライズIT環境での OpenID Connect / SCIM の具体的実装方法 idit2014
エンタープライズIT環境での OpenID Connect / SCIM の具体的実装方法 idit2014
 
[SC07] Azure AD と Ruby で学ぶ OpenID Connect!
[SC07] Azure AD と Ruby で学ぶ OpenID Connect![SC07] Azure AD と Ruby で学ぶ OpenID Connect!
[SC07] Azure AD と Ruby で学ぶ OpenID Connect!
 
PGP/GPG キーサインパーティ@KOF2012
PGP/GPG キーサインパーティ@KOF2012PGP/GPG キーサインパーティ@KOF2012
PGP/GPG キーサインパーティ@KOF2012
 
130329 perl casual_ruik
130329 perl casual_ruik130329 perl casual_ruik
130329 perl casual_ruik
 
WebAPIのバリデーションを、型の力でいい感じにする
WebAPIのバリデーションを、型の力でいい感じにするWebAPIのバリデーションを、型の力でいい感じにする
WebAPIのバリデーションを、型の力でいい感じにする
 
Programming AWS with Python
Programming AWS with Python  Programming AWS with Python
Programming AWS with Python
 
Idcon25 FIDO2 の概要と YubiKey の実装
Idcon25 FIDO2 の概要と YubiKey の実装Idcon25 FIDO2 の概要と YubiKey の実装
Idcon25 FIDO2 の概要と YubiKey の実装
 
Web Audio APIの初歩
Web Audio APIの初歩Web Audio APIの初歩
Web Audio APIの初歩
 
Inside mobage platform
Inside mobage platformInside mobage platform
Inside mobage platform
 
はじめてのgithub
はじめてのgithubはじめてのgithub
はじめてのgithub
 
BEAR.Sunday@phpcon2012
BEAR.Sunday@phpcon2012BEAR.Sunday@phpcon2012
BEAR.Sunday@phpcon2012
 
AWS Amplify - Auth/API Category & Vue 構築ハンズオン
AWS Amplify - Auth/API Category & Vue 構築ハンズオンAWS Amplify - Auth/API Category & Vue 構築ハンズオン
AWS Amplify - Auth/API Category & Vue 構築ハンズオン
 
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...
 
筋肉によるGoコードジェネレーション
筋肉によるGoコードジェネレーション筋肉によるGoコードジェネレーション
筋肉によるGoコードジェネレーション
 
RustでWebSocketな自社APIを使う
RustでWebSocketな自社APIを使うRustでWebSocketな自社APIを使う
RustでWebSocketな自社APIを使う
 

#idcon 14 Multiple Personae, One "Persona"