Download - The web beyond "usernames & passwords"

Transcript
Page 1: The web beyond "usernames & passwords"

François Marier – @fmarier

the web beyondusernames & passwords

Page 2: The web beyond "usernames & passwords"

Username:guido

Password:****************

Page 3: The web beyond "usernames & passwords"

security

Page 4: The web beyond "usernames & passwords"
Page 5: The web beyond "usernames & passwords"
Page 6: The web beyond "usernames & passwords"
Page 7: The web beyond "usernames & passwords"
Page 8: The web beyond "usernames & passwords"
Page 9: The web beyond "usernames & passwords"
Page 10: The web beyond "usernames & passwords"

bcrypt

Page 11: The web beyond "usernames & passwords"

bcrypt

per-user salt

Page 12: The web beyond "usernames & passwords"

bcrypt

per-user salt

site secret

Page 13: The web beyond "usernames & passwords"
Page 14: The web beyond "usernames & passwords"

conversionrate

Page 15: The web beyond "usernames & passwords"

# hits

signup

Page 16: The web beyond "usernames & passwords"

# hits

signup signup_complete

Page 17: The web beyond "usernames & passwords"

# hits

signup signup_complete

l o s t cust-omers

Page 18: The web beyond "usernames & passwords"

existing solutions

Page 19: The web beyond "usernames & passwords"

client certificates

Page 20: The web beyond "usernames & passwords"

centralized authorities

Page 21: The web beyond "usernames & passwords"
Page 22: The web beyond "usernames & passwords"
Page 23: The web beyond "usernames & passwords"

distributed

Page 24: The web beyond "usernames & passwords"

distributedprivacy-sensitive

Page 25: The web beyond "usernames & passwords"

distributedprivacy-sensitive

simple

Page 26: The web beyond "usernames & passwords"

distributedprivacy-sensitive

simpleopen source

Page 27: The web beyond "usernames & passwords"

how does Persona work?

Page 29: The web beyond "usernames & passwords"

getting a proof of email ownership

Page 30: The web beyond "usernames & passwords"

getting a proof of email ownership

authenticate?

Page 31: The web beyond "usernames & passwords"

getting a proof of email ownership

authenticate?

public key

Page 32: The web beyond "usernames & passwords"

getting a proof of email ownership

authenticate?

public key

signed public key

Page 33: The web beyond "usernames & passwords"

you have a signed statement from yourprovider that you own your email address

Page 34: The web beyond "usernames & passwords"
Page 35: The web beyond "usernames & passwords"
Page 36: The web beyond "usernames & passwords"
Page 37: The web beyond "usernames & passwords"
Page 38: The web beyond "usernames & passwords"

logging into a 3rd party site

Page 39: The web beyond "usernames & passwords"

logging into a 3rd party site

Valid for: 2 minutes

wikipedia.org

assertion

Page 40: The web beyond "usernames & passwords"

logging into a 3rd party site

Valid for: 2 minutes

wikipedia.org

check audience

assertion

Page 41: The web beyond "usernames & passwords"

logging into a 3rd party site

Valid for: 2 minutes

wikipedia.org

check audiencecheck expiry

assertion

Page 42: The web beyond "usernames & passwords"

logging into a 3rd party site

Valid for: 2 minutes

wikipedia.org

check audiencecheck expirycheck signature

assertion

Page 43: The web beyond "usernames & passwords"

logging into a 3rd party site

assertion

Valid for: 2 minutes

wikipedia.org

public key

Page 44: The web beyond "usernames & passwords"

logging into a 3rd party site

assertion

Valid for: 2 minutes

wikipedia.org

Page 45: The web beyond "usernames & passwords"

logging into a 3rd party site

assertion

session cookie

Page 46: The web beyond "usernames & passwords"

how much work does it take?

Page 47: The web beyond "usernames & passwords"

only 75 lines

Page 48: The web beyond "usernames & passwords"

only 75 lineshtml – js – python

Page 49: The web beyond "usernames & passwords"
Page 50: The web beyond "usernames & passwords"

<head><script src=”https://login.persona.org/include.js”></script></head>

Page 51: The web beyond "usernames & passwords"

