130
François Marier – @fmarier Securing the Web without site-specific passwords

Securing the Web without site-specific passwords

Embed Size (px)

DESCRIPTION

Identity systems on the Web are a bit of a mess. Surely in 2013, we would have something else than usernames and passwords for logging into websites. A solution that doesn't require trusting a central authority. It turns out that solving the general identity problem is very hard. Some of these solutions require complicated redirections, an overwhelming amount of jargon and lots of verbose XML. The technology has been around for a long time, but implementing it properly (and safely) is often incredibly difficult. This talk will explore the challenges of the existing Web identity solutions and introduce the choices that we made during the development of Persona, a new cross-browser federated identity solution from Mozilla. It will cover: - a discussion of the complexities and privacy-related concerns that existing identity solutions have - how crypto is used in Persona to provide both authentication and privacy - the Persona federation approach: fully distributed with fallbacks - demos and actual code from sites that have implemented Persona - the basics of the Persona API so that attendees can go out and easily support this technology on their own sites Trying to convince users to pick unique (and strong) passwords for each website is a losing battle. What we're proposing is a standard, built into browsers, that leverages the new security features that email providers are now offering. A simple federated solution to eliminate site-specific passwords.

Citation preview

Page 1: Securing the Web without site-specific passwords

François Marier – @fmarier

Securing the Web without site-specific passwords

Page 2: Securing the Web without site-specific passwords

François Marier – @fmarier

F**k all of these passwords, we can do better than this!

Page 3: Securing the Web without site-specific passwords

solving thepassword problem

on the web

Page 4: Securing the Web without site-specific passwords

problem #1:

passwords are hard to secure

Page 5: Securing the Web without site-specific passwords
Page 6: Securing the Web without site-specific passwords
Page 7: Securing the Web without site-specific passwords
Page 8: Securing the Web without site-specific passwords
Page 9: Securing the Web without site-specific passwords
Page 10: Securing the Web without site-specific passwords
Page 11: Securing the Web without site-specific passwords
Page 12: Securing the Web without site-specific passwords
Page 13: Securing the Web without site-specific passwords
Page 14: Securing the Web without site-specific passwords
Page 15: Securing the Web without site-specific passwords

bcrypt / scrypt / pbkdf2

per-user salt

site secret

password & lockout policies

secure recovery

Page 16: Securing the Web without site-specific passwords

bcrypt / scrypt / pbkdf2

per-user salt

site secret

password & lockout policies

secure recovery

Page 17: Securing the Web without site-specific passwords

bcrypt / scrypt / pbkdf2

per-user salt

site secret

password & lockout policies

secure recovery

Page 18: Securing the Web without site-specific passwords

bcrypt / scrypt / pbkdf2

per-user salt

site secret

password & lockout policies

secure recovery

Page 19: Securing the Web without site-specific passwords

bcrypt / scrypt / pbkdf2

per-user salt

site secret

password & lockout policies

secure recovery

Page 20: Securing the Web without site-specific passwords

bcrypt / scrypt / pbkdf2

per-user salt

site secret

password & lockout policies

secure recovery

20132013

passwordpassword

guidelines

guidelines

Page 21: Securing the Web without site-specific passwords

passwords are hard to secure

they are a liability

Page 22: Securing the Web without site-specific passwords

ALTER TABLE userDROP COLUMN password;

Page 23: Securing the Web without site-specific passwords

problem #2:

passwords are hard to remember

Page 24: Securing the Web without site-specific passwords

users have two strategies

Page 25: Securing the Web without site-specific passwords

1. pick an easy password

Page 26: Securing the Web without site-specific passwords
Page 27: Securing the Web without site-specific passwords
Page 28: Securing the Web without site-specific passwords
Page 29: Securing the Web without site-specific passwords

2. reuse your password

Page 30: Securing the Web without site-specific passwords

negative externality:

sites that don't care about securityimpose a cost on more important sites

Page 31: Securing the Web without site-specific passwords

passwords are hard to remember

they need to be reset

Page 32: Securing the Web without site-specific passwords
Page 33: Securing the Web without site-specific passwords

controlemail

account

controlall

accounts=

Page 34: Securing the Web without site-specific passwords

existing login solutions

Page 35: Securing the Web without site-specific passwords

client certificates

Page 36: Securing the Web without site-specific passwords
Page 37: Securing the Web without site-specific passwords

centralised authorities

Page 38: Securing the Web without site-specific passwords

existing login systemsare not good enough

Page 39: Securing the Web without site-specific passwords

ideal web-wide identity system

Page 40: Securing the Web without site-specific passwords

● decentralised● simple● cross-browser

ideal web-wide identity system

Page 41: Securing the Web without site-specific passwords

● decentralised● simple● cross-browser

ideal web-wide identity system

Page 42: Securing the Web without site-specific passwords

● decentralised● simple● cross-browser

ideal web-wide identity system

Page 43: Securing the Web without site-specific passwords

● decentralised● simple● cross-browser

Page 44: Securing the Web without site-specific passwords

how does it work?

Page 46: Securing the Web without site-specific passwords

getting a proof of email ownership

Page 47: Securing the Web without site-specific passwords

authenticate?

Page 48: Securing the Web without site-specific passwords

authenticate?

public key

Page 49: Securing the Web without site-specific passwords

authenticate?

public key

signed public key

Page 50: Securing the Web without site-specific passwords

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

Page 51: Securing the Web without site-specific passwords
Page 52: Securing the Web without site-specific passwords

logging into a 3rd party site

Page 53: Securing the Web without site-specific passwords

Valid for: 2 minutes

wikipedia.org

assertion

Page 54: Securing the Web without site-specific passwords

Valid for: 2 minutes

wikipedia.org

check audience

assertion

Page 55: Securing the Web without site-specific passwords

Valid for: 2 minutes

wikipedia.org

check audiencecheck expiry

assertion

Page 56: Securing the Web without site-specific passwords

Valid for: 2 minutes

wikipedia.org

check audiencecheck expirycheck signature

assertion

Page 57: Securing the Web without site-specific passwords

assertion

Valid for: 2 minutes

wikipedia.org

public key

Page 58: Securing the Web without site-specific passwords

assertion

Valid for: 2 minutes

wikipedia.org

Page 59: Securing the Web without site-specific passwords

assertion

session cookie

Page 60: Securing the Web without site-specific passwords

demo #1:

http://crossword.thetimes.co.uk/

[email protected]

Page 61: Securing the Web without site-specific passwords

Persona is already adecentralised system

Page 62: Securing the Web without site-specific passwords

decentralisation matters for:

Page 63: Securing the Web without site-specific passwords

decentralisation matters for:

● choice● security● innovation

Page 64: Securing the Web without site-specific passwords

decentralisation matters for:

● choice● security● innovation

Page 65: Securing the Web without site-specific passwords

decentralisation matters for:

● choice● security● innovation

Page 66: Securing the Web without site-specific passwords

SMS with PIN codes

Page 67: Securing the Web without site-specific passwords

SMS with PIN codes

Jabber / XMPP

Page 68: Securing the Web without site-specific passwords

SMS with PIN codes

Jabber / XMPP

Yubikeys

Page 69: Securing the Web without site-specific passwords

SMS with PIN codes

Jabber / XMPP

Yubikeys

LDAP accounts

Page 70: Securing the Web without site-specific passwords

SMS with PIN codes

Jabber / XMPP

Yubikeys

LDAP accounts

Client certificates

Page 71: Securing the Web without site-specific passwords

SMS with PIN codes

Jabber / XMPP

Yubikeys

LDAP accounts

Client certificates

Password-wrapped secret key

{ "public-key": { "algorithm": "RS", "n":"685484565272...", "e":"65537" }, "encrypted-private-key": { "iv": "tmg7gztUQT...", "salt": "JMtGwlF5UWY", "ct": "8DdOjD1IA1..." }, "authentication": "...", "provisioning": "..."}

Page 72: Securing the Web without site-specific passwords

decentralisation enablesinnovation

Page 73: Securing the Web without site-specific passwords

decentralisation is the answer, but it's not

a product adoption strategy

Page 74: Securing the Web without site-specific passwords

we can't wait for all domainsto adopt Persona

Page 75: Securing the Web without site-specific passwords

we can't wait for all domainsto adopt Persona

solution: a temporarycentralised fallback

Page 76: Securing the Web without site-specific passwords

demo #2:

http://sloblog.io/

[email protected]

Page 77: Securing the Web without site-specific passwords

Persona already workswith all email domains

Page 78: Securing the Web without site-specific passwords

identity bridging

Page 79: Securing the Web without site-specific passwords

demo #3:

http://www.reasonwell.com/

[email protected]

Page 80: Securing the Web without site-specific passwords
Page 81: Securing the Web without site-specific passwords
Page 82: Securing the Web without site-specific passwords
Page 83: Securing the Web without site-specific passwords

Persona supportsall modern browsers

>= 8

Page 84: Securing the Web without site-specific passwords

Persona is decentralised,simple and cross-browser

Page 85: Securing the Web without site-specific passwords

it's simple for users, but is it also

simple for developers?

Page 86: Securing the Web without site-specific passwords
Page 87: Securing the Web without site-specific passwords

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

Page 88: Securing the Web without site-specific passwords

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

Page 89: Securing the Web without site-specific passwords

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

Page 90: Securing the Web without site-specific passwords

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

Page 91: Securing the Web without site-specific passwords

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

Page 92: Securing the Web without site-specific passwords

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

Page 93: Securing the Web without site-specific passwords
Page 94: Securing the Web without site-specific passwords

navigator.id.request()

Page 95: Securing the Web without site-specific passwords
Page 96: Securing the Web without site-specific passwords
Page 97: Securing the Web without site-specific passwords
Page 98: Securing the Web without site-specific passwords

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

Page 99: Securing the Web without site-specific passwords

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

Page 100: Securing the Web without site-specific passwords

$ curl -d "assertion=<ASSERTION>& audience=http://123done.org" https://verifier.login.persona.org/verify

Page 101: Securing the Web without site-specific passwords

$ curl -d "assertion=<ASSERTION>& audience=http://123done.org" https://verifier.login.persona.org/verify

Page 102: Securing the Web without site-specific passwords

{ status: “okay”,

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

expires: 1344849682560,

email: “[email protected]”,

issuer: “login.persona.org”}

Page 103: Securing the Web without site-specific passwords

{ status: “failed”,

reason: “assertion has expired”}

Page 104: Securing the Web without site-specific passwords
Page 105: Securing the Web without site-specific passwords
Page 106: Securing the Web without site-specific passwords
Page 107: Securing the Web without site-specific passwords

navigator.id.logout()

Page 108: Securing the Web without site-specific passwords

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

Page 109: Securing the Web without site-specific passwords
Page 110: Securing the Web without site-specific passwords

1. load javascript library

Page 111: Securing the Web without site-specific passwords

1. load javascript library

2. setup login & logout callbacks

Page 112: Securing the Web without site-specific passwords

1. load javascript library

2. setup login & logout callbacks

3. add login and logout buttons

Page 113: Securing the Web without site-specific passwords

1. load javascript library

2. setup login & logout callbacks

3. add login and logout buttons

4. verify proof of ownership

Page 114: Securing the Web without site-specific passwords

you can add support forPersona in four easy steps

Page 115: Securing the Web without site-specific passwords

one simple request

Page 116: Securing the Web without site-specific passwords
Page 117: Securing the Web without site-specific passwords

building a new site:default to Persona

Page 118: Securing the Web without site-specific passwords

working on an existing site:add support for Persona

Page 119: Securing the Web without site-specific passwords

we needyour help

to eliminatesite-specificpasswords

Page 120: Securing the Web without site-specific passwords

To learn more about Persona:

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

https://developer.mozilla.org/docs/Persona/Why_Personahttps://developer.mozilla.org/docs/Persona/Quick_Setup

https://github.com/mozilla/browserid-cookbookhttps://developer.mozilla.org/docs/Persona/Libraries_and_plugins

http://123done.org/https://wiki.mozilla.org/Identity#Get_Involved

@fmarier http://fmarier.org

Page 121: Securing the Web without site-specific passwords

identity provider API

https://eyedee.me/.well-known/browserid:

{ "public-key": { "algorithm":"RS", "n":"8606...", "e":"65537" }, "authentication": "/browserid/sign_in.html", "provisioning": "/browserid/provision.html"}

Page 122: Securing the Web without site-specific passwords

https://eyedee.me/.well-known/browserid:

{ "public-key": { "algorithm":"RS", "n":"8606...", "e":"65537" }, "authentication": "/browserid/sign_in.html", "provisioning": "/browserid/provision.html"}

identity provider API

Page 123: Securing the Web without site-specific passwords

https://eyedee.me/.well-known/browserid:

{ "public-key": { "algorithm":"RS", "n":"8606...", "e":"65537" }, "authentication": "/browserid/sign_in.html", "provisioning": "/browserid/provision.html"}

identity provider API

Page 124: Securing the Web without site-specific passwords

https://eyedee.me/.well-known/browserid:

{ "public-key": { "algorithm":"RS", "n":"8606...", "e":"65537" }, "authentication": "/browserid/sign_in.html", "provisioning": "/browserid/provision.html"}

identity provider API

Page 125: Securing the Web without site-specific passwords

https://eyedee.me/.well-known/browserid:

{ "public-key": { "algorithm":"RS", "n":"8606...", "e":"65537" }, "authentication": "/browserid/sign_in.html", "provisioning": "/browserid/provision.html"}

identity provider API

Page 126: Securing the Web without site-specific passwords

identity provider API

1. check for your /.well-known/browserid

2. try the provisioning endpoint

3. show the authentication page

4. call the provisioning endpoint again

Page 127: Securing the Web without site-specific passwords

identity provider API

1. check for your /.well-known/browserid

2. try the provisioning endpoint

3. show the authentication page

4. call the provisioning endpoint again

Page 128: Securing the Web without site-specific passwords

identity provider API

1. check for your /.well-known/browserid

2. try the provisioning endpoint

3. show the authentication page

4. call the provisioning endpoint again

Page 129: Securing the Web without site-specific passwords

identity provider API

1. check for your /.well-known/browserid

2. try the provisioning endpoint

3. show the authentication page

4. call the provisioning endpoint again

Page 130: Securing the Web without site-specific passwords

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

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

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

Cookie on tray: https://secure.flickr.com/photos/jamisonjudd/4810986199/

Uncle Sam: https://secure.flickr.com/photos/donkeyhotey/5666065982/

Australian passport: https://secure.flickr.com/photos/digallagher/5453987637/

Stop sign: https://secure.flickr.com/photos/artbystevejohnson/6673406227/

Photo credits: