Transcript
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
Page 4: Securing the Web without site-specific passwords
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

problem #1:

passwords are hard to secure

Page 14: Securing the Web without site-specific passwords

bcrypt / scrypt / pbkdf2

per-user salt

site secret

password & lockout policies

secure recovery

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

20132013

passwordpassword

guidelines

guidelines

Page 20: Securing the Web without site-specific passwords

passwords are hard to secure

they are a liability

Page 21: Securing the Web without site-specific passwords

ALTER TABLE userDROP COLUMN password;

Page 22: Securing the Web without site-specific passwords

problem #2:

passwords are hard to remember

Page 23: Securing the Web without site-specific passwords
Page 24: Securing the Web without site-specific passwords
Page 25: Securing the Web without site-specific passwords

pick an easy password

Page 26: Securing the Web without site-specific passwords

pick an easy password

use it everywhere

Page 27: Securing the Web without site-specific passwords

negative externality:

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

Page 28: Securing the Web without site-specific passwords

passwords are hard to remember

they need to be reset

Page 29: Securing the Web without site-specific passwords
Page 30: Securing the Web without site-specific passwords

controlemail

account

controlall

accounts=

Page 31: Securing the Web without site-specific passwords

existing login solutions

Page 32: Securing the Web without site-specific passwords

client certificates

Page 33: Securing the Web without site-specific passwords
Page 34: Securing the Web without site-specific passwords
Page 35: Securing the Web without site-specific passwords

decentralised

Page 36: Securing the Web without site-specific passwords

myid.com/u/francois

Page 37: Securing the Web without site-specific passwords
Page 38: Securing the Web without site-specific passwords
Page 39: Securing the Web without site-specific passwords

privacy®

Page 40: Securing the Web without site-specific passwords

existing login systemsare not good enough

Page 41: Securing the Web without site-specific passwords

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

ideal web-wide identity system

Page 44: Securing the Web without site-specific passwords

● decentralised● simple

cross-browser

ideal web-wide identity system

Page 45: Securing the Web without site-specific passwords

what if it were a standardpart of the web browser?

Page 46: Securing the Web without site-specific passwords
Page 47: Securing the Web without site-specific passwords

how does it work?

Page 50: Securing the Web without site-specific passwords

getting a proof of email ownership

Page 51: Securing the Web without site-specific passwords

authenticate?

Page 52: Securing the Web without site-specific passwords

authenticate?

public key

Page 53: Securing the Web without site-specific passwords

authenticate?

public key

signed public key

Page 54: Securing the Web without site-specific passwords

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

Page 55: Securing the Web without site-specific passwords
Page 56: Securing the Web without site-specific passwords

logging into a 3rd party site

Page 57: Securing the Web without site-specific passwords

Valid for: 2 minutes

wikipedia.org

assertion

Page 58: Securing the Web without site-specific passwords

Valid for: 2 minutes

wikipedia.org

check audience

assertion

Page 59: Securing the Web without site-specific passwords

Valid for: 2 minutes

wikipedia.org

check audiencecheck expiry

assertion

Page 60: Securing the Web without site-specific passwords

Valid for: 2 minutes

wikipedia.org

check audiencecheck expirycheck signature

assertion

Page 61: Securing the Web without site-specific passwords

assertion

Valid for: 2 minutes

wikipedia.org

public key

Page 62: Securing the Web without site-specific passwords

assertion

Valid for: 2 minutes

wikipedia.org

Page 63: Securing the Web without site-specific passwords

assertion

session cookie

Page 64: Securing the Web without site-specific passwords

demo #1:

http://www.voo.st/

[email protected]

Page 65: Securing the Web without site-specific passwords

Persona is already adecentralised system

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 is the answer, but it's not

a product adoption strategy

Page 73: Securing the Web without site-specific passwords

we can't wait for all domainsto adopt Persona

Page 74: Securing the Web without site-specific passwords

we can't wait for all domainsto adopt Persona

solution: a temporarycentralised fallback

Page 75: Securing the Web without site-specific passwords

demo #2:

http://sloblog.io/

[email protected]

Page 76: Securing the Web without site-specific passwords

Persona already workswith all email domains

Page 77: Securing the Web without site-specific passwords

identity bridging

Page 78: Securing the Web without site-specific passwords

demo #3:

http://www.reasonwell.com/

[email protected]

Page 79: Securing the Web without site-specific passwords
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

Persona supportsall modern browsers

>= 8

Page 83: Securing the Web without site-specific passwords

Persona is decentralised,simple and cross-browser

Page 84: Securing the Web without site-specific passwords

it's simple for users, but is it also

simple for developers?

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

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

Page 87: 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 88: 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 89: 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 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) { window.location = '/'; } ); }, onlogout: function () { window.location = '/logout'; }});

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

navigator.id.request()

Page 94: Securing the Web without site-specific passwords
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

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

Page 98: Securing the Web without site-specific passwords

eyJhbGciOiJEUzEyOCJ9.eyJwdWJsaWMta2V5Ijp7ImFsZ29yaXRobSI6IkRTIiwieSI6ImNhZDg2ZDgyNWU0MjBkMGI4Njk5MjM4ZDM5ZTFjYjIyOGMyMTk1NWFiMzcwOTQ1YzExNzBhMzM4NjcyNDM0ZDJmNGYxZDg5ZjFkZjMzNmU1ZjZjZjk2YjhiOTlmMjgyNmFjNTYxZmI1YWMyYTc4ZjNhMzBkNGYxNTVhYjc3ZGExYmY3MWU4ZGMzNjQ0MmU2NjQ3MmE5Mjg0N2I2YjFlNDRkMTJlM2IwMjVjOWZmNTFmNDdhMWE5ZWYyMGZhOTVjMTcxZjBkMTYzNGE4ZTY4YTk5NWU3ZjFjY2FiYTJlOTRjYTI3ODE1ZWVkMTcxYjY1YTJmZGQzNTE1NjY3OTI0ZjUiLCJwIjoiZmY2MDA0ODNkYjZhYmZjNWI0NWVhYjc4NTk0YjM1MzNkNTUwZDlmMWJmMmE5OTJhN2E4ZGFhNmRjMzRmODA0NWFkNGU2ZTBjNDI5ZDMzNGVlZWFhZWZkN2UyM2Q0ODEwYmUwMGU0Y2MxNDkyY2JhMzI1YmE4MWZmMmQ1YTViMzA1YThkMTdlYjNiZjRhMDZhMzQ5ZDM5MmUwMGQzMjk3NDRhNTE3OTM4MDM0NGU4MmExOGM0NzkzMzQzOGY4OTFlMjJhZWVmODEyZDY5YzhmNzVlMzI2Y2I3MGVhMDAwYzNmNzc2ZGZkYmQ2MDQ2MzhjMmVmNzE3ZmMyNmQwMmUxNyIsInEiOiJlMjFlMDRmOTExZDFlZDc5OTEwMDhlY2FhYjNiZjc3NTk4NDMwOWMzIiwiZyI6ImM1MmE0YTBmZjNiN2U2MWZkZjE4NjdjZTg0MTM4MzY5YTYxNTRmNGFmYTkyOTY2ZTNjODI3ZTI1Y2ZhNmNmNTA4YjkwZTVkZTQxOWUxMzM3ZTA3YTJlOWUyYTNjZDVkZWE3MDRkMTc1ZjhlYmY2YWYzOTdkNjllMTEwYjk2YWZiMTdjN2EwMzI1OTMyOWU0ODI5YjBkMDNiYmM3ODk2YjE1YjRhZGU1M2UxMzA4NThjYzM0ZDk2MjY5YWE4OTA0MWY0MDkxMzZjNzI0MmEzODg5NWM5ZDViY2NhZDRmMzg5YWYxZDdhNGJkMTM5OGJkMDcyZGZmYTg5NjIzMzM5N2EifSwicHJpbmNpcGFsIjp7ImVtYWlsIjoiZm9vQG1vY2tteWlkLmNvbSJ9LCJpYXQiOjEzNzY1MzY0NjM1MTgsImV4cCI6MTM3NjU0MDA2MzUxOCwiaXNzIjoibW9ja215aWQuY29tIn0.IeUR0_3ayAZkdNSXjF4aaCwSHnHa4X1lzrjX-qkNcPIbXx1hmQQPwg~eyJhbGciOiJEUzEyOCJ9.eyJleHAiOjEzNzY1MzY3MDc2MzUsImF1ZCI6Imh0dHA6Ly9sb2NhbGhvc3QifQ.NJ8H1qZcWXbXfPJSdgB_mORHQ442ZkY0XYfdQsZZsIjooG7k7qWyVw

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

require_once('Auth/BrowserID.php');

$verifier = new Auth_BrowserID('http://123done.org');$result = $verifier->verifyAssertion($_POST['assertion']);

Page 101: Securing the Web without site-specific passwords

{ status: “okay”,

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

expires: 1344849682560,

email: “[email protected]”,

issuer: “login.persona.org”}

Page 102: Securing the Web without site-specific passwords

require_once('Auth/BrowserID.php');

$verifier = new Auth_BrowserID('http://123done.org');$result = $verifier->verifyAssertion($_POST['assertion']);

if ($result->status === 'okay') { echo "Hi " . $result->email;} else { echo "Error: " . $result->reason;}

Page 103: Securing the Web without site-specific passwords

{ status: “failed”,

reason: “assertion has expired”}

Page 104: Securing the Web without site-specific passwords

require_once('Auth/BrowserID.php');

$verifier = new Auth_BrowserID('http://123done.org');$result = $verifier->verifyAssertion($_POST['assertion']);

if ($result->status === 'okay') { echo "Hi " . $result->email;} else { echo "Error: " . $result->reason;}

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

1. load javascript library

2. setup login & logout callbacks

3. add login and logout buttons

4. verify proof of ownership

no API keyneeded

Page 115: Securing the Web without site-specific passwords

you can add support forPersona in four easy steps

Page 116: Securing the Web without site-specific passwords

one simple request

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

building a new site:default to Persona

Page 119: Securing the Web without site-specific passwords

working on an existing site:add support for Persona

Page 120: Securing the Web without site-specific passwords

before

Page 121: Securing the Web without site-specific passwords

after

Page 122: Securing the Web without site-specific passwords

after

navigator.id.request()

Page 123: Securing the Web without site-specific passwords
Page 124: Securing the Web without site-specific passwords

ALTER TABLE userDROP COLUMN password;

Page 125: 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 126: 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 127: 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 128: 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 129: 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 130: 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 131: 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 132: 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 133: 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 134: 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 135: 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:


Recommended