Protecting the Future of Mobile Payments

25
Protecting the Future of Mobile Payments Jonathan LeBlanc Twitter: @jcleblanc Book: http://bit.ly/iddatasecurity

Transcript of Protecting the Future of Mobile Payments

Page 1: Protecting the Future of Mobile Payments

Protecting the Future of Mobile Payments !

Jonathan LeBlanc !Twitter: @jcleblanc !Book: http://bit.ly/iddatasecurity!

Page 2: Protecting the Future of Mobile Payments

Trust Zones & Account Security !

Page 3: Protecting the Future of Mobile Payments

Building Shortcuts !

Page 4: Protecting the Future of Mobile Payments

Browser Fingerprinting !https://panopticlick.eff.org/ !

Page 5: Protecting the Future of Mobile Payments
Page 6: Protecting the Future of Mobile Payments

Using Location Data !

Page 7: Protecting the Future of Mobile Payments

Phone Identification? !

Page 8: Protecting the Future of Mobile Payments

Device Fingerprinting !

Page 9: Protecting the Future of Mobile Payments

//------------- !//Build Info: http://developer.android.com/reference/android/os/Build.html !//------------- !!System.getProperty("os.version"); //os version !android.os.Build.DEVICE //device !android.os.Build.MODEL //model !android.os.Build.VERSION.SDK_INT //sdk version of the framework !android.os.Build.SERIAL //hardware serial number, if available !

Retrieving Build Information for Android Device !

Page 10: Protecting the Future of Mobile Payments

Getting Paired Devices? !

Page 11: Protecting the Future of Mobile Payments

//fetch all bonded bluetooth devices !Set<BluetoothDevice> pairedDevices = mBluetoothAdapter.getBondedDevices(); !!//if devices found, fetch name and MAC address for each !if (pairedDevices.size() > 0){ ! for (BluetoothDevice device : pairedDevices){ ! //Device Name - device.getName() ! //Device MAC address - device.getAddress() ! } !} !

Get all Bluetooth Paired Devices: Android!

Page 12: Protecting the Future of Mobile Payments

Hardware Prototyping !

Page 13: Protecting the Future of Mobile Payments
Page 14: Protecting the Future of Mobile Payments

Asynchronous Cryptography: Securing an Insecure Channel !

Page 15: Protecting the Future of Mobile Payments
Page 16: Protecting the Future of Mobile Payments

Multi-User Environment !

Page 17: Protecting the Future of Mobile Payments

//create private key in private.key!openssl genrsa -out private.key 2048 !!//create public key in public.pem!openssl rsa -in private.key -outform PEM -pubout -out public.pem!

Generating Public / Private Keys!

Page 18: Protecting the Future of Mobile Payments

var fs = require('fs'); !var path = require('path'); !var ursa = require('ursa'); !var mkdirp = require('mkdirp'); !!//make direction and generate private / public keys for sender / receiver !var rootpath = './keys'; !makekeys(rootpath, 'sender'); !makekeys(rootpath, 'receiver'); !

Package Instantiation and Directory Creation!

Page 19: Protecting the Future of Mobile Payments

function makekeys(rootpath, subpath){ ! try { ! mkdirp.sync(path.join(rootpath, subpath)); ! } catch (err) { ! console.error(err); ! } ! ! var key = ursa.generatePrivateKey(); ! var privatepem = key.toPrivatePem(); ! var publicpem = key.toPublicPem() ! ! try { ! fs.writeFileSync(path.join(rootpath, subpath, 'private.pem'), privatepem, 'ascii'); ! fs.writeFileSync(path.join(rootpath, subpath, 'public.pem'), publicpem, 'ascii'); ! } catch (err) { ! console.error(err); ! } !} !

Key and Directory Creation!

Page 20: Protecting the Future of Mobile Payments

//generate required keys!var senderprivkey = ursa.createPrivateKey( ! fs.readFileSync(path.join(rootpath, 'sender', 'private.pem'))); !var recipientpubkey = ursa.createPublicKey( ! fs.readFileSync(path.join(rootpath, 'receiver', 'public.pem')));!!//prepare JSON message to send !var msg = { 'user':'Nikola Tesla', ! 'address':'W 40th St, New York, NY 10018', ! 'state':'active' }; ! !msg = JSON.stringify(msg); !!//encrypt with recipient public key, and sign with sender private key !var encrypted = recipientpubkey.encrypt(msg, 'utf8', 'base64'); !var signed = senderprivkey.hashAndSign('sha256', encrypted, 'utf8', 'base64'); !

Preparing Message, Encrypting, and Signing!

Page 21: Protecting the Future of Mobile Payments

//generate required keys!var senderpubkey = ursa.createPublicKey( ! fs.readFileSync(path.join(rootpath, 'sender', 'public.pem'))); !var recipientprivkey = ursa.createPrivateKey( ! fs.readFileSync(path.join(rootpath, 'receiver', 'private.pem'))); !!//verify message with sender private key !bufferedmsg = new Buffer(encrypted); !if (!senderpubkey.hashAndVerify('sha256', bufferedmsg, signed, 'base64')){ ! throw new Error("invalid signature"); !} else { ! //decrypt message with recipient private key ! var decryptedmsg = recipientprivkey.decrypt(encrypted, 'base64', 'utf8'); !! //-------- ! //message verified and decrypted ! //-------- !} !!

Decrypting, and Verifying Message!

Page 22: Protecting the Future of Mobile Payments

Card Tokenization !

Page 23: Protecting the Future of Mobile Payments

Credit Card Tokenization!

Credit Card Information !Address Information !

Card Holder Name !

... !

7e29c5c48f44755598dec3549155ad66f1af4671091353be4c4d7694d71dc866  

Page 24: Protecting the Future of Mobile Payments

Mobile Payments Landscape !

Page 25: Protecting the Future of Mobile Payments

Thank You! !!Slides: http://slideshare.net/jcleblanc!

Jonathan LeBlanc !Twitter: @jcleblanc !Book: http://bit.ly/iddatasecurity!