Upload
bkihara
View
590
Download
7
Embed Size (px)
Citation preview
https://lepidum.co.jp/ 2012 Lepidum Co. Ltd.
Multiple Personae, One “Persona”
#idcon 14
@bkihara
ぺるそな?
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”:”[email protected]”},
“iat”:…, “exp”:…, “iss”:”mail.example.com”}
.
<JWSの署名(メールプロバイダからもらう)>
eyJ (1)
{“alg”:”RS256”}
.
{“public-key”: {“algorithm”:”DS”, ”y”:”...”},
“principal”: {“email”:”[email protected]”},
“iat”:…, “exp”:…, “iss”:”mail.example.com”}
.
<JWSの署名(メールプロバイダからもらう)>
Browser key pair
pubkey
{“alg”:”RS256”}
.
{“public-key”: {“algorithm”:”DS”, ”y”:”...”},
“principal”: {“email”:”[email protected]”},
“iat”:…, “exp”:…, “iss”:”mail.example.com”}
.
<JWSの署名(メールプロバイダからもらう)>
eyJ (1)
Browser key pair
pubkey
IdP key pair
pubkey
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
検証
Assertion
IdP pubkey
全体像
Assertion
RP
Browser
IdP
Browser pubkey
IdP pubkey
Sig.
Sig.
従来のログイン SP
Mailer
Onetime URL
example.com/?a=eyJ...
Onetime URL
example.com/?a=eyJ...
HTTP GET
GET /?a=eyJlbWF…
Host: example.com
…
未対応という問題
未対応メールプロバイダ
/.well-known/browserid …?
Not Found.
未対応ブラウザ
navigator.id.request() …?
Undefined.
persona.org!!
Fallback IdP
• persona.org が代わりに ユーザの公開鍵を署名
IdP key pair
pubkey
{“public-key”: {“algorithm”:”DS”, ”y”:”...”},
“principal”: {“email”:”[email protected]”},
“iat”:…, “exp”:…, “iss”:”login.persona.org”}.
Signed
Fallback IdP
Assertion
RP
Browser
Browser pubkey
IdP pubkey
Sig.
Onetime URL
example.com/?a=eyJ...
Mailer
persona.org
Fallback API
• JavaScript が代わりに navigator.id.* を提供
{“exp”:…, “aud”:”http://current.openphoto.me”}.
Persona key pair
pubkey
Signed
Fallback API
Assertion
RP
Browser
IdP IdP
pubkey
Sig.
persona.org
Persona pubkey
Sig.
Fallback * Fallback
• 合わせると…?
Fallback * Fallback
Assertion
RP
Browser
Email IdP
pubkey Onetime URL
example.com/?a=eyJ...
Mailer
persona.org
Persona pubkey
Sig.
あれっ?
Assertion
RP
Browser
IdP
Browser pubkey
IdP pubkey
Sig.
Sig.
BrowserID – Browser – Email = ?
Assertion
RP
Browser
Email IdP
pubkey Onetime URL
example.com/?a=eyJ...
Mailer
persona.org
Persona pubkey
Sig.
Decentralized?
これじゃだめ?
RP IdP
pubkey
OpenID Connect OP
ID Token
Browser
Sig.
*Browser*ID
• ブラウザが鍵ペアを生成する
• 多段階の署名を付ける
– これらがキモ! (のはず)
• 少なくともブラウザ側実装はほしいですね
• Web Cryptography API もできることですし
ネイティブ実装
• Firefox 向け実装は作業中
– https://wiki.mozilla.org/Identity
• B2G (Firefox OS) にも実装される予定
– https://wiki.mozilla.org/Identity/WeeklyMeeting/2012-09-24
–課金とか?
ネイティブ実装
• スマホでアプリ間認証とか
IdP pubkey
RP APP
ID pubkey
Sig.
ID APP
IdP
Assertion
まとめ
• ブラウザの鍵ペアと多段階の署名がキモ
• 現状では fallback 中心で理想から遠い
• 今後に期待?
ところで
メールと言えば
メールでのログイン SP
Mailer
Onetime URL
example.com/?a=eyJ...
Onetime URL
example.com/?a=eyJ...
HTTP GET
GET /?a=eyJlbWF…
Host: example.com
…
メールでのログイン
• メールプロバイダはIdPなのか?
–ユーザのメールアドレス所持を(一応)保証
–パスワード再発行 (refresh token?) の依代
– Assertionは? Tokenは?
– Identifier Provider か?
• 何にせよ乗っ取られると多大な被害
ぼくID厨じゃないんでわかんないです
乗っ取られると
• ID連携は悪らしい
今はOpenIDなどセキュリティを 外付けにすることが多いが、これは 危ない。特にツイッターやFacebookは外部アプリが多いので、変なのが まぎれこんでもわからない。 セキュリティだけは内部でやってほしい。
内部でやった結果
Same_Password Same_Password
内部でやった結果
大惨事!!!
Same_Password Same_Password
結論
• パスワードはサービスごとに変えましょう
• パスワードは減らしましょう
• ID連携がパスワードを減らします
• メールだいじ!おおごと!