@jcsirot#WebCryptoAPI
De la cryptographie dans le
navigateur avec WebCrypto API
@jcsirot
Développeur & Responsable Qualité...
@YourTwitterHandle@YourTwitterHandle@jcsirot#WebCryptoAPI
Pourquoi une API Crypto ?
@jcsirot#WebCryptoAPI
Transport Layer Security
@jcsirot#WebCryptoAPI
Transport Layer Security
@jcsirot#WebCryptoAPI
Des bibliothèques...
• sjcl (https://crypto.stanford.edu/sjcl/)
• crypto-js (https://code.google.com...
@jcsirot#WebCryptoAPI
... et des problèmes
@jcsirot#WebCryptoAPI
... et des problèmes
• Pas d’entier de 64 bits natifs, pas de big integer, pas de tableaux
performan...
@jcsirot#WebCryptoAPI
... et des problèmes
• Pas d’entier de 64 bits natifs, pas de big integer, pas de tableaux
performan...
@jcsirot#WebCryptoAPI
... et des problèmes
• Pas d’entier de 64 bits natifs, pas de big integer, pas de tableaux
performan...
@jcsirot#WebCryptoAPI
... et des problèmes
• Pas d’entier de 64 bits natifs, pas de big integer, pas de tableaux
performan...
@jcsirot#WebCryptoAPI
Solutions ?
@jcsirot#WebCryptoAPI
Solutions ?
• Source d’aléa : https://random.org
@jcsirot#WebCryptoAPI
Solutions ?
• Source d’aléa : https://random.org
• Applet Java (intégration Java Javascript)
@jcsirot#WebCryptoAPI
Solutions ?
• Source d’aléa : https://random.org
• Applet Java (intégration Java Javascript)
WebCryp...
@jcsirot#WebCryptoAPI
var array = new Uint8Array(16);
window.crypto.getRandomValues(array);
Générateur aléatoire
• ArrayBu...
@jcsirot#WebCryptoAPI
window.crypto.subtle
• Interface avec les primitives cryptographiques : encrypt,
decrypt, sign, dige...
@jcsirot#WebCryptoAPI
var data = toArrayBufferView("Hello World!");
var algorithm = {
name: "SHA-256"
};
window.crypto.sub...
@YourTwitterHandle@YourTwitterHandle@jcsirot#WebCryptoAPI
Démo
@jcsirot#WebCryptoAPI
Can I use ?
http://caniuse.com/#feat=cryptography
@jcsirot#WebCryptoAPI
Limitations
• Modèle de sécurité : faire confiance aux applications web
• Pas encore disponible parto...
@YourTwitterHandle@YourTwitterHandle@jcsirot#WebCryptoAPI
Qestions & Réponses
@jcsirot#WebCryptoAPI
Pour aller plus loin
https://www.schneier.com/book-applied.html
Applied Cryptography
Handbook of App...
Prochain SlideShare
Chargement dans…5
×

De la cryptographie dans le navigateur avec WebCrypto API (Devoxx France 2015)

1 200 vues

Publié le

Les API HTML5 ont fait de notre navigateur web le nouvel OS ; on fait absolument tout dedans : de la bureautique, du code, des jeux... l'API WebCrypto apporte la couche de sécurité côté client qui manquait à certaines applications (coffre fort en ligne, messagerie chiffrée, etc). Quels problèmes cette API resout elle, comment fonctionne-t-elle et quels sont ses limites ?

La démo : https://github.com/jcsirot/demo-webcrypto

Publié dans : Logiciels
0 commentaire
2 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

Aucun téléchargement
Vues
Nombre de vues
1 200
Sur SlideShare
0
Issues des intégrations
0
Intégrations
51
Actions
Partages
0
Téléchargements
105
Commentaires
0
J’aime
2
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

De la cryptographie dans le navigateur avec WebCrypto API (Devoxx France 2015)

  1. 1. @jcsirot#WebCryptoAPI De la cryptographie dans le navigateur avec WebCrypto API @jcsirot Développeur & Responsable Qualité Arkena
  2. 2. @YourTwitterHandle@YourTwitterHandle@jcsirot#WebCryptoAPI Pourquoi une API Crypto ?
  3. 3. @jcsirot#WebCryptoAPI Transport Layer Security
  4. 4. @jcsirot#WebCryptoAPI Transport Layer Security
  5. 5. @jcsirot#WebCryptoAPI Des 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)
  6. 6. @jcsirot#WebCryptoAPI ... et des problèmes
  7. 7. @jcsirot#WebCryptoAPI ... et des problèmes • Pas d’entier de 64 bits natifs, pas de big integer, pas de tableaux performants
  8. 8. @jcsirot#WebCryptoAPI ... et des problèmes • Pas d’entier de 64 bits natifs, pas de big integer, pas de tableaux performants • Impossibilité des «calculs longs» (thread unique)
  9. 9. @jcsirot#WebCryptoAPI ... et des 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)
  10. 10. @jcsirot#WebCryptoAPI ... et des 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) • Sandbox
  11. 11. @jcsirot#WebCryptoAPI Solutions ?
  12. 12. @jcsirot#WebCryptoAPI Solutions ? • Source d’aléa : https://random.org
  13. 13. @jcsirot#WebCryptoAPI Solutions ? • Source d’aléa : https://random.org • Applet Java (intégration Java Javascript)
  14. 14. @jcsirot#WebCryptoAPI Solutions ? • Source d’aléa : https://random.org • Applet Java (intégration Java Javascript) WebCrypto API : http://www.w3.org/TR/WebCryptoAPI/
  15. 15. @jcsirot#WebCryptoAPI var array = new Uint8Array(16); window.crypto.getRandomValues(array); Générateur aléatoire • ArrayBufferView pour représenter les données • Fonction synchrone, non bloquante • Utilise une source d’aléa «sûre» du système (par exemple /dev/urandom)
  16. 16. @jcsirot#WebCryptoAPI 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
  17. 17. @jcsirot#WebCryptoAPI 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
  18. 18. @YourTwitterHandle@YourTwitterHandle@jcsirot#WebCryptoAPI Démo
  19. 19. @jcsirot#WebCryptoAPI Can I use ? http://caniuse.com/#feat=cryptography
  20. 20. @jcsirot#WebCryptoAPI Limitations • Modèle de sécurité : 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 de update/finish, pas de streaming, impossibilité d’utiliser les clés déjà présentes sur le système...) • Working Draft WebCrypto Key Discovery (http://www.w3.org/ TR/webcrypto-key-discovery/)
  21. 21. @YourTwitterHandle@YourTwitterHandle@jcsirot#WebCryptoAPI Qestions & Réponses
  22. 22. @jcsirot#WebCryptoAPI Pour aller plus loin https://www.schneier.com/book-applied.html Applied Cryptography Handbook of Applied Cryptography http://cacr.uwaterloo.ca/hac/

×