killing passwords with javascript

123
François Marier – @fmarier Killing Passwords with JavaScript

Upload: francois-marier

Post on 08-May-2015

418 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Killing Passwords with JavaScript

François Marier – @fmarier

Killing Passwordswith JavaScript

Page 2: Killing Passwords with JavaScript
Page 3: Killing Passwords with JavaScript
Page 4: Killing Passwords with JavaScript
Page 5: Killing Passwords with JavaScript
Page 6: Killing Passwords with JavaScript
Page 7: Killing Passwords with JavaScript
Page 8: Killing Passwords with JavaScript
Page 9: Killing Passwords with JavaScript
Page 10: Killing Passwords with JavaScript
Page 11: Killing Passwords with JavaScript
Page 12: Killing Passwords with JavaScript

problem #1:

passwords are hard to secure

Page 13: Killing Passwords with JavaScript

bcrypt / scrypt / pbkdf2

per-user salt

site secret

password & lockout policies

secure recovery

Page 14: Killing Passwords with JavaScript

bcrypt / scrypt / pbkdf2

per-user salt

site secret

password & lockout policies

secure recovery

Page 15: Killing Passwords with JavaScript

bcrypt / scrypt / pbkdf2

per-user salt

site secret

password & lockout policies

secure recovery

Page 16: Killing Passwords with JavaScript

bcrypt / scrypt / pbkdf2

per-user salt

site secret

password & lockout policies

secure recovery

Page 17: Killing Passwords with JavaScript

bcrypt / scrypt / pbkdf2

per-user salt

site secret

password & lockout policies

secure recovery

Page 18: Killing Passwords with JavaScript

bcrypt / scrypt / pbkdf2

per-user salt

site secret

password & lockout policies

secure recovery

20132013

passwordpassword

guidelines

guidelines

Page 19: Killing Passwords with JavaScript

passwords are hard to secure

they are a liability

Page 20: Killing Passwords with JavaScript

ALTER TABLE userDROP COLUMN password;

Page 21: Killing Passwords with JavaScript

problem #2:

passwords are hard to remember

Page 22: Killing Passwords with JavaScript
Page 23: Killing Passwords with JavaScript
Page 24: Killing Passwords with JavaScript

pick an easy password

Page 25: Killing Passwords with JavaScript

pick an easy password

use it everywhere

Page 26: Killing Passwords with JavaScript

passwords are hard to remember

they need to be reset

Page 27: Killing Passwords with JavaScript
Page 28: Killing Passwords with JavaScript

controlemail

account

controlall

accounts=

Page 29: Killing Passwords with JavaScript
Page 30: Killing Passwords with JavaScript

“People wanta little dating

before marriage.”Eric Vishria – Rockmelt

Page 31: Killing Passwords with JavaScript
Page 32: Killing Passwords with JavaScript

decentralised

Page 33: Killing Passwords with JavaScript

myid.com/u/francois

Page 34: Killing Passwords with JavaScript
Page 35: Killing Passwords with JavaScript
Page 36: Killing Passwords with JavaScript

privacy®

Page 37: Killing Passwords with JavaScript

existing login systemsare not good enough

Page 38: Killing Passwords with JavaScript

ideal web-wide identity system

Page 39: Killing Passwords with JavaScript

● decentralised● simple● cross-browser

ideal web-wide identity system

Page 40: Killing Passwords with JavaScript

● decentralised● simple● cross-browser

ideal web-wide identity system

Page 41: Killing Passwords with JavaScript

● decentralised● simple

cross-browser

ideal web-wide identity system

Page 42: Killing Passwords with JavaScript

what if it were a standardpart of the web browser?

Page 43: Killing Passwords with JavaScript
Page 44: Killing Passwords with JavaScript

how does it work?

Page 47: Killing Passwords with JavaScript

demo #1:

http://www.voo.st/http://www.debuggex.com

[email protected]

Page 48: Killing Passwords with JavaScript

Persona is already adecentralised system

Page 49: Killing Passwords with JavaScript

SMS with PIN codes

Page 50: Killing Passwords with JavaScript

SMS with PIN codes

Jabber / XMPP

Page 51: Killing Passwords with JavaScript

SMS with PIN codes

Jabber / XMPP

Yubikeys

Page 52: Killing Passwords with JavaScript

SMS with PIN codes

Jabber / XMPP

Yubikeys

LDAP accounts

Page 53: Killing Passwords with JavaScript

SMS with PIN codes

Jabber / XMPP

Yubikeys

LDAP accounts

Client certificates

Page 54: Killing Passwords with JavaScript

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 55: Killing Passwords with JavaScript

decentralisation is the answer, but it's not

a product adoption strategy

Page 56: Killing Passwords with JavaScript

we can't wait for all browsersto adopt Persona

Page 57: Killing Passwords with JavaScript

navigator.id.*

Page 58: Killing Passwords with JavaScript
Page 59: Killing Passwords with JavaScript
Page 60: Killing Passwords with JavaScript
Page 61: Killing Passwords with JavaScript

we can't wait for all browsersto adopt Persona

solution: a temporaryjavascript shim

Page 62: Killing Passwords with JavaScript

LIFD

Page 63: Killing Passwords with JavaScript

LocallyIsolatedFeatureDomain

Page 64: Killing Passwords with JavaScript

goal: trusted coderunning in the browser

Page 65: Killing Passwords with JavaScript

login.persona.org

Page 66: Killing Passwords with JavaScript

localStorage

localStorage.setItem("key", serializedKey);

var serializedKey = localStorage.getItem("key");

Page 67: Killing Passwords with JavaScript

storage tied tologin.persona.org

Page 68: Killing Passwords with JavaScript

window.postMessage()

Page 69: Killing Passwords with JavaScript

https://login.persona.org

localStorage

postMessage

Page 70: Killing Passwords with JavaScript

Persona supportsall modern browsers

>= 8

Page 71: Killing Passwords with JavaScript

we can't wait for all domainsto adopt Persona

Page 72: Killing Passwords with JavaScript

we can't wait for all domainsto adopt Persona

solution: a temporarycentralised fallback

Page 73: Killing Passwords with JavaScript

demo #2:

http://sloblog.io/

[email protected]

Page 74: Killing Passwords with JavaScript

Persona already workswith all email domains

Page 75: Killing Passwords with JavaScript

identity bridging

Page 76: Killing Passwords with JavaScript

demo #3:

http://www.reasonwell.com/

[email protected]

Page 77: Killing Passwords with JavaScript
Page 78: Killing Passwords with JavaScript
Page 79: Killing Passwords with JavaScript

Persona works everywhere

Page 80: Killing Passwords with JavaScript

lessons learned

Page 81: Killing Passwords with JavaScript

#1 user testingis critical

Page 82: Killing Passwords with JavaScript
Page 83: Killing Passwords with JavaScript
Page 84: Killing Passwords with JavaScript
Page 85: Killing Passwords with JavaScript
Page 86: Killing Passwords with JavaScript
Page 87: Killing Passwords with JavaScript

#2 nobody wantsto be first

Page 88: Killing Passwords with JavaScript

“how many usersdoes Persona have?”

Page 89: Killing Passwords with JavaScript
Page 90: Killing Passwords with JavaScript

700,000,000

Page 91: Killing Passwords with JavaScript

#3 if a problem hasbeen around for awhile, it's probablya hard one

Page 92: Killing Passwords with JavaScript

see if you can solvepart of the problem

Page 93: Killing Passwords with JavaScript

$ ssh [email protected]@myserver.com's password:

Page 94: Killing Passwords with JavaScript
Page 95: Killing Passwords with JavaScript

Persona is a simplesolution for

signing into the web

Page 96: Killing Passwords with JavaScript

how simple is it

for developers?

Page 97: Killing Passwords with JavaScript

how simple is it

for developers?

4 easy stepshttps://developer.mozilla.org/docs/Persona/Quick_Setup

Page 98: Killing Passwords with JavaScript

1. load javascript library

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

Page 99: Killing Passwords with JavaScript

1. load javascript library

2. setup login & logout callbacks

navigator.id.watch(...);

Page 100: Killing Passwords with JavaScript

1. load javascript library

2. setup login & logout callbacks

navigator.id.watch(...);

Page 101: Killing Passwords with JavaScript

1. load javascript library

2. setup login & logout callbacks

3. add login and logout buttons

navigator.id.request();navigator.id.logout();

Page 102: Killing Passwords with JavaScript

1. load javascript library

2. setup login & logout callbacks

3. add login and logout buttons

4. verify proof of ownership

Page 103: Killing Passwords with JavaScript

1. load javascript library

2. setup login & logout callbacks

3. add login and logout buttons

4. verify proof of ownership

no API keyneeded

Page 104: Killing Passwords with JavaScript

one small request

Page 105: Killing Passwords with JavaScript
Page 106: Killing Passwords with JavaScript

building a new site:default to Persona

Page 107: Killing Passwords with JavaScript

working on an existing site:add support for Persona

Page 108: Killing Passwords with JavaScript

before

Page 109: Killing Passwords with JavaScript

after

Page 110: Killing Passwords with JavaScript

after

navigator.id.request()

Page 111: Killing Passwords with JavaScript
Page 112: Killing Passwords with JavaScript

ALTER TABLE userDROP COLUMN password;

Page 113: Killing Passwords with JavaScript

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

https://wiki.mozilla.org/Identity#Get_Involved

@fmarier http://fmarier.org

Page 114: Killing Passwords with JavaScript

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 115: Killing Passwords with JavaScript

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 116: Killing Passwords with JavaScript

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 117: Killing Passwords with JavaScript

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 118: Killing Passwords with JavaScript

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 119: Killing Passwords with JavaScript

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 120: Killing Passwords with JavaScript

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 121: Killing Passwords with JavaScript

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 122: Killing Passwords with JavaScript

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 123: Killing Passwords with JavaScript

© 2013 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/

Restaurant dinner: https://secure.flickr.com/photos/yourdon/3977084094/

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

Yubikey: https://secure.flickr.com/photos/knk/3379897261/

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

Photo credits: