61
https://lepidum.co.jp/ 2012 Lepidum Co. Ltd. Multiple Personae, One “Persona” #idcon 14 @bkihara

#idcon 14 Multiple Personae, One "Persona"

  • Upload
    bkihara

  • View
    590

  • Download
    7

Embed Size (px)

Citation preview

Page 1: #idcon 14 Multiple Personae, One "Persona"

https://lepidum.co.jp/ 2012 Lepidum Co. Ltd.

Multiple Personae, One “Persona”

#idcon 14

@bkihara

Page 2: #idcon 14 Multiple Personae, One "Persona"

ぺるそな?

Page 3: #idcon 14 Multiple Personae, One "Persona"

PERSONA

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

Page 4: #idcon 14 Multiple Personae, One "Persona"

Personas

Page 5: #idcon 14 Multiple Personae, One "Persona"

Persona?

着せ替え

ログイン

Page 6: #idcon 14 Multiple Personae, One "Persona"

Mozilla Persona

Page 7: #idcon 14 Multiple Personae, One "Persona"

Mozilla Persona

• 「ログインのためのより良い方法」

Page 8: #idcon 14 Multiple Personae, One "Persona"

より良い?

• たくさんのパスワードを必要としない

• 複数のメールアドレスを使い分けられる

• decentralized

• “Real Privacy” – Personaは非営利

– Personaはトラッキングを行わない

Page 9: #idcon 14 Multiple Personae, One "Persona"

BrowserID? Persona?

• BrowserID はプロトコルの名前

–昔は Verified Email とも呼ばれていました

• Mozilla Persona はシステム・ブランドの名前

Page 10: #idcon 14 Multiple Personae, One "Persona"

簡単な解説

• Beta1の簡単な解説を少し

– https://github.com/mozilla/ id-specs/blob/beta1/browserid/index.md

• ID厨の皆様には不要かもしれませんが…

Page 11: #idcon 14 Multiple Personae, One "Persona"

サインインするには

Page 12: #idcon 14 Multiple Personae, One "Persona"

RPのスクリプト

• navigator.id.watch({ onlogin: function(assertion) { // send assertion } : } function onClickSignin(function() { navigator.id.request(); }

Page 13: #idcon 14 Multiple Personae, One "Persona"

サインインを始めると

Page 14: #idcon 14 Multiple Personae, One "Persona"

BrowserID の API が呼ばれて

• navigator.id.watch({ onlogin: function(assertion) { // send assertion } : } function onClickSignin(function() { navigator.id.request(); }

Page 15: #idcon 14 Multiple Personae, One "Persona"

BrowserID の UI があらわれ

Page 16: #idcon 14 Multiple Personae, One "Persona"

コールバックに assertion が渡り

• navigator.id.watch({ onlogin: function(assertion) { // send assertion } : } function onClickSignin(function() { navigator.id.request(); }

Page 17: #idcon 14 Multiple Personae, One "Persona"

RP に assertion が渡り

Assertion

Page 18: #idcon 14 Multiple Personae, One "Persona"

RP が assertion を検証し Assertion

Page 19: #idcon 14 Multiple Personae, One "Persona"

Cookie とかを返したりして

Cookie, etc.

Page 20: #idcon 14 Multiple Personae, One "Persona"

GOURANGA!!

Cookie, etc.

Page 21: #idcon 14 Multiple Personae, One "Persona"

うん?

• Assertion?

• 検証?

Page 22: #idcon 14 Multiple Personae, One "Persona"

Identity Assertion

• assertion= eyJhbGciOiJSUzI1NiJ9 .eyJwdWJsa… .IhnfWz… ~ eyJhbGciOiJEUzEyOCJ9 .eyJleHAiOj... .FL_----…

Page 23: #idcon 14 Multiple Personae, One "Persona"

eyJ…?

Page 24: #idcon 14 Multiple Personae, One "Persona"

eyJ…!

Page 25: #idcon 14 Multiple Personae, One "Persona"

eyJ… ~ eyJ…

• 複数のJWT をチルダ ‘~’ でつないでいる

Page 26: #idcon 14 Multiple Personae, One "Persona"

eyJ (1)

{“alg”:”RS256”}

.

{“public-key”: {“algorithm”:”DS”, ”y”:”...”},

“principal”: {“email”:”[email protected]”},

“iat”:…, “exp”:…, “iss”:”mail.example.com”}

.

<JWSの署名(メールプロバイダからもらう)>

Page 27: #idcon 14 Multiple Personae, One "Persona"

eyJ (1)

{“alg”:”RS256”}

.

{“public-key”: {“algorithm”:”DS”, ”y”:”...”},

“principal”: {“email”:”[email protected]”},

“iat”:…, “exp”:…, “iss”:”mail.example.com”}

.

<JWSの署名(メールプロバイダからもらう)>

Browser key pair

pubkey

Page 28: #idcon 14 Multiple Personae, One "Persona"

{“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

Page 29: #idcon 14 Multiple Personae, One "Persona"

eyJ (2)

{“alg”:”DS128”}

.

{“exp”:…, “aud”:”http://current.openphoto.me”}

.

<JWSの署名(ブラウザが生成する)>

Page 30: #idcon 14 Multiple Personae, One "Persona"

eyJ (2)

{“alg”:”DS128”}

.

{“exp”:…, “aud”:”http://current.openphoto.me”}

.

<JWSの署名(ブラウザが生成する)> Browser key pair

pubkey

Page 31: #idcon 14 Multiple Personae, One "Persona"

Send assertion

Assertion

Page 32: #idcon 14 Multiple Personae, One "Persona"

検証

IdP pubkey

/.well-known/browserid

Assertion

Page 33: #idcon 14 Multiple Personae, One "Persona"

検証

Assertion

IdP pubkey

Page 34: #idcon 14 Multiple Personae, One "Persona"

全体像

Assertion

RP

Browser

IdP

Browser pubkey

IdP pubkey

Sig.

Sig.

Page 35: #idcon 14 Multiple Personae, One "Persona"

従来のログイン SP

Mailer

Onetime URL

example.com/?a=eyJ...

Onetime URL

example.com/?a=eyJ...

HTTP GET

GET /?a=eyJlbWF…

Host: example.com

Email

Page 36: #idcon 14 Multiple Personae, One "Persona"

未対応という問題

Page 37: #idcon 14 Multiple Personae, One "Persona"

未対応メールプロバイダ

/.well-known/browserid …?

Not Found.

Page 38: #idcon 14 Multiple Personae, One "Persona"

未対応ブラウザ

navigator.id.request() …?

Undefined.

Page 39: #idcon 14 Multiple Personae, One "Persona"

persona.org!!

Page 40: #idcon 14 Multiple Personae, One "Persona"

Fallback IdP

• persona.org が代わりに ユーザの公開鍵を署名

IdP key pair

pubkey

{“public-key”: {“algorithm”:”DS”, ”y”:”...”},

“principal”: {“email”:”[email protected]”},

“iat”:…, “exp”:…, “iss”:”login.persona.org”}.

Signed

Page 41: #idcon 14 Multiple Personae, One "Persona"

Fallback IdP

Assertion

RP

Browser

Email

Browser pubkey

IdP pubkey

Sig.

Onetime URL

example.com/?a=eyJ...

Mailer

persona.org

Page 42: #idcon 14 Multiple Personae, One "Persona"

Fallback API

• JavaScript が代わりに navigator.id.* を提供

{“exp”:…, “aud”:”http://current.openphoto.me”}.

Persona key pair

pubkey

Signed

Page 43: #idcon 14 Multiple Personae, One "Persona"

Fallback API

Assertion

RP

Browser

IdP IdP

pubkey

Sig.

persona.org

Persona pubkey

Sig.

Page 44: #idcon 14 Multiple Personae, One "Persona"

Fallback * Fallback

• 合わせると…?

Page 45: #idcon 14 Multiple Personae, One "Persona"

Fallback * Fallback

Assertion

RP

Browser

Email IdP

pubkey Onetime URL

example.com/?a=eyJ...

Mailer

persona.org

Persona pubkey

Sig.

Page 46: #idcon 14 Multiple Personae, One "Persona"

あれっ?

Assertion

RP

Browser

IdP

Browser pubkey

IdP pubkey

Sig.

Sig.

Page 47: #idcon 14 Multiple Personae, One "Persona"

BrowserID – Browser – Email = ?

Assertion

RP

Browser

Email IdP

pubkey Onetime URL

example.com/?a=eyJ...

Mailer

persona.org

Persona pubkey

Sig.

Decentralized?

Page 48: #idcon 14 Multiple Personae, One "Persona"

これじゃだめ?

RP IdP

pubkey

OpenID Connect OP

ID Token

Browser

Sig.

Page 49: #idcon 14 Multiple Personae, One "Persona"

*Browser*ID

• ブラウザが鍵ペアを生成する

• 多段階の署名を付ける

– これらがキモ! (のはず)

• 少なくともブラウザ側実装はほしいですね

• Web Cryptography API もできることですし

Page 50: #idcon 14 Multiple Personae, One "Persona"

ネイティブ実装

• Firefox 向け実装は作業中

– https://wiki.mozilla.org/Identity

• B2G (Firefox OS) にも実装される予定

– https://wiki.mozilla.org/Identity/WeeklyMeeting/2012-09-24

–課金とか?

Page 51: #idcon 14 Multiple Personae, One "Persona"

ネイティブ実装

• スマホでアプリ間認証とか

IdP pubkey

RP APP

ID pubkey

Sig.

ID APP

IdP

Assertion

Page 52: #idcon 14 Multiple Personae, One "Persona"

まとめ

• ブラウザの鍵ペアと多段階の署名がキモ

• 現状では fallback 中心で理想から遠い

• 今後に期待?

Page 53: #idcon 14 Multiple Personae, One "Persona"

ところで

Page 54: #idcon 14 Multiple Personae, One "Persona"

メールと言えば

Page 55: #idcon 14 Multiple Personae, One "Persona"

メールでのログイン SP

Mailer

Onetime URL

example.com/?a=eyJ...

Onetime URL

example.com/?a=eyJ...

HTTP GET

GET /?a=eyJlbWF…

Host: example.com

Email

Page 56: #idcon 14 Multiple Personae, One "Persona"

メールでのログイン

• メールプロバイダはIdPなのか?

–ユーザのメールアドレス所持を(一応)保証

–パスワード再発行 (refresh token?) の依代

– Assertionは? Tokenは?

– Identifier Provider か?

• 何にせよ乗っ取られると多大な被害

ぼくID厨じゃないんでわかんないです

Page 57: #idcon 14 Multiple Personae, One "Persona"

乗っ取られると

• ID連携は悪らしい

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

Page 58: #idcon 14 Multiple Personae, One "Persona"

内部でやった結果

[email protected]

Same_Password

Page 59: #idcon 14 Multiple Personae, One "Persona"

内部でやった結果

Same_Password Same_Password

Page 60: #idcon 14 Multiple Personae, One "Persona"

内部でやった結果

大惨事!!!

Same_Password Same_Password

Page 61: #idcon 14 Multiple Personae, One "Persona"

結論

• パスワードはサービスごとに変えましょう

• パスワードは減らしましょう

• ID連携がパスワードを減らします

• メールだいじ!おおごと!