navigator.id.watch({ loggedInEmail: “[email protected]”, onlogin: function (assertion) { $.post('/login', {assertion: assertion}, function (data) { // do something } ); }, onlogout: function () { window.location = '/logout'; }});

Page 52: The web beyond "usernames & passwords"

navigator.id.watch({ loggedInEmail: “[email protected]”, onlogin: function (assertion) { $.post('/login', {assertion: assertion}, function (data) { // do something } ); }, onlogout: function () { window.location = '/logout'; }});

Page 53: The web beyond "usernames & passwords"

navigator.id.watch({ loggedInEmail: null, onlogin: function (assertion) { $.post('/login', {assertion: assertion}, function (data) { // do something } ); }, onlogout: function () { window.location = '/logout'; }});

Page 54: The web beyond "usernames & passwords"

navigator.id.watch({ loggedInEmail: null, onlogin: function (assertion) { $.post('/login', {assertion: assertion}, function (data) { // do something } ); }, onlogout: function () { window.location = '/logout'; }});

Page 55: The web beyond "usernames & passwords"

navigator.id.watch({ loggedInEmail: null, onlogin: function (assertion) { $.post('/login', {assertion: assertion}, function (data) { window.location = '/'; } ); }, onlogout: function () { window.location = '/logout'; }});

Page 56: The web beyond "usernames & passwords"
Page 57: The web beyond "usernames & passwords"

navigator.id.request()

Page 58: The web beyond "usernames & passwords"
Page 59: The web beyond "usernames & passwords"
Page 60: The web beyond "usernames & passwords"

navigator.id.watch({ loggedInEmail: null, onlogin: function (assertion) { $.post('/login', {assertion: assertion}, function (data) { window.location = '/'; } ); }, onlogout: function () { window.location = '/logout'; }});

Page 61: The web beyond "usernames & passwords"

navigator.id.watch({ loggedInEmail: null, onlogin: function (assertion) { $.post('/login', {assertion: assertion}, function (data) { window.location = '/home'; } ); }, onlogout: function () { window.location = '/logout'; }});

Page 62: The web beyond "usernames & passwords"

def verify_assertion(assertion):

page = requests.post( 'https://verifier.login.persona.org/verify', Data={ "assertion": assertion, "audience": 'http://123done.org'})

data = page.json return data.status == 'okay'

Page 63: The web beyond "usernames & passwords"

{ status: “okay”,

audience: “http://123done.org”,

expires: 1344849682560,

email: “[email protected]”,

issuer: “login.persona.org”}

Page 64: The web beyond "usernames & passwords"
Page 65: The web beyond "usernames & passwords"

navigator.id.logout()

Page 66: The web beyond "usernames & passwords"
Page 67: The web beyond "usernames & passwords"

navigator.id.watch({ loggedInEmail: null, onlogin: function (assertion) { $.post('/login', {assertion: assertion}, function (data) { window.location = '/home'; } ); }, onlogout: function () { window.location = '/logout'; }});

Page 68: The web beyond "usernames & passwords"

1. load javascript library

Page 69: The web beyond "usernames & passwords"

1. load javascript library

2. setup login & logout callbacks

Page 70: The web beyond "usernames & passwords"

1. load javascript library

2. setup login & logout callbacks

3. add login and logout buttons

Page 71: The web beyond "usernames & passwords"

1. load javascript library

2. setup login & logout callbacks

3. add login and logout buttons

4. verify proof of ownership

Page 72: The web beyond "usernames & passwords"

decentralization status

Page 73: The web beyond "usernames & passwords"

1. identity providers

Page 74: The web beyond "usernames & passwords"

{ status: “okay”,

audience: “http://123done.org”,

expires: 1344849682560,

email: “[email protected]”,

issuer: “eyedee.me”}

Page 75: The web beyond "usernames & passwords"

fallback IdP:

login.persona.org

Page 76: The web beyond "usernames & passwords"

{ status: “okay”,

audience: “http://123done.org”,

expires: 1344849682560,

email: “[email protected]”,

issuer: “mozilla.com”}

Page 77: The web beyond "usernames & passwords"

{ status: “okay”,

audience: “http://123done.org”,

expires: 1344849682560,

email: “[email protected]”,

issuer: “login.persona.org”}

Page 78: The web beyond "usernames & passwords"
Page 79: The web beyond "usernames & passwords"
Page 80: The web beyond "usernames & passwords"

support for all email providers

Page 81: The web beyond "usernames & passwords"

2. browser support

Page 82: The web beyond "usernames & passwords"

navigator.id.*

Page 83: The web beyond "usernames & passwords"

<head><script src=”https://login.persona.org/include.js”></script></head>

Page 84: The web beyond "usernames & passwords"

support for allmodern browsers

>= 8

Page 85: The web beyond "usernames & passwords"
Page 86: The web beyond "usernames & passwords"

3. assertion verification

Page 87: The web beyond "usernames & passwords"

https://verifier.login.persona.org

Page 88: The web beyond "usernames & passwords"

=

Page 89: The web beyond "usernames & passwords"

Persona is open for business!

Page 90: The web beyond "usernames & passwords"

To learn more about Persona:

https://login.persona.org/http://identity.mozilla.com/

https://developer.mozilla.org/en-US/docs/BrowserID/Why_BrowserIDhttps://developer.mozilla.org/en-US/docs/BrowserID/Quick_Setup

https://github.com/mozilla/browserid-cookbook/tree/master/pythonhttps://github.com/mozilla/browserid/wiki/BrowserID-Librarieshttps://github.com/mozilla/django-browserid

http://123done.org/

@fmarier http://fmarier.org

Page 91: The web beyond "usernames & passwords"

© 2012 François Marier <[email protected]>This work is licensed under aCreative Commons Attribution-ShareAlike 3.0 New Zealand License.

Laptop password: https://secure.flickr.com/photos/reidrac/4696900602/

Top 500 passwords: http://xato.net/passwords/more-top-worst-passwords/

Parchment: https://secure.flickr.com/photos/27613359@N03/6750396225/

Photo credits: