de la cryptographie dans le navigateur avec webcrypto api

18
WEBCRYPTO API De la cryptographie dans le navigateur @jcsirot fr.linkedin.com/in/jcsirot/ Jean-Christophe Sirot Paris JUG - 13/01/2015

Upload: jean-christophe-sirot

Post on 15-Jul-2015

450 views

Category:

Software


1 download

TRANSCRIPT

Page 1: De la cryptographie dans le navigateur avec WebCrypto API

WEBCRYPTO APIDe la cryptographie dans le navigateur

@jcsirot

fr.linkedin.com/in/jcsirot/

Jean-Christophe Sirot

Paris JUG - 13/01/2015

Page 2: De la cryptographie dans le navigateur avec WebCrypto API

POURQUOI UNE API CRYPTO ?

Page 3: De la cryptographie dans le navigateur avec WebCrypto API

BIBLIOTHÈQUES

• sjcl (https://crypto.stanford.edu/sjcl/)

• crypto-js (https://code.google.com/p/crypto-js/)

• forge (https://github.com/digitalbazaar/forge)

• digest.js (https://github.com/jcsirot/digest.js)

Page 4: De la cryptographie dans le navigateur avec WebCrypto API

PROBLÈMES...

Page 5: De la cryptographie dans le navigateur avec WebCrypto API

PROBLÈMES...

• Pas d’entier de 64 bits natifs, pas de big integer, pas de tableaux performants

Page 6: De la cryptographie dans le navigateur avec WebCrypto API

PROBLÈMES...

• Pas d’entier de 64 bits natifs, pas de big integer, pas de tableaux performants

• Impossibilité des «calculs longs» (thread unique)

Page 7: De la cryptographie dans le navigateur avec WebCrypto API

PROBLÈMES...

• Pas d’entier de 64 bits natifs, pas de big integer, pas de tableaux performants

• Impossibilité des «calculs longs» (thread unique)

• Pas de générateur de nombres aléatoires de qualité (PRNG)

Page 8: De la cryptographie dans le navigateur avec WebCrypto API

SOLUTIONS ?

• Applet Java

• Source d’aléa : https://random.org

Page 9: De la cryptographie dans le navigateur avec WebCrypto API

SOLUTIONS ?

• Applet Java

• Source d’aléa : https://random.org

WebCrypto API : http://www.w3.org/TR/WebCryptoAPI/

Page 10: De la cryptographie dans le navigateur avec WebCrypto API

var array = new Uint8Array(16);window.crypto.getRandomValues(array);

GÉNÉRATEUR ALÉATOIRE

• Représentation des données : ArrayBufferView

• Fonction synchrone, non bloquante

• Utilise une source d’aléa «sûre» du système (par exemple /dev/urandom)

Page 11: De la cryptographie dans le navigateur avec WebCrypto API

WINDOW.CRYPTO.SUBTLE

• Interface avec les primitives cryptographiques : encrypt, decrypt, sign, digest, generateKey...

•Données sont passées sous forme de ArrayBufferView

• Retourne une Promise javascript

Page 12: De la cryptographie dans le navigateur avec WebCrypto API

var data = toArrayBufferView("Hello World!");var algorithm = { name: "SHA-256"};window.crypto.subtle.digest(algorithm, data) .then(function(result) { console.log(result); }) .catch(function(error) { console.error(error); });

PROMISE

Page 13: De la cryptographie dans le navigateur avec WebCrypto API

DEMO

Page 14: De la cryptographie dans le navigateur avec WebCrypto API

CAN I USE ?

http://caniuse.com/#feat=cryptography

Page 15: De la cryptographie dans le navigateur avec WebCrypto API

LIMITATIONS

• Faire confiance aux applications web

• Pas encore disponible partout, tous les algorithmes ne sont pas disponibles

• version 1 de l’API n’est pas parfaite (pas d’API update/finish, pas d’API de streaming, pas d’API pour utiliser les clés déjà présentes sur le système...)

Page 16: De la cryptographie dans le navigateur avec WebCrypto API

QUESTIONS

Page 17: De la cryptographie dans le navigateur avec WebCrypto API

POUR ALLER PLUS LOIN

https://www.schneier.com/book-applied.html

Applied Cryptography

Handbook of Applied Cryptography

http://cacr.uwaterloo.ca/hac/