persona: in your browsers, killing your passwords

122
François Marier – @fmarier Persona: in your browsers, killing your passwords

Upload: francois-marier

Post on 08-May-2015

552 views

Category:

Technology


0 download

DESCRIPTION

Introduction to Persona, a new cross-browser login system for the web that's built entirely in Javascript. Powered by node.js on the backend, it pushes most of the crypto to the browser in order to create a secure and privacy-sensitive experience.

TRANSCRIPT

Page 1: Persona: in your browsers, killing your passwords

François Marier – @fmarier

Persona:in your browsers,killing your passwords

Page 2: Persona: in your browsers, killing your passwords

Username:francois

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

X

Sign in

Page 3: Persona: in your browsers, killing your passwords

security

Page 4: Persona: in your browsers, killing your passwords
Page 5: Persona: in your browsers, killing your passwords
Page 6: Persona: in your browsers, killing your passwords
Page 7: Persona: in your browsers, killing your passwords
Page 8: Persona: in your browsers, killing your passwords
Page 9: Persona: in your browsers, killing your passwords
Page 10: Persona: in your browsers, killing your passwords

bcrypt

Page 11: Persona: in your browsers, killing your passwords

bcrypt

per-user salt

Page 12: Persona: in your browsers, killing your passwords

bcrypt

per-user salt

site secret

Page 13: Persona: in your browsers, killing your passwords

bcrypt

per-user salt

site secret

password & lockout policies

Page 14: Persona: in your browsers, killing your passwords

bcrypt

per-user salt

site secret

password & lockout policies

secure recovery

Page 15: Persona: in your browsers, killing your passwords

bcrypt

per-user salt

site secret

password & lockout policies

secure recovery

20122012

passwordpassword

guidelines

guidelines

Page 16: Persona: in your browsers, killing your passwords
Page 17: Persona: in your browsers, killing your passwords

conversionrate

Page 18: Persona: in your browsers, killing your passwords

# hits

signup

Page 19: Persona: in your browsers, killing your passwords

# hits

signup signup_complete

Page 20: Persona: in your browsers, killing your passwords

# hits

signup signup_complete

l o s t cust-omers

Page 21: Persona: in your browsers, killing your passwords

existing solutions

Page 22: Persona: in your browsers, killing your passwords

client certificates

Page 23: Persona: in your browsers, killing your passwords

centralized authorities

Page 24: Persona: in your browsers, killing your passwords
Page 25: Persona: in your browsers, killing your passwords

so...

storing passwords is hard

Page 26: Persona: in your browsers, killing your passwords

so...

storing passwords is hard

no suitable alternatives

Page 27: Persona: in your browsers, killing your passwords
Page 28: Persona: in your browsers, killing your passwords

decentralized

Page 29: Persona: in your browsers, killing your passwords

privacy-sensitivedecentralized

Page 30: Persona: in your browsers, killing your passwords

privacy-sensitive

simple

decentralized

Page 31: Persona: in your browsers, killing your passwords

privacy-sensitive

simpleopen source

decentralized

Page 32: Persona: in your browsers, killing your passwords

in your browser

Page 33: Persona: in your browsers, killing your passwords

how does it work?

Page 35: Persona: in your browsers, killing your passwords

getting a proof of email ownership

Page 36: Persona: in your browsers, killing your passwords

authenticate?

Page 37: Persona: in your browsers, killing your passwords

authenticate?

public key

Page 38: Persona: in your browsers, killing your passwords

authenticate?

public key

signed public key

Page 39: Persona: in your browsers, killing your passwords

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

Page 40: Persona: in your browsers, killing your passwords
Page 41: Persona: in your browsers, killing your passwords
Page 42: Persona: in your browsers, killing your passwords
Page 43: Persona: in your browsers, killing your passwords
Page 44: Persona: in your browsers, killing your passwords
Page 45: Persona: in your browsers, killing your passwords
Page 46: Persona: in your browsers, killing your passwords
Page 47: Persona: in your browsers, killing your passwords

logging into a 3rd party site

Page 48: Persona: in your browsers, killing your passwords

Valid for: 2 minutes

wikipedia.org

assertion

Page 49: Persona: in your browsers, killing your passwords

Valid for: 2 minutes

wikipedia.org

check audience

assertion

Page 50: Persona: in your browsers, killing your passwords

Valid for: 2 minutes

wikipedia.org

check audiencecheck expiry

assertion

Page 51: Persona: in your browsers, killing your passwords

Valid for: 2 minutes

wikipedia.org

check audiencecheck expirycheck signature

assertion

Page 52: Persona: in your browsers, killing your passwords

assertion

Valid for: 2 minutes

wikipedia.org

public key

Page 53: Persona: in your browsers, killing your passwords

assertion

Valid for: 2 minutes

wikipedia.org

Page 54: Persona: in your browsers, killing your passwords

assertion

session cookie

Page 55: Persona: in your browsers, killing your passwords

achievingthat vision

Page 56: Persona: in your browsers, killing your passwords
Page 57: Persona: in your browsers, killing your passwords

email providers

browser vendors

Page 58: Persona: in your browsers, killing your passwords

email providers

Page 61: Persona: in your browsers, killing your passwords

fallback identity provider:

login.persona.org

Page 62: Persona: in your browsers, killing your passwords
Page 63: Persona: in your browsers, killing your passwords
Page 64: Persona: in your browsers, killing your passwords
Page 65: Persona: in your browsers, killing your passwords

persona.org account

Page 66: Persona: in your browsers, killing your passwords

client-sessionsjwcryto

computer-cluster nodemailer

connect & express uglify

bcrypt ejs underscore

convict winston vows

Page 67: Persona: in your browsers, killing your passwords

“A Node.JS Holiday Season”https://hacks.mozilla.org/

Page 68: Persona: in your browsers, killing your passwords

proxy identity provider:

Page 69: Persona: in your browsers, killing your passwords

support for all email providers

Page 70: Persona: in your browsers, killing your passwords

browser vendors

Page 71: Persona: in your browsers, killing your passwords

navigator.id.*

Page 72: Persona: in your browsers, killing your passwords
Page 73: Persona: in your browsers, killing your passwords
Page 74: Persona: in your browsers, killing your passwords
Page 75: Persona: in your browsers, killing your passwords

js

Page 76: Persona: in your browsers, killing your passwords

support for allmodern browsers

>= 8

Page 77: Persona: in your browsers, killing your passwords
Page 78: Persona: in your browsers, killing your passwords

LIFD

Page 79: Persona: in your browsers, killing your passwords

LocallyIsolatedFeatureDomain

Page 80: Persona: in your browsers, killing your passwords

wanted: trusted coderunning in the browser

Page 81: Persona: in your browsers, killing your passwords

browserid.org

login.persona.org

Page 82: Persona: in your browsers, killing your passwords

browserid.org

login.persona.org

Page 83: Persona: in your browsers, killing your passwords

localStorage

localStorage.setItem("key", serializedKey);

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

Page 84: Persona: in your browsers, killing your passwords

storage tied tologin.persona.org

Page 85: Persona: in your browsers, killing your passwords

window.postMessage()

Page 86: Persona: in your browsers, killing your passwords
Page 87: Persona: in your browsers, killing your passwords

https://login.persona.org

localStorage

jschannel

Page 88: Persona: in your browsers, killing your passwords

jschannel

questions?

https://login.persona.org

localStorage

Page 89: Persona: in your browsers, killing your passwords

live demo

Page 90: Persona: in your browsers, killing your passwords

using it on your site

Page 91: Persona: in your browsers, killing your passwords
Page 92: Persona: in your browsers, killing your passwords

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

Page 93: Persona: in your browsers, killing your passwords

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

Page 94: Persona: in your browsers, killing your passwords

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

Page 95: Persona: in your browsers, killing your passwords

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

Page 96: Persona: in your browsers, killing your passwords

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

Page 97: Persona: in your browsers, killing your passwords

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

Page 98: Persona: in your browsers, killing your passwords
Page 99: Persona: in your browsers, killing your passwords

navigator.id.request()

Page 100: Persona: in your browsers, killing your passwords
Page 101: Persona: in your browsers, killing your passwords
Page 102: Persona: in your browsers, killing your passwords
Page 103: Persona: in your browsers, killing your passwords

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

Page 104: Persona: in your browsers, killing your passwords

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

Page 105: Persona: in your browsers, killing your passwords

var request = https.request({ host: 'verifier.login.persona.org', path: '/verify', method: 'POST', headers: { 'content-type': 'application/x-www-form-urlencoded', 'content-length': body.length }}, onVerifyResponse);

Page 106: Persona: in your browsers, killing your passwords

var request = https.request({ host: 'verifier.login.persona.org', path: '/verify', method: 'POST', headers: { 'content-type': 'application/x-www-form-urlencoded', 'content-length': body.length }}, onVerifyResponse);

var body = qs.stringify({ assertion: assertion, audience: 'http://123done.org'});request.write(body);

request.end();

Page 107: Persona: in your browsers, killing your passwords

var request = https.request({ host: 'verifier.login.persona.org', path: '/verify', method: 'POST', headers: { 'content-type': 'application/x-www-form-urlencoded', 'content-length': body.length }}, onVerifyResponse);

var body = qs.stringify({ assertion: assertion, audience: 'http://123done.org'});request.write(body);

request.end();

Page 108: Persona: in your browsers, killing your passwords

{ status: “okay”,

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

expires: 1344849682560,

email: “[email protected]”,

issuer: “login.persona.org”}

Page 109: Persona: in your browsers, killing your passwords

{ status: “failed”,

reason: “assertion has expired”}

Page 110: Persona: in your browsers, killing your passwords
Page 111: Persona: in your browsers, killing your passwords
Page 112: Persona: in your browsers, killing your passwords
Page 113: Persona: in your browsers, killing your passwords

navigator.id.logout()

Page 114: Persona: in your browsers, killing your passwords

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

Page 115: Persona: in your browsers, killing your passwords
Page 116: Persona: in your browsers, killing your passwords

1. load javascript library

Page 117: Persona: in your browsers, killing your passwords

1. load javascript library

2. setup login & logout callbacks

Page 118: Persona: in your browsers, killing your passwords

1. load javascript library

2. setup login & logout callbacks

3. add login and logout buttons

Page 119: Persona: in your browsers, killing your passwords

1. load javascript library

2. setup login & logout callbacks

3. add login and logout buttons

4. verify proof of ownership

Page 121: Persona: in your browsers, killing your 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://hacks.mozilla.org/category/a-node-js-holiday-season/

@fmarier http://fmarier.org

Page 122: Persona: in your browsers, killing your passwords

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

Elephant in room: https://secure.flickr.com/photos/bitboy/246805948/

Beach flower: https://secure.flickr.com/photos/vwingate/4696429215/

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

Photo credits